From f4c0d176801e2651778b4e4d95d559a4fdd3d786 Mon Sep 17 00:00:00 2001 From: Ryan McCue Date: Thu, 31 Jan 2013 08:33:12 +1000 Subject: [PATCH 001/402] Initial commit --- .gitmodules | 3 + PHP-Parser | 1 + display.php | 109 +++++++++++++++ filters.json | 1 + filters.php | 46 +++++++ library/QP/NodeVisitor.php | 148 ++++++++++++++++++++ library/class-phpdoc-parser.php | 231 ++++++++++++++++++++++++++++++++ library/class-utility.php | 220 ++++++++++++++++++++++++++++++ output.json | 1 + test.php | 150 +++++++++++++++++++++ 10 files changed, 910 insertions(+) create mode 100644 .gitmodules create mode 160000 PHP-Parser create mode 100755 display.php create mode 100755 filters.json create mode 100755 filters.php create mode 100755 library/QP/NodeVisitor.php create mode 100755 library/class-phpdoc-parser.php create mode 100755 library/class-utility.php create mode 100755 output.json create mode 100755 test.php diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..56cfa1ddd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "PHP-Parser"] + path = PHP-Parser + url = https://github.com/nikic/PHP-Parser.git diff --git a/PHP-Parser b/PHP-Parser new file mode 160000 index 000000000..81d20bf10 --- /dev/null +++ b/PHP-Parser @@ -0,0 +1 @@ +Subproject commit 81d20bf10e33b9fca0ddf082322a74df1f71c9f8 diff --git a/display.php b/display.php new file mode 100755 index 000000000..80ac5528d --- /dev/null +++ b/display.php @@ -0,0 +1,109 @@ + + + + + + +
+__main->doc = 'This is a placeholder for the global scope.'; + +echo '

' . count((array) $data) . ' functions and methods

'; + +foreach ($data as $name => $function): + $doc = Codex_Generator_Phpdoc_Parser::parse_doc($function->doc); +?> +
+

()

+
+
+

+

+
+
    + $value): + if (empty($value)) + continue; +?> +
  • :
  • ' . implode('
  • ', $value) . '
'; + } + else + echo htmlspecialchars($value); + ?> + + +

View source (file ?> @ Lline ?>)

+
+
+

Filters

+ +
+
+used_by)): +?> +

Used by

+
    +used_by as $other => $_) { + if (empty($data->$other) && !QP_INCLUDE_BUILTIN) + continue; + + if (empty($data->$other)) + echo '
  • ' . $other . '()
  • '; + else + echo '
  • ' . $other . '()
  • '; + } +?> +
+
+uses)): +?> +
+

Uses

+
    +uses as $other => $_) { + if (empty($data->$other) && !QP_INCLUDE_BUILTIN) + continue; + if (empty($data->$other)) + echo '
  • ' . $other . '()
  • '; + else + echo '
  • ' . $other . '()
  • '; + } +?> +
+
+'; +endforeach; +?> \ No newline at end of file diff --git a/filters.json b/filters.json new file mode 100755 index 000000000..2ac0db80a --- /dev/null +++ b/filters.json @@ -0,0 +1 @@ +{"filters":{"'wp_admin_bar_class'":{"name":"'wp_admin_bar_class'","callers":[{"name":"_wp_admin_bar_init","file":"admin-bar.php","line":28,"type":"filter","source":"apply_filters('wp_admin_bar_class', 'WP_Admin_Bar')"}]},"'admin_bar_menu'":{"name":"'admin_bar_menu'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":58,"type":"action_reference","source":"do_action_ref_array('admin_bar_menu', array(&$wp_admin_bar))"}]},"'wp_before_admin_bar_render'":{"name":"'wp_before_admin_bar_render'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":60,"type":"action","source":"do_action('wp_before_admin_bar_render')"}]},"'wp_after_admin_bar_render'":{"name":"'wp_after_admin_bar_render'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":64,"type":"action","source":"do_action('wp_after_admin_bar_render')"}]},"'show_admin_bar'":{"name":"'show_admin_bar'","callers":[{"name":"is_admin_bar_showing","file":"admin-bar.php","line":748,"type":"filter","source":"apply_filters('show_admin_bar', $show_admin_bar)"}]},"'the_author'":{"name":"'the_author'","callers":[{"name":"get_the_author","file":"author-template.php","line":29,"type":"filter","source":"apply_filters('the_author', is_object($authordata) ? $authordata->display_name : null)"}]},"'the_modified_author'":{"name":"'the_modified_author'","callers":[{"name":"get_the_modified_author","file":"author-template.php","line":74,"type":"filter","source":"apply_filters('the_modified_author', $last_user->display_name)"}]},"'get_the_author_' . $field":{"name":"'get_the_author_' . $field","callers":[{"name":"get_the_author_meta","file":"author-template.php","line":111,"type":"filter","source":"apply_filters('get_the_author_' . $field, $value, $user_id)"}]},"'the_author_' . $field":{"name":"'the_author_' . $field","callers":[{"name":"the_author_meta","file":"author-template.php","line":123,"type":"filter","source":"apply_filters('the_author_' . $field, get_the_author_meta($field, $user_id), $user_id)"}]},"'the_author_posts_link'":{"name":"'the_author_posts_link'","callers":[{"name":"the_author_posts_link","file":"author-template.php","line":207,"type":"filter","source":"apply_filters('the_author_posts_link', $link)"}]},"'author_link'":{"name":"'author_link'","callers":[{"name":"get_author_posts_url","file":"author-template.php","line":235,"type":"filter","source":"apply_filters('author_link', $link, $author_id, $author_nicename)"}]},"'is_multi_author'":{"name":"'is_multi_author'","callers":[{"name":"is_multi_author","file":"author-template.php","line":381,"type":"filter","source":"apply_filters('is_multi_author', (bool) $is_multi_author)"}]},"'link_category'":{"name":"'link_category'","callers":[{"name":"wp_list_bookmarks","file":"bookmark-template.php","line":231,"type":"filter","source":"apply_filters('link_category', $cat->name)"},{"name":"get_links_list","file":"deprecated.php","line":1065,"type":"filter","source":"apply_filters('link_category', $cat->name)"}]},"'wp_list_bookmarks'":{"name":"'wp_list_bookmarks'","callers":[{"name":"wp_list_bookmarks","file":"bookmark-template.php","line":252,"type":"filter","source":"apply_filters('wp_list_bookmarks', $output)"}]},"'get_bookmarks'":{"name":"'get_bookmarks'","callers":[{"name":"get_bookmarks","file":"bookmark.php","line":139,"type":"filter","source":"apply_filters('get_bookmarks', $cache[$key], $r)"},{"name":"get_bookmarks","file":"bookmark.php","line":184,"type":"filter","source":"apply_filters('get_bookmarks', array(), $r)"},{"name":"get_bookmarks","file":"bookmark.php","line":266,"type":"filter","source":"apply_filters('get_bookmarks', $results, $r)"}]},"\"edit_{$field}\"":{"name":"\"edit_{$field}\"","callers":[{"name":"sanitize_bookmark_field","file":"bookmark.php","line":355,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $bookmark_id)"},{"name":"sanitize_post_field","file":"post.php","line":2016,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $post_id)"},{"name":"sanitize_user_field","file":"user.php","line":1121,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $user_id)"}]},"\"pre_{$field}\"":{"name":"\"pre_{$field}\"","callers":[{"name":"sanitize_bookmark_field","file":"bookmark.php","line":363,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"},{"name":"sanitize_post_field","file":"post.php","line":2033,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"},{"name":"sanitize_user_field","file":"user.php","line":1132,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"}]},"'wp_signup_location'":{"name":"'wp_signup_location'","callers":[{"name":"redirect_canonical","file":"canonical.php","line":285,"type":"filter","source":"apply_filters('wp_signup_location', network_site_url('wp-signup.php'))"}]},"'redirect_canonical'":{"name":"'redirect_canonical'","callers":[{"name":"redirect_canonical","file":"canonical.php","line":422,"type":"filter","source":"apply_filters('redirect_canonical', $redirect_url, $requested_url)"}]},"'role_has_cap'":{"name":"'role_has_cap'","callers":[{"name":"WP_Role::has_cap","file":"capabilities.php","line":378,"type":"filter","source":"apply_filters('role_has_cap', $this->capabilities, $cap, $this->name)"}]},"'set_user_role'":{"name":"'set_user_role'","callers":[{"name":"WP_User::set_role","file":"capabilities.php","line":815,"type":"action","source":"do_action('set_user_role', $this->ID, $role)"}]},"'user_has_cap'":{"name":"'user_has_cap'","callers":[{"name":"WP_User::has_cap","file":"capabilities.php","line":936,"type":"filter","source":"apply_filters('user_has_cap', $this->allcaps, $caps, $args)"}]},"\"auth_post_meta_{$meta_key}\"":{"name":"\"auth_post_meta_{$meta_key}\"","callers":[{"name":"map_meta_cap","file":"capabilities.php","line":1168,"type":"filter","source":"apply_filters(\"auth_post_meta_{$meta_key}\", false, $meta_key, $post->ID, $user_id, $cap, $caps)"}]},"'map_meta_cap'":{"name":"'map_meta_cap'","callers":[{"name":"map_meta_cap","file":"capabilities.php","line":1269,"type":"filter","source":"apply_filters('map_meta_cap', $caps, $cap, $user_id, $args)"}]},"'get_the_categories'":{"name":"'get_the_categories'","callers":[{"name":"get_the_category","file":"category-template.php","line":86,"type":"filter","source":"apply_filters('get_the_categories', $categories)"}]},"'the_category'":{"name":"'the_category'","callers":[{"name":"get_the_category_list","file":"category-template.php","line":157,"type":"filter","source":"apply_filters('the_category', '', $separator, $parents)"},{"name":"get_the_category_list","file":"category-template.php","line":161,"type":"filter","source":"apply_filters('the_category', __('Uncategorized'), $separator, $parents)"},{"name":"get_the_category_list","file":"category-template.php","line":212,"type":"filter","source":"apply_filters('the_category', $thelist, $separator, $parents)"}]},"'list_cats'":{"name":"'list_cats'","callers":[{"name":"wp_dropdown_categories","file":"category-template.php","line":344,"type":"filter","source":"apply_filters('list_cats', $show_option_none)"},{"name":"wp_dropdown_categories","file":"category-template.php","line":351,"type":"filter","source":"apply_filters('list_cats', $show_option_all)"},{"name":"wp_dropdown_categories","file":"category-template.php","line":357,"type":"filter","source":"apply_filters('list_cats', $show_option_none)"},{"name":"Walker_Category::start_el","file":"category-template.php","line":827,"type":"filter","source":"apply_filters('list_cats', $cat_name, $category)"},{"name":"Walker_CategoryDropdown::start_el","file":"category-template.php","line":939,"type":"filter","source":"apply_filters('list_cats', $category->name, $category)"}]},"'wp_dropdown_cats'":{"name":"'wp_dropdown_cats'","callers":[{"name":"wp_dropdown_categories","file":"category-template.php","line":373,"type":"filter","source":"apply_filters('wp_dropdown_cats', $output)"}]},"'wp_list_categories'":{"name":"'wp_list_categories'","callers":[{"name":"wp_list_categories","file":"category-template.php","line":485,"type":"filter","source":"apply_filters('wp_list_categories', $output, $args)"}]},"'wp_tag_cloud'":{"name":"'wp_tag_cloud'","callers":[{"name":"wp_tag_cloud","file":"category-template.php","line":548,"type":"filter","source":"apply_filters('wp_tag_cloud', $return, $args)"}]},"'tag_cloud_sort'":{"name":"'tag_cloud_sort'","callers":[{"name":"wp_generate_tag_cloud","file":"category-template.php","line":628,"type":"filter","source":"apply_filters('tag_cloud_sort', $tags, $args)"}]},"'wp_generate_tag_cloud'":{"name":"'wp_generate_tag_cloud'","callers":[{"name":"wp_generate_tag_cloud","file":"category-template.php","line":694,"type":"filter","source":"apply_filters('wp_generate_tag_cloud', $return, $tags, $args)"}]},"'category_description'":{"name":"'category_description'","callers":[{"name":"Walker_Category::start_el","file":"category-template.php","line":832,"type":"filter","source":"apply_filters('category_description', $category->description, $category)"}]},"'get_the_tags'":{"name":"'get_the_tags'","callers":[{"name":"get_the_tags","file":"category-template.php","line":986,"type":"filter","source":"apply_filters('get_the_tags', get_the_terms($id, 'post_tag'))"}]},"'the_tags'":{"name":"'the_tags'","callers":[{"name":"get_the_tag_list","file":"category-template.php","line":1002,"type":"filter","source":"apply_filters('the_tags', get_the_term_list($id, 'post_tag', $before, $sep, $after), $before, $sep, $after, $id)"}]},"'get_the_terms'":{"name":"'get_the_terms'","callers":[{"name":"get_the_terms","file":"category-template.php","line":1071,"type":"filter","source":"apply_filters('get_the_terms', $terms, $post->ID, $taxonomy)"}]},"\"term_links-{$taxonomy}\"":{"name":"\"term_links-{$taxonomy}\"","callers":[{"name":"get_the_term_list","file":"category-template.php","line":1107,"type":"filter","source":"apply_filters(\"term_links-{$taxonomy}\", $term_links)"}]},"'the_terms'":{"name":"'the_terms'","callers":[{"name":"the_terms","file":"category-template.php","line":1130,"type":"filter","source":"apply_filters('the_terms', $term_list, $taxonomy, $before, $sep, $after)"}]},"'get_categories_taxonomy'":{"name":"'get_categories_taxonomy'","callers":[{"name":"get_categories","file":"category.php","line":43,"type":"filter","source":"apply_filters('get_categories_taxonomy', $args['taxonomy'], $args)"}]},"'get_tags'":{"name":"'get_tags'","callers":[{"name":"get_tags","file":"category.php","line":260,"type":"filter","source":"apply_filters('get_tags', $tags, $args)"}]},"'wp_feed_cache_transient_lifetime'":{"name":"'wp_feed_cache_transient_lifetime'","callers":[{"name":"WP_Feed_Cache_Transient::__construct","file":"class-feed.php","line":26,"type":"filter","source":"apply_filters('wp_feed_cache_transient_lifetime', $this->lifetime, $filename)"},{"name":"fetch_feed","file":"feed.php","line":540,"type":"filter","source":"apply_filters('wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url)"}]},"'http_request_timeout'":{"name":"'http_request_timeout'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":86,"type":"filter","source":"apply_filters('http_request_timeout', 5)"}]},"'http_request_redirection_count'":{"name":"'http_request_redirection_count'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":87,"type":"filter","source":"apply_filters('http_request_redirection_count', 5)"}]},"'http_request_version'":{"name":"'http_request_version'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":88,"type":"filter","source":"apply_filters('http_request_version', '1.0')"}]},"'http_headers_useragent'":{"name":"'http_headers_useragent'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":89,"type":"filter","source":"apply_filters('http_headers_useragent', 'WordPress\/' . $wp_version . '; ' . get_bloginfo('url'))"}]},"'http_request_args'":{"name":"'http_request_args'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":109,"type":"filter","source":"apply_filters('http_request_args', $r, $url)"}]},"'pre_http_request'":{"name":"'pre_http_request'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":115,"type":"filter","source":"apply_filters('pre_http_request', false, $r, $url)"}]},"'http_api_debug'":{"name":"'http_api_debug'","callers":[{"name":"WP_Http::_dispatch_request","file":"class-http.php","line":252,"type":"action","source":"do_action('http_api_debug', $response, 'response', $class, $args, $url)"}]},"'http_response'":{"name":"'http_response'","callers":[{"name":"WP_Http::_dispatch_request","file":"class-http.php","line":257,"type":"filter","source":"apply_filters('http_response', $response, $args, $url)"}]},"'block_local_requests'":{"name":"'block_local_requests'","callers":[{"name":"WP_Http::block_request","file":"class-http.php","line":512,"type":"filter","source":"apply_filters('block_local_requests', false)"}]},"'use_fsockopen_transport'":{"name":"'use_fsockopen_transport'","callers":[{"name":"WP_Http_Fsockopen::test","file":"class-http.php","line":815,"type":"filter","source":"apply_filters('use_fsockopen_transport', true, $args)"}]},"'https_local_ssl_verify'":{"name":"'https_local_ssl_verify'","callers":[{"name":"WP_Http_Streams::request","file":"class-http.php","line":882,"type":"filter","source":"apply_filters('https_local_ssl_verify', $ssl_verify)"},{"name":"WP_Http_Curl::request","file":"class-http.php","line":1073,"type":"filter","source":"apply_filters('https_local_ssl_verify', $ssl_verify)"},{"name":"spawn_cron","file":"cron.php","line":250,"type":"filter","source":"apply_filters('https_local_ssl_verify', true)"}]},"'https_ssl_verify'":{"name":"'https_ssl_verify'","callers":[{"name":"WP_Http_Streams::request","file":"class-http.php","line":884,"type":"filter","source":"apply_filters('https_ssl_verify', $ssl_verify)"},{"name":"WP_Http_Curl::request","file":"class-http.php","line":1075,"type":"filter","source":"apply_filters('https_ssl_verify', $ssl_verify)"}]},"'use_streams_transport'":{"name":"'use_streams_transport'","callers":[{"name":"WP_Http_Streams::test","file":"class-http.php","line":998,"type":"filter","source":"apply_filters('use_streams_transport', true, $args)"}]},"'http_api_curl'":{"name":"'http_api_curl'","callers":[{"name":"WP_Http_Curl::request","file":"class-http.php","line":1143,"type":"action_reference","source":"do_action_ref_array('http_api_curl', array(&$handle))"}]},"'use_curl_transport'":{"name":"'use_curl_transport'","callers":[{"name":"WP_Http_Curl::test","file":"class-http.php","line":1227,"type":"filter","source":"apply_filters('use_curl_transport', true, $args)"}]},"'pre_http_send_through_proxy'":{"name":"'pre_http_send_through_proxy'","callers":[{"name":"WP_HTTP_Proxy::send_through_proxy","file":"class-http.php","line":1393,"type":"filter","source":"apply_filters('pre_http_send_through_proxy', null, $uri, $check, $home)"}]},"'wp_http_cookie_value'":{"name":"'wp_http_cookie_value'","callers":[{"name":"WP_Http_Cookie::getHeaderValue","file":"class-http.php","line":1594,"type":"filter","source":"apply_filters('wp_http_cookie_value', $this->value, $this->name)"}]},"'oembed_providers'":{"name":"'oembed_providers'","callers":[{"name":"WP_oEmbed::__construct","file":"class-oembed.php","line":32,"type":"filter","source":"apply_filters('oembed_providers', array('#https?:\/\/(www\\\\.)?youtube.com\/watch.*#i' => array('http:\/\/www.youtube.com\/oembed', true), 'http:\/\/youtu.be\/*' => array('http:\/\/www.youtube.com\/oembed', false), 'http:\/\/blip.tv\/*' => array('http:\/\/blip.tv\/oembed\/', false), '#https?:\/\/(www\\\\.)?vimeo\\\\.com\/.*#i' => array('http:\/\/vimeo.com\/api\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?dailymotion\\\\.com\/.*#i' => array('http:\/\/www.dailymotion.com\/services\/oembed', true), '#https?:\/\/(www\\\\.)?flickr\\\\.com\/.*#i' => array('http:\/\/www.flickr.com\/services\/oembed\/', true), '#https?:\/\/(.+\\\\.)?smugmug\\\\.com\/.*#i' => array('http:\/\/api.smugmug.com\/services\/oembed\/', true), '#https?:\/\/(www\\\\.)?hulu\\\\.com\/watch\/.*#i' => array('http:\/\/www.hulu.com\/api\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?viddler\\\\.com\/.*#i' => array('http:\/\/lab.viddler.com\/services\/oembed\/', true), 'http:\/\/qik.com\/*' => array('http:\/\/qik.com\/api\/oembed.{format}', false), 'http:\/\/revision3.com\/*' => array('http:\/\/revision3.com\/api\/oembed\/', false), 'http:\/\/i*.photobucket.com\/albums\/*' => array('http:\/\/photobucket.com\/oembed', false), 'http:\/\/gi*.photobucket.com\/groups\/*' => array('http:\/\/photobucket.com\/oembed', false), '#https?:\/\/(www\\\\.)?scribd\\\\.com\/.*#i' => array('http:\/\/www.scribd.com\/services\/oembed', true), 'http:\/\/wordpress.tv\/*' => array('http:\/\/wordpress.tv\/oembed\/', false), '#https?:\/\/(.+\\\\.)?polldaddy\\\\.com\/.*#i' => array('http:\/\/polldaddy.com\/oembed\/', true), '#https?:\/\/(www\\\\.)?funnyordie\\\\.com\/videos\/.*#i' => array('http:\/\/www.funnyordie.com\/oembed', true), '#https?:\/\/(www\\\\.)?twitter.com\/.+?\/status(es)?\/.*#i' => array('http:\/\/api.twitter.com\/1\/statuses\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?soundcloud\\\\.com\/.*#i' => array('http:\/\/soundcloud.com\/oembed', true), '#https?:\/\/(www\\\\.)?slideshare.net\/*#' => array('http:\/\/www.slideshare.net\/api\/oembed\/2', true), '#http:\/\/instagr(\\\\.am|am\\\\.com)\/p\/.*#i' => array('http:\/\/api.instagram.com\/oembed', true)))"}]},"'oembed_result'":{"name":"'oembed_result'","callers":[{"name":"WP_oEmbed::get_html","file":"class-oembed.php","line":98,"type":"filter","source":"apply_filters('oembed_result', $this->data2html($data, $url), $url, $args)"}]},"'oembed_linktypes'":{"name":"'oembed_linktypes'","callers":[{"name":"WP_oEmbed::discover","file":"class-oembed.php","line":114,"type":"filter","source":"apply_filters('oembed_linktypes', array('application\/json+oembed' => 'json', 'text\/xml+oembed' => 'xml', 'application\/xml+oembed' => 'xml'))"}]},"'oembed_fetch_url'":{"name":"'oembed_fetch_url'","callers":[{"name":"WP_oEmbed::fetch","file":"class-oembed.php","line":171,"type":"filter","source":"apply_filters('oembed_fetch_url', $provider, $url, $args)"}]},"'oembed_dataparse'":{"name":"'oembed_dataparse'","callers":[{"name":"WP_oEmbed::data2html","file":"class-oembed.php","line":294,"type":"filter","source":"apply_filters('oembed_dataparse', $return, $data, $url)"}]},"'admin_bar_init'":{"name":"'admin_bar_init'","callers":[{"name":"WP_Admin_Bar::initialize","file":"class-wp-admin-bar.php","line":61,"type":"action","source":"do_action('admin_bar_init')"}]},"'add_admin_bar_menus'":{"name":"'add_admin_bar_menus'","callers":[{"name":"WP_Admin_Bar::add_menus","file":"class-wp-admin-bar.php","line":488,"type":"action","source":"do_action('add_admin_bar_menus')"}]},"'customize_render_control'":{"name":"'customize_render_control'","callers":[{"name":"WP_Customize_Control::maybe_render","file":"class-wp-customize-control.php","line":181,"type":"action","source":"do_action('customize_render_control', $this)"}]},"'customize_render_control_' . $this->id":{"name":"'customize_render_control_' . $this->id","callers":[{"name":"WP_Customize_Control::maybe_render","file":"class-wp-customize-control.php","line":182,"type":"action","source":"do_action('customize_render_control_' . $this->id, $this)"}]},"'start_previewing_theme'":{"name":"'start_previewing_theme'","callers":[{"name":"WP_Customize_Manager::start_previewing_theme","file":"class-wp-customize-manager.php","line":184,"type":"action","source":"do_action('start_previewing_theme', $this)"}]},"'stop_previewing_theme'":{"name":"'stop_previewing_theme'","callers":[{"name":"WP_Customize_Manager::stop_previewing_theme","file":"class-wp-customize-manager.php","line":214,"type":"action","source":"do_action('stop_previewing_theme', $this)"}]},"'customize_register'":{"name":"'customize_register'","callers":[{"name":"WP_Customize_Manager::wp_loaded","file":"class-wp-customize-manager.php","line":278,"type":"action","source":"do_action('customize_register', $this)"}]},"'customize_preview_init'":{"name":"'customize_preview_init'","callers":[{"name":"WP_Customize_Manager::customize_preview_init","file":"class-wp-customize-manager.php","line":343,"type":"action","source":"do_action('customize_preview_init', $this)"}]},"'customize_save'":{"name":"'customize_save'","callers":[{"name":"WP_Customize_Manager::save","file":"class-wp-customize-manager.php","line":509,"type":"action","source":"do_action('customize_save', $this)"}]},"'customize_render_section'":{"name":"'customize_render_section'","callers":[{"name":"WP_Customize_Section::maybe_render","file":"class-wp-customize-section.php","line":69,"type":"action","source":"do_action('customize_render_section', $this)"}]},"'customize_render_section_' . $this->id":{"name":"'customize_render_section_' . $this->id","callers":[{"name":"WP_Customize_Section::maybe_render","file":"class-wp-customize-section.php","line":70,"type":"action","source":"do_action('customize_render_section_' . $this->id)"}]},"'customize_preview_' . $this->id":{"name":"'customize_preview_' . $this->id","callers":[{"name":"WP_Customize_Setting::preview","file":"class-wp-customize-setting.php","line":83,"type":"action","source":"do_action('customize_preview_' . $this->id)"}]},"'customize_save_' . $this->id_data['base']":{"name":"'customize_save_' . $this->id_data['base']","callers":[{"name":"WP_Customize_Setting::save","file":"class-wp-customize-setting.php","line":113,"type":"action","source":"do_action('customize_save_' . $this->id_data['base'])"}]},"\"customize_sanitize_{$this->id}\"":{"name":"\"customize_sanitize_{$this->id}\"","callers":[{"name":"WP_Customize_Setting::sanitize","file":"class-wp-customize-setting.php","line":148,"type":"filter","source":"apply_filters(\"customize_sanitize_{$this->id}\", $value, $this)"}]},"'customize_update_' . $this->type":{"name":"'customize_update_' . $this->type","callers":[{"name":"WP_Customize_Setting::update","file":"class-wp-customize-setting.php","line":168,"type":"action","source":"do_action('customize_update_' . $this->type, $value)"}]},"'customize_value_' . $this->id_data['base']":{"name":"'customize_value_' . $this->id_data['base']","callers":[{"name":"WP_Customize_Setting::value","file":"class-wp-customize-setting.php","line":228,"type":"filter","source":"apply_filters('customize_value_' . $this->id_data['base'], $this->default)"}]},"\"customize_sanitize_js_{$this->id}\"":{"name":"\"customize_sanitize_js_{$this->id}\"","callers":[{"name":"WP_Customize_Setting::js_value","file":"class-wp-customize-setting.php","line":248,"type":"filter","source":"apply_filters(\"customize_sanitize_js_{$this->id}\", $this->value(), $this)"}]},"'media_buttons'":{"name":"'media_buttons'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":139,"type":"action","source":"do_action('media_buttons', $editor_id)"}]},"'the_editor'":{"name":"'the_editor'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":145,"type":"filter","source":"apply_filters('the_editor', '
%s<\/textarea><\/div>')"}]},"'the_editor_content'":{"name":"'the_editor_content'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":146,"type":"filter","source":"apply_filters('the_editor_content', $content)"}]},"'quicktags_settings'":{"name":"'quicktags_settings'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":184,"type":"filter","source":"apply_filters('quicktags_settings', $qtInit, $editor_id)"}]},"'disable_captions'":{"name":"'disable_captions'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":195,"type":"filter","source":"apply_filters('disable_captions', '')"},{"name":"wp_print_media_templates","file":"media-template.php","line":389,"type":"filter","source":"apply_filters('disable_captions', '')"},{"name":"wp_enqueue_media","file":"media.php","line":1462,"type":"filter","source":"apply_filters('disable_captions', '')"}]},"'teeny_mce_plugins'":{"name":"'teeny_mce_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":201,"type":"filter","source":"apply_filters('teeny_mce_plugins', array('inlinepopups', 'fullscreen', 'wordpress', 'wplink', 'wpdialogs'), $editor_id)"}]},"'mce_external_plugins'":{"name":"'mce_external_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":210,"type":"filter","source":"apply_filters('mce_external_plugins', array())"}]},"'mce_external_languages'":{"name":"'mce_external_languages'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":223,"type":"filter","source":"apply_filters('mce_external_languages', array())"}]},"'tiny_mce_plugins'":{"name":"'tiny_mce_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":280,"type":"filter","source":"apply_filters('tiny_mce_plugins', $plugins)"}]},"'mce_spellchecker_languages'":{"name":"'mce_spellchecker_languages'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":302,"type":"filter","source":"apply_filters('mce_spellchecker_languages', '+' . $mce_spellchecker_languages)"}]},"'mce_css'":{"name":"'mce_css'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":381,"type":"filter","source":"apply_filters('mce_css', $mce_css)"}]},"'teeny_mce_buttons'":{"name":"'teeny_mce_buttons'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":388,"type":"filter","source":"apply_filters('teeny_mce_buttons', array('bold', 'italic', 'underline', 'blockquote', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'undo', 'redo', 'link', 'unlink', 'fullscreen'), $editor_id)"}]},"'mce_buttons'":{"name":"'mce_buttons'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":391,"type":"filter","source":"apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', 'bullist', 'numlist', 'blockquote', 'justifyleft', 'justifycenter', 'justifyright', 'link', 'unlink', 'wp_more', 'spellchecker', 'fullscreen', 'wp_adv'), $editor_id)"}]},"'mce_buttons_2'":{"name":"'mce_buttons_2'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":392,"type":"filter","source":"apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', 'pastetext', 'pasteword', 'removeformat', 'charmap', 'outdent', 'indent', 'undo', 'redo', 'wp_help'), $editor_id)"}]},"'mce_buttons_3'":{"name":"'mce_buttons_3'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":393,"type":"filter","source":"apply_filters('mce_buttons_3', array(), $editor_id)"}]},"'mce_buttons_4'":{"name":"'mce_buttons_4'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":394,"type":"filter","source":"apply_filters('mce_buttons_4', array(), $editor_id)"}]},"'teeny_mce_before_init'":{"name":"'teeny_mce_before_init'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":446,"type":"filter","source":"apply_filters('teeny_mce_before_init', $mceInit, $editor_id)"}]},"'tiny_mce_before_init'":{"name":"'tiny_mce_before_init'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":448,"type":"filter","source":"apply_filters('tiny_mce_before_init', $mceInit, $editor_id)"}]},"'before_wp_tiny_mce'":{"name":"'before_wp_tiny_mce'","callers":[{"name":"_WP_Editors::editor_js","file":"class-wp-editor.php","line":553,"type":"action","source":"do_action('before_wp_tiny_mce', self::$mce_settings)"}]},"'after_wp_tiny_mce'":{"name":"'after_wp_tiny_mce'","callers":[{"name":"_WP_Editors::editor_js","file":"class-wp-editor.php","line":654,"type":"action","source":"do_action('after_wp_tiny_mce', self::$mce_settings)"}]},"'wp_fullscreen_buttons'":{"name":"'wp_fullscreen_buttons'","callers":[{"name":"_WP_Editors::wp_fullscreen_html","file":"class-wp-editor.php","line":697,"type":"filter","source":"apply_filters('wp_fullscreen_buttons', $buttons)"}]},"'enter_title_here'":{"name":"'enter_title_here'","callers":[{"name":"_WP_Editors::wp_fullscreen_html","file":"class-wp-editor.php","line":727,"type":"filter","source":"apply_filters('enter_title_here', __('Enter title here'), $post)"}]},"'embed_handler_html'":{"name":"'embed_handler_html'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":156,"type":"filter","source":"apply_filters('embed_handler_html', $return, $url, $attr)"}]},"'embed_oembed_html'":{"name":"'embed_oembed_html'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":178,"type":"filter","source":"apply_filters('embed_oembed_html', $cache, $url, $attr, $post_ID)"},{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":191,"type":"filter","source":"apply_filters('embed_oembed_html', $html, $url, $attr, $post_ID)"}]},"'embed_oembed_discover'":{"name":"'embed_oembed_discover'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":182,"type":"filter","source":"apply_filters('embed_oembed_discover', false)"}]},"'embed_cache_oembed_types'":{"name":"'embed_cache_oembed_types'","callers":[{"name":"WP_Embed::cache_oembed","file":"class-wp-embed.php","line":222,"type":"filter","source":"apply_filters('embed_cache_oembed_types', array('post', 'page'))"}]},"'embed_maybe_make_link'":{"name":"'embed_maybe_make_link'","callers":[{"name":"WP_Embed::maybe_make_link","file":"class-wp-embed.php","line":274,"type":"filter","source":"apply_filters('embed_maybe_make_link', $output, $url)"}]},"'image_memory_limit'":{"name":"'image_memory_limit'","callers":[{"name":"WP_Image_Editor_GD::load","file":"class-wp-image-editor-gd.php","line":90,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"},{"name":"WP_Image_Editor_Imagick::load","file":"class-wp-image-editor-imagick.php","line":123,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"},{"name":"wp_load_image","file":"deprecated.php","line":3231,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"}]},"'jpeg_quality'":{"name":"'jpeg_quality'","callers":[{"name":"WP_Image_Editor_GD::_save","file":"class-wp-image-editor-gd.php","line":346,"type":"filter","source":"apply_filters('jpeg_quality', $this->quality, 'image_resize')"},{"name":"WP_Image_Editor_Imagick::set_quality","file":"class-wp-image-editor-imagick.php","line":163,"type":"filter","source":"apply_filters('jpeg_quality', $quality, 'image_resize')"}]},"'image_make_intermediate_size'":{"name":"'image_make_intermediate_size'","callers":[{"name":"WP_Image_Editor_GD::_save","file":"class-wp-image-editor-gd.php","line":360,"type":"filter","source":"apply_filters('image_make_intermediate_size', $filename)"},{"name":"WP_Image_Editor_Imagick::_save","file":"class-wp-image-editor-imagick.php","line":432,"type":"filter","source":"apply_filters('image_make_intermediate_size', $filename)"}]},"'wp_editor_set_quality'":{"name":"'wp_editor_set_quality'","callers":[{"name":"WP_Image_Editor::set_quality","file":"class-wp-image-editor.php","line":204,"type":"filter","source":"apply_filters('wp_editor_set_quality', $quality)"}]},"'image_editor_default_mime_type'":{"name":"'image_editor_default_mime_type'","callers":[{"name":"WP_Image_Editor::get_output_format","file":"class-wp-image-editor.php","line":253,"type":"filter","source":"apply_filters('image_editor_default_mime_type', $this->default_mime_type)"}]},"'wp_cache_themes_persistently'":{"name":"'wp_cache_themes_persistently'","callers":[{"name":"WP_Theme::__construct","file":"class-wp-theme.php","line":172,"type":"filter","source":"apply_filters('wp_cache_themes_persistently', false, 'WP_Theme')"},{"name":"search_theme_directories","file":"theme.php","line":351,"type":"filter","source":"apply_filters('wp_cache_themes_persistently', false, 'search_theme_directories')"}]},"'allowed_themes'":{"name":"'allowed_themes'","callers":[{"name":"WP_Theme::get_allowed","file":"class-wp-theme.php","line":1076,"type":"filter","source":"apply_filters('allowed_themes', self::get_allowed_on_network())"}]},"'xmlrpc_methods'":{"name":"'xmlrpc_methods'","callers":[{"name":"wp_xmlrpc_server::__construct","file":"class-wp-xmlrpc-server.php","line":129,"type":"filter","source":"apply_filters('xmlrpc_methods', $this->methods)"}]},"'pre_option_enable_xmlrpc'":{"name":"'pre_option_enable_xmlrpc'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":173,"type":"filter","source":"apply_filters('pre_option_enable_xmlrpc', false)"}]},"'option_enable_xmlrpc'":{"name":"'option_enable_xmlrpc'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":175,"type":"filter","source":"apply_filters('option_enable_xmlrpc', true)"}]},"'xmlrpc_enabled'":{"name":"'xmlrpc_enabled'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":178,"type":"filter","source":"apply_filters('xmlrpc_enabled', $enabled)"}]},"'xmlrpc_login_error'":{"name":"'xmlrpc_login_error'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":189,"type":"filter","source":"apply_filters('xmlrpc_login_error', $this->error, $user)"}]},"'xmlrpc_blog_options'":{"name":"'xmlrpc_blog_options'","callers":[{"name":"wp_xmlrpc_server::initialise_blog_option_info","file":"class-wp-xmlrpc-server.php","line":439,"type":"filter","source":"apply_filters('xmlrpc_blog_options', $this->blog_options)"}]},"'xmlrpc_call'":{"name":"'xmlrpc_call'","callers":[{"name":"wp_xmlrpc_server::wp_getUsersBlogs","file":"class-wp-xmlrpc-server.php","line":473,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUsersBlogs')"},{"name":"wp_xmlrpc_server::wp_newPost","file":"class-wp-xmlrpc-server.php","line":968,"type":"action","source":"do_action('xmlrpc_call', 'wp.newPost')"},{"name":"wp_xmlrpc_server::wp_editPost","file":"class-wp-xmlrpc-server.php","line":1253,"type":"action","source":"do_action('xmlrpc_call', 'wp.editPost')"},{"name":"wp_xmlrpc_server::wp_deletePost","file":"class-wp-xmlrpc-server.php","line":1314,"type":"action","source":"do_action('xmlrpc_call', 'wp.deletePost')"},{"name":"wp_xmlrpc_server::wp_getPost","file":"class-wp-xmlrpc-server.php","line":1395,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPost')"},{"name":"wp_xmlrpc_server::wp_getPosts","file":"class-wp-xmlrpc-server.php","line":1452,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPosts')"},{"name":"wp_xmlrpc_server::wp_newTerm","file":"class-wp-xmlrpc-server.php","line":1542,"type":"action","source":"do_action('xmlrpc_call', 'wp.newTerm')"},{"name":"wp_xmlrpc_server::wp_editTerm","file":"class-wp-xmlrpc-server.php","line":1630,"type":"action","source":"do_action('xmlrpc_call', 'wp.editTerm')"},{"name":"wp_xmlrpc_server::wp_deleteTerm","file":"class-wp-xmlrpc-server.php","line":1722,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteTerm')"},{"name":"wp_xmlrpc_server::wp_getTerm","file":"class-wp-xmlrpc-server.php","line":1789,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTerm')"},{"name":"wp_xmlrpc_server::wp_getTerms","file":"class-wp-xmlrpc-server.php","line":1842,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTerms')"},{"name":"wp_xmlrpc_server::wp_getTaxonomy","file":"class-wp-xmlrpc-server.php","line":1921,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTaxonomy')"},{"name":"wp_xmlrpc_server::wp_getTaxonomies","file":"class-wp-xmlrpc-server.php","line":1965,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTaxonomies')"},{"name":"wp_xmlrpc_server::wp_getUser","file":"class-wp-xmlrpc-server.php","line":2034,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUser')"},{"name":"wp_xmlrpc_server::wp_getUsers","file":"class-wp-xmlrpc-server.php","line":2087,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUsers')"},{"name":"wp_xmlrpc_server::wp_getProfile","file":"class-wp-xmlrpc-server.php","line":2154,"type":"action","source":"do_action('xmlrpc_call', 'wp.getProfile')"},{"name":"wp_xmlrpc_server::wp_editProfile","file":"class-wp-xmlrpc-server.php","line":2197,"type":"action","source":"do_action('xmlrpc_call', 'wp.editProfile')"},{"name":"wp_xmlrpc_server::wp_getPage","file":"class-wp-xmlrpc-server.php","line":2270,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPage')"},{"name":"wp_xmlrpc_server::wp_getPages","file":"class-wp-xmlrpc-server.php","line":2308,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPages')"},{"name":"wp_xmlrpc_server::wp_newPage","file":"class-wp-xmlrpc-server.php","line":2348,"type":"action","source":"do_action('xmlrpc_call', 'wp.newPage')"},{"name":"wp_xmlrpc_server::wp_deletePage","file":"class-wp-xmlrpc-server.php","line":2376,"type":"action","source":"do_action('xmlrpc_call', 'wp.deletePage')"},{"name":"wp_xmlrpc_server::wp_editPage","file":"class-wp-xmlrpc-server.php","line":2418,"type":"action","source":"do_action('xmlrpc_call', 'wp.editPage')"},{"name":"wp_xmlrpc_server::wp_getPageList","file":"class-wp-xmlrpc-server.php","line":2468,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPageList')"},{"name":"wp_xmlrpc_server::wp_getAuthors","file":"class-wp-xmlrpc-server.php","line":2519,"type":"action","source":"do_action('xmlrpc_call', 'wp.getAuthors')"},{"name":"wp_xmlrpc_server::wp_getTags","file":"class-wp-xmlrpc-server.php","line":2554,"type":"action","source":"do_action('xmlrpc_call', 'wp.getKeywords')"},{"name":"wp_xmlrpc_server::wp_newCategory","file":"class-wp-xmlrpc-server.php","line":2593,"type":"action","source":"do_action('xmlrpc_call', 'wp.newCategory')"},{"name":"wp_xmlrpc_server::wp_deleteCategory","file":"class-wp-xmlrpc-server.php","line":2654,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteCategory')"},{"name":"wp_xmlrpc_server::wp_suggestCategories","file":"class-wp-xmlrpc-server.php","line":2690,"type":"action","source":"do_action('xmlrpc_call', 'wp.suggestCategories')"},{"name":"wp_xmlrpc_server::wp_getComment","file":"class-wp-xmlrpc-server.php","line":2726,"type":"action","source":"do_action('xmlrpc_call', 'wp.getComment')"},{"name":"wp_xmlrpc_server::wp_getComments","file":"class-wp-xmlrpc-server.php","line":2767,"type":"action","source":"do_action('xmlrpc_call', 'wp.getComments')"},{"name":"wp_xmlrpc_server::wp_deleteComment","file":"class-wp-xmlrpc-server.php","line":2833,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteComment')"},{"name":"wp_xmlrpc_server::wp_editComment","file":"class-wp-xmlrpc-server.php","line":2888,"type":"action","source":"do_action('xmlrpc_call', 'wp.editComment')"},{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":3012,"type":"action","source":"do_action('xmlrpc_call', 'wp.newComment')"},{"name":"wp_xmlrpc_server::wp_getCommentStatusList","file":"class-wp-xmlrpc-server.php","line":3042,"type":"action","source":"do_action('xmlrpc_call', 'wp.getCommentStatusList')"},{"name":"wp_xmlrpc_server::wp_getCommentCount","file":"class-wp-xmlrpc-server.php","line":3069,"type":"action","source":"do_action('xmlrpc_call', 'wp.getCommentCount')"},{"name":"wp_xmlrpc_server::wp_getPostStatusList","file":"class-wp-xmlrpc-server.php","line":3101,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostStatusList')"},{"name":"wp_xmlrpc_server::wp_getPageStatusList","file":"class-wp-xmlrpc-server.php","line":3127,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPageStatusList')"},{"name":"wp_xmlrpc_server::wp_getMediaItem","file":"class-wp-xmlrpc-server.php","line":3280,"type":"action","source":"do_action('xmlrpc_call', 'wp.getMediaItem')"},{"name":"wp_xmlrpc_server::wp_getMediaLibrary","file":"class-wp-xmlrpc-server.php","line":3325,"type":"action","source":"do_action('xmlrpc_call', 'wp.getMediaLibrary')"},{"name":"wp_xmlrpc_server::wp_getPostFormats","file":"class-wp-xmlrpc-server.php","line":3366,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostFormats')"},{"name":"wp_xmlrpc_server::wp_getPostType","file":"class-wp-xmlrpc-server.php","line":3429,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostType')"},{"name":"wp_xmlrpc_server::wp_getPostTypes","file":"class-wp-xmlrpc-server.php","line":3475,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostTypes')"},{"name":"wp_xmlrpc_server::wp_getRevisions","file":"class-wp-xmlrpc-server.php","line":3529,"type":"action","source":"do_action('xmlrpc_call', 'wp.getRevisions')"},{"name":"wp_xmlrpc_server::wp_restoreRevision","file":"class-wp-xmlrpc-server.php","line":3590,"type":"action","source":"do_action('xmlrpc_call', 'wp.restoreRevision')"},{"name":"wp_xmlrpc_server::blogger_getUsersBlogs","file":"class-wp-xmlrpc-server.php","line":3639,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getUsersBlogs')"},{"name":"wp_xmlrpc_server::blogger_getUserInfo","file":"class-wp-xmlrpc-server.php","line":3706,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getUserInfo')"},{"name":"wp_xmlrpc_server::blogger_getPost","file":"class-wp-xmlrpc-server.php","line":3745,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getPost')"},{"name":"wp_xmlrpc_server::blogger_getRecentPosts","file":"class-wp-xmlrpc-server.php","line":3787,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getRecentPosts')"},{"name":"wp_xmlrpc_server::blogger_newPost","file":"class-wp-xmlrpc-server.php","line":3865,"type":"action","source":"do_action('xmlrpc_call', 'blogger.newPost')"},{"name":"wp_xmlrpc_server::blogger_editPost","file":"class-wp-xmlrpc-server.php","line":3919,"type":"action","source":"do_action('xmlrpc_call', 'blogger.editPost')"},{"name":"wp_xmlrpc_server::blogger_deletePost","file":"class-wp-xmlrpc-server.php","line":3973,"type":"action","source":"do_action('xmlrpc_call', 'blogger.deletePost')"},{"name":"wp_xmlrpc_server::mw_newPost","file":"class-wp-xmlrpc-server.php","line":4044,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.newPost')"},{"name":"wp_xmlrpc_server::mw_editPost","file":"class-wp-xmlrpc-server.php","line":4365,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.editPost')"},{"name":"wp_xmlrpc_server::mw_getPost","file":"class-wp-xmlrpc-server.php","line":4639,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getPost')"},{"name":"wp_xmlrpc_server::mw_getRecentPosts","file":"class-wp-xmlrpc-server.php","line":4760,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getRecentPosts')"},{"name":"wp_xmlrpc_server::mw_getCategories","file":"class-wp-xmlrpc-server.php","line":4874,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getCategories')"},{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4922,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.newMediaObject')"},{"name":"wp_xmlrpc_server::mt_getRecentPostTitles","file":"class-wp-xmlrpc-server.php","line":5014,"type":"action","source":"do_action('xmlrpc_call', 'mt.getRecentPostTitles')"},{"name":"wp_xmlrpc_server::mt_getCategoryList","file":"class-wp-xmlrpc-server.php","line":5073,"type":"action","source":"do_action('xmlrpc_call', 'mt.getCategoryList')"},{"name":"wp_xmlrpc_server::mt_getPostCategories","file":"class-wp-xmlrpc-server.php","line":5114,"type":"action","source":"do_action('xmlrpc_call', 'mt.getPostCategories')"},{"name":"wp_xmlrpc_server::mt_setPostCategories","file":"class-wp-xmlrpc-server.php","line":5152,"type":"action","source":"do_action('xmlrpc_call', 'mt.setPostCategories')"},{"name":"wp_xmlrpc_server::mt_supportedMethods","file":"class-wp-xmlrpc-server.php","line":5180,"type":"action","source":"do_action('xmlrpc_call', 'mt.supportedMethods')"},{"name":"wp_xmlrpc_server::mt_supportedTextFilters","file":"class-wp-xmlrpc-server.php","line":5198,"type":"action","source":"do_action('xmlrpc_call', 'mt.supportedTextFilters')"},{"name":"wp_xmlrpc_server::mt_getTrackbackPings","file":"class-wp-xmlrpc-server.php","line":5216,"type":"action","source":"do_action('xmlrpc_call', 'mt.getTrackbackPings')"},{"name":"wp_xmlrpc_server::mt_publishPost","file":"class-wp-xmlrpc-server.php","line":5263,"type":"action","source":"do_action('xmlrpc_call', 'mt.publishPost')"},{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5299,"type":"action","source":"do_action('xmlrpc_call', 'pingback.ping')"},{"name":"wp_xmlrpc_server::pingback_extensions_getPingbacks","file":"class-wp-xmlrpc-server.php","line":5467,"type":"action","source":"do_action('xmlrpc_call', 'pingback.extensions.getPingbacks')"}]},"'xmlrpc_prepare_taxonomy'":{"name":"'xmlrpc_prepare_taxonomy'","callers":[{"name":"wp_xmlrpc_server::_prepare_taxonomy","file":"class-wp-xmlrpc-server.php","line":549,"type":"filter","source":"apply_filters('xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy, $fields)"}]},"'xmlrpc_prepare_term'":{"name":"'xmlrpc_prepare_term'","callers":[{"name":"wp_xmlrpc_server::_prepare_term","file":"class-wp-xmlrpc-server.php","line":574,"type":"filter","source":"apply_filters('xmlrpc_prepare_term', $_term, $term)"}]},"'xmlrpc_prepare_post'":{"name":"'xmlrpc_prepare_post'","callers":[{"name":"wp_xmlrpc_server::_prepare_post","file":"class-wp-xmlrpc-server.php","line":695,"type":"filter","source":"apply_filters('xmlrpc_prepare_post', $_post, $post, $fields)"}]},"'xmlrpc_prepare_post_type'":{"name":"'xmlrpc_prepare_post_type'","callers":[{"name":"wp_xmlrpc_server::_prepare_post_type","file":"class-wp-xmlrpc-server.php","line":737,"type":"filter","source":"apply_filters('xmlrpc_prepare_post_type', $_post_type, $post_type)"}]},"'xmlrpc_prepare_media_item'":{"name":"'xmlrpc_prepare_media_item'","callers":[{"name":"wp_xmlrpc_server::_prepare_media_item","file":"class-wp-xmlrpc-server.php","line":767,"type":"filter","source":"apply_filters('xmlrpc_prepare_media_item', $_media_item, $media_item, $thumbnail_size)"}]},"'xmlrpc_prepare_page'":{"name":"'xmlrpc_prepare_page'","callers":[{"name":"wp_xmlrpc_server::_prepare_page","file":"class-wp-xmlrpc-server.php","line":838,"type":"filter","source":"apply_filters('xmlrpc_prepare_page', $_page, $page)"}]},"'xmlrpc_prepare_comment'":{"name":"'xmlrpc_prepare_comment'","callers":[{"name":"wp_xmlrpc_server::_prepare_comment","file":"class-wp-xmlrpc-server.php","line":880,"type":"filter","source":"apply_filters('xmlrpc_prepare_comment', $_comment, $comment)"}]},"'xmlrpc_prepare_user'":{"name":"'xmlrpc_prepare_user'","callers":[{"name":"wp_xmlrpc_server::_prepare_user","file":"class-wp-xmlrpc-server.php","line":920,"type":"filter","source":"apply_filters('xmlrpc_prepare_user', $_user, $user, $fields)"}]},"'xmlrpc_wp_insert_post_data'":{"name":"'xmlrpc_wp_insert_post_data'","callers":[{"name":"wp_xmlrpc_server::_insert_post","file":"class-wp-xmlrpc-server.php","line":1210,"type":"filter","source":"apply_filters('xmlrpc_wp_insert_post_data', $post_data, $content_struct)"}]},"'xmlrpc_default_post_fields'":{"name":"'xmlrpc_default_post_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getPost","file":"class-wp-xmlrpc-server.php","line":1390,"type":"filter","source":"apply_filters('xmlrpc_default_post_fields', array('post', 'terms', 'custom_fields'), 'wp.getPost')"},{"name":"wp_xmlrpc_server::wp_getPosts","file":"class-wp-xmlrpc-server.php","line":1447,"type":"filter","source":"apply_filters('xmlrpc_default_post_fields', array('post', 'terms', 'custom_fields'), 'wp.getPosts')"}]},"'xmlrpc_default_taxonomy_fields'":{"name":"'xmlrpc_default_taxonomy_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getTaxonomy","file":"class-wp-xmlrpc-server.php","line":1916,"type":"filter","source":"apply_filters('xmlrpc_default_taxonomy_fields', array('labels', 'cap', 'object_type'), 'wp.getTaxonomy')"},{"name":"wp_xmlrpc_server::wp_getTaxonomies","file":"class-wp-xmlrpc-server.php","line":1960,"type":"filter","source":"apply_filters('xmlrpc_default_taxonomy_fields', array('labels', 'cap', 'object_type'), 'wp.getTaxonomies')"}]},"'xmlrpc_default_user_fields'":{"name":"'xmlrpc_default_user_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getUser","file":"class-wp-xmlrpc-server.php","line":2029,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getUser')"},{"name":"wp_xmlrpc_server::wp_getUsers","file":"class-wp-xmlrpc-server.php","line":2082,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getUsers')"},{"name":"wp_xmlrpc_server::wp_getProfile","file":"class-wp-xmlrpc-server.php","line":2149,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getProfile')"}]},"'xmlrpc_call_success_wp_deletePage'":{"name":"'xmlrpc_call_success_wp_deletePage'","callers":[{"name":"wp_xmlrpc_server::wp_deletePage","file":"class-wp-xmlrpc-server.php","line":2393,"type":"action","source":"do_action('xmlrpc_call_success_wp_deletePage', $page_id, $args)"}]},"'xmlrpc_call_success_wp_newCategory'":{"name":"'xmlrpc_call_success_wp_newCategory'","callers":[{"name":"wp_xmlrpc_server::wp_newCategory","file":"class-wp-xmlrpc-server.php","line":2630,"type":"action","source":"do_action('xmlrpc_call_success_wp_newCategory', $cat_id, $args)"}]},"'xmlrpc_call_success_wp_deleteCategory'":{"name":"'xmlrpc_call_success_wp_deleteCategory'","callers":[{"name":"wp_xmlrpc_server::wp_deleteCategory","file":"class-wp-xmlrpc-server.php","line":2662,"type":"action","source":"do_action('xmlrpc_call_success_wp_deleteCategory', $category_id, $args)"}]},"'xmlrpc_call_success_wp_deleteComment'":{"name":"'xmlrpc_call_success_wp_deleteComment'","callers":[{"name":"wp_xmlrpc_server::wp_deleteComment","file":"class-wp-xmlrpc-server.php","line":2838,"type":"action","source":"do_action('xmlrpc_call_success_wp_deleteComment', $comment_ID, $args)"}]},"'xmlrpc_call_success_wp_editComment'":{"name":"'xmlrpc_call_success_wp_editComment'","callers":[{"name":"wp_xmlrpc_server::wp_editComment","file":"class-wp-xmlrpc-server.php","line":2929,"type":"action","source":"do_action('xmlrpc_call_success_wp_editComment', $comment_ID, $args)"}]},"'xmlrpc_allow_anonymous_comments'":{"name":"'xmlrpc_allow_anonymous_comments'","callers":[{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":2953,"type":"filter","source":"apply_filters('xmlrpc_allow_anonymous_comments', false)"}]},"'xmlrpc_call_success_wp_newComment'":{"name":"'xmlrpc_call_success_wp_newComment'","callers":[{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":3016,"type":"action","source":"do_action('xmlrpc_call_success_wp_newComment', $comment_ID, $args)"}]},"'xmlrpc_default_posttype_fields'":{"name":"'xmlrpc_default_posttype_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getPostType","file":"class-wp-xmlrpc-server.php","line":3424,"type":"filter","source":"apply_filters('xmlrpc_default_posttype_fields', array('labels', 'cap', 'taxonomies'), 'wp.getPostType')"},{"name":"wp_xmlrpc_server::wp_getPostTypes","file":"class-wp-xmlrpc-server.php","line":3470,"type":"filter","source":"apply_filters('xmlrpc_default_posttype_fields', array('labels', 'cap', 'taxonomies'), 'wp.getPostTypes')"}]},"'xmlrpc_default_revision_fields'":{"name":"'xmlrpc_default_revision_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getRevisions","file":"class-wp-xmlrpc-server.php","line":3524,"type":"filter","source":"apply_filters('xmlrpc_default_revision_fields', array('post_date', 'post_date_gmt'), 'wp.getRevisions')"}]},"'xmlrpc_call_success_blogger_newPost'":{"name":"'xmlrpc_call_success_blogger_newPost'","callers":[{"name":"wp_xmlrpc_server::blogger_newPost","file":"class-wp-xmlrpc-server.php","line":3893,"type":"action","source":"do_action('xmlrpc_call_success_blogger_newPost', $post_ID, $args)"}]},"'xmlrpc_call_success_blogger_editPost'":{"name":"'xmlrpc_call_success_blogger_editPost'","callers":[{"name":"wp_xmlrpc_server::blogger_editPost","file":"class-wp-xmlrpc-server.php","line":3949,"type":"action","source":"do_action('xmlrpc_call_success_blogger_editPost', $post_ID, $args)"}]},"'xmlrpc_call_success_blogger_deletePost'":{"name":"'xmlrpc_call_success_blogger_deletePost'","callers":[{"name":"wp_xmlrpc_server::blogger_deletePost","file":"class-wp-xmlrpc-server.php","line":3988,"type":"action","source":"do_action('xmlrpc_call_success_blogger_deletePost', $post_ID, $args)"}]},"'xmlrpc_call_success_mw_newPost'":{"name":"'xmlrpc_call_success_mw_newPost'","callers":[{"name":"wp_xmlrpc_server::mw_newPost","file":"class-wp-xmlrpc-server.php","line":4298,"type":"action","source":"do_action('xmlrpc_call_success_mw_newPost', $post_ID, $args)"}]},"'xmlrpc_call_success_mw_editPost'":{"name":"'xmlrpc_call_success_mw_editPost'","callers":[{"name":"wp_xmlrpc_server::mw_editPost","file":"class-wp-xmlrpc-server.php","line":4608,"type":"action","source":"do_action('xmlrpc_call_success_mw_editPost', $post_ID, $args)"}]},"'pre_upload_error'":{"name":"'pre_upload_error'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4929,"type":"filter","source":"apply_filters('pre_upload_error', false)"}]},"'xmlrpc_call_success_mw_newMediaObject'":{"name":"'xmlrpc_call_success_mw_newMediaObject'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4976,"type":"action","source":"do_action('xmlrpc_call_success_mw_newMediaObject', $id, $args)"}]},"'wp_handle_upload'":{"name":"'wp_handle_upload'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4984,"type":"filter","source":"apply_filters('wp_handle_upload', $struct, 'upload')"}]},"'xmlrpc_text_filters'":{"name":"'xmlrpc_text_filters'","callers":[{"name":"wp_xmlrpc_server::mt_supportedTextFilters","file":"class-wp-xmlrpc-server.php","line":5199,"type":"filter","source":"apply_filters('xmlrpc_text_filters', array())"}]},"'pre_remote_source'":{"name":"'pre_remote_source'","callers":[{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5383,"type":"filter","source":"apply_filters('pre_remote_source', $linea, $pagelinkedto)"}]},"'pingback_post'":{"name":"'pingback_post'","callers":[{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5448,"type":"action","source":"do_action('pingback_post', $comment_ID)"}]},"'do_parse_request'":{"name":"'do_parse_request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":123,"type":"filter","source":"apply_filters('do_parse_request', true, $this, $extra_query_vars)"}]},"'query_vars'":{"name":"'query_vars'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":248,"type":"filter","source":"apply_filters('query_vars', $this->public_query_vars)"}]},"'request'":{"name":"'request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":306,"type":"filter","source":"apply_filters('request', $this->query_vars)"}]},"'parse_request'":{"name":"'parse_request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":308,"type":"action_reference","source":"do_action_ref_array('parse_request', array(&$this))"}]},"'wp_headers'":{"name":"'wp_headers'","callers":[{"name":"WP::send_headers","file":"class-wp.php","line":377,"type":"filter","source":"apply_filters('wp_headers', $headers, $this)"}]},"'send_headers'":{"name":"'send_headers'","callers":[{"name":"WP::send_headers","file":"class-wp.php","line":407,"type":"action_reference","source":"do_action_ref_array('send_headers', array(&$this))"}]},"'query_string'":{"name":"'query_string'","callers":[{"name":"WP::build_query_string","file":"class-wp.php","line":431,"type":"filter","source":"apply_filters('query_string', $this->query_string)"}]},"'wp'":{"name":"'wp'","callers":[{"name":"WP::main","file":"class-wp.php","line":552,"type":"action_reference","source":"do_action_ref_array('wp', array(&$this))"}]},"'wp_default_scripts'":{"name":"'wp_default_scripts'","callers":[{"name":"WP_Scripts::init","file":"class.wp-scripts.php","line":39,"type":"action_reference","source":"do_action_ref_array('wp_default_scripts', array(&$this))"}]},"'script_loader_src'":{"name":"'script_loader_src'","callers":[{"name":"WP_Scripts::do_item","file":"class.wp-scripts.php","line":100,"type":"filter","source":"apply_filters('script_loader_src', $src, $handle)"},{"name":"WP_Scripts::do_item","file":"class.wp-scripts.php","line":120,"type":"filter","source":"apply_filters('script_loader_src', $src, $handle)"}]},"'print_scripts_array'":{"name":"'print_scripts_array'","callers":[{"name":"WP_Scripts::all_deps","file":"class.wp-scripts.php","line":177,"type":"filter","source":"apply_filters('print_scripts_array', $this->to_do)"}]},"'wp_default_styles'":{"name":"'wp_default_styles'","callers":[{"name":"WP_Styles::__construct","file":"class.wp-styles.php","line":32,"type":"action_reference","source":"do_action_ref_array('wp_default_styles', array(&$this))"}]},"'style_loader_tag'":{"name":"'style_loader_tag'","callers":[{"name":"WP_Styles::do_item","file":"class.wp-styles.php","line":74,"type":"filter","source":"apply_filters('style_loader_tag', \"\\n\", $handle)"},{"name":"WP_Styles::do_item","file":"class.wp-styles.php","line":83,"type":"filter","source":"apply_filters('style_loader_tag', \"\\n\", $handle)"}]},"'print_styles_array'":{"name":"'print_styles_array'","callers":[{"name":"WP_Styles::all_deps","file":"class.wp-styles.php","line":133,"type":"filter","source":"apply_filters('print_styles_array', $this->to_do)"}]},"'style_loader_src'":{"name":"'style_loader_src'","callers":[{"name":"WP_Styles::_css_href","file":"class.wp-styles.php","line":144,"type":"filter","source":"apply_filters('style_loader_src', $src, $handle)"}]},"'get_comment_author'":{"name":"'get_comment_author'","callers":[{"name":"get_comment_author","file":"comment-template.php","line":35,"type":"filter","source":"apply_filters('get_comment_author', $author)"}]},"'comment_author'":{"name":"'comment_author'","callers":[{"name":"comment_author","file":"comment-template.php","line":47,"type":"filter","source":"apply_filters('comment_author', get_comment_author($comment_ID))"}]},"'get_comment_author_email'":{"name":"'get_comment_author_email'","callers":[{"name":"get_comment_author_email","file":"comment-template.php","line":63,"type":"filter","source":"apply_filters('get_comment_author_email', $comment->comment_author_email)"}]},"'author_email'":{"name":"'author_email'","callers":[{"name":"comment_author_email","file":"comment-template.php","line":81,"type":"filter","source":"apply_filters('author_email', get_comment_author_email($comment_ID))"}]},"'comment_email'":{"name":"'comment_email'","callers":[{"name":"get_comment_author_email_link","file":"comment-template.php","line":126,"type":"filter","source":"apply_filters('comment_email', $comment->comment_author_email)"}]},"'get_comment_author_link'":{"name":"'get_comment_author_link'","callers":[{"name":"get_comment_author_link","file":"comment-template.php","line":156,"type":"filter","source":"apply_filters('get_comment_author_link', $return)"}]},"'get_comment_author_IP'":{"name":"'get_comment_author_IP'","callers":[{"name":"get_comment_author_IP","file":"comment-template.php","line":183,"type":"filter","source":"apply_filters('get_comment_author_IP', $comment->comment_author_IP)"}]},"'get_comment_author_url'":{"name":"'get_comment_author_url'","callers":[{"name":"get_comment_author_url","file":"comment-template.php","line":211,"type":"filter","source":"apply_filters('get_comment_author_url', $url)"}]},"'comment_url'":{"name":"'comment_url'","callers":[{"name":"comment_author_url","file":"comment-template.php","line":224,"type":"filter","source":"apply_filters('comment_url', get_comment_author_url($comment_ID))"}]},"'get_comment_author_url_link'":{"name":"'get_comment_author_url_link'","callers":[{"name":"get_comment_author_url_link","file":"comment-template.php","line":253,"type":"filter","source":"apply_filters('get_comment_author_url_link', $return)"}]},"'comment_class'":{"name":"'comment_class'","callers":[{"name":"get_comment_class","file":"comment-template.php","line":358,"type":"filter","source":"apply_filters('comment_class', $classes, $class, $comment_id, $post_id)"}]},"'get_comment_date'":{"name":"'get_comment_date'","callers":[{"name":"get_comment_date","file":"comment-template.php","line":378,"type":"filter","source":"apply_filters('get_comment_date', $date, $d)"}]},"'get_comment_excerpt'":{"name":"'get_comment_excerpt'","callers":[{"name":"get_comment_excerpt","file":"comment-template.php","line":423,"type":"filter","source":"apply_filters('get_comment_excerpt', $excerpt)"}]},"'comment_excerpt'":{"name":"'comment_excerpt'","callers":[{"name":"comment_excerpt","file":"comment-template.php","line":435,"type":"filter","source":"apply_filters('comment_excerpt', get_comment_excerpt($comment_ID))"}]},"'get_comment_ID'":{"name":"'get_comment_ID'","callers":[{"name":"get_comment_ID","file":"comment-template.php","line":449,"type":"filter","source":"apply_filters('get_comment_ID', $comment->comment_ID)"}]},"'get_comment_link'":{"name":"'get_comment_link'","callers":[{"name":"get_comment_link","file":"comment-template.php","line":507,"type":"filter","source":"apply_filters('get_comment_link', $link . '#comment-' . $comment->comment_ID, $comment, $args)"}]},"'get_comments_number'":{"name":"'get_comments_number'","callers":[{"name":"get_comments_number","file":"comment-template.php","line":559,"type":"filter","source":"apply_filters('get_comments_number', $count, $post_id)"}]},"'comments_number'":{"name":"'comments_number'","callers":[{"name":"comments_number","file":"comment-template.php","line":586,"type":"filter","source":"apply_filters('comments_number', $output, $number)"}]},"'get_comment_text'":{"name":"'get_comment_text'","callers":[{"name":"get_comment_text","file":"comment-template.php","line":600,"type":"filter","source":"apply_filters('get_comment_text', $comment->comment_content, $comment)"}]},"'comment_text'":{"name":"'comment_text'","callers":[{"name":"comment_text","file":"comment-template.php","line":614,"type":"filter","source":"apply_filters('comment_text', get_comment_text($comment_ID), $comment)"},{"name":"check_comment","file":"comment.php","line":47,"type":"filter","source":"apply_filters('comment_text', $comment)"}]},"'get_comment_time'":{"name":"'get_comment_time'","callers":[{"name":"get_comment_time","file":"comment-template.php","line":636,"type":"filter","source":"apply_filters('get_comment_time', $date, $d, $gmt, $translate)"}]},"'get_comment_type'":{"name":"'get_comment_type'","callers":[{"name":"get_comment_type","file":"comment-template.php","line":665,"type":"filter","source":"apply_filters('get_comment_type', $comment->comment_type)"}]},"'trackback_url'":{"name":"'trackback_url'","callers":[{"name":"get_trackback_url","file":"comment-template.php","line":712,"type":"filter","source":"apply_filters('trackback_url', $tb_url)"}]},"'comments_open'":{"name":"'comments_open'","callers":[{"name":"comments_open","file":"comment-template.php","line":777,"type":"filter","source":"apply_filters('comments_open', $open, $post_id)"}]},"'pings_open'":{"name":"'pings_open'","callers":[{"name":"pings_open","file":"comment-template.php","line":794,"type":"filter","source":"apply_filters('pings_open', $open, $post_id)"}]},"'comments_array'":{"name":"'comments_array'","callers":[{"name":"comments_template","file":"comment-template.php","line":891,"type":"filter","source":"apply_filters('comments_array', $comments, $post->ID)"}]},"'comments_template'":{"name":"'comments_template'","callers":[{"name":"comments_template","file":"comment-template.php","line":910,"type":"filter","source":"apply_filters('comments_template', STYLESHEETPATH . $file)"}]},"'comments_popup_link_attributes'":{"name":"'comments_popup_link_attributes'","callers":[{"name":"comments_popup_link","file":"comment-template.php","line":1011,"type":"filter","source":"apply_filters('comments_popup_link_attributes', '')"}]},"'comment_reply_link'":{"name":"'comment_reply_link'","callers":[{"name":"get_comment_reply_link","file":"comment-template.php","line":1062,"type":"filter","source":"apply_filters('comment_reply_link', $before . $link . $after, $args, $comment, $post)"}]},"'post_comments_link'":{"name":"'post_comments_link'","callers":[{"name":"get_post_reply_link","file":"comment-template.php","line":1114,"type":"filter","source":"apply_filters('post_comments_link', $before . $link . $after, $post)"}]},"'cancel_comment_reply_link'":{"name":"'cancel_comment_reply_link'","callers":[{"name":"get_cancel_comment_reply_link","file":"comment-template.php","line":1143,"type":"filter","source":"apply_filters('cancel_comment_reply_link', '' . $text . '<\/a>', $link, $text)"}]},"'comment_id_fields'":{"name":"'comment_id_fields'","callers":[{"name":"get_comment_id_fields","file":"comment-template.php","line":1171,"type":"filter","source":"apply_filters('comment_id_fields', $result, $id, $replytoid)"}]},"'comment_form_default_fields'":{"name":"'comment_form_default_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1534,"type":"filter","source":"apply_filters('comment_form_default_fields', $fields)"}]},"'the_permalink'":{"name":"'the_permalink'","callers":[{"name":"comment_form","file":"comment-template.php","line":1536,"type":"filter","source":"apply_filters('the_permalink', get_permalink($post_id))"},{"name":"comment_form","file":"comment-template.php","line":1537,"type":"filter","source":"apply_filters('the_permalink', get_permalink($post_id))"},{"name":"the_permalink","file":"link-template.php","line":16,"type":"filter","source":"apply_filters('the_permalink', get_permalink())"}]},"'comment_form_defaults'":{"name":"'comment_form_defaults'","callers":[{"name":"comment_form","file":"comment-template.php","line":1548,"type":"filter","source":"apply_filters('comment_form_defaults', $defaults)"}]},"'comment_form_before'":{"name":"'comment_form_before'","callers":[{"name":"comment_form","file":"comment-template.php","line":1552,"type":"action","source":"do_action('comment_form_before')"}]},"'comment_form_must_log_in_after'":{"name":"'comment_form_must_log_in_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1557,"type":"action","source":"do_action('comment_form_must_log_in_after')"}]},"'comment_form_top'":{"name":"'comment_form_top'","callers":[{"name":"comment_form","file":"comment-template.php","line":1560,"type":"action","source":"do_action('comment_form_top')"}]},"'comment_form_logged_in'":{"name":"'comment_form_logged_in'","callers":[{"name":"comment_form","file":"comment-template.php","line":1562,"type":"filter","source":"apply_filters('comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity)"}]},"'comment_form_logged_in_after'":{"name":"'comment_form_logged_in_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1563,"type":"action","source":"do_action('comment_form_logged_in_after', $commenter, $user_identity)"}]},"'comment_form_before_fields'":{"name":"'comment_form_before_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1567,"type":"action","source":"do_action('comment_form_before_fields')"}]},"\"comment_form_field_{$name}\"":{"name":"\"comment_form_field_{$name}\"","callers":[{"name":"comment_form","file":"comment-template.php","line":1569,"type":"filter","source":"apply_filters(\"comment_form_field_{$name}\", $field)"}]},"'comment_form_after_fields'":{"name":"'comment_form_after_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1571,"type":"action","source":"do_action('comment_form_after_fields')"}]},"'comment_form_field_comment'":{"name":"'comment_form_field_comment'","callers":[{"name":"comment_form","file":"comment-template.php","line":1574,"type":"filter","source":"apply_filters('comment_form_field_comment', $args['comment_field'])"}]},"'comment_form'":{"name":"'comment_form'","callers":[{"name":"comment_form","file":"comment-template.php","line":1580,"type":"action","source":"do_action('comment_form', $post_id)"},{"name":"__main","file":"theme-compat\/comments-popup.php","line":100,"type":"action","source":"do_action('comment_form', $post->ID)"},{"name":"__main","file":"theme-compat\/comments.php","line":94,"type":"action","source":"do_action('comment_form', $post->ID)"}]},"'comment_form_after'":{"name":"'comment_form_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1584,"type":"action","source":"do_action('comment_form_after')"}]},"'comment_form_comments_closed'":{"name":"'comment_form_comments_closed'","callers":[{"name":"comment_form","file":"comment-template.php","line":1586,"type":"action","source":"do_action('comment_form_comments_closed')"}]},"'comment_max_links_url'":{"name":"'comment_max_links_url'","callers":[{"name":"check_comment","file":"comment.php","line":52,"type":"filter","source":"apply_filters('comment_max_links_url', $num_links, $url)"}]},"'get_comment'":{"name":"'get_comment'","callers":[{"name":"get_comment","file":"comment.php","line":153,"type":"filter","source":"apply_filters('get_comment', $_comment)"}]},"'pre_get_comments'":{"name":"'pre_get_comments'","callers":[{"name":"WP_Comment_Query::query","file":"comment.php","line":247,"type":"action_reference","source":"do_action_ref_array('pre_get_comments', array(&$this))"}]},"'comment_cookie_lifetime'":{"name":"'comment_cookie_lifetime'","callers":[{"name":"wp_set_comment_cookies","file":"comment.php","line":618,"type":"filter","source":"apply_filters('comment_cookie_lifetime', 30000000)"}]},"'pre_comment_author_name'":{"name":"'pre_comment_author_name'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":634,"type":"filter","source":"apply_filters('pre_comment_author_name', $_COOKIE['comment_author_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1328,"type":"filter","source":"apply_filters('pre_comment_author_name', $commentdata['comment_author'])"}]},"'pre_comment_author_email'":{"name":"'pre_comment_author_email'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":641,"type":"filter","source":"apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1332,"type":"filter","source":"apply_filters('pre_comment_author_email', $commentdata['comment_author_email'])"}]},"'pre_comment_author_url'":{"name":"'pre_comment_author_url'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":648,"type":"filter","source":"apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1331,"type":"filter","source":"apply_filters('pre_comment_author_url', $commentdata['comment_author_url'])"}]},"'comment_duplicate_trigger'":{"name":"'comment_duplicate_trigger'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":677,"type":"action","source":"do_action('comment_duplicate_trigger', $commentdata)"}]},"'check_comment_flood'":{"name":"'check_comment_flood'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":684,"type":"action","source":"do_action('check_comment_flood', $comment_author_IP, $comment_author_email, $comment_date_gmt)"}]},"'pre_comment_approved'":{"name":"'pre_comment_approved'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":704,"type":"filter","source":"apply_filters('pre_comment_approved', $approved, $commentdata)"}]},"'comment_flood_filter'":{"name":"'comment_flood_filter'","callers":[{"name":"check_comment_flood_db","file":"comment.php","line":733,"type":"filter","source":"apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment)"}]},"'comment_flood_trigger'":{"name":"'comment_flood_trigger'","callers":[{"name":"check_comment_flood_db","file":"comment.php","line":735,"type":"action","source":"do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment)"}]},"'wp_blacklist_check'":{"name":"'wp_blacklist_check'","callers":[{"name":"wp_blacklist_check","file":"comment.php","line":888,"type":"action","source":"do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent)"}]},"'wp_count_comments'":{"name":"'wp_count_comments'","callers":[{"name":"wp_count_comments","file":"comment.php","line":940,"type":"filter","source":"apply_filters('wp_count_comments', array(), $post_id)"}]},"'delete_comment'":{"name":"'delete_comment'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1005,"type":"action","source":"do_action('delete_comment', $comment_id)"}]},"'deleted_comment'":{"name":"'deleted_comment'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1021,"type":"action","source":"do_action('deleted_comment', $comment_id)"}]},"'wp_set_comment_status'":{"name":"'wp_set_comment_status'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1029,"type":"action","source":"do_action('wp_set_comment_status', $comment_id, 'delete')"},{"name":"wp_set_comment_status","file":"comment.php","line":1471,"type":"action","source":"do_action('wp_set_comment_status', $comment_id, $comment_status)"}]},"'trash_comment'":{"name":"'trash_comment'","callers":[{"name":"wp_trash_comment","file":"comment.php","line":1054,"type":"action","source":"do_action('trash_comment', $comment_id)"}]},"'trashed_comment'":{"name":"'trashed_comment'","callers":[{"name":"wp_trash_comment","file":"comment.php","line":1059,"type":"action","source":"do_action('trashed_comment', $comment_id)"}]},"'untrash_comment'":{"name":"'untrash_comment'","callers":[{"name":"wp_untrash_comment","file":"comment.php","line":1080,"type":"action","source":"do_action('untrash_comment', $comment_id)"}]},"'untrashed_comment'":{"name":"'untrashed_comment'","callers":[{"name":"wp_untrash_comment","file":"comment.php","line":1089,"type":"action","source":"do_action('untrashed_comment', $comment_id)"}]},"'spam_comment'":{"name":"'spam_comment'","callers":[{"name":"wp_spam_comment","file":"comment.php","line":1110,"type":"action","source":"do_action('spam_comment', $comment_id)"}]},"'spammed_comment'":{"name":"'spammed_comment'","callers":[{"name":"wp_spam_comment","file":"comment.php","line":1114,"type":"action","source":"do_action('spammed_comment', $comment_id)"}]},"'unspam_comment'":{"name":"'unspam_comment'","callers":[{"name":"wp_unspam_comment","file":"comment.php","line":1135,"type":"action","source":"do_action('unspam_comment', $comment_id)"}]},"'unspammed_comment'":{"name":"'unspammed_comment'","callers":[{"name":"wp_unspam_comment","file":"comment.php","line":1143,"type":"action","source":"do_action('unspammed_comment', $comment_id)"}]},"'transition_comment_status'":{"name":"'transition_comment_status'","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1213,"type":"action","source":"do_action('transition_comment_status', $new_status, $old_status, $comment)"}]},"\"comment_{$old_status}_to_{$new_status}\"":{"name":"\"comment_{$old_status}_to_{$new_status}\"","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1214,"type":"action","source":"do_action(\"comment_{$old_status}_to_{$new_status}\", $comment)"}]},"\"comment_{$new_status}_{$comment->comment_type}\"":{"name":"\"comment_{$new_status}_{$comment->comment_type}\"","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1216,"type":"action","source":"do_action(\"comment_{$new_status}_{$comment->comment_type}\", $comment->comment_ID, $comment)"}]},"'wp_get_current_commenter'":{"name":"'wp_get_current_commenter'","callers":[{"name":"wp_get_current_commenter","file":"comment.php","line":1246,"type":"filter","source":"apply_filters('wp_get_current_commenter', compact('comment_author', 'comment_author_email', 'comment_author_url'))"}]},"'wp_insert_comment'":{"name":"'wp_insert_comment'","callers":[{"name":"wp_insert_comment","file":"comment.php","line":1291,"type":"action","source":"do_action('wp_insert_comment', $id, $comment)"}]},"'pre_user_id'":{"name":"'pre_user_id'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1324,"type":"filter","source":"apply_filters('pre_user_id', $commentdata['user_ID'])"},{"name":"wp_filter_comment","file":"comment.php","line":1326,"type":"filter","source":"apply_filters('pre_user_id', $commentdata['user_id'])"}]},"'pre_comment_user_agent'":{"name":"'pre_comment_user_agent'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1327,"type":"filter","source":"apply_filters('pre_comment_user_agent', isset($commentdata['comment_agent']) ? $commentdata['comment_agent'] : '')"}]},"'pre_comment_content'":{"name":"'pre_comment_content'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1329,"type":"filter","source":"apply_filters('pre_comment_content', $commentdata['comment_content'])"}]},"'pre_comment_user_ip'":{"name":"'pre_comment_user_ip'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1330,"type":"filter","source":"apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP'])"}]},"'preprocess_comment'":{"name":"'preprocess_comment'","callers":[{"name":"wp_new_comment","file":"comment.php","line":1378,"type":"filter","source":"apply_filters('preprocess_comment', $commentdata)"}]},"'comment_post'":{"name":"'comment_post'","callers":[{"name":"wp_new_comment","file":"comment.php","line":1402,"type":"action","source":"do_action('comment_post', $comment_ID, $commentdata['comment_approved'])"}]},"'comment_save_pre'":{"name":"'comment_save_pre'","callers":[{"name":"wp_update_comment","file":"comment.php","line":1510,"type":"filter","source":"apply_filters('comment_save_pre', $comment_content)"}]},"'edit_comment'":{"name":"'edit_comment'","callers":[{"name":"wp_update_comment","file":"comment.php","line":1526,"type":"action","source":"do_action('edit_comment', $comment_ID)"}]},"'wp_update_comment_count'":{"name":"'wp_update_comment_count'","callers":[{"name":"wp_update_comment_count_now","file":"comment.php","line":1623,"type":"action","source":"do_action('wp_update_comment_count', $post_id, $new, $old)"}]},"'edit_post'":{"name":"'edit_post'","callers":[{"name":"wp_update_comment_count_now","file":"comment.php","line":1624,"type":"action","source":"do_action('edit_post', $post_id, $post)"},{"name":"wp_insert_post","file":"post.php","line":2945,"type":"action","source":"do_action('edit_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3035,"type":"action","source":"do_action('edit_post', $post->ID, $post)"}]},"'the_content'":{"name":"'the_content'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1755,"type":"filter","source":"apply_filters('the_content', $post->post_content)"},{"name":"get_the_content_feed","file":"feed.php","line":149,"type":"filter","source":"apply_filters('the_content', get_the_content())"},{"name":"wp_trim_excerpt","file":"formatting.php","line":2152,"type":"filter","source":"apply_filters('the_content', $text)"},{"name":"the_content","file":"post-template.php","line":166,"type":"filter","source":"apply_filters('the_content', $content)"}]},"'the_excerpt'":{"name":"'the_excerpt'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1757,"type":"filter","source":"apply_filters('the_excerpt', $post->post_excerpt)"},{"name":"the_excerpt","file":"post-template.php","line":249,"type":"filter","source":"apply_filters('the_excerpt', get_the_excerpt())"}]},"'the_title'":{"name":"'the_title'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1761,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"previous_post","file":"deprecated.php","line":152,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"next_post","file":"deprecated.php","line":188,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"get_boundary_post_rel_link","file":"deprecated.php","line":2738,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"get_parent_post_rel_link","file":"deprecated.php","line":2813,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"wp_get_archives","file":"general-template.php","line":1033,"type":"filter","source":"apply_filters('the_title', $arcresult->post_title, $arcresult->ID)"},{"name":"get_calendar","file":"general-template.php","line":1220,"type":"filter","source":"apply_filters('the_title', $ak_post_title->post_title, $ak_post_title->ID)"},{"name":"get_adjacent_post_rel_link","file":"link-template.php","line":1229,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"adjacent_post_link","file":"link-template.php","line":1391,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":90,"type":"filter","source":"apply_filters('the_title', $item->title, $item->ID)"},{"name":"get_the_title","file":"post-template.php","line":118,"type":"filter","source":"apply_filters('the_title', $title, $id)"},{"name":"Walker_Page::start_el","file":"post-template.php","line":1051,"type":"filter","source":"apply_filters('the_title', $page->post_title, $page->ID)"}]},"'pre_ping'":{"name":"'pre_ping'","callers":[{"name":"pingback","file":"comment.php","line":1851,"type":"action_reference","source":"do_action_ref_array('pre_ping', array(&$post_links, &$pung, $post_ID))"}]},"'pingback_useragent'":{"name":"'pingback_useragent'","callers":[{"name":"pingback","file":"comment.php","line":1864,"type":"filter","source":"apply_filters('pingback_useragent', $client->useragent . ' -- WordPress\/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom)"}]},"'close_comments_for_post_types'":{"name":"'close_comments_for_post_types'","callers":[{"name":"_close_comments_for_old_posts","file":"comment.php","line":2015,"type":"filter","source":"apply_filters('close_comments_for_post_types', array('post'))"},{"name":"_close_comments_for_old_post","file":"comment.php","line":2054,"type":"filter","source":"apply_filters('close_comments_for_post_types', array('post'))"}]},"'schedule_event'":{"name":"'schedule_event'","callers":[{"name":"wp_schedule_single_event","file":"cron.php","line":30,"type":"filter","source":"apply_filters('schedule_event', $event)"},{"name":"wp_schedule_event","file":"cron.php","line":71,"type":"filter","source":"apply_filters('schedule_event', $event)"}]},"'cron_request'":{"name":"'cron_request'","callers":[{"name":"spawn_cron","file":"cron.php","line":247,"type":"filter","source":"apply_filters('cron_request', array('url' => site_url('wp-cron.php?doing_wp_cron=' . $doing_wp_cron), 'key' => $doing_wp_cron, 'args' => array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true))))"}]},"'cron_schedules'":{"name":"'cron_schedules'","callers":[{"name":"wp_get_schedules","file":"cron.php","line":325,"type":"filter","source":"apply_filters('cron_schedules', array())"}]},"'widget_title'":{"name":"'widget_title'","callers":[{"name":"WP_Widget_Pages::widget","file":"default-widgets.php","line":24,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Pages') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Search::widget","file":"default-widgets.php","line":199,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":244,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Archives') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Meta::widget","file":"default-widgets.php","line":307,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Calendar::widget","file":"default-widgets.php","line":358,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Text::widget","file":"default-widgets.php","line":400,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":450,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Categories') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Recent_Posts::widget","file":"default-widgets.php","line":561,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Recent_Comments::widget","file":"default-widgets.php","line":677,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_RSS::widget","file":"default-widgets.php","line":779,"type":"filter","source":"apply_filters('widget_title', $title, $instance, $this->id_base)"},{"name":"WP_Widget_Tag_Cloud::widget","file":"default-widgets.php","line":1047,"type":"filter","source":"apply_filters('widget_title', $title, $instance, $this->id_base)"},{"name":"WP_Nav_Menu_Widget::widget","file":"default-widgets.php","line":1108,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"}]},"'widget_pages_args'":{"name":"'widget_pages_args'","callers":[{"name":"WP_Widget_Pages::widget","file":"default-widgets.php","line":31,"type":"filter","source":"apply_filters('widget_pages_args', array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude))"}]},"'widget_links_args'":{"name":"'widget_links_args'","callers":[{"name":"WP_Widget_Links::widget","file":"default-widgets.php","line":110,"type":"filter","source":"apply_filters('widget_links_args', array('title_before' => $before_title, 'title_after' => $after_title, 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => $show_images, 'show_description' => $show_description, 'show_name' => $show_name, 'show_rating' => $show_rating, 'category' => $category, 'class' => 'linkcat widget', 'orderby' => $orderby, 'order' => $order, 'limit' => $limit))"}]},"'widget_archives_dropdown_args'":{"name":"'widget_archives_dropdown_args'","callers":[{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":252,"type":"filter","source":"apply_filters('widget_archives_dropdown_args', array('type' => 'monthly', 'format' => 'option', 'show_post_count' => $c))"}]},"'widget_archives_args'":{"name":"'widget_archives_args'","callers":[{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":257,"type":"filter","source":"apply_filters('widget_archives_args', array('type' => 'monthly', 'show_post_count' => $c))"}]},"'widget_text'":{"name":"'widget_text'","callers":[{"name":"WP_Widget_Text::widget","file":"default-widgets.php","line":401,"type":"filter","source":"apply_filters('widget_text', empty($instance['text']) ? '' : $instance['text'], $instance)"}]},"'widget_categories_dropdown_args'":{"name":"'widget_categories_dropdown_args'","callers":[{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":463,"type":"filter","source":"apply_filters('widget_categories_dropdown_args', $cat_args)"}]},"'widget_categories_args'":{"name":"'widget_categories_args'","callers":[{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":484,"type":"filter","source":"apply_filters('widget_categories_args', $cat_args)"}]},"'widget_posts_args'":{"name":"'widget_posts_args'","callers":[{"name":"WP_Widget_Recent_Posts::widget","file":"default-widgets.php","line":566,"type":"filter","source":"apply_filters('widget_posts_args', array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true))"}]},"'show_recent_comments_widget_style'":{"name":"'show_recent_comments_widget_style'","callers":[{"name":"WP_Widget_Recent_Comments::recent_comments_style","file":"default-widgets.php","line":648,"type":"filter","source":"apply_filters('show_recent_comments_widget_style', true, $this->id_base)"}]},"'widget_comments_args'":{"name":"'widget_comments_args'","callers":[{"name":"WP_Widget_Recent_Comments::widget","file":"default-widgets.php","line":682,"type":"filter","source":"apply_filters('widget_comments_args', array('number' => $number, 'status' => 'approve', 'post_status' => 'publish'))"}]},"'widget_tag_cloud_args'":{"name":"'widget_tag_cloud_args'","callers":[{"name":"WP_Widget_Tag_Cloud::widget","file":"default-widgets.php","line":1053,"type":"filter","source":"apply_filters('widget_tag_cloud_args', array('taxonomy' => $current_taxonomy))"}]},"'widgets_init'":{"name":"'widgets_init'","callers":[{"name":"wp_widgets_init","file":"default-widgets.php","line":1198,"type":"action","source":"do_action('widgets_init')"}]},"'the_content_rss'":{"name":"'the_content_rss'","callers":[{"name":"the_content_rss","file":"deprecated.php","line":1710,"type":"filter","source":"apply_filters('the_content_rss', $content)"}]},"'icon_dir'":{"name":"'icon_dir'","callers":[{"name":"get_attachment_icon_src","file":"deprecated.php","line":1943,"type":"filter","source":"apply_filters('icon_dir', get_template_directory() . '\/images')"},{"name":"wp_get_attachment_image_src","file":"media.php","line":517,"type":"filter","source":"apply_filters('icon_dir', ABSPATH . WPINC . '\/images\/crystal')"},{"name":"wp_mime_type_icon","file":"post.php","line":4349,"type":"filter","source":"apply_filters('icon_dir', ABSPATH . WPINC . '\/images\/crystal')"}]},"'attachment_max_dims'":{"name":"'attachment_max_dims'","callers":[{"name":"get_attachment_icon","file":"deprecated.php","line":1978,"type":"filter","source":"apply_filters('attachment_max_dims', $max_dims)"}]},"'attachment_icon'":{"name":"'attachment_icon'","callers":[{"name":"get_attachment_icon","file":"deprecated.php","line":2007,"type":"filter","source":"apply_filters('attachment_icon', $icon, $post->ID)"}]},"'attachment_innerHTML'":{"name":"'attachment_innerHTML'","callers":[{"name":"get_attachment_innerHTML","file":"deprecated.php","line":2034,"type":"filter","source":"apply_filters('attachment_innerHTML', $innerHTML, $post->ID)"}]},"'delete_usermeta'":{"name":"'delete_usermeta'","callers":[{"name":"delete_usermeta","file":"deprecated.php","line":2290,"type":"action","source":"do_action('delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'deleted_usermeta'":{"name":"'deleted_usermeta'","callers":[{"name":"delete_usermeta","file":"deprecated.php","line":2301,"type":"action","source":"do_action('deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'update_usermeta'":{"name":"'update_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2396,"type":"action","source":"do_action('update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'added_usermeta'":{"name":"'added_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2409,"type":"action","source":"do_action('added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value)"}]},"'updated_usermeta'":{"name":"'updated_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2411,"type":"action","source":"do_action('updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"\"{$boundary}_post_rel_link\"":{"name":"\"{$boundary}_post_rel_link\"","callers":[{"name":"get_boundary_post_rel_link","file":"deprecated.php","line":2745,"type":"filter","source":"apply_filters(\"{$boundary}_post_rel_link\", $link)"}]},"'index_rel_link'":{"name":"'index_rel_link'","callers":[{"name":"get_index_rel_link","file":"deprecated.php","line":2776,"type":"filter","source":"apply_filters('index_rel_link', $link)"}]},"'parent_post_rel_link'":{"name":"'parent_post_rel_link'","callers":[{"name":"get_parent_post_rel_link","file":"deprecated.php","line":2819,"type":"filter","source":"apply_filters('parent_post_rel_link', $link)"}]},"'extra_theme_headers'":{"name":"'extra_theme_headers'","callers":[{"name":"get_theme_data","file":"deprecated.php","line":3117,"type":"filter","source":"apply_filters('extra_theme_headers', array())"}]},"'atom_ns'":{"name":"'atom_ns'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":15,"type":"action","source":"do_action('atom_ns')"},{"name":"__main","file":"feed-atom.php","line":17,"type":"action","source":"do_action('atom_ns')"}]},"'atom_comments_ns'":{"name":"'atom_comments_ns'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":15,"type":"action","source":"do_action('atom_comments_ns')"}]},"'comments_atom_head'":{"name":"'comments_atom_head'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":42,"type":"action","source":"do_action('comments_atom_head')"}]},"'the_title_rss'":{"name":"'the_title_rss'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":51,"type":"filter","source":"apply_filters('the_title_rss', $title)"},{"name":"__main","file":"feed-rss2-comments.php","line":43,"type":"filter","source":"apply_filters('the_title_rss', $title)"},{"name":"get_the_title_rss","file":"feed.php","line":117,"type":"filter","source":"apply_filters('the_title_rss', $title)"}]},"'comment_atom_entry'":{"name":"'comment_atom_entry'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":82,"type":"action","source":"do_action('comment_atom_entry', $comment->comment_ID, $comment_post->ID)"}]},"'atom_head'":{"name":"'atom_head'","callers":[{"name":"__main","file":"feed-atom.php","line":28,"type":"action","source":"do_action('atom_head')"}]},"'atom_author'":{"name":"'atom_author'","callers":[{"name":"__main","file":"feed-atom.php","line":36,"type":"action","source":"do_action('atom_author')"}]},"'atom_entry'":{"name":"'atom_entry'","callers":[{"name":"__main","file":"feed-atom.php","line":49,"type":"action","source":"do_action('atom_entry')"}]},"'rdf_ns'":{"name":"'rdf_ns'","callers":[{"name":"__main","file":"feed-rdf.php","line":19,"type":"action","source":"do_action('rdf_ns')"}]},"'rss_update_period'":{"name":"'rss_update_period'","callers":[{"name":"__main","file":"feed-rdf.php","line":26,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"},{"name":"__main","file":"feed-rss2-comments.php","line":32,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"},{"name":"__main","file":"feed-rss2.php","line":30,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"}]},"'rss_update_frequency'":{"name":"'rss_update_frequency'","callers":[{"name":"__main","file":"feed-rdf.php","line":27,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"},{"name":"__main","file":"feed-rss2-comments.php","line":33,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"},{"name":"__main","file":"feed-rss2.php","line":31,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"}]},"'rdf_header'":{"name":"'rdf_header'","callers":[{"name":"__main","file":"feed-rdf.php","line":29,"type":"action","source":"do_action('rdf_header')"}]},"'rdf_item'":{"name":"'rdf_item'","callers":[{"name":"__main","file":"feed-rdf.php","line":51,"type":"action","source":"do_action('rdf_item')"}]},"'rss_head'":{"name":"'rss_head'","callers":[{"name":"__main","file":"feed-rss.php","line":20,"type":"action","source":"do_action('rss_head')"}]},"'rss_item'":{"name":"'rss_item'","callers":[{"name":"__main","file":"feed-rss.php","line":27,"type":"action","source":"do_action('rss_item')"}]},"'rss2_ns'":{"name":"'rss2_ns'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":17,"type":"action","source":"do_action('rss2_ns')"},{"name":"__main","file":"feed-rss2.php","line":20,"type":"action","source":"do_action('rss2_ns')"}]},"'rss2_comments_ns'":{"name":"'rss2_comments_ns'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":17,"type":"action","source":"do_action('rss2_comments_ns')"}]},"'commentsrss2_head'":{"name":"'commentsrss2_head'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":34,"type":"action","source":"do_action('commentsrss2_head')"}]},"'commentrss2_item'":{"name":"'commentrss2_item'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":60,"type":"action","source":"do_action('commentrss2_item', $comment->comment_ID, $comment_post->ID)"}]},"'rss2_head'":{"name":"'rss2_head'","callers":[{"name":"__main","file":"feed-rss2.php","line":32,"type":"action","source":"do_action('rss2_head')"}]},"'rss2_item'":{"name":"'rss2_item'","callers":[{"name":"__main","file":"feed-rss2.php","line":57,"type":"action","source":"do_action('rss2_item')"}]},"'get_bloginfo_rss'":{"name":"'get_bloginfo_rss'","callers":[{"name":"get_bloginfo_rss","file":"feed.php","line":30,"type":"filter","source":"apply_filters('get_bloginfo_rss', convert_chars($info), $show)"},{"name":"get_the_category_rss","file":"feed.php","line":327,"type":"filter","source":"apply_filters('get_bloginfo_rss', get_bloginfo('url'))"}]},"'bloginfo_rss'":{"name":"'bloginfo_rss'","callers":[{"name":"bloginfo_rss","file":"feed.php","line":49,"type":"filter","source":"apply_filters('bloginfo_rss', get_bloginfo_rss($show), $show)"}]},"'default_feed'":{"name":"'default_feed'","callers":[{"name":"get_default_feed","file":"feed.php","line":66,"type":"filter","source":"apply_filters('default_feed', 'rss2')"}]},"'get_wp_title_rss'":{"name":"'get_wp_title_rss'","callers":[{"name":"get_wp_title_rss","file":"feed.php","line":86,"type":"filter","source":"apply_filters('get_wp_title_rss', $title)"}]},"'wp_title_rss'":{"name":"'wp_title_rss'","callers":[{"name":"wp_title_rss","file":"feed.php","line":102,"type":"filter","source":"apply_filters('wp_title_rss', get_wp_title_rss($sep))"}]},"'the_content_feed'":{"name":"'the_content_feed'","callers":[{"name":"get_the_content_feed","file":"feed.php","line":151,"type":"filter","source":"apply_filters('the_content_feed', $content, $feed_type)"}]},"'the_excerpt_rss'":{"name":"'the_excerpt_rss'","callers":[{"name":"the_excerpt_rss","file":"feed.php","line":179,"type":"filter","source":"apply_filters('the_excerpt_rss', $output)"}]},"'the_permalink_rss'":{"name":"'the_permalink_rss'","callers":[{"name":"the_permalink_rss","file":"feed.php","line":191,"type":"filter","source":"apply_filters('the_permalink_rss', get_permalink())"}]},"'comment_author_rss'":{"name":"'comment_author_rss'","callers":[{"name":"get_comment_author_rss","file":"feed.php","line":257,"type":"filter","source":"apply_filters('comment_author_rss', get_comment_author())"}]},"'comment_text_rss'":{"name":"'comment_text_rss'","callers":[{"name":"comment_text_rss","file":"feed.php","line":282,"type":"filter","source":"apply_filters('comment_text_rss', $comment_text)"}]},"'the_category_rss'":{"name":"'the_category_rss'","callers":[{"name":"get_the_category_rss","file":"feed.php","line":332,"type":"filter","source":"apply_filters('the_category_rss', $the_list, $type)"}]},"'rss_enclosure'":{"name":"'rss_enclosure'","callers":[{"name":"rss_enclosure","file":"feed.php","line":398,"type":"filter","source":"apply_filters('rss_enclosure', '' . '\n')"}]},"'atom_enclosure'":{"name":"'atom_enclosure'","callers":[{"name":"atom_enclosure","file":"feed.php","line":429,"type":"filter","source":"apply_filters('atom_enclosure', '' . '\n')"}]},"'feed_content_type'":{"name":"'feed_content_type'","callers":[{"name":"feed_content_type","file":"feed.php","line":515,"type":"filter","source":"apply_filters('feed_content_type', $content_type, $type)"}]},"'wp_feed_options'":{"name":"'wp_feed_options'","callers":[{"name":"fetch_feed","file":"feed.php","line":541,"type":"action_reference","source":"do_action_ref_array('wp_feed_options', array(&$feed, $url))"}]},"'no_texturize_tags'":{"name":"'no_texturize_tags'","callers":[{"name":"wptexturize","file":"formatting.php","line":104,"type":"filter","source":"apply_filters('no_texturize_tags', $default_no_texturize_tags)"}]},"'no_texturize_shortcodes'":{"name":"'no_texturize_shortcodes'","callers":[{"name":"wptexturize","file":"formatting.php","line":105,"type":"filter","source":"apply_filters('no_texturize_shortcodes', $default_no_texturize_shortcodes)"}]},"'sanitize_file_name_chars'":{"name":"'sanitize_file_name_chars'","callers":[{"name":"sanitize_file_name","file":"formatting.php","line":830,"type":"filter","source":"apply_filters('sanitize_file_name_chars', $special_chars, $filename_raw)"}]},"'sanitize_file_name'":{"name":"'sanitize_file_name'","callers":[{"name":"sanitize_file_name","file":"formatting.php","line":840,"type":"filter","source":"apply_filters('sanitize_file_name', $filename, $filename_raw)"},{"name":"sanitize_file_name","file":"formatting.php","line":867,"type":"filter","source":"apply_filters('sanitize_file_name', $filename, $filename_raw)"}]},"'sanitize_user'":{"name":"'sanitize_user'","callers":[{"name":"sanitize_user","file":"formatting.php","line":902,"type":"filter","source":"apply_filters('sanitize_user', $username, $raw_username, $strict)"}]},"'sanitize_key'":{"name":"'sanitize_key'","callers":[{"name":"sanitize_key","file":"formatting.php","line":919,"type":"filter","source":"apply_filters('sanitize_key', $key, $raw_key)"}]},"'sanitize_title'":{"name":"'sanitize_title'","callers":[{"name":"sanitize_title","file":"formatting.php","line":942,"type":"filter","source":"apply_filters('sanitize_title', $title, $raw_title, $context)"}]},"'sanitize_html_class'":{"name":"'sanitize_html_class'","callers":[{"name":"sanitize_html_class","file":"formatting.php","line":1063,"type":"filter","source":"apply_filters('sanitize_html_class', $sanitized, $class, $fallback)"}]},"'format_to_edit'":{"name":"'format_to_edit'","callers":[{"name":"format_to_edit","file":"formatting.php","line":1298,"type":"filter","source":"apply_filters('format_to_edit', $content)"}]},"'format_to_post'":{"name":"'format_to_post'","callers":[{"name":"format_to_post","file":"formatting.php","line":1313,"type":"filter","source":"apply_filters('format_to_post', $content)"}]},"'smilies_src'":{"name":"'smilies_src'","callers":[{"name":"translate_smiley","file":"formatting.php","line":1741,"type":"filter","source":"apply_filters('smilies_src', includes_url(\"images\/smilies\/{$img}\"), $img, site_url())"}]},"'is_email'":{"name":"'is_email'","callers":[{"name":"is_email","file":"formatting.php","line":1796,"type":"filter","source":"apply_filters('is_email', false, $email, 'email_too_short')"},{"name":"is_email","file":"formatting.php","line":1801,"type":"filter","source":"apply_filters('is_email', false, $email, 'email_no_at')"},{"name":"is_email","file":"formatting.php","line":1810,"type":"filter","source":"apply_filters('is_email', false, $email, 'local_invalid_chars')"},{"name":"is_email","file":"formatting.php","line":1816,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_period_sequence')"},{"name":"is_email","file":"formatting.php","line":1821,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_period_limits')"},{"name":"is_email","file":"formatting.php","line":1829,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_no_periods')"},{"name":"is_email","file":"formatting.php","line":1836,"type":"filter","source":"apply_filters('is_email', false, $email, 'sub_hyphen_limits')"},{"name":"is_email","file":"formatting.php","line":1841,"type":"filter","source":"apply_filters('is_email', false, $email, 'sub_invalid_chars')"},{"name":"is_email","file":"formatting.php","line":1846,"type":"filter","source":"apply_filters('is_email', $email, $email, null)"}]},"'sanitize_email'":{"name":"'sanitize_email'","callers":[{"name":"sanitize_email","file":"formatting.php","line":2020,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'email_too_short')"},{"name":"sanitize_email","file":"formatting.php","line":2025,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'email_no_at')"},{"name":"sanitize_email","file":"formatting.php","line":2035,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'local_invalid_chars')"},{"name":"sanitize_email","file":"formatting.php","line":2042,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_period_sequence')"},{"name":"sanitize_email","file":"formatting.php","line":2048,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_period_limits')"},{"name":"sanitize_email","file":"formatting.php","line":2056,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_no_periods')"},{"name":"sanitize_email","file":"formatting.php","line":2078,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_no_valid_subs')"},{"name":"sanitize_email","file":"formatting.php","line":2088,"type":"filter","source":"apply_filters('sanitize_email', $email, $email, null)"}]},"'excerpt_length'":{"name":"'excerpt_length'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2154,"type":"filter","source":"apply_filters('excerpt_length', 55)"}]},"'excerpt_more'":{"name":"'excerpt_more'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2155,"type":"filter","source":"apply_filters('excerpt_more', ' ' . '[...]')"}]},"'wp_trim_excerpt'":{"name":"'wp_trim_excerpt'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2158,"type":"filter","source":"apply_filters('wp_trim_excerpt', $text, $raw_excerpt)"}]},"'wp_trim_words'":{"name":"'wp_trim_words'","callers":[{"name":"wp_trim_words","file":"formatting.php","line":2198,"type":"filter","source":"apply_filters('wp_trim_words', $text, $num_words, $more, $original_text)"}]},"'pre_ent2ncr'":{"name":"'pre_ent2ncr'","callers":[{"name":"ent2ncr","file":"formatting.php","line":2212,"type":"filter","source":"apply_filters('pre_ent2ncr', null, $text)"}]},"'richedit_pre'":{"name":"'richedit_pre'","callers":[{"name":"wp_richedit_pre","file":"formatting.php","line":2492,"type":"filter","source":"apply_filters('richedit_pre', '')"},{"name":"wp_richedit_pre","file":"formatting.php","line":2498,"type":"filter","source":"apply_filters('richedit_pre', $output)"}]},"'htmledit_pre'":{"name":"'htmledit_pre'","callers":[{"name":"wp_htmledit_pre","file":"formatting.php","line":2516,"type":"filter","source":"apply_filters('htmledit_pre', $output)"}]},"'clean_url'":{"name":"'clean_url'","callers":[{"name":"esc_url","file":"formatting.php","line":2609,"type":"filter","source":"apply_filters('clean_url', $url, $original_url, $_context)"}]},"'js_escape'":{"name":"'js_escape'","callers":[{"name":"esc_js","file":"formatting.php","line":2660,"type":"filter","source":"apply_filters('js_escape', $safe_text, $text)"}]},"'esc_html'":{"name":"'esc_html'","callers":[{"name":"esc_html","file":"formatting.php","line":2674,"type":"filter","source":"apply_filters('esc_html', $safe_text, $text)"}]},"'attribute_escape'":{"name":"'attribute_escape'","callers":[{"name":"esc_attr","file":"formatting.php","line":2688,"type":"filter","source":"apply_filters('attribute_escape', $safe_text, $text)"}]},"'esc_textarea'":{"name":"'esc_textarea'","callers":[{"name":"esc_textarea","file":"formatting.php","line":2701,"type":"filter","source":"apply_filters('esc_textarea', $safe_text, $text)"}]},"'tag_escape'":{"name":"'tag_escape'","callers":[{"name":"tag_escape","file":"formatting.php","line":2714,"type":"filter","source":"apply_filters('tag_escape', $safe_tag, $tag_name)"}]},"\"sanitize_option_{$option}\"":{"name":"\"sanitize_option_{$option}\"","callers":[{"name":"sanitize_option","file":"formatting.php","line":2915,"type":"filter","source":"apply_filters(\"sanitize_option_{$option}\", $value, $option)"}]},"'wp_parse_str'":{"name":"'wp_parse_str'","callers":[{"name":"wp_parse_str","file":"formatting.php","line":2936,"type":"filter","source":"apply_filters('wp_parse_str', $array)"}]},"'wp_sprintf'":{"name":"'wp_sprintf'","callers":[{"name":"wp_sprintf","file":"formatting.php","line":3017,"type":"filter","source":"apply_filters('wp_sprintf', $fragment, $arg)"}]},"'wp_sprintf_l'":{"name":"'wp_sprintf_l'","callers":[{"name":"wp_sprintf_l","file":"formatting.php","line":3054,"type":"filter","source":"apply_filters('wp_sprintf_l', array('between' => __(', '), 'between_last_two' => __(', and '), 'between_only_two' => __(' and ')))"}]},"'sanitize_text_field'":{"name":"'sanitize_text_field'","callers":[{"name":"sanitize_text_field","file":"formatting.php","line":3242,"type":"filter","source":"apply_filters('sanitize_text_field', $filtered, $str)"}]},"'sanitize_mime_type'":{"name":"'sanitize_mime_type'","callers":[{"name":"sanitize_mime_type","file":"formatting.php","line":3290,"type":"filter","source":"apply_filters('sanitize_mime_type', $sani_mime_type, $mime_type)"}]},"'sanitize_trackback_urls'":{"name":"'sanitize_trackback_urls'","callers":[{"name":"sanitize_trackback_urls","file":"formatting.php","line":3309,"type":"filter","source":"apply_filters('sanitize_trackback_urls', $urls_to_ping, $to_ping)"}]},"'date_i18n'":{"name":"'date_i18n'","callers":[{"name":"date_i18n","file":"functions.php","line":140,"type":"filter","source":"apply_filters('date_i18n', $j, $req_format, $i, $gmt)"}]},"'number_format_i18n'":{"name":"'number_format_i18n'","callers":[{"name":"number_format_i18n","file":"functions.php","line":156,"type":"filter","source":"apply_filters('number_format_i18n', $formatted)"}]},"'status_header'":{"name":"'status_header'","callers":[{"name":"status_header","file":"functions.php","line":886,"type":"filter","source":"apply_filters('status_header', $status_header, $header, $text, $protocol)"}]},"'nocache_headers'":{"name":"'nocache_headers'","callers":[{"name":"wp_get_nocache_headers","file":"functions.php","line":910,"type":"filter","source":"apply_filters('nocache_headers', $headers)"}]},"'do_robotstxt'":{"name":"'do_robotstxt'","callers":[{"name":"do_robots","file":"functions.php","line":1074,"type":"action","source":"do_action('do_robotstxt')"}]},"'robots_txt'":{"name":"'robots_txt'","callers":[{"name":"do_robots","file":"functions.php","line":1087,"type":"filter","source":"apply_filters('robots_txt', $output, $public)"}]},"'upload_dir'":{"name":"'upload_dir'","callers":[{"name":"wp_upload_dir","file":"functions.php","line":1606,"type":"filter","source":"apply_filters('upload_dir', array('path' => $dir, 'url' => $url, 'subdir' => $subdir, 'basedir' => $basedir, 'baseurl' => $baseurl, 'error' => false))"}]},"'wp_upload_bits'":{"name":"'wp_upload_bits'","callers":[{"name":"wp_upload_bits","file":"functions.php","line":1731,"type":"filter","source":"apply_filters('wp_upload_bits', array('name' => $name, 'bits' => $bits, 'time' => $time))"}]},"'ext2type'":{"name":"'ext2type'","callers":[{"name":"wp_ext2type","file":"functions.php","line":1782,"type":"filter","source":"apply_filters('ext2type', array('audio' => array('aac', 'ac3', 'aif', 'aiff', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma'), 'video' => array('asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv'), 'document' => array('doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'rtf', 'wp', 'wpd'), 'spreadsheet' => array('numbers', 'ods', 'xls', 'xlsx', 'xlsm', 'xlsb'), 'interactive' => array('swf', 'key', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'sldx', 'sldm', 'odp'), 'text' => array('asc', 'csv', 'tsv', 'txt'), 'archive' => array('bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z'), 'code' => array('css', 'htm', 'html', 'php', 'js')))"}]},"'getimagesize_mimes_to_exts'":{"name":"'getimagesize_mimes_to_exts'","callers":[{"name":"wp_check_filetype_and_ext","file":"functions.php","line":1864,"type":"filter","source":"apply_filters('getimagesize_mimes_to_exts', array('image\/jpeg' => 'jpg', 'image\/png' => 'png', 'image\/gif' => 'gif', 'image\/bmp' => 'bmp', 'image\/tiff' => 'tif'))"}]},"'wp_check_filetype_and_ext'":{"name":"'wp_check_filetype_and_ext'","callers":[{"name":"wp_check_filetype_and_ext","file":"functions.php","line":1891,"type":"filter","source":"apply_filters('wp_check_filetype_and_ext', compact('ext', 'type', 'proper_filename'), $file, $filename, $mimes)"}]},"'mime_types'":{"name":"'mime_types'","callers":[{"name":"wp_get_mime_types","file":"functions.php","line":1906,"type":"filter","source":"apply_filters('mime_types', array('jpg|jpeg|jpe' => 'image\/jpeg', 'gif' => 'image\/gif', 'png' => 'image\/png', 'bmp' => 'image\/bmp', 'tif|tiff' => 'image\/tiff', 'ico' => 'image\/x-icon', 'asf|asx|wax|wmv|wmx' => 'video\/asf', 'avi' => 'video\/avi', 'divx' => 'video\/divx', 'flv' => 'video\/x-flv', 'mov|qt' => 'video\/quicktime', 'mpeg|mpg|mpe' => 'video\/mpeg', 'mp4|m4v' => 'video\/mp4', 'ogv' => 'video\/ogg', 'webm' => 'video\/webm', 'mkv' => 'video\/x-matroska', 'txt|asc|c|cc|h' => 'text\/plain', 'csv' => 'text\/csv', 'tsv' => 'text\/tab-separated-values', 'ics' => 'text\/calendar', 'rtx' => 'text\/richtext', 'css' => 'text\/css', 'htm|html' => 'text\/html', 'mp3|m4a|m4b' => 'audio\/mpeg', 'ra|ram' => 'audio\/x-realaudio', 'wav' => 'audio\/wav', 'ogg|oga' => 'audio\/ogg', 'mid|midi' => 'audio\/midi', 'wma' => 'audio\/wma', 'mka' => 'audio\/x-matroska', 'rtf' => 'application\/rtf', 'js' => 'application\/javascript', 'pdf' => 'application\/pdf', 'swf' => 'application\/x-shockwave-flash', 'class' => 'application\/java', 'tar' => 'application\/x-tar', 'zip' => 'application\/zip', 'gz|gzip' => 'application\/x-gzip', 'rar' => 'application\/rar', '7z' => 'application\/x-7z-compressed', 'exe' => 'application\/x-msdownload', 'doc' => 'application\/msword', 'pot|pps|ppt' => 'application\/vnd.ms-powerpoint', 'wri' => 'application\/vnd.ms-write', 'xla|xls|xlt|xlw' => 'application\/vnd.ms-excel', 'mdb' => 'application\/vnd.ms-access', 'mpp' => 'application\/vnd.ms-project', 'docx' => 'application\/vnd.openxmlformats-officedocument.wordprocessingml.document', 'docm' => 'application\/vnd.ms-word.document.macroEnabled.12', 'dotx' => 'application\/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dotm' => 'application\/vnd.ms-word.template.macroEnabled.12', 'xlsx' => 'application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlsm' => 'application\/vnd.ms-excel.sheet.macroEnabled.12', 'xlsb' => 'application\/vnd.ms-excel.sheet.binary.macroEnabled.12', 'xltx' => 'application\/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xltm' => 'application\/vnd.ms-excel.template.macroEnabled.12', 'xlam' => 'application\/vnd.ms-excel.addin.macroEnabled.12', 'pptx' => 'application\/vnd.openxmlformats-officedocument.presentationml.presentation', 'pptm' => 'application\/vnd.ms-powerpoint.presentation.macroEnabled.12', 'ppsx' => 'application\/vnd.openxmlformats-officedocument.presentationml.slideshow', 'ppsm' => 'application\/vnd.ms-powerpoint.slideshow.macroEnabled.12', 'potx' => 'application\/vnd.openxmlformats-officedocument.presentationml.template', 'potm' => 'application\/vnd.ms-powerpoint.template.macroEnabled.12', 'ppam' => 'application\/vnd.ms-powerpoint.addin.macroEnabled.12', 'sldx' => 'application\/vnd.openxmlformats-officedocument.presentationml.slide', 'sldm' => 'application\/vnd.ms-powerpoint.slide.macroEnabled.12', 'onetoc|onetoc2|onetmp|onepkg' => 'application\/onenote', 'odt' => 'application\/vnd.oasis.opendocument.text', 'odp' => 'application\/vnd.oasis.opendocument.presentation', 'ods' => 'application\/vnd.oasis.opendocument.spreadsheet', 'odg' => 'application\/vnd.oasis.opendocument.graphics', 'odc' => 'application\/vnd.oasis.opendocument.chart', 'odb' => 'application\/vnd.oasis.opendocument.database', 'odf' => 'application\/vnd.oasis.opendocument.formula', 'wp|wpd' => 'application\/wordperfect'))"}]},"'upload_mimes'":{"name":"'upload_mimes'","callers":[{"name":"get_allowed_mime_types","file":"functions.php","line":2003,"type":"filter","source":"apply_filters('upload_mimes', wp_get_mime_types())"}]},"'wp_die_ajax_handler'":{"name":"'wp_die_ajax_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2049,"type":"filter","source":"apply_filters('wp_die_ajax_handler', '_ajax_wp_die_handler')"}]},"'wp_die_xmlrpc_handler'":{"name":"'wp_die_xmlrpc_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2051,"type":"filter","source":"apply_filters('wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler')"}]},"'wp_die_handler'":{"name":"'wp_die_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2053,"type":"filter","source":"apply_filters('wp_die_handler', '_default_wp_die_handler')"}]},"'load_default_widgets'":{"name":"'load_default_widgets'","callers":[{"name":"wp_maybe_load_widgets","file":"functions.php","line":2695,"type":"filter","source":"apply_filters('load_default_widgets', true)"}]},"'deprecated_function_run'":{"name":"'deprecated_function_run'","callers":[{"name":"_deprecated_function","file":"functions.php","line":2856,"type":"action","source":"do_action('deprecated_function_run', $function, $replacement, $version)"}]},"'deprecated_function_trigger_error'":{"name":"'deprecated_function_trigger_error'","callers":[{"name":"_deprecated_function","file":"functions.php","line":2859,"type":"filter","source":"apply_filters('deprecated_function_trigger_error', true)"}]},"'deprecated_file_included'":{"name":"'deprecated_file_included'","callers":[{"name":"_deprecated_file","file":"functions.php","line":2895,"type":"action","source":"do_action('deprecated_file_included', $file, $replacement, $version, $message)"}]},"'deprecated_file_trigger_error'":{"name":"'deprecated_file_trigger_error'","callers":[{"name":"_deprecated_file","file":"functions.php","line":2898,"type":"filter","source":"apply_filters('deprecated_file_trigger_error', true)"}]},"'deprecated_argument_run'":{"name":"'deprecated_argument_run'","callers":[{"name":"_deprecated_argument","file":"functions.php","line":2940,"type":"action","source":"do_action('deprecated_argument_run', $function, $message, $version)"}]},"'deprecated_argument_trigger_error'":{"name":"'deprecated_argument_trigger_error'","callers":[{"name":"_deprecated_argument","file":"functions.php","line":2943,"type":"filter","source":"apply_filters('deprecated_argument_trigger_error', true)"}]},"'doing_it_wrong_run'":{"name":"'doing_it_wrong_run'","callers":[{"name":"_doing_it_wrong","file":"functions.php","line":2975,"type":"action","source":"do_action('doing_it_wrong_run', $function, $message, $version)"}]},"'doing_it_wrong_trigger_error'":{"name":"'doing_it_wrong_trigger_error'","callers":[{"name":"_doing_it_wrong","file":"functions.php","line":2978,"type":"filter","source":"apply_filters('doing_it_wrong_trigger_error', true)"}]},"'iis7_supports_permalinks'":{"name":"'iis7_supports_permalinks'","callers":[{"name":"iis7_supports_permalinks","file":"functions.php","line":3052,"type":"filter","source":"apply_filters('iis7_supports_permalinks', $supports_permalinks)"}]},"'global_terms_enabled'":{"name":"'global_terms_enabled'","callers":[{"name":"global_terms_enabled","file":"functions.php","line":3246,"type":"filter","source":"apply_filters('global_terms_enabled', null)"}]},"\"extra_{$context}_headers\"":{"name":"\"extra_{$context}_headers\"","callers":[{"name":"get_file_data","file":"functions.php","line":3541,"type":"filter","source":"apply_filters(\"extra_{$context}_headers\", array())"}]},"'kses_allowed_protocols'":{"name":"'kses_allowed_protocols'","callers":[{"name":"wp_allowed_protocols","file":"functions.php","line":3764,"type":"filter","source":"apply_filters('kses_allowed_protocols', $protocols)"}]},"'wp_checkdate'":{"name":"'wp_checkdate'","callers":[{"name":"wp_checkdate","file":"functions.php","line":3881,"type":"filter","source":"apply_filters('wp_checkdate', checkdate($month, $day, $year), $source_date)"}]},"'wp_print_scripts'":{"name":"'wp_print_scripts'","callers":[{"name":"wp_print_scripts","file":"functions.wp-scripts.php","line":22,"type":"action","source":"do_action('wp_print_scripts')"},{"name":"print_head_scripts","file":"script-loader.php","line":647,"type":"action","source":"do_action('wp_print_scripts')"},{"name":"wp_print_head_scripts","file":"script-loader.php","line":726,"type":"action","source":"do_action('wp_print_scripts')"}]},"'wp_print_styles'":{"name":"'wp_print_styles'","callers":[{"name":"wp_print_styles","file":"functions.wp-styles.php","line":25,"type":"action","source":"do_action('wp_print_styles')"}]},"'get_header'":{"name":"'get_header'","callers":[{"name":"get_header","file":"general-template.php","line":25,"type":"action","source":"do_action('get_header', $name)"}]},"'get_footer'":{"name":"'get_footer'","callers":[{"name":"get_footer","file":"general-template.php","line":54,"type":"action","source":"do_action('get_footer', $name)"}]},"'get_sidebar'":{"name":"'get_sidebar'","callers":[{"name":"get_sidebar","file":"general-template.php","line":83,"type":"action","source":"do_action('get_sidebar', $name)"}]},"\"get_template_part_{$slug}\"":{"name":"\"get_template_part_{$slug}\"","callers":[{"name":"get_template_part","file":"general-template.php","line":120,"type":"action","source":"do_action(\"get_template_part_{$slug}\", $slug, $name)"}]},"'get_search_form'":{"name":"'get_search_form'","callers":[{"name":"get_search_form","file":"general-template.php","line":153,"type":"action","source":"do_action('get_search_form')"},{"name":"get_search_form","file":"general-template.php","line":169,"type":"filter","source":"apply_filters('get_search_form', $form)"},{"name":"get_search_form","file":"general-template.php","line":171,"type":"filter","source":"apply_filters('get_search_form', $form)"}]},"'loginout'":{"name":"'loginout'","callers":[{"name":"wp_loginout","file":"general-template.php","line":194,"type":"filter","source":"apply_filters('loginout', $link)"},{"name":"wp_loginout","file":"general-template.php","line":196,"type":"filter","source":"apply_filters('loginout', $link)"}]},"'logout_url'":{"name":"'logout_url'","callers":[{"name":"wp_logout_url","file":"general-template.php","line":221,"type":"filter","source":"apply_filters('logout_url', $logout_url, $redirect)"}]},"'login_url'":{"name":"'login_url'","callers":[{"name":"wp_login_url","file":"general-template.php","line":246,"type":"filter","source":"apply_filters('login_url', $login_url, $redirect)"}]},"'login_form_defaults'":{"name":"'login_form_defaults'","callers":[{"name":"wp_login_form","file":"general-template.php","line":273,"type":"filter","source":"apply_filters('login_form_defaults', $defaults)"}]},"'login_form_top'":{"name":"'login_form_top'","callers":[{"name":"wp_login_form","file":"general-template.php","line":277,"type":"filter","source":"apply_filters('login_form_top', '', $args)"}]},"'login_form_middle'":{"name":"'login_form_middle'","callers":[{"name":"wp_login_form","file":"general-template.php","line":286,"type":"filter","source":"apply_filters('login_form_middle', '', $args)"}]},"'login_form_bottom'":{"name":"'login_form_bottom'","callers":[{"name":"wp_login_form","file":"general-template.php","line":292,"type":"filter","source":"apply_filters('login_form_bottom', '', $args)"}]},"'lostpassword_url'":{"name":"'lostpassword_url'","callers":[{"name":"wp_lostpassword_url","file":"general-template.php","line":320,"type":"filter","source":"apply_filters('lostpassword_url', $lostpassword_url, $redirect)"}]},"'register'":{"name":"'register'","callers":[{"name":"wp_register","file":"general-template.php","line":349,"type":"filter","source":"apply_filters('register', $link)"},{"name":"wp_register","file":"general-template.php","line":351,"type":"filter","source":"apply_filters('register', $link)"}]},"'wp_meta'":{"name":"'wp_meta'","callers":[{"name":"wp_meta","file":"general-template.php","line":365,"type":"action","source":"do_action('wp_meta')"}]},"'bloginfo_url'":{"name":"'bloginfo_url'","callers":[{"name":"get_bloginfo","file":"general-template.php","line":491,"type":"filter","source":"apply_filters('bloginfo_url', $output, $show)"}]},"'bloginfo'":{"name":"'bloginfo'","callers":[{"name":"get_bloginfo","file":"general-template.php","line":493,"type":"filter","source":"apply_filters('bloginfo', $output, $show)"}]},"'wp_title'":{"name":"'wp_title'","callers":[{"name":"wp_title","file":"general-template.php","line":602,"type":"filter","source":"apply_filters('wp_title', $title, $sep, $seplocation)"}]},"'single_post_title'":{"name":"'single_post_title'","callers":[{"name":"single_post_title","file":"general-template.php","line":634,"type":"filter","source":"apply_filters('single_post_title', $_post->post_title, $_post)"}]},"'post_type_archive_title'":{"name":"'post_type_archive_title'","callers":[{"name":"post_type_archive_title","file":"general-template.php","line":658,"type":"filter","source":"apply_filters('post_type_archive_title', $post_type_obj->labels->name)"}]},"'single_cat_title'":{"name":"'single_cat_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":732,"type":"filter","source":"apply_filters('single_cat_title', $term->name)"}]},"'single_tag_title'":{"name":"'single_tag_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":734,"type":"filter","source":"apply_filters('single_tag_title', $term->name)"}]},"'single_term_title'":{"name":"'single_term_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":736,"type":"filter","source":"apply_filters('single_term_title', $term->name)"}]},"'get_archives_link'":{"name":"'get_archives_link'","callers":[{"name":"get_archives_link","file":"general-template.php","line":839,"type":"filter","source":"apply_filters('get_archives_link', $link_html)"}]},"'getarchives_where'":{"name":"'getarchives_where'","callers":[{"name":"wp_get_archives","file":"general-template.php","line":916,"type":"filter","source":"apply_filters('getarchives_where', 'WHERE post_type = \\'post\\' AND post_status = \\'publish\\'', $r)"}]},"'getarchives_join'":{"name":"'getarchives_join'","callers":[{"name":"wp_get_archives","file":"general-template.php","line":917,"type":"filter","source":"apply_filters('getarchives_join', '', $r)"}]},"'get_calendar'":{"name":"'get_calendar'","callers":[{"name":"get_calendar","file":"general-template.php","line":1081,"type":"filter","source":"apply_filters('get_calendar', $cache[$key])"},{"name":"get_calendar","file":"general-template.php","line":1084,"type":"filter","source":"apply_filters('get_calendar', $cache[$key])"},{"name":"get_calendar","file":"general-template.php","line":1267,"type":"filter","source":"apply_filters('get_calendar', $calendar_output)"},{"name":"get_calendar","file":"general-template.php","line":1269,"type":"filter","source":"apply_filters('get_calendar', $calendar_output)"}]},"'the_date'":{"name":"'the_date'","callers":[{"name":"the_date","file":"general-template.php","line":1353,"type":"filter","source":"apply_filters('the_date', $the_date, $d, $before, $after)"}]},"'get_the_date'":{"name":"'get_the_date'","callers":[{"name":"get_the_date","file":"general-template.php","line":1384,"type":"filter","source":"apply_filters('get_the_date', $the_date, $d)"}]},"'the_modified_date'":{"name":"'the_modified_date'","callers":[{"name":"the_modified_date","file":"general-template.php","line":1401,"type":"filter","source":"apply_filters('the_modified_date', $the_modified_date, $d, $before, $after)"}]},"'get_the_modified_date'":{"name":"'get_the_modified_date'","callers":[{"name":"get_the_modified_date","file":"general-template.php","line":1423,"type":"filter","source":"apply_filters('get_the_modified_date', $the_time, $d)"}]},"'the_time'":{"name":"'the_time'","callers":[{"name":"the_time","file":"general-template.php","line":1434,"type":"filter","source":"apply_filters('the_time', get_the_time($d), $d)"}]},"'get_the_time'":{"name":"'get_the_time'","callers":[{"name":"get_the_time","file":"general-template.php","line":1453,"type":"filter","source":"apply_filters('get_the_time', $the_time, $d, $post)"}]},"'get_post_time'":{"name":"'get_post_time'","callers":[{"name":"get_post_time","file":"general-template.php","line":1476,"type":"filter","source":"apply_filters('get_post_time', $time, $d, $gmt)"}]},"'the_modified_time'":{"name":"'the_modified_time'","callers":[{"name":"the_modified_time","file":"general-template.php","line":1487,"type":"filter","source":"apply_filters('the_modified_time', get_the_modified_time($d), $d)"}]},"'get_the_modified_time'":{"name":"'get_the_modified_time'","callers":[{"name":"get_the_modified_time","file":"general-template.php","line":1503,"type":"filter","source":"apply_filters('get_the_modified_time', $the_time, $d)"}]},"'get_post_modified_time'":{"name":"'get_post_modified_time'","callers":[{"name":"get_post_modified_time","file":"general-template.php","line":1526,"type":"filter","source":"apply_filters('get_post_modified_time', $time, $d, $gmt)"}]},"'the_weekday'":{"name":"'the_weekday'","callers":[{"name":"the_weekday","file":"general-template.php","line":1539,"type":"filter","source":"apply_filters('the_weekday', $the_weekday)"}]},"'the_weekday_date'":{"name":"'the_weekday_date'","callers":[{"name":"the_weekday_date","file":"general-template.php","line":1563,"type":"filter","source":"apply_filters('the_weekday_date', $the_weekday_date, $before, $after)"}]},"'wp_head'":{"name":"'wp_head'","callers":[{"name":"wp_head","file":"general-template.php","line":1574,"type":"action","source":"do_action('wp_head')"}]},"'wp_footer'":{"name":"'wp_footer'","callers":[{"name":"wp_footer","file":"general-template.php","line":1584,"type":"action","source":"do_action('wp_footer')"}]},"'user_can_richedit'":{"name":"'user_can_richedit'","callers":[{"name":"user_can_richedit","file":"general-template.php","line":1766,"type":"filter","source":"apply_filters('user_can_richedit', $wp_rich_edit)"}]},"'wp_default_editor'":{"name":"'wp_default_editor'","callers":[{"name":"wp_default_editor","file":"general-template.php","line":1785,"type":"filter","source":"apply_filters('wp_default_editor', $r)"}]},"'get_search_query'":{"name":"'get_search_query'","callers":[{"name":"get_search_query","file":"general-template.php","line":1828,"type":"filter","source":"apply_filters('get_search_query', get_query_var('s'))"}]},"'the_search_query'":{"name":"'the_search_query'","callers":[{"name":"the_search_query","file":"general-template.php","line":1844,"type":"filter","source":"apply_filters('the_search_query', get_search_query(false))"}]},"'language_attributes'":{"name":"'language_attributes'","callers":[{"name":"language_attributes","file":"general-template.php","line":1873,"type":"filter","source":"apply_filters('language_attributes', $output)"}]},"'paginate_links'":{"name":"'paginate_links'","callers":[{"name":"paginate_links","file":"general-template.php","line":1961,"type":"filter","source":"apply_filters('paginate_links', $link)"},{"name":"paginate_links","file":"general-template.php","line":1975,"type":"filter","source":"apply_filters('paginate_links', $link)"},{"name":"paginate_links","file":"general-template.php","line":1989,"type":"filter","source":"apply_filters('paginate_links', $link)"}]},"'wp_admin_css_uri'":{"name":"'wp_admin_css_uri'","callers":[{"name":"wp_admin_css_uri","file":"general-template.php","line":2061,"type":"filter","source":"apply_filters('wp_admin_css_uri', $_file, $file)"}]},"'wp_admin_css'":{"name":"'wp_admin_css'","callers":[{"name":"wp_admin_css","file":"general-template.php","line":2102,"type":"filter","source":"apply_filters('wp_admin_css', '\n', $file)"},{"name":"wp_admin_css","file":"general-template.php","line":2104,"type":"filter","source":"apply_filters('wp_admin_css', '\n', \"{$file}-rtl\")"}]},"'wp_generator_type'":{"name":"'wp_generator_type'","callers":[{"name":"wp_generator","file":"general-template.php","line":2130,"type":"filter","source":"apply_filters('wp_generator_type', 'xhtml')"}]},"'the_generator'":{"name":"'the_generator'","callers":[{"name":"the_generator","file":"general-template.php","line":2145,"type":"filter","source":"apply_filters('the_generator', get_the_generator($type), $type)"}]},"\"get_the_generator_{$type}\"":{"name":"\"get_the_generator_{$type}\"","callers":[{"name":"get_the_generator","file":"general-template.php","line":2211,"type":"filter","source":"apply_filters(\"get_the_generator_{$type}\", $gen, $type)"}]},"'http_origin'":{"name":"'http_origin'","callers":[{"name":"get_http_origin","file":"http.php","line":238,"type":"filter","source":"apply_filters('http_origin', $origin)"}]},"'allowed_http_origins'":{"name":"'allowed_http_origins'","callers":[{"name":"get_allowed_http_origins","file":"http.php","line":260,"type":"filter","source":"apply_filters('allowed_http_origins', $allowed_origins)"}]},"'allowed_http_origin'":{"name":"'allowed_http_origin'","callers":[{"name":"is_allowed_http_origin","file":"http.php","line":280,"type":"filter","source":"apply_filters('allowed_http_origin', $origin, $origin_arg)"}]},"'wp_kses_allowed_html'":{"name":"'wp_kses_allowed_html'","callers":[{"name":"wp_kses_allowed_html","file":"kses.php","line":499,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $context, 'explicit')"},{"name":"wp_kses_allowed_html","file":"kses.php","line":503,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedposttags, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":509,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $tags, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":512,"type":"filter","source":"apply_filters('wp_kses_allowed_html', array(), $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":515,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedentitynames, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":519,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedtags, $context)"}]},"'pre_kses'":{"name":"'pre_kses'","callers":[{"name":"wp_kses_hook","file":"kses.php","line":537,"type":"filter","source":"apply_filters('pre_kses', $string, $allowed_html, $allowed_protocols)"}]},"'safe_style_css'":{"name":"'safe_style_css'","callers":[{"name":"safecss_filter_attr","file":"kses.php","line":1411,"type":"filter","source":"apply_filters('safe_style_css', array('text-align', 'margin', 'color', 'float', 'border', 'background', 'background-color', 'border-bottom', 'border-bottom-color', 'border-bottom-style', 'border-bottom-width', 'border-collapse', 'border-color', 'border-left', 'border-left-color', 'border-left-style', 'border-left-width', 'border-right', 'border-right-color', 'border-right-style', 'border-right-width', 'border-spacing', 'border-style', 'border-top', 'border-top-color', 'border-top-style', 'border-top-width', 'border-width', 'caption-side', 'clear', 'cursor', 'direction', 'font', 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', 'height', 'letter-spacing', 'line-height', 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'overflow', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'text-decoration', 'text-indent', 'vertical-align', 'width'))"}]},"'locale'":{"name":"'locale'","callers":[{"name":"get_locale","file":"l10n.php","line":32,"type":"filter","source":"apply_filters('locale', $locale)"},{"name":"get_locale","file":"l10n.php","line":51,"type":"filter","source":"apply_filters('locale', $locale)"}]},"'gettext'":{"name":"'gettext'","callers":[{"name":"translate","file":"l10n.php","line":69,"type":"filter","source":"apply_filters('gettext', $translations->translate($text), $text, $domain)"}]},"'gettext_with_context'":{"name":"'gettext_with_context'","callers":[{"name":"translate_with_gettext_context","file":"l10n.php","line":82,"type":"filter","source":"apply_filters('gettext_with_context', $translations->translate($text, $context), $text, $context, $domain)"}]},"'ngettext'":{"name":"'ngettext'","callers":[{"name":"_n","file":"l10n.php","line":241,"type":"filter","source":"apply_filters('ngettext', $translation, $single, $plural, $number, $domain)"}]},"'ngettext_with_context'":{"name":"'ngettext_with_context'","callers":[{"name":"_nx","file":"l10n.php","line":254,"type":"filter","source":"apply_filters('ngettext_with_context', $translation, $single, $plural, $number, $context, $domain)"}]},"'override_load_textdomain'":{"name":"'override_load_textdomain'","callers":[{"name":"load_textdomain","file":"l10n.php","line":329,"type":"filter","source":"apply_filters('override_load_textdomain', false, $domain, $mofile)"}]},"'load_textdomain'":{"name":"'load_textdomain'","callers":[{"name":"load_textdomain","file":"l10n.php","line":335,"type":"action","source":"do_action('load_textdomain', $domain, $mofile)"}]},"'load_textdomain_mofile'":{"name":"'load_textdomain_mofile'","callers":[{"name":"load_textdomain","file":"l10n.php","line":337,"type":"filter","source":"apply_filters('load_textdomain_mofile', $mofile, $domain)"}]},"'override_unload_textdomain'":{"name":"'override_unload_textdomain'","callers":[{"name":"unload_textdomain","file":"l10n.php","line":362,"type":"filter","source":"apply_filters('override_unload_textdomain', false, $domain)"}]},"'unload_textdomain'":{"name":"'unload_textdomain'","callers":[{"name":"unload_textdomain","file":"l10n.php","line":367,"type":"action","source":"do_action('unload_textdomain', $domain)"}]},"'plugin_locale'":{"name":"'plugin_locale'","callers":[{"name":"load_plugin_textdomain","file":"l10n.php","line":417,"type":"filter","source":"apply_filters('plugin_locale', get_locale(), $domain)"},{"name":"load_muplugin_textdomain","file":"l10n.php","line":442,"type":"filter","source":"apply_filters('plugin_locale', get_locale(), $domain)"}]},"'theme_locale'":{"name":"'theme_locale'","callers":[{"name":"load_theme_textdomain","file":"l10n.php","line":460,"type":"filter","source":"apply_filters('theme_locale', get_locale(), $domain)"}]},"'user_trailingslashit'":{"name":"'user_trailingslashit'","callers":[{"name":"user_trailingslashit","file":"link-template.php","line":43,"type":"filter","source":"apply_filters('user_trailingslashit', $string, $type_of_url)"}]},"'pre_post_link'":{"name":"'pre_post_link'","callers":[{"name":"get_permalink","file":"link-template.php","line":115,"type":"filter","source":"apply_filters('pre_post_link', $permalink, $post, $leavename)"}]},"'post_link_category'":{"name":"'post_link_category'","callers":[{"name":"get_permalink","file":"link-template.php","line":125,"type":"filter","source":"apply_filters('post_link_category', $cats[0], $cats, $post)"}]},"'post_link'":{"name":"'post_link'","callers":[{"name":"get_permalink","file":"link-template.php","line":165,"type":"filter","source":"apply_filters('post_link', $permalink, $post, $leavename)"}]},"'post_type_link'":{"name":"'post_type_link'","callers":[{"name":"get_post_permalink","file":"link-template.php","line":209,"type":"filter","source":"apply_filters('post_type_link', $post_link, $post, $leavename, $sample)"}]},"'page_link'":{"name":"'page_link'","callers":[{"name":"get_page_link","file":"link-template.php","line":248,"type":"filter","source":"apply_filters('page_link', $link, $post->ID, $sample)"}]},"'_get_page_link'":{"name":"'_get_page_link'","callers":[{"name":"_get_page_link","file":"link-template.php","line":284,"type":"filter","source":"apply_filters('_get_page_link', $link, $post->ID)"}]},"'attachment_link'":{"name":"'attachment_link'","callers":[{"name":"get_attachment_link","file":"link-template.php","line":327,"type":"filter","source":"apply_filters('attachment_link', $link, $post->ID)"}]},"'year_link'":{"name":"'year_link'","callers":[{"name":"get_year_link","file":"link-template.php","line":345,"type":"filter","source":"apply_filters('year_link', home_url(user_trailingslashit($yearlink, 'year')), $year)"},{"name":"get_year_link","file":"link-template.php","line":347,"type":"filter","source":"apply_filters('year_link', home_url('?m=' . $year), $year)"}]},"'month_link'":{"name":"'month_link'","callers":[{"name":"get_month_link","file":"link-template.php","line":370,"type":"filter","source":"apply_filters('month_link', home_url(user_trailingslashit($monthlink, 'month')), $year, $month)"},{"name":"get_month_link","file":"link-template.php","line":372,"type":"filter","source":"apply_filters('month_link', home_url('?m=' . $year . zeroise($month, 2)), $year, $month)"}]},"'day_link'":{"name":"'day_link'","callers":[{"name":"get_day_link","file":"link-template.php","line":400,"type":"filter","source":"apply_filters('day_link', home_url(user_trailingslashit($daylink, 'day')), $year, $month, $day)"},{"name":"get_day_link","file":"link-template.php","line":402,"type":"filter","source":"apply_filters('day_link', home_url('?m=' . $year . zeroise($month, 2) . zeroise($day, 2)), $year, $month, $day)"}]},"'the_feed_link'":{"name":"'the_feed_link'","callers":[{"name":"the_feed_link","file":"link-template.php","line":416,"type":"filter","source":"apply_filters('the_feed_link', $link, $feed)"}]},"'feed_link'":{"name":"'feed_link'","callers":[{"name":"get_feed_link","file":"link-template.php","line":453,"type":"filter","source":"apply_filters('feed_link', $output, $feed)"}]},"'post_comments_feed_link'":{"name":"'post_comments_feed_link'","callers":[{"name":"get_post_comments_feed_link","file":"link-template.php","line":492,"type":"filter","source":"apply_filters('post_comments_feed_link', $url)"}]},"'post_comments_feed_link_html'":{"name":"'post_comments_feed_link_html'","callers":[{"name":"post_comments_feed_link","file":"link-template.php","line":516,"type":"filter","source":"apply_filters('post_comments_feed_link_html', \"{$link_text}<\/a>\", $post_id, $feed)"}]},"'author_feed_link'":{"name":"'author_feed_link'","callers":[{"name":"get_author_feed_link","file":"link-template.php","line":552,"type":"filter","source":"apply_filters('author_feed_link', $link, $feed)"}]},"'category_feed_link'":{"name":"'category_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":622,"type":"filter","source":"apply_filters('category_feed_link', $link, $feed)"}]},"'tag_feed_link'":{"name":"'tag_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":624,"type":"filter","source":"apply_filters('tag_feed_link', $link, $feed)"}]},"'taxonomy_feed_link'":{"name":"'taxonomy_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":626,"type":"filter","source":"apply_filters('taxonomy_feed_link', $link, $feed, $taxonomy)"}]},"'get_edit_tag_link'":{"name":"'get_edit_tag_link'","callers":[{"name":"get_edit_tag_link","file":"link-template.php","line":654,"type":"filter","source":"apply_filters('get_edit_tag_link', get_edit_term_link($tag_id, $taxonomy))"}]},"'edit_tag_link'":{"name":"'edit_tag_link'","callers":[{"name":"edit_tag_link","file":"link-template.php","line":670,"type":"filter","source":"apply_filters('edit_tag_link', $link)"}]},"'get_edit_term_link'":{"name":"'get_edit_term_link'","callers":[{"name":"get_edit_term_link","file":"link-template.php","line":701,"type":"filter","source":"apply_filters('get_edit_term_link', $location, $term_id, $taxonomy, $object_type)"}]},"'edit_term_link'":{"name":"'edit_term_link'","callers":[{"name":"edit_term_link","file":"link-template.php","line":728,"type":"filter","source":"apply_filters('edit_term_link', $link, $term->term_id)"}]},"'search_link'":{"name":"'search_link'","callers":[{"name":"get_search_link","file":"link-template.php","line":762,"type":"filter","source":"apply_filters('search_link', $link, $search)"}]},"'search_feed_link'":{"name":"'search_feed_link'","callers":[{"name":"get_search_feed_link","file":"link-template.php","line":790,"type":"filter","source":"apply_filters('search_feed_link', $link, $feed, 'posts')"},{"name":"get_search_comments_feed_link","file":"link-template.php","line":819,"type":"filter","source":"apply_filters('search_feed_link', $link, $feed, 'comments')"}]},"'post_type_archive_link'":{"name":"'post_type_archive_link'","callers":[{"name":"get_post_type_archive_link","file":"link-template.php","line":851,"type":"filter","source":"apply_filters('post_type_archive_link', $link, $post_type)"}]},"'post_type_archive_feed_link'":{"name":"'post_type_archive_feed_link'","callers":[{"name":"get_post_type_archive_feed_link","file":"link-template.php","line":880,"type":"filter","source":"apply_filters('post_type_archive_feed_link', $link, $feed)"}]},"'get_edit_post_link'":{"name":"'get_edit_post_link'","callers":[{"name":"get_edit_post_link","file":"link-template.php","line":911,"type":"filter","source":"apply_filters('get_edit_post_link', admin_url(sprintf($post_type_object->_edit_link . $action, $post->ID)), $post->ID, $context)"}]},"'edit_post_link'":{"name":"'edit_post_link'","callers":[{"name":"edit_post_link","file":"link-template.php","line":936,"type":"filter","source":"apply_filters('edit_post_link', $link, $post->ID)"}]},"'get_delete_post_link'":{"name":"'get_delete_post_link'","callers":[{"name":"get_delete_post_link","file":"link-template.php","line":969,"type":"filter","source":"apply_filters('get_delete_post_link', wp_nonce_url($delete_link, \"{$action}-post_{$post->ID}\"), $post->ID, $force_delete)"}]},"'get_edit_comment_link'":{"name":"'get_edit_comment_link'","callers":[{"name":"get_edit_comment_link","file":"link-template.php","line":987,"type":"filter","source":"apply_filters('get_edit_comment_link', $location)"}]},"'edit_comment_link'":{"name":"'edit_comment_link'","callers":[{"name":"edit_comment_link","file":"link-template.php","line":1010,"type":"filter","source":"apply_filters('edit_comment_link', $link, $comment->comment_ID)"}]},"'get_edit_bookmark_link'":{"name":"'get_edit_bookmark_link'","callers":[{"name":"get_edit_bookmark_link","file":"link-template.php","line":1028,"type":"filter","source":"apply_filters('get_edit_bookmark_link', $location, $link->link_id)"}]},"'edit_bookmark_link'":{"name":"'edit_bookmark_link'","callers":[{"name":"edit_bookmark_link","file":"link-template.php","line":1051,"type":"filter","source":"apply_filters('edit_bookmark_link', $link, $bookmark->link_id)"}]},"'get_edit_user_link'":{"name":"'get_edit_user_link'","callers":[{"name":"get_edit_user_link","file":"link-template.php","line":1079,"type":"filter","source":"apply_filters('get_edit_user_link', $link, $user->ID)"}]},"\"get_{$adjacent}_post_join\"":{"name":"\"get_{$adjacent}_post_join\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1173,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_join\", $join, $in_same_cat, $excluded_categories)"}]},"\"get_{$adjacent}_post_where\"":{"name":"\"get_{$adjacent}_post_where\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1174,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_where\", $wpdb->prepare(\"WHERE p.post_date {$op} %s AND p.post_type = %s AND p.post_status = 'publish' {$posts_in_ex_cats_sql}\", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories)"}]},"\"get_{$adjacent}_post_sort\"":{"name":"\"get_{$adjacent}_post_sort\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1175,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_sort\", \"ORDER BY p.post_date {$order} LIMIT 1\")"}]},"\"{$adjacent}_post_rel_link\"":{"name":"\"{$adjacent}_post_rel_link\"","callers":[{"name":"get_adjacent_post_rel_link","file":"link-template.php","line":1236,"type":"filter","source":"apply_filters(\"{$adjacent}_post_rel_link\", $link)"}]},"\"{$adjacent}_post_link\"":{"name":"\"{$adjacent}_post_link\"","callers":[{"name":"adjacent_post_link","file":"link-template.php","line":1405,"type":"filter","source":"apply_filters(\"{$adjacent}_post_link\", $output, $format, $link, $post)"}]},"'get_pagenum_link'":{"name":"'get_pagenum_link'","callers":[{"name":"get_pagenum_link","file":"link-template.php","line":1467,"type":"filter","source":"apply_filters('get_pagenum_link', $result)"}]},"'next_posts_link_attributes'":{"name":"'next_posts_link_attributes'","callers":[{"name":"get_next_posts_link","file":"link-template.php","line":1538,"type":"filter","source":"apply_filters('next_posts_link_attributes', '')"}]},"'previous_posts_link_attributes'":{"name":"'previous_posts_link_attributes'","callers":[{"name":"get_previous_posts_link","file":"link-template.php","line":1609,"type":"filter","source":"apply_filters('previous_posts_link_attributes', '')"}]},"'get_comments_pagenum_link'":{"name":"'get_comments_pagenum_link'","callers":[{"name":"get_comments_pagenum_link","file":"link-template.php","line":1710,"type":"filter","source":"apply_filters('get_comments_pagenum_link', $result)"}]},"'next_comments_link_attributes'":{"name":"'next_comments_link_attributes'","callers":[{"name":"get_next_comments_link","file":"link-template.php","line":1746,"type":"filter","source":"apply_filters('next_comments_link_attributes', '')"}]},"'previous_comments_link_attributes'":{"name":"'previous_comments_link_attributes'","callers":[{"name":"get_previous_comments_link","file":"link-template.php","line":1783,"type":"filter","source":"apply_filters('previous_comments_link_attributes', '')"}]},"'shortcut_link'":{"name":"'shortcut_link'","callers":[{"name":"get_shortcut_link","file":"link-template.php","line":1864,"type":"filter","source":"apply_filters('shortcut_link', $link)"}]},"'home_url'":{"name":"'home_url'","callers":[{"name":"get_home_url","file":"link-template.php","line":1925,"type":"filter","source":"apply_filters('home_url', $url, $path, $orig_scheme, $blog_id)"}]},"'site_url'":{"name":"'site_url'","callers":[{"name":"get_site_url","file":"link-template.php","line":1977,"type":"filter","source":"apply_filters('site_url', $url, $path, $scheme, $blog_id)"}]},"'admin_url'":{"name":"'admin_url'","callers":[{"name":"get_admin_url","file":"link-template.php","line":2011,"type":"filter","source":"apply_filters('admin_url', $url, $path, $blog_id)"}]},"'includes_url'":{"name":"'includes_url'","callers":[{"name":"includes_url","file":"link-template.php","line":2029,"type":"filter","source":"apply_filters('includes_url', $url, $path)"}]},"'content_url'":{"name":"'content_url'","callers":[{"name":"content_url","file":"link-template.php","line":2047,"type":"filter","source":"apply_filters('content_url', $url, $path)"}]},"'plugins_url'":{"name":"'plugins_url'","callers":[{"name":"plugins_url","file":"link-template.php","line":2086,"type":"filter","source":"apply_filters('plugins_url', $url, $path, $plugin)"}]},"'network_site_url'":{"name":"'network_site_url'","callers":[{"name":"network_site_url","file":"link-template.php","line":2117,"type":"filter","source":"apply_filters('network_site_url', $url, $path, $scheme)"}]},"'network_home_url'":{"name":"'network_home_url'","callers":[{"name":"network_home_url","file":"link-template.php","line":2153,"type":"filter","source":"apply_filters('network_home_url', $url, $path, $orig_scheme)"}]},"'network_admin_url'":{"name":"'network_admin_url'","callers":[{"name":"network_admin_url","file":"link-template.php","line":2175,"type":"filter","source":"apply_filters('network_admin_url', $url, $path)"}]},"'user_admin_url'":{"name":"'user_admin_url'","callers":[{"name":"user_admin_url","file":"link-template.php","line":2194,"type":"filter","source":"apply_filters('user_admin_url', $url, $path)"}]},"'set_url_scheme'":{"name":"'set_url_scheme'","callers":[{"name":"set_url_scheme","file":"link-template.php","line":2243,"type":"filter","source":"apply_filters('set_url_scheme', $url, $scheme, $orig_scheme)"}]},"'user_dashboard_url'":{"name":"'user_dashboard_url'","callers":[{"name":"get_dashboard_url","file":"link-template.php","line":2281,"type":"filter","source":"apply_filters('user_dashboard_url', $url, $user_id, $path, $scheme)"}]},"'edit_profile_url'":{"name":"'edit_profile_url'","callers":[{"name":"get_edit_profile_url","file":"link-template.php","line":2303,"type":"filter","source":"apply_filters('edit_profile_url', $url, $user, $scheme)"}]},"'pre_get_shortlink'":{"name":"'pre_get_shortlink'","callers":[{"name":"wp_get_shortlink","file":"link-template.php","line":2345,"type":"filter","source":"apply_filters('pre_get_shortlink', false, $id, $context, $allow_slugs)"}]},"'get_shortlink'":{"name":"'get_shortlink'","callers":[{"name":"wp_get_shortlink","file":"link-template.php","line":2367,"type":"filter","source":"apply_filters('get_shortlink', $shortlink, $id, $context, $allow_slugs)"}]},"'the_shortlink'":{"name":"'the_shortlink'","callers":[{"name":"the_shortlink","file":"link-template.php","line":2436,"type":"filter","source":"apply_filters('the_shortlink', $link, $shortlink, $text, $title)"}]},"'shutdown'":{"name":"'shutdown'","callers":[{"name":"shutdown_action_hook","file":"load.php","line":556,"type":"action","source":"do_action('shutdown')"}]},"'upload_ui_over_quota'":{"name":"'upload_ui_over_quota'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":54,"type":"action","source":"do_action('upload_ui_over_quota')"}]},"'pre-upload-ui'":{"name":"'pre-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":66,"type":"action","source":"do_action('pre-upload-ui')"}]},"'pre-plupload-upload-ui'":{"name":"'pre-plupload-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":67,"type":"action","source":"do_action('pre-plupload-upload-ui')"}]},"'post-plupload-upload-ui'":{"name":"'post-plupload-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":70,"type":"action","source":"do_action('post-plupload-upload-ui')"},{"name":"wp_print_media_templates","file":"media-template.php","line":73,"type":"action","source":"do_action('post-plupload-upload-ui')"}]},"'post-upload-ui'":{"name":"'post-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":103,"type":"action","source":"do_action('post-upload-ui')"}]},"'image_size_names_choose'":{"name":"'image_size_names_choose'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":318,"type":"filter","source":"apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')))"},{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1364,"type":"filter","source":"apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')))"}]},"'print_media_templates'":{"name":"'print_media_templates'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":466,"type":"action","source":"do_action('print_media_templates')"}]},"'editor_max_image_size'":{"name":"'editor_max_image_size'","callers":[{"name":"image_constrain_size_for_editor","file":"media.php","line":81,"type":"filter","source":"apply_filters('editor_max_image_size', array($max_width, $max_height), $size, $context)"}]},"'image_downsize'":{"name":"'image_downsize'","callers":[{"name":"image_downsize","file":"media.php","line":148,"type":"filter","source":"apply_filters('image_downsize', false, $id, $size)"},{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1377,"type":"filter","source":"apply_filters('image_downsize', false, $attachment->ID, $size)"}]},"'get_image_tag_class'":{"name":"'get_image_tag_class'","callers":[{"name":"get_image_tag","file":"media.php","line":236,"type":"filter","source":"apply_filters('get_image_tag_class', $class, $id, $align, $size)"}]},"'get_image_tag'":{"name":"'get_image_tag'","callers":[{"name":"get_image_tag","file":"media.php","line":240,"type":"filter","source":"apply_filters('get_image_tag', $html, $id, $alt, $title, $align, $size)"}]},"'image_resize_dimensions'":{"name":"'image_resize_dimensions'","callers":[{"name":"image_resize_dimensions","file":"media.php","line":328,"type":"filter","source":"apply_filters('image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop)"}]},"'intermediate_image_sizes'":{"name":"'intermediate_image_sizes'","callers":[{"name":"get_intermediate_image_sizes","file":"media.php","line":493,"type":"filter","source":"apply_filters('intermediate_image_sizes', $image_sizes)"}]},"'wp_get_attachment_image_attributes'":{"name":"'wp_get_attachment_image_attributes'","callers":[{"name":"wp_get_attachment_image","file":"media.php","line":565,"type":"filter","source":"apply_filters('wp_get_attachment_image_attributes', $attr, $attachment)"}]},"'img_caption_shortcode'":{"name":"'img_caption_shortcode'","callers":[{"name":"img_caption_shortcode","file":"media.php","line":638,"type":"filter","source":"apply_filters('img_caption_shortcode', '', $attr, $content)"}]},"'post_gallery'":{"name":"'post_gallery'","callers":[{"name":"gallery_shortcode","file":"media.php","line":685,"type":"filter","source":"apply_filters('post_gallery', '', $attr)"}]},"'use_default_gallery_style'":{"name":"'use_default_gallery_style'","callers":[{"name":"gallery_shortcode","file":"media.php","line":745,"type":"filter","source":"apply_filters('use_default_gallery_style', true)"}]},"'gallery_style'":{"name":"'gallery_style'","callers":[{"name":"gallery_shortcode","file":"media.php","line":767,"type":"filter","source":"apply_filters('gallery_style', $gallery_style . '\n\t\t' . $gallery_div)"}]},"\"{$adjacent}_image_link\"":{"name":"\"{$adjacent}_image_link\"","callers":[{"name":"adjacent_image_link","file":"media.php","line":846,"type":"filter","source":"apply_filters(\"{$adjacent}_image_link\", $output, $attachment_id, $size, $text)"}]},"'embed_defaults'":{"name":"'embed_defaults'","callers":[{"name":"wp_embed_defaults","file":"media.php","line":981,"type":"filter","source":"apply_filters('embed_defaults', compact('width', 'height'))"}]},"'load_default_embeds'":{"name":"'load_default_embeds'","callers":[{"name":"wp_maybe_load_embeds","file":"media.php","line":1074,"type":"filter","source":"apply_filters('load_default_embeds', true)"}]},"'embed_googlevideo'":{"name":"'embed_googlevideo'","callers":[{"name":"wp_embed_handler_googlevideo","file":"media.php","line":1100,"type":"filter","source":"apply_filters('embed_googlevideo', '', $matches, $attr, $url, $rawattr)"}]},"'upload_size_limit'":{"name":"'upload_size_limit'","callers":[{"name":"wp_max_upload_size","file":"media.php","line":1149,"type":"filter","source":"apply_filters('upload_size_limit', min($u_bytes, $p_bytes), $u_bytes, $p_bytes)"}]},"'wp_image_editors'":{"name":"'wp_image_editors'","callers":[{"name":"_wp_image_editor_choose","file":"media.php","line":1217,"type":"filter","source":"apply_filters('wp_image_editors', array('WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'))"}]},"'plupload_default_settings'":{"name":"'plupload_default_settings'","callers":[{"name":"wp_plupload_default_settings","file":"media.php","line":1274,"type":"filter","source":"apply_filters('plupload_default_settings', $defaults)"}]},"'plupload_default_params'":{"name":"'plupload_default_params'","callers":[{"name":"wp_plupload_default_settings","file":"media.php","line":1280,"type":"filter","source":"apply_filters('plupload_default_params', $params)"}]},"'wp_prepare_attachment_for_js'":{"name":"'wp_prepare_attachment_for_js'","callers":[{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1419,"type":"filter","source":"apply_filters('wp_prepare_attachment_for_js', $response, $attachment, $meta)"}]},"'media_upload_tabs'":{"name":"'media_upload_tabs'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1449,"type":"filter","source":"apply_filters('media_upload_tabs', $tabs)"}]},"'media_view_settings'":{"name":"'media_view_settings'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1535,"type":"filter","source":"apply_filters('media_view_settings', $settings, $post)"}]},"'media_view_strings'":{"name":"'media_view_strings'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1536,"type":"filter","source":"apply_filters('media_view_strings', $strings, $post)"}]},"'wp_enqueue_media'":{"name":"'wp_enqueue_media'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1550,"type":"action","source":"do_action('wp_enqueue_media')"}]},"\"add_{$meta_type}_metadata\"":{"name":"\"add_{$meta_type}_metadata\"","callers":[{"name":"add_metadata","file":"meta.php","line":50,"type":"filter","source":"apply_filters(\"add_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $unique)"}]},"\"add_{$meta_type}_meta\"":{"name":"\"add_{$meta_type}_meta\"","callers":[{"name":"add_metadata","file":"meta.php","line":62,"type":"action","source":"do_action(\"add_{$meta_type}_meta\", $object_id, $meta_key, $_meta_value)"}]},"\"added_{$meta_type}_meta\"":{"name":"\"added_{$meta_type}_meta\"","callers":[{"name":"add_metadata","file":"meta.php","line":77,"type":"action","source":"do_action(\"added_{$meta_type}_meta\", $mid, $object_id, $meta_key, $_meta_value)"}]},"\"update_{$meta_type}_metadata\"":{"name":"\"update_{$meta_type}_metadata\"","callers":[{"name":"update_metadata","file":"meta.php","line":122,"type":"filter","source":"apply_filters(\"update_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $prev_value)"}]},"\"update_{$meta_type}_meta\"":{"name":"\"update_{$meta_type}_meta\"","callers":[{"name":"update_metadata","file":"meta.php","line":149,"type":"action","source":"do_action(\"update_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":432,"type":"action","source":"do_action(\"update_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"}]},"'update_postmeta'":{"name":"'update_postmeta'","callers":[{"name":"update_metadata","file":"meta.php","line":152,"type":"action","source":"do_action('update_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":435,"type":"action","source":"do_action('update_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"}]},"\"updated_{$meta_type}_meta\"":{"name":"\"updated_{$meta_type}_meta\"","callers":[{"name":"update_metadata","file":"meta.php","line":158,"type":"action","source":"do_action(\"updated_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":443,"type":"action","source":"do_action(\"updated_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"}]},"'updated_postmeta'":{"name":"'updated_postmeta'","callers":[{"name":"update_metadata","file":"meta.php","line":161,"type":"action","source":"do_action('updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":446,"type":"action","source":"do_action('updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"}]},"\"delete_{$meta_type}_metadata\"":{"name":"\"delete_{$meta_type}_metadata\"","callers":[{"name":"delete_metadata","file":"meta.php","line":202,"type":"filter","source":"apply_filters(\"delete_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $delete_all)"}]},"\"delete_{$meta_type}_meta\"":{"name":"\"delete_{$meta_type}_meta\"","callers":[{"name":"delete_metadata","file":"meta.php","line":224,"type":"action","source":"do_action(\"delete_{$meta_type}_meta\", $meta_ids, $object_id, $meta_key, $_meta_value)"},{"name":"delete_metadata_by_mid","file":"meta.php","line":488,"type":"action","source":"do_action(\"delete_{$meta_type}_meta\", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value)"}]},"'delete_postmeta'":{"name":"'delete_postmeta'","callers":[{"name":"delete_metadata","file":"meta.php","line":228,"type":"action","source":"do_action('delete_postmeta', $meta_ids)"}]},"\"deleted_{$meta_type}_meta\"":{"name":"\"deleted_{$meta_type}_meta\"","callers":[{"name":"delete_metadata","file":"meta.php","line":245,"type":"action","source":"do_action(\"deleted_{$meta_type}_meta\", $meta_ids, $object_id, $meta_key, $_meta_value)"},{"name":"delete_metadata_by_mid","file":"meta.php","line":500,"type":"action","source":"do_action(\"deleted_{$meta_type}_meta\", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value)"}]},"'deleted_postmeta'":{"name":"'deleted_postmeta'","callers":[{"name":"delete_metadata","file":"meta.php","line":249,"type":"action","source":"do_action('deleted_postmeta', $meta_ids)"}]},"\"get_{$meta_type}_metadata\"":{"name":"\"get_{$meta_type}_metadata\"","callers":[{"name":"get_metadata","file":"meta.php","line":274,"type":"filter","source":"apply_filters(\"get_{$meta_type}_metadata\", null, $object_id, $meta_key, $single)"},{"name":"metadata_exists","file":"meta.php","line":322,"type":"filter","source":"apply_filters(\"get_{$meta_type}_metadata\", null, $object_id, $meta_key, true)"}]},"\"delete_{$meta_type}meta\"":{"name":"\"delete_{$meta_type}meta\"","callers":[{"name":"delete_metadata_by_mid","file":"meta.php","line":492,"type":"action","source":"do_action(\"delete_{$meta_type}meta\", $meta_id)"}]},"\"deleted_{$meta_type}meta\"":{"name":"\"deleted_{$meta_type}meta\"","callers":[{"name":"delete_metadata_by_mid","file":"meta.php","line":504,"type":"action","source":"do_action(\"deleted_{$meta_type}meta\", $meta_id)"}]},"'is_protected_meta'":{"name":"'is_protected_meta'","callers":[{"name":"is_protected_meta","file":"meta.php","line":865,"type":"filter","source":"apply_filters('is_protected_meta', $protected, $meta_key, $meta_type)"}]},"\"sanitize_{$meta_type}_meta_{$meta_key}\"":{"name":"\"sanitize_{$meta_type}_meta_{$meta_key}\"","callers":[{"name":"sanitize_meta","file":"meta.php","line":879,"type":"filter","source":"apply_filters(\"sanitize_{$meta_type}_meta_{$meta_key}\", $meta_value, $meta_key, $meta_type)"}]},"'wpmu_blog_updated'":{"name":"'wpmu_blog_updated'","callers":[{"name":"wpmu_update_blogs_date","file":"ms-blogs.php","line":21,"type":"action","source":"do_action('wpmu_blog_updated', $wpdb->blogid)"}]},"'blog_details'":{"name":"'blog_details'","callers":[{"name":"get_blog_details","file":"ms-blogs.php","line":237,"type":"filter","source":"apply_filters('blog_details', $details)"}]},"'refresh_blog_details'":{"name":"'refresh_blog_details'","callers":[{"name":"refresh_blog_details","file":"ms-blogs.php","line":260,"type":"action","source":"do_action('refresh_blog_details', $blog_id)"}]},"'make_spam_blog'":{"name":"'make_spam_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":303,"type":"action","source":"do_action('make_spam_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":683,"type":"action","source":"do_action('make_spam_blog', $blog_id)"}]},"'make_ham_blog'":{"name":"'make_ham_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":305,"type":"action","source":"do_action('make_ham_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":683,"type":"action","source":"do_action('make_ham_blog', $blog_id)"}]},"'mature_blog'":{"name":"'mature_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":311,"type":"action","source":"do_action('mature_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":685,"type":"action","source":"do_action('mature_blog', $blog_id)"}]},"'unmature_blog'":{"name":"'unmature_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":313,"type":"action","source":"do_action('unmature_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":685,"type":"action","source":"do_action('unmature_blog', $blog_id)"}]},"'archive_blog'":{"name":"'archive_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":319,"type":"action","source":"do_action('archive_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":687,"type":"action","source":"do_action('archive_blog', $blog_id)"}]},"'unarchive_blog'":{"name":"'unarchive_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":321,"type":"action","source":"do_action('unarchive_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":687,"type":"action","source":"do_action('unarchive_blog', $blog_id)"}]},"'make_delete_blog'":{"name":"'make_delete_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":327,"type":"action","source":"do_action('make_delete_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":689,"type":"action","source":"do_action('make_delete_blog', $blog_id)"}]},"'make_undelete_blog'":{"name":"'make_undelete_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":329,"type":"action","source":"do_action('make_undelete_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":689,"type":"action","source":"do_action('make_undelete_blog', $blog_id)"}]},"'blog_option_' . $option":{"name":"'blog_option_' . $option","callers":[{"name":"get_blog_option","file":"ms-blogs.php","line":393,"type":"filter","source":"apply_filters('blog_option_' . $option, $value, $id)"}]},"'switch_blog'":{"name":"'switch_blog'","callers":[{"name":"switch_to_blog","file":"ms-blogs.php","line":513,"type":"action","source":"do_action('switch_blog', $new_blog, $new_blog)"},{"name":"switch_to_blog","file":"ms-blogs.php","line":550,"type":"action","source":"do_action('switch_blog', $new_blog, $prev_blog_id)"},{"name":"restore_current_blog","file":"ms-blogs.php","line":573,"type":"action","source":"do_action('switch_blog', $blog, $blog)"},{"name":"restore_current_blog","file":"ms-blogs.php","line":611,"type":"action","source":"do_action('switch_blog', $blog, $prev_blog_id)"}]},"'graceful_fail'":{"name":"'graceful_fail'","callers":[{"name":"graceful_fail","file":"ms-deprecated.php","line":69,"type":"filter","source":"apply_filters('graceful_fail', $message)"}]},"'graceful_fail_template'":{"name":"'graceful_fail_template'","callers":[{"name":"graceful_fail","file":"ms-deprecated.php","line":70,"type":"filter","source":"apply_filters('graceful_fail_template', '\n\n\nError!<\/title>\n<style type=\"text\/css\">\nimg {\n\tborder: 0;\n}\nbody {\nline-height: 1.6em; font-family: Georgia, serif; width: 390px; margin: auto;\ntext-align: center;\n}\n.message {\n\tfont-size: 22px;\n\twidth: 350px;\n\tmargin: auto;\n}\n<\/style>\n<\/head>\n<body>\n<p class=\"message\">%s<\/p>\n<\/body>\n<\/html>')"}]},"'add_user_to_blog'":{"name":"'add_user_to_blog'","callers":[{"name":"add_user_to_blog","file":"ms-functions.php","line":196,"type":"action","source":"do_action('add_user_to_blog', $user_id, $role, $blog_id)"}]},"'remove_user_from_blog'":{"name":"'remove_user_from_blog'","callers":[{"name":"remove_user_from_blog","file":"ms-functions.php","line":222,"type":"action","source":"do_action('remove_user_from_blog', $user_id, $blog_id)"}]},"'is_email_address_unsafe'":{"name":"'is_email_address_unsafe'","callers":[{"name":"is_email_address_unsafe","file":"ms-functions.php","line":403,"type":"filter","source":"apply_filters('is_email_address_unsafe', $is_email_address_unsafe, $user_email)"}]},"'wpmu_validate_user_signup'":{"name":"'wpmu_validate_user_signup'","callers":[{"name":"wpmu_validate_user_signup","file":"ms-functions.php","line":517,"type":"filter","source":"apply_filters('wpmu_validate_user_signup', $result)"}]},"'subdirectory_reserved_names'":{"name":"'subdirectory_reserved_names'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":559,"type":"filter","source":"apply_filters('subdirectory_reserved_names', array('page', 'comments', 'blog', 'files', 'feed'))"}]},"'newblogname'":{"name":"'newblogname'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":586,"type":"filter","source":"apply_filters('newblogname', $blogname)"}]},"'wpmu_validate_blog_signup'":{"name":"'wpmu_validate_blog_signup'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":621,"type":"filter","source":"apply_filters('wpmu_validate_blog_signup', $result)"}]},"'wpmu_signup_blog_notification'":{"name":"'wpmu_signup_blog_notification'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":723,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification', $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_blog_notification_email'":{"name":"'wpmu_signup_blog_notification_email'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":739,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification_email', __('To activate your blog, please click the following link:\n\n%s\n\nAfter you activate, you will receive *another email* with your login.\n\nAfter you activate, you can visit your site here:\n\n%s'), $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_blog_notification_subject'":{"name":"'wpmu_signup_blog_notification_subject'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":749,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification_subject', __('[%1$s] Activate %2$s'), $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification'":{"name":"'wpmu_signup_user_notification'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":782,"type":"filter","source":"apply_filters('wpmu_signup_user_notification', $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification_email'":{"name":"'wpmu_signup_user_notification_email'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":792,"type":"filter","source":"apply_filters('wpmu_signup_user_notification_email', __('To activate your user, please click the following link:\n\n%s\n\nAfter you activate, you will receive *another email* with your login.'), $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification_subject'":{"name":"'wpmu_signup_user_notification_subject'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":800,"type":"filter","source":"apply_filters('wpmu_signup_user_notification_subject', __('[%1$s] Activate %2$s'), $user, $user_email, $key, $meta)"}]},"'wpmu_activate_user'":{"name":"'wpmu_activate_user'","callers":[{"name":"wpmu_activate_signup","file":"ms-functions.php","line":872,"type":"action","source":"do_action('wpmu_activate_user', $user_id, $password, $meta)"}]},"'wpmu_activate_blog'":{"name":"'wpmu_activate_blog'","callers":[{"name":"wpmu_activate_signup","file":"ms-functions.php","line":891,"type":"action","source":"do_action('wpmu_activate_blog', $blog_id, $user_id, $password, $signup->title, $meta)"}]},"'wpmu_new_user'":{"name":"'wpmu_new_user'","callers":[{"name":"wpmu_create_user","file":"ms-functions.php","line":923,"type":"action","source":"do_action('wpmu_new_user', $user_id)"}]},"'wpmu_new_blog'":{"name":"'wpmu_new_blog'","callers":[{"name":"wpmu_create_blog","file":"ms-functions.php","line":996,"type":"action","source":"do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta)"}]},"'newblog_notify_siteadmin'":{"name":"'newblog_notify_siteadmin'","callers":[{"name":"newblog_notify_siteadmin","file":"ms-functions.php","line":1032,"type":"filter","source":"apply_filters('newblog_notify_siteadmin', $msg)"}]},"'newuser_notify_siteadmin'":{"name":"'newuser_notify_siteadmin'","callers":[{"name":"newuser_notify_siteadmin","file":"ms-functions.php","line":1067,"type":"filter","source":"apply_filters('newuser_notify_siteadmin', $msg, $user)"}]},"'domain_exists'":{"name":"'domain_exists'","callers":[{"name":"domain_exists","file":"ms-functions.php","line":1088,"type":"filter","source":"apply_filters('domain_exists', $result, $domain, $path, $site_id)"}]},"'wpmu_welcome_notification'":{"name":"'wpmu_welcome_notification'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1217,"type":"filter","source":"apply_filters('wpmu_welcome_notification', $blog_id, $user_id, $password, $title, $meta)"}]},"'update_welcome_email'":{"name":"'update_welcome_email'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1245,"type":"filter","source":"apply_filters('update_welcome_email', $welcome_email, $blog_id, $user_id, $password, $title, $meta)"}]},"'update_welcome_subject'":{"name":"'update_welcome_subject'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1258,"type":"filter","source":"apply_filters('update_welcome_subject', sprintf(__('New %1$s Site: %2$s'), $current_site->site_name, stripslashes($title)))"}]},"'wpmu_welcome_user_notification'":{"name":"'wpmu_welcome_user_notification'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1281,"type":"filter","source":"apply_filters('wpmu_welcome_user_notification', $user_id, $password, $meta)"}]},"'update_welcome_user_email'":{"name":"'update_welcome_user_email'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1288,"type":"filter","source":"apply_filters('update_welcome_user_email', $welcome_email, $user_id, $password, $meta)"}]},"'update_welcome_user_subject'":{"name":"'update_welcome_user_subject'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1306,"type":"filter","source":"apply_filters('update_welcome_user_subject', sprintf(__('New %1$s User: %2$s'), $current_site->site_name, $user->user_login))"}]},"'blog_redirect_404'":{"name":"'blog_redirect_404'","callers":[{"name":"maybe_redirect_404","file":"ms-functions.php","line":1653,"type":"filter","source":"apply_filters('blog_redirect_404', NOBLOGREDIRECT)"}]},"'added_existing_user'":{"name":"'added_existing_user'","callers":[{"name":"add_existing_user_to_blog","file":"ms-functions.php","line":1704,"type":"action","source":"do_action('added_existing_user', $details['user_id'], $result)"}]},"'update_blog_public'":{"name":"'update_blog_public'","callers":[{"name":"update_blog_public","file":"ms-functions.php","line":1774,"type":"action","source":"do_action('update_blog_public')"}]},"'pre_get_space_used'":{"name":"'pre_get_space_used'","callers":[{"name":"get_space_used","file":"ms-functions.php","line":1944,"type":"filter","source":"apply_filters('pre_get_space_used', false)"}]},"'ms_site_check'":{"name":"'ms_site_check'","callers":[{"name":"ms_site_check","file":"ms-load.php","line":77,"type":"filter","source":"apply_filters('ms_site_check', null)"}]},"'nav_menu_css_class'":{"name":"'nav_menu_css_class'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":75,"type":"filter","source":"apply_filters('nav_menu_css_class', array_filter($classes), $item, $args)"}]},"'nav_menu_item_id'":{"name":"'nav_menu_item_id'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":78,"type":"filter","source":"apply_filters('nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args)"}]},"'walker_nav_menu_start_el'":{"name":"'walker_nav_menu_start_el'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":94,"type":"filter","source":"apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args)"}]},"'wp_nav_menu_args'":{"name":"'wp_nav_menu_args'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":144,"type":"filter","source":"apply_filters('wp_nav_menu_args', $args)"}]},"'wp_nav_menu_container_allowedtags'":{"name":"'wp_nav_menu_container_allowedtags'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":188,"type":"filter","source":"apply_filters('wp_nav_menu_container_allowedtags', array('div', 'nav'))"}]},"'wp_nav_menu_objects'":{"name":"'wp_nav_menu_objects'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":206,"type":"filter","source":"apply_filters('wp_nav_menu_objects', $sorted_menu_items, $args)"}]},"'wp_nav_menu_items'":{"name":"'wp_nav_menu_items'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":228,"type":"filter","source":"apply_filters('wp_nav_menu_items', $items, $args)"}]},"\"wp_nav_menu_{$menu->slug}_items\"":{"name":"\"wp_nav_menu_{$menu->slug}_items\"","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":229,"type":"filter","source":"apply_filters(\"wp_nav_menu_{$menu->slug}_items\", $items, $args)"}]},"'wp_nav_menu'":{"name":"'wp_nav_menu'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":237,"type":"filter","source":"apply_filters('wp_nav_menu', $nav_menu, $args)"}]},"'wp_delete_nav_menu'":{"name":"'wp_delete_nav_menu'","callers":[{"name":"wp_delete_nav_menu","file":"nav-menu.php","line":192,"type":"action","source":"do_action('wp_delete_nav_menu', $menu->term_id)"}]},"'wp_create_nav_menu'":{"name":"'wp_create_nav_menu'","callers":[{"name":"wp_update_nav_menu_object","file":"nav-menu.php","line":240,"type":"action","source":"do_action('wp_create_nav_menu', $_menu['term_id'], $menu_data)"}]},"'wp_update_nav_menu'":{"name":"'wp_update_nav_menu'","callers":[{"name":"wp_update_nav_menu_object","file":"nav-menu.php","line":255,"type":"action","source":"do_action('wp_update_nav_menu', $menu_id, $menu_data)"}]},"'wp_update_nav_menu_item'":{"name":"'wp_update_nav_menu_item'","callers":[{"name":"wp_update_nav_menu_item","file":"nav-menu.php","line":396,"type":"action","source":"do_action('wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args)"}]},"'wp_get_nav_menus'":{"name":"'wp_get_nav_menus'","callers":[{"name":"wp_get_nav_menus","file":"nav-menu.php","line":412,"type":"filter","source":"apply_filters('wp_get_nav_menus', get_terms('nav_menu', $args), $args)"}]},"'wp_get_nav_menu_items'":{"name":"'wp_get_nav_menu_items'","callers":[{"name":"wp_get_nav_menu_items","file":"nav-menu.php","line":543,"type":"filter","source":"apply_filters('wp_get_nav_menu_items', $items, $menu, $args)"}]},"'nav_menu_attr_title'":{"name":"'nav_menu_attr_title'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":619,"type":"filter","source":"apply_filters('nav_menu_attr_title', $menu_item->post_excerpt)"},{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":640,"type":"filter","source":"apply_filters('nav_menu_attr_title', '')"}]},"'nav_menu_description'":{"name":"'nav_menu_description'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":622,"type":"filter","source":"apply_filters('nav_menu_description', wp_trim_words($menu_item->post_content, 200))"},{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":641,"type":"filter","source":"apply_filters('nav_menu_description', '')"}]},"'wp_setup_nav_menu_item'":{"name":"'wp_setup_nav_menu_item'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":667,"type":"filter","source":"apply_filters('wp_setup_nav_menu_item', $menu_item)"}]},"'pre_option_' . $option":{"name":"'pre_option_' . $option","callers":[{"name":"get_option","file":"option.php","line":40,"type":"filter","source":"apply_filters('pre_option_' . $option, false)"}]},"'default_option_' . $option":{"name":"'default_option_' . $option","callers":[{"name":"get_option","file":"option.php","line":51,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"},{"name":"get_option","file":"option.php","line":70,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"},{"name":"get_option","file":"option.php","line":81,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"}]},"'option_' . $option":{"name":"'option_' . $option","callers":[{"name":"get_option","file":"option.php","line":91,"type":"filter","source":"apply_filters('option_' . $option, maybe_unserialize($value))"}]},"'pre_update_option_' . $option":{"name":"'pre_update_option_' . $option","callers":[{"name":"update_option","file":"option.php","line":229,"type":"filter","source":"apply_filters('pre_update_option_' . $option, $newvalue, $oldvalue)"}]},"'update_option'":{"name":"'update_option'","callers":[{"name":"update_option","file":"option.php","line":247,"type":"action","source":"do_action('update_option', $option, $oldvalue, $_newvalue)"}]},"\"update_option_{$option}\"":{"name":"\"update_option_{$option}\"","callers":[{"name":"update_option","file":"option.php","line":261,"type":"action","source":"do_action(\"update_option_{$option}\", $oldvalue, $_newvalue)"}]},"'updated_option'":{"name":"'updated_option'","callers":[{"name":"update_option","file":"option.php","line":262,"type":"action","source":"do_action('updated_option', $option, $oldvalue, $_newvalue)"}]},"'add_option'":{"name":"'add_option'","callers":[{"name":"add_option","file":"option.php","line":319,"type":"action","source":"do_action('add_option', $option, $_value)"}]},"\"add_option_{$option}\"":{"name":"\"add_option_{$option}\"","callers":[{"name":"add_option","file":"option.php","line":340,"type":"action","source":"do_action(\"add_option_{$option}\", $option, $_value)"}]},"'added_option'":{"name":"'added_option'","callers":[{"name":"add_option","file":"option.php","line":341,"type":"action","source":"do_action('added_option', $option, $_value)"}]},"'delete_option'":{"name":"'delete_option'","callers":[{"name":"delete_option","file":"option.php","line":369,"type":"action","source":"do_action('delete_option', $option)"}]},"\"delete_option_{$option}\"":{"name":"\"delete_option_{$option}\"","callers":[{"name":"delete_option","file":"option.php","line":383,"type":"action","source":"do_action(\"delete_option_{$option}\", $option)"}]},"'deleted_option'":{"name":"'deleted_option'","callers":[{"name":"delete_option","file":"option.php","line":384,"type":"action","source":"do_action('deleted_option', $option)"}]},"'delete_transient_' . $transient":{"name":"'delete_transient_' . $transient","callers":[{"name":"delete_transient","file":"option.php","line":406,"type":"action","source":"do_action('delete_transient_' . $transient, $transient)"}]},"'deleted_transient'":{"name":"'deleted_transient'","callers":[{"name":"delete_transient","file":"option.php","line":419,"type":"action","source":"do_action('deleted_transient', $transient)"}]},"'pre_transient_' . $transient":{"name":"'pre_transient_' . $transient","callers":[{"name":"get_transient","file":"option.php","line":445,"type":"filter","source":"apply_filters('pre_transient_' . $transient, false)"}]},"'transient_' . $transient":{"name":"'transient_' . $transient","callers":[{"name":"get_transient","file":"option.php","line":469,"type":"filter","source":"apply_filters('transient_' . $transient, $value)"}]},"'pre_set_transient_' . $transient":{"name":"'pre_set_transient_' . $transient","callers":[{"name":"set_transient","file":"option.php","line":494,"type":"filter","source":"apply_filters('pre_set_transient_' . $transient, $value)"}]},"'set_transient_' . $transient":{"name":"'set_transient_' . $transient","callers":[{"name":"set_transient","file":"option.php","line":515,"type":"action","source":"do_action('set_transient_' . $transient)"}]},"'setted_transient'":{"name":"'setted_transient'","callers":[{"name":"set_transient","file":"option.php","line":516,"type":"action","source":"do_action('setted_transient', $transient)"}]},"'pre_site_option_' . $option":{"name":"'pre_site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":763,"type":"filter","source":"apply_filters('pre_site_option_' . $option, false)"}]},"'default_site_option_' . $option":{"name":"'default_site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":768,"type":"filter","source":"apply_filters('default_site_option_' . $option, $default)"},{"name":"get_site_option","file":"option.php","line":784,"type":"filter","source":"apply_filters('default_site_option_' . $option, $default)"}]},"'site_option_' . $option":{"name":"'site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":789,"type":"filter","source":"apply_filters('site_option_' . $option, $value)"}]},"'pre_add_site_option_' . $option":{"name":"'pre_add_site_option_' . $option","callers":[{"name":"add_site_option","file":"option.php","line":813,"type":"filter","source":"apply_filters('pre_add_site_option_' . $option, $value)"}]},"\"add_site_option_{$option}\"":{"name":"\"add_site_option_{$option}\"","callers":[{"name":"add_site_option","file":"option.php","line":833,"type":"action","source":"do_action(\"add_site_option_{$option}\", $option, $value)"}]},"'add_site_option'":{"name":"'add_site_option'","callers":[{"name":"add_site_option","file":"option.php","line":834,"type":"action","source":"do_action('add_site_option', $option, $value)"}]},"'pre_delete_site_option_' . $option":{"name":"'pre_delete_site_option_' . $option","callers":[{"name":"delete_site_option","file":"option.php","line":860,"type":"action","source":"do_action('pre_delete_site_option_' . $option)"}]},"\"delete_site_option_{$option}\"":{"name":"\"delete_site_option_{$option}\"","callers":[{"name":"delete_site_option","file":"option.php","line":875,"type":"action","source":"do_action(\"delete_site_option_{$option}\", $option)"}]},"'delete_site_option'":{"name":"'delete_site_option'","callers":[{"name":"delete_site_option","file":"option.php","line":876,"type":"action","source":"do_action('delete_site_option', $option)"}]},"'pre_update_site_option_' . $option":{"name":"'pre_update_site_option_' . $option","callers":[{"name":"update_site_option","file":"option.php","line":902,"type":"filter","source":"apply_filters('pre_update_site_option_' . $option, $value, $oldvalue)"}]},"\"update_site_option_{$option}\"":{"name":"\"update_site_option_{$option}\"","callers":[{"name":"update_site_option","file":"option.php","line":924,"type":"action","source":"do_action(\"update_site_option_{$option}\", $option, $value, $oldvalue)"}]},"'update_site_option'":{"name":"'update_site_option'","callers":[{"name":"update_site_option","file":"option.php","line":925,"type":"action","source":"do_action('update_site_option', $option, $value, $oldvalue)"}]},"'delete_site_transient_' . $transient":{"name":"'delete_site_transient_' . $transient","callers":[{"name":"delete_site_transient","file":"option.php","line":947,"type":"action","source":"do_action('delete_site_transient_' . $transient, $transient)"}]},"'deleted_site_transient'":{"name":"'deleted_site_transient'","callers":[{"name":"delete_site_transient","file":"option.php","line":958,"type":"action","source":"do_action('deleted_site_transient', $transient)"}]},"'pre_site_transient_' . $transient":{"name":"'pre_site_transient_' . $transient","callers":[{"name":"get_site_transient","file":"option.php","line":985,"type":"filter","source":"apply_filters('pre_site_transient_' . $transient, false)"}]},"'site_transient_' . $transient":{"name":"'site_transient_' . $transient","callers":[{"name":"get_site_transient","file":"option.php","line":1008,"type":"filter","source":"apply_filters('site_transient_' . $transient, $value)"}]},"'pre_set_site_transient_' . $transient":{"name":"'pre_set_site_transient_' . $transient","callers":[{"name":"set_site_transient","file":"option.php","line":1034,"type":"filter","source":"apply_filters('pre_set_site_transient_' . $transient, $value)"}]},"'set_site_transient_' . $transient":{"name":"'set_site_transient_' . $transient","callers":[{"name":"set_site_transient","file":"option.php","line":1052,"type":"action","source":"do_action('set_site_transient_' . $transient)"}]},"'setted_site_transient'":{"name":"'setted_site_transient'","callers":[{"name":"set_site_transient","file":"option.php","line":1053,"type":"action","source":"do_action('setted_site_transient', $transient)"}]},"'set_current_user'":{"name":"'set_current_user'","callers":[{"name":"wp_set_current_user","file":"pluggable.php","line":37,"type":"action","source":"do_action('set_current_user')"}]},"'wp_mail'":{"name":"'wp_mail'","callers":[{"name":"wp_mail","file":"pluggable.php","line":216,"type":"filter","source":"apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments'))"}]},"'wp_mail_from'":{"name":"'wp_mail_from'","callers":[{"name":"wp_mail","file":"pluggable.php","line":340,"type":"filter","source":"apply_filters('wp_mail_from', $from_email)"}]},"'wp_mail_from_name'":{"name":"'wp_mail_from_name'","callers":[{"name":"wp_mail","file":"pluggable.php","line":341,"type":"filter","source":"apply_filters('wp_mail_from_name', $from_name)"}]},"'wp_mail_content_type'":{"name":"'wp_mail_content_type'","callers":[{"name":"wp_mail","file":"pluggable.php","line":412,"type":"filter","source":"apply_filters('wp_mail_content_type', $content_type)"}]},"'wp_mail_charset'":{"name":"'wp_mail_charset'","callers":[{"name":"wp_mail","file":"pluggable.php","line":425,"type":"filter","source":"apply_filters('wp_mail_charset', $charset)"}]},"'phpmailer_init'":{"name":"'phpmailer_init'","callers":[{"name":"wp_mail","file":"pluggable.php","line":447,"type":"action_reference","source":"do_action_ref_array('phpmailer_init', array(&$phpmailer))"}]},"'authenticate'":{"name":"'authenticate'","callers":[{"name":"wp_authenticate","file":"pluggable.php","line":474,"type":"filter","source":"apply_filters('authenticate', null, $username, $password)"}]},"'wp_login_failed'":{"name":"'wp_login_failed'","callers":[{"name":"wp_authenticate","file":"pluggable.php","line":485,"type":"action","source":"do_action('wp_login_failed', $username)"}]},"'wp_logout'":{"name":"'wp_logout'","callers":[{"name":"wp_logout","file":"pluggable.php","line":500,"type":"action","source":"do_action('wp_logout')"}]},"'auth_cookie_malformed'":{"name":"'auth_cookie_malformed'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":522,"type":"action","source":"do_action('auth_cookie_malformed', $cookie, $scheme)"}]},"'auth_cookie_expired'":{"name":"'auth_cookie_expired'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":536,"type":"action","source":"do_action('auth_cookie_expired', $cookie_elements)"}]},"'auth_cookie_bad_username'":{"name":"'auth_cookie_bad_username'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":542,"type":"action","source":"do_action('auth_cookie_bad_username', $cookie_elements)"}]},"'auth_cookie_bad_hash'":{"name":"'auth_cookie_bad_hash'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":552,"type":"action","source":"do_action('auth_cookie_bad_hash', $cookie_elements)"}]},"'auth_cookie_valid'":{"name":"'auth_cookie_valid'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":559,"type":"action","source":"do_action('auth_cookie_valid', $cookie_elements, $user)"}]},"'auth_cookie'":{"name":"'auth_cookie'","callers":[{"name":"wp_generate_auth_cookie","file":"pluggable.php","line":588,"type":"filter","source":"apply_filters('auth_cookie', $cookie, $user_id, $expiration, $scheme)"}]},"'auth_cookie_expiration'":{"name":"'auth_cookie_expiration'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":654,"type":"filter","source":"apply_filters('auth_cookie_expiration', 1209600, $user_id, $remember)"},{"name":"wp_set_auth_cookie","file":"pluggable.php","line":656,"type":"filter","source":"apply_filters('auth_cookie_expiration', 172800, $user_id, $remember)"}]},"'secure_auth_cookie'":{"name":"'secure_auth_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":663,"type":"filter","source":"apply_filters('secure_auth_cookie', $secure, $user_id)"}]},"'secure_logged_in_cookie'":{"name":"'secure_logged_in_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":664,"type":"filter","source":"apply_filters('secure_logged_in_cookie', false, $user_id, $secure)"}]},"'set_auth_cookie'":{"name":"'set_auth_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":677,"type":"action","source":"do_action('set_auth_cookie', $auth_cookie, $expire, $expiration, $user_id, $scheme)"}]},"'set_logged_in_cookie'":{"name":"'set_logged_in_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":678,"type":"action","source":"do_action('set_logged_in_cookie', $logged_in_cookie, $expire, $expiration, $user_id, 'logged_in')"}]},"'clear_auth_cookie'":{"name":"'clear_auth_cookie'","callers":[{"name":"wp_clear_auth_cookie","file":"pluggable.php","line":695,"type":"action","source":"do_action('clear_auth_cookie')"}]},"'secure_auth_redirect'":{"name":"'secure_auth_redirect'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":747,"type":"filter","source":"apply_filters('secure_auth_redirect', $secure)"}]},"'auth_redirect_scheme'":{"name":"'auth_redirect_scheme'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":763,"type":"filter","source":"apply_filters('auth_redirect_scheme', '')"}]},"'auth_redirect'":{"name":"'auth_redirect'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":766,"type":"action","source":"do_action('auth_redirect', $user_id)"}]},"'check_admin_referer'":{"name":"'check_admin_referer'","callers":[{"name":"check_admin_referer","file":"pluggable.php","line":817,"type":"action","source":"do_action('check_admin_referer', $action, $result)"}]},"'check_ajax_referer'":{"name":"'check_ajax_referer'","callers":[{"name":"check_ajax_referer","file":"pluggable.php","line":846,"type":"action","source":"do_action('check_ajax_referer', $action, $result)"}]},"'wp_redirect'":{"name":"'wp_redirect'","callers":[{"name":"wp_redirect","file":"pluggable.php","line":866,"type":"filter","source":"apply_filters('wp_redirect', $location, $status)"}]},"'wp_redirect_status'":{"name":"'wp_redirect_status'","callers":[{"name":"wp_redirect","file":"pluggable.php","line":867,"type":"filter","source":"apply_filters('wp_redirect_status', $status, $location)"}]},"'allowed_redirect_hosts'":{"name":"'allowed_redirect_hosts'","callers":[{"name":"wp_validate_redirect","file":"pluggable.php","line":970,"type":"filter","source":"apply_filters('allowed_redirect_hosts', array($wpp['host']), isset($lp['host']) ? $lp['host'] : '')"}]},"'comment_notification_text'":{"name":"'comment_notification_text'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1074,"type":"filter","source":"apply_filters('comment_notification_text', $notify_message, $comment_id)"}]},"'comment_notification_subject'":{"name":"'comment_notification_subject'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1075,"type":"filter","source":"apply_filters('comment_notification_subject', $subject, $comment_id)"}]},"'comment_notification_headers'":{"name":"'comment_notification_headers'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1076,"type":"filter","source":"apply_filters('comment_notification_headers', $message_headers, $comment_id)"}]},"'comment_moderation_text'":{"name":"'comment_moderation_text'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1156,"type":"filter","source":"apply_filters('comment_moderation_text', $notify_message, $comment_id)"}]},"'comment_moderation_subject'":{"name":"'comment_moderation_subject'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1157,"type":"filter","source":"apply_filters('comment_moderation_subject', $subject, $comment_id)"}]},"'comment_moderation_headers'":{"name":"'comment_moderation_headers'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1158,"type":"filter","source":"apply_filters('comment_moderation_headers', $message_headers)"}]},"'nonce_life'":{"name":"'nonce_life'","callers":[{"name":"wp_nonce_tick","file":"pluggable.php","line":1237,"type":"filter","source":"apply_filters('nonce_life', DAY_IN_SECONDS)"}]},"'nonce_user_logged_out'":{"name":"'nonce_user_logged_out'","callers":[{"name":"wp_verify_nonce","file":"pluggable.php","line":1260,"type":"filter","source":"apply_filters('nonce_user_logged_out', $uid, $action)"},{"name":"wp_create_nonce","file":"pluggable.php","line":1288,"type":"filter","source":"apply_filters('nonce_user_logged_out', $uid, $action)"}]},"'salt'":{"name":"'salt'","callers":[{"name":"wp_salt","file":"pluggable.php","line":1334,"type":"filter","source":"apply_filters('salt', $cached_salts[$scheme], $scheme)"},{"name":"wp_salt","file":"pluggable.php","line":1380,"type":"filter","source":"apply_filters('salt', $cached_salts[$scheme], $scheme)"}]},"'check_password'":{"name":"'check_password'","callers":[{"name":"wp_check_password","file":"pluggable.php","line":1461,"type":"filter","source":"apply_filters('check_password', $check, $password, $hash, $user_id)"},{"name":"wp_check_password","file":"pluggable.php","line":1474,"type":"filter","source":"apply_filters('check_password', $check, $password, $hash, $user_id)"}]},"'random_password'":{"name":"'random_password'","callers":[{"name":"wp_generate_password","file":"pluggable.php","line":1503,"type":"filter","source":"apply_filters('random_password', $password)"}]},"'get_avatar_comment_types'":{"name":"'get_avatar_comment_types'","callers":[{"name":"get_avatar","file":"pluggable.php","line":1609,"type":"filter","source":"apply_filters('get_avatar_comment_types', array('comment'))"}]},"'get_avatar'":{"name":"'get_avatar'","callers":[{"name":"get_avatar","file":"pluggable.php","line":1673,"type":"filter","source":"apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt)"}]},"'protected_title_format'":{"name":"'protected_title_format'","callers":[{"name":"get_the_title","file":"post-template.php","line":110,"type":"filter","source":"apply_filters('protected_title_format', __('Protected: %s'))"}]},"'private_title_format'":{"name":"'private_title_format'","callers":[{"name":"get_the_title","file":"post-template.php","line":113,"type":"filter","source":"apply_filters('private_title_format', __('Private: %s'))"}]},"'get_the_guid'":{"name":"'get_the_guid'","callers":[{"name":"get_the_guid","file":"post-template.php","line":153,"type":"filter","source":"apply_filters('get_the_guid', $post->guid)"}]},"'the_content_more_link'":{"name":"'the_content_more_link'","callers":[{"name":"get_the_content","file":"post-template.php","line":219,"type":"filter","source":"apply_filters('the_content_more_link', ' <a href=\"' . get_permalink() . \"#more-{$post->ID}\\\" class=\\\"more-link\\\">{$more_link_text}<\/a>\", $more_link_text)"}]},"'get_the_excerpt'":{"name":"'get_the_excerpt'","callers":[{"name":"get_the_excerpt","file":"post-template.php","line":270,"type":"filter","source":"apply_filters('get_the_excerpt', $post->post_excerpt)"}]},"'post_class'":{"name":"'post_class'","callers":[{"name":"get_post_class","file":"post-template.php","line":377,"type":"filter","source":"apply_filters('post_class', $classes, $class, $post->ID)"}]},"'body_class'":{"name":"'body_class'","callers":[{"name":"get_body_class","file":"post-template.php","line":558,"type":"filter","source":"apply_filters('body_class', $classes, $class)"}]},"'wp_link_pages_args'":{"name":"'wp_link_pages_args'","callers":[{"name":"wp_link_pages","file":"post-template.php","line":641,"type":"filter","source":"apply_filters('wp_link_pages_args', $r)"}]},"'the_meta_key'":{"name":"'the_meta_key'","callers":[{"name":"the_meta","file":"post-template.php","line":751,"type":"filter","source":"apply_filters('the_meta_key', \"<li><span class='post-meta-key'>{$key}:<\/span> {$value}<\/li>\\n\", $key, $value)"}]},"'wp_dropdown_pages'":{"name":"'wp_dropdown_pages'","callers":[{"name":"wp_dropdown_pages","file":"post-template.php","line":797,"type":"filter","source":"apply_filters('wp_dropdown_pages', $output)"}]},"'wp_list_pages_excludes'":{"name":"'wp_list_pages_excludes'","callers":[{"name":"wp_list_pages","file":"post-template.php","line":834,"type":"filter","source":"apply_filters('wp_list_pages_excludes', $exclude_array)"}]},"'wp_list_pages'":{"name":"'wp_list_pages'","callers":[{"name":"wp_list_pages","file":"post-template.php","line":853,"type":"filter","source":"apply_filters('wp_list_pages', $output, $r)"}]},"'wp_page_menu_args'":{"name":"'wp_page_menu_args'","callers":[{"name":"wp_page_menu","file":"post-template.php","line":890,"type":"filter","source":"apply_filters('wp_page_menu_args', $args)"}]},"'wp_page_menu'":{"name":"'wp_page_menu'","callers":[{"name":"wp_page_menu","file":"post-template.php","line":925,"type":"filter","source":"apply_filters('wp_page_menu', $menu, $args)"}]},"'page_css_class'":{"name":"'page_css_class'","callers":[{"name":"Walker_Page::start_el","file":"post-template.php","line":1049,"type":"filter","source":"apply_filters('page_css_class', $css_class, $page, $depth, $args, $current_page)"}]},"'list_pages'":{"name":"'list_pages'","callers":[{"name":"Walker_PageDropdown::start_el","file":"post-template.php","line":1118,"type":"filter","source":"apply_filters('list_pages', $page->post_title, $page)"}]},"'wp_get_attachment_link'":{"name":"'wp_get_attachment_link'","callers":[{"name":"wp_get_attachment_link","file":"post-template.php","line":1183,"type":"filter","source":"apply_filters('wp_get_attachment_link', \"<a href='{$url}' title='{$post_title}'>{$link_text}<\/a>\", $id, $size, $permalink, $icon, $text)"}]},"'prepend_attachment'":{"name":"'prepend_attachment'","callers":[{"name":"prepend_attachment","file":"post-template.php","line":1205,"type":"filter","source":"apply_filters('prepend_attachment', $p)"}]},"'the_password_form'":{"name":"'the_password_form'","callers":[{"name":"get_the_password_form","file":"post-template.php","line":1230,"type":"filter","source":"apply_filters('the_password_form', $output)"}]},"'post_thumbnail_size'":{"name":"'post_thumbnail_size'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":88,"type":"filter","source":"apply_filters('post_thumbnail_size', $size)"}]},"'begin_fetch_post_thumbnail_html'":{"name":"'begin_fetch_post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":90,"type":"action","source":"do_action('begin_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size)"}]},"'end_fetch_post_thumbnail_html'":{"name":"'end_fetch_post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":94,"type":"action","source":"do_action('end_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size)"}]},"'post_thumbnail_html'":{"name":"'post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":98,"type":"filter","source":"apply_filters('post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr)"}]},"'get_attached_file'":{"name":"'get_attached_file'","callers":[{"name":"get_attached_file","file":"post.php","line":192,"type":"filter","source":"apply_filters('get_attached_file', $file, $attachment_id)"}]},"'update_attached_file'":{"name":"'update_attached_file'","callers":[{"name":"update_attached_file","file":"post.php","line":212,"type":"filter","source":"apply_filters('update_attached_file', $file, $attachment_id)"}]},"'_wp_relative_upload_path'":{"name":"'_wp_relative_upload_path'","callers":[{"name":"_wp_relative_upload_path","file":"post.php","line":239,"type":"filter","source":"apply_filters('_wp_relative_upload_path', $new_path, $path)"}]},"'registered_post_type'":{"name":"'registered_post_type'","callers":[{"name":"register_post_type","file":"post.php","line":1350,"type":"action","source":"do_action('registered_post_type', $post_type, $args)"}]},"\"post_type_labels_{$post_type}\"":{"name":"\"post_type_labels_{$post_type}\"","callers":[{"name":"get_post_type_labels","file":"post.php","line":1514,"type":"filter","source":"apply_filters(\"post_type_labels_{$post_type}\", $labels)"}]},"\"{$field_no_prefix}_edit_pre\"":{"name":"\"{$field_no_prefix}_edit_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2018,"type":"filter","source":"apply_filters(\"{$field_no_prefix}_edit_pre\", $value, $post_id)"}]},"\"edit_post_{$field}\"":{"name":"\"edit_post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2020,"type":"filter","source":"apply_filters(\"edit_post_{$field}\", $value, $post_id)"}]},"\"{$field_no_prefix}_save_pre\"":{"name":"\"{$field_no_prefix}_save_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2034,"type":"filter","source":"apply_filters(\"{$field_no_prefix}_save_pre\", $value)"}]},"\"pre_post_{$field}\"":{"name":"\"pre_post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2036,"type":"filter","source":"apply_filters(\"pre_post_{$field}\", $value)"}]},"\"{$field}_pre\"":{"name":"\"{$field}_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2037,"type":"filter","source":"apply_filters(\"{$field}_pre\", $value)"}]},"\"post_{$field}\"":{"name":"\"post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2044,"type":"filter","source":"apply_filters(\"post_{$field}\", $value, $post_id, $context)"}]},"'post_mime_types'":{"name":"'post_mime_types'","callers":[{"name":"get_post_mime_types","file":"post.php","line":2199,"type":"filter","source":"apply_filters('post_mime_types', $post_mime_types)"}]},"'before_delete_post'":{"name":"'before_delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2317,"type":"action","source":"do_action('before_delete_post', $postid)"}]},"'delete_post'":{"name":"'delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2366,"type":"action","source":"do_action('delete_post', $postid)"},{"name":"wp_delete_attachment","file":"post.php","line":4119,"type":"action","source":"do_action('delete_post', $post_id)"}]},"'deleted_post'":{"name":"'deleted_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2368,"type":"action","source":"do_action('deleted_post', $postid)"},{"name":"wp_delete_attachment","file":"post.php","line":4121,"type":"action","source":"do_action('deleted_post', $post_id)"}]},"'after_delete_post'":{"name":"'after_delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2379,"type":"action","source":"do_action('after_delete_post', $postid)"}]},"'wp_trash_post'":{"name":"'wp_trash_post'","callers":[{"name":"wp_trash_post","file":"post.php","line":2407,"type":"action","source":"do_action('wp_trash_post', $post_id)"}]},"'trashed_post'":{"name":"'trashed_post'","callers":[{"name":"wp_trash_post","file":"post.php","line":2417,"type":"action","source":"do_action('trashed_post', $post_id)"}]},"'untrash_post'":{"name":"'untrash_post'","callers":[{"name":"wp_untrash_post","file":"post.php","line":2439,"type":"action","source":"do_action('untrash_post', $post_id)"}]},"'untrashed_post'":{"name":"'untrashed_post'","callers":[{"name":"wp_untrash_post","file":"post.php","line":2452,"type":"action","source":"do_action('untrashed_post', $post_id)"}]},"'trash_post_comments'":{"name":"'trash_post_comments'","callers":[{"name":"wp_trash_post_comments","file":"post.php","line":2476,"type":"action","source":"do_action('trash_post_comments', $post_id)"}]},"'trashed_post_comments'":{"name":"'trashed_post_comments'","callers":[{"name":"wp_trash_post_comments","file":"post.php","line":2493,"type":"action","source":"do_action('trashed_post_comments', $post_id, $statuses)"}]},"'untrash_post_comments'":{"name":"'untrash_post_comments'","callers":[{"name":"wp_untrash_post_comments","file":"post.php","line":2522,"type":"action","source":"do_action('untrash_post_comments', $post_id)"}]},"'untrashed_post_comments'":{"name":"'untrashed_post_comments'","callers":[{"name":"wp_untrash_post_comments","file":"post.php","line":2541,"type":"action","source":"do_action('untrashed_post_comments', $post_id)"}]},"'wp_insert_post_empty_content'":{"name":"'wp_insert_post_empty_content'","callers":[{"name":"wp_insert_post","file":"post.php","line":2729,"type":"filter","source":"apply_filters('wp_insert_post_empty_content', $maybe_empty, $postarr)"}]},"'wp_insert_post_parent'":{"name":"'wp_insert_post_parent'","callers":[{"name":"wp_insert_post","file":"post.php","line":2850,"type":"filter","source":"apply_filters('wp_insert_post_parent', $post_parent, $post_ID, compact(array_keys($postarr)), $postarr)"}]},"'wp_insert_post_data'":{"name":"'wp_insert_post_data'","callers":[{"name":"wp_insert_post","file":"post.php","line":2864,"type":"filter","source":"apply_filters('wp_insert_post_data', $data, $postarr)"}]},"'pre_post_update'":{"name":"'pre_post_update'","callers":[{"name":"wp_insert_post","file":"post.php","line":2869,"type":"action","source":"do_action('pre_post_update', $post_ID)"}]},"'post_updated'":{"name":"'post_updated'","callers":[{"name":"wp_insert_post","file":"post.php","line":2947,"type":"action","source":"do_action('post_updated', $post_ID, $post_after, $post_before)"}]},"'save_post'":{"name":"'save_post'","callers":[{"name":"wp_insert_post","file":"post.php","line":2950,"type":"action","source":"do_action('save_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3036,"type":"action","source":"do_action('save_post', $post->ID, $post)"}]},"'wp_insert_post'":{"name":"'wp_insert_post'","callers":[{"name":"wp_insert_post","file":"post.php","line":2951,"type":"action","source":"do_action('wp_insert_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3037,"type":"action","source":"do_action('wp_insert_post', $post->ID, $post)"}]},"'wp_unique_post_slug_is_bad_attachment_slug'":{"name":"'wp_unique_post_slug_is_bad_attachment_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3104,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_attachment_slug', false, $slug)"}]},"'wp_unique_post_slug_is_bad_hierarchical_slug'":{"name":"'wp_unique_post_slug_is_bad_hierarchical_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3121,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent)"}]},"'wp_unique_post_slug_is_bad_flat_slug'":{"name":"'wp_unique_post_slug_is_bad_flat_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3135,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type)"}]},"'wp_unique_post_slug'":{"name":"'wp_unique_post_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3146,"type":"filter","source":"apply_filters('wp_unique_post_slug', $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug)"}]},"'transition_post_status'":{"name":"'transition_post_status'","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3274,"type":"action","source":"do_action('transition_post_status', $new_status, $old_status, $post)"}]},"\"{$old_status}_to_{$new_status}\"":{"name":"\"{$old_status}_to_{$new_status}\"","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3275,"type":"action","source":"do_action(\"{$old_status}_to_{$new_status}\", $post)"}]},"\"{$new_status}_{$post->post_type}\"":{"name":"\"{$new_status}_{$post->post_type}\"","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3276,"type":"action","source":"do_action(\"{$new_status}_{$post->post_type}\", $post->ID, $post)"}]},"'add_ping'":{"name":"'add_ping'","callers":[{"name":"add_ping","file":"post.php","line":3300,"type":"filter","source":"apply_filters('add_ping', $new)"}]},"'get_enclosed'":{"name":"'get_enclosed'","callers":[{"name":"get_enclosed","file":"post.php","line":3329,"type":"filter","source":"apply_filters('get_enclosed', $pung, $post_id)"}]},"'get_pung'":{"name":"'get_pung'","callers":[{"name":"get_pung","file":"post.php","line":3347,"type":"filter","source":"apply_filters('get_pung', $pung)"}]},"'get_to_ping'":{"name":"'get_to_ping'","callers":[{"name":"get_to_ping","file":"post.php","line":3365,"type":"filter","source":"apply_filters('get_to_ping', $to_ping)"}]},"'get_pages'":{"name":"'get_pages'","callers":[{"name":"get_pages","file":"post.php","line":3658,"type":"filter","source":"apply_filters('get_pages', $pages, $r)"},{"name":"get_pages","file":"post.php","line":3800,"type":"filter","source":"apply_filters('get_pages', array(), $r)"},{"name":"get_pages","file":"post.php","line":3836,"type":"filter","source":"apply_filters('get_pages', $pages, $r)"}]},"'edit_attachment'":{"name":"'edit_attachment'","callers":[{"name":"wp_insert_attachment","file":"post.php","line":4050,"type":"action","source":"do_action('edit_attachment', $post_ID)"}]},"'add_attachment'":{"name":"'add_attachment'","callers":[{"name":"wp_insert_attachment","file":"post.php","line":4052,"type":"action","source":"do_action('add_attachment', $post_ID)"}]},"'delete_attachment'":{"name":"'delete_attachment'","callers":[{"name":"wp_delete_attachment","file":"post.php","line":4104,"type":"action","source":"do_action('delete_attachment', $post_id)"}]},"'wp_delete_file'":{"name":"'wp_delete_file'","callers":[{"name":"wp_delete_attachment","file":"post.php","line":4129,"type":"filter","source":"apply_filters('wp_delete_file', $thumbfile)"},{"name":"wp_delete_attachment","file":"post.php","line":4136,"type":"filter","source":"apply_filters('wp_delete_file', $intermediate['path'])"},{"name":"wp_delete_attachment","file":"post.php","line":4143,"type":"filter","source":"apply_filters('wp_delete_file', $del_file)"},{"name":"wp_delete_attachment","file":"post.php","line":4148,"type":"filter","source":"apply_filters('wp_delete_file', $file)"}]},"'wp_get_attachment_metadata'":{"name":"'wp_get_attachment_metadata'","callers":[{"name":"wp_get_attachment_metadata","file":"post.php","line":4177,"type":"filter","source":"apply_filters('wp_get_attachment_metadata', $data, $post->ID)"}]},"'wp_update_attachment_metadata'":{"name":"'wp_update_attachment_metadata'","callers":[{"name":"wp_update_attachment_metadata","file":"post.php","line":4194,"type":"filter","source":"apply_filters('wp_update_attachment_metadata', $data, $post->ID)"}]},"'wp_get_attachment_url'":{"name":"'wp_get_attachment_url'","callers":[{"name":"wp_get_attachment_url","file":"post.php","line":4231,"type":"filter","source":"apply_filters('wp_get_attachment_url', $url, $post->ID)"}]},"'wp_get_attachment_thumb_file'":{"name":"'wp_get_attachment_thumb_file'","callers":[{"name":"wp_get_attachment_thumb_file","file":"post.php","line":4257,"type":"filter","source":"apply_filters('wp_get_attachment_thumb_file', $thumbfile, $post->ID)"}]},"'wp_get_attachment_thumb_url'":{"name":"'wp_get_attachment_thumb_url'","callers":[{"name":"wp_get_attachment_thumb_url","file":"post.php","line":4285,"type":"filter","source":"apply_filters('wp_get_attachment_thumb_url', $url, $post->ID)"}]},"'icon_dir_uri'":{"name":"'icon_dir_uri'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4350,"type":"filter","source":"apply_filters('icon_dir_uri', includes_url('images\/crystal'))"}]},"'icon_dirs'":{"name":"'icon_dirs'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4351,"type":"filter","source":"apply_filters('icon_dirs', array($icon_dir => $icon_dir_uri))"}]},"'wp_mime_type_icon'":{"name":"'wp_mime_type_icon'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4398,"type":"filter","source":"apply_filters('wp_mime_type_icon', $icon, $mime, $post_id)"}]},"'pub_priv_sql_capability'":{"name":"'pub_priv_sql_capability'","callers":[{"name":"get_posts_by_author_sql","file":"post.php","line":4481,"type":"filter","source":"apply_filters('pub_priv_sql_capability', '')"}]},"'get_lastpostdate'":{"name":"'get_lastpostdate'","callers":[{"name":"get_lastpostdate","file":"post.php","line":4532,"type":"filter","source":"apply_filters('get_lastpostdate', _get_last_post_time($timezone, 'date'), $timezone)"}]},"'get_lastpostmodified'":{"name":"'get_lastpostmodified'","callers":[{"name":"get_lastpostmodified","file":"post.php","line":4555,"type":"filter","source":"apply_filters('get_lastpostmodified', $lastpostmodified, $timezone)"}]},"'clean_post_cache'":{"name":"'clean_post_cache'","callers":[{"name":"clean_post_cache","file":"post.php","line":4657,"type":"action","source":"do_action('clean_post_cache', $post->ID, $post)"}]},"'clean_page_cache'":{"name":"'clean_page_cache'","callers":[{"name":"clean_post_cache","file":"post.php","line":4664,"type":"action","source":"do_action('clean_page_cache', $post->ID)"}]},"'clean_attachment_cache'":{"name":"'clean_attachment_cache'","callers":[{"name":"clean_attachment_cache","file":"post.php","line":4771,"type":"action","source":"do_action('clean_attachment_cache', $id)"}]},"'private_to_published'":{"name":"'private_to_published'","callers":[{"name":"_transition_post_status","file":"post.php","line":4798,"type":"action","source":"do_action('private_to_published', $post->ID)"}]},"'xmlrpc_publish_post'":{"name":"'xmlrpc_publish_post'","callers":[{"name":"_publish_post_hook","file":"post.php","line":4846,"type":"action","source":"do_action('xmlrpc_publish_post', $post_id)"}]},"'_wp_post_revision_fields'":{"name":"'_wp_post_revision_fields'","callers":[{"name":"_wp_post_revision_fields","file":"post.php","line":4887,"type":"filter","source":"apply_filters('_wp_post_revision_fields', $fields)"}]},"'_wp_put_post_revision'":{"name":"'_wp_put_post_revision'","callers":[{"name":"_wp_put_post_revision","file":"post.php","line":5086,"type":"action","source":"do_action('_wp_put_post_revision', $revision_id)"}]},"'wp_restore_post_revision'":{"name":"'wp_restore_post_revision'","callers":[{"name":"wp_restore_post_revision","file":"post.php","line":5165,"type":"action","source":"do_action('wp_restore_post_revision', $post_id, $revision['ID'])"}]},"'wp_delete_post_revision'":{"name":"'wp_delete_post_revision'","callers":[{"name":"wp_delete_post_revision","file":"post.php","line":5194,"type":"action","source":"do_action('wp_delete_post_revision', $revision->ID, $revision)"}]},"'parse_query'":{"name":"'parse_query'","callers":[{"name":"WP_Query::parse_query","file":"query.php","line":1676,"type":"action_reference","source":"do_action_ref_array('parse_query', array(&$this))"}]},"'pre_get_posts'":{"name":"'pre_get_posts'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":1924,"type":"action_reference","source":"do_action_ref_array('pre_get_posts', array(&$this))"}]},"'posts_selection'":{"name":"'posts_selection'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2600,"type":"action","source":"do_action('posts_selection', $where . $groupby . $orderby . $limits . $join)"}]},"'split_the_query'":{"name":"'split_the_query'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2654,"type":"filter","source":"apply_filters('split_the_query', $split_the_query, $this)"}]},"'posts_request_ids'":{"name":"'posts_request_ids'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2661,"type":"filter","source":"apply_filters('posts_request_ids', $this->request, $this)"}]},"'loop_start'":{"name":"'loop_start'","callers":[{"name":"WP_Query::the_post","file":"query.php","line":2851,"type":"action_reference","source":"do_action_ref_array('loop_start', array(&$this))"}]},"'loop_end'":{"name":"'loop_end'","callers":[{"name":"WP_Query::have_posts","file":"query.php","line":2872,"type":"action_reference","source":"do_action_ref_array('loop_end', array(&$this))"}]},"'comment_loop_start'":{"name":"'comment_loop_start'","callers":[{"name":"WP_Query::the_comment","file":"query.php","line":2923,"type":"action","source":"do_action('comment_loop_start')"}]},"'the_post'":{"name":"'the_post'","callers":[{"name":"setup_postdata","file":"query.php","line":3655,"type":"action_reference","source":"do_action_ref_array('the_post', array(&$post))"}]},"'url_to_postid'":{"name":"'url_to_postid'","callers":[{"name":"url_to_postid","file":"rewrite.php","line":284,"type":"filter","source":"apply_filters('url_to_postid', $url)"}]},"'post_rewrite_rules'":{"name":"'post_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1544,"type":"filter","source":"apply_filters('post_rewrite_rules', $post_rewrite)"}]},"'date_rewrite_rules'":{"name":"'date_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1548,"type":"filter","source":"apply_filters('date_rewrite_rules', $date_rewrite)"}]},"'root_rewrite_rules'":{"name":"'root_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1552,"type":"filter","source":"apply_filters('root_rewrite_rules', $root_rewrite)"}]},"'comments_rewrite_rules'":{"name":"'comments_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1556,"type":"filter","source":"apply_filters('comments_rewrite_rules', $comments_rewrite)"}]},"'search_rewrite_rules'":{"name":"'search_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1561,"type":"filter","source":"apply_filters('search_rewrite_rules', $search_rewrite)"}]},"'author_rewrite_rules'":{"name":"'author_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1565,"type":"filter","source":"apply_filters('author_rewrite_rules', $author_rewrite)"}]},"'page_rewrite_rules'":{"name":"'page_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1569,"type":"filter","source":"apply_filters('page_rewrite_rules', $page_rewrite)"}]},"$permastructname . '_rewrite_rules'":{"name":"$permastructname . '_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1582,"type":"filter","source":"apply_filters($permastructname . '_rewrite_rules', $rules)"}]},"'tag_rewrite_rules'":{"name":"'tag_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1584,"type":"filter","source":"apply_filters('tag_rewrite_rules', $rules)"}]},"'generate_rewrite_rules'":{"name":"'generate_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1595,"type":"action_reference","source":"do_action_ref_array('generate_rewrite_rules', array(&$this))"}]},"'rewrite_rules_array'":{"name":"'rewrite_rules_array'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1596,"type":"filter","source":"apply_filters('rewrite_rules_array', $this->rules)"}]},"'mod_rewrite_rules'":{"name":"'mod_rewrite_rules'","callers":[{"name":"WP_Rewrite::mod_rewrite_rules","file":"rewrite.php","line":1704,"type":"filter","source":"apply_filters('mod_rewrite_rules', $rules)"}]},"'rewrite_rules'":{"name":"'rewrite_rules'","callers":[{"name":"WP_Rewrite::mod_rewrite_rules","file":"rewrite.php","line":1705,"type":"filter","source":"apply_filters('rewrite_rules', $rules)"}]},"'iis7_url_rewrite_rules'":{"name":"'iis7_url_rewrite_rules'","callers":[{"name":"WP_Rewrite::iis7_url_rewrite_rules","file":"rewrite.php","line":1751,"type":"filter","source":"apply_filters('iis7_url_rewrite_rules', $rules)"}]},"'permalink_structure_changed'":{"name":"'permalink_structure_changed'","callers":[{"name":"WP_Rewrite::set_permalink_structure","file":"rewrite.php","line":1946,"type":"action","source":"do_action('permalink_structure_changed', $old_permalink_structure, $permalink_structure)"}]},"'load_feed_engine'":{"name":"'load_feed_engine'","callers":[{"name":"__main","file":"rss.php","line":23,"type":"action","source":"do_action('load_feed_engine')"}]},"'print_head_scripts'":{"name":"'print_head_scripts'","callers":[{"name":"print_head_scripts","file":"script-loader.php","line":656,"type":"filter","source":"apply_filters('print_head_scripts', true)"}]},"'print_footer_scripts'":{"name":"'print_footer_scripts'","callers":[{"name":"print_footer_scripts","file":"script-loader.php","line":678,"type":"filter","source":"apply_filters('print_footer_scripts', true)"}]},"'wp_print_footer_scripts'":{"name":"'wp_print_footer_scripts'","callers":[{"name":"wp_print_footer_scripts","file":"script-loader.php","line":752,"type":"action","source":"do_action('wp_print_footer_scripts')"}]},"'wp_enqueue_scripts'":{"name":"'wp_enqueue_scripts'","callers":[{"name":"wp_enqueue_scripts","file":"script-loader.php","line":764,"type":"action","source":"do_action('wp_enqueue_scripts')"}]},"'print_admin_styles'":{"name":"'print_admin_styles'","callers":[{"name":"print_admin_styles","file":"script-loader.php","line":786,"type":"filter","source":"apply_filters('print_admin_styles', true)"}]},"'print_late_styles'":{"name":"'print_late_styles'","callers":[{"name":"print_late_styles","file":"script-loader.php","line":807,"type":"filter","source":"apply_filters('print_late_styles', true)"}]},"'post_format_rewrite_base'":{"name":"'post_format_rewrite_base'","callers":[{"name":"create_initial_taxonomies","file":"taxonomy.php","line":27,"type":"filter","source":"apply_filters('post_format_rewrite_base', 'type')"}]},"'registered_taxonomy'":{"name":"'registered_taxonomy'","callers":[{"name":"register_taxonomy","file":"taxonomy.php","line":392,"type":"action","source":"do_action('registered_taxonomy', $taxonomy, $object_type, $args)"}]},"'get_term'":{"name":"'get_term'","callers":[{"name":"get_term","file":"taxonomy.php","line":900,"type":"filter","source":"apply_filters('get_term', $_term, $taxonomy)"},{"name":"get_term_by","file":"taxonomy.php","line":972,"type":"filter","source":"apply_filters('get_term', $term, $taxonomy)"}]},"\"get_{$taxonomy}\"":{"name":"\"get_{$taxonomy}\"","callers":[{"name":"get_term","file":"taxonomy.php","line":901,"type":"filter","source":"apply_filters(\"get_{$taxonomy}\", $_term, $taxonomy)"},{"name":"get_term_by","file":"taxonomy.php","line":973,"type":"filter","source":"apply_filters(\"get_{$taxonomy}\", $term, $taxonomy)"}]},"'get_terms_args'":{"name":"'get_terms_args'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1224,"type":"filter","source":"apply_filters('get_terms_args', $args, $taxonomies)"}]},"'get_terms'":{"name":"'get_terms'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1251,"type":"filter","source":"apply_filters('get_terms', $cache, $taxonomies, $args)"},{"name":"get_terms","file":"taxonomy.php","line":1408,"type":"filter","source":"apply_filters('get_terms', array(), $taxonomies, $args)"},{"name":"get_terms","file":"taxonomy.php","line":1460,"type":"filter","source":"apply_filters('get_terms', $terms, $taxonomies, $args)"}]},"'get_terms_orderby'":{"name":"'get_terms_orderby'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1271,"type":"filter","source":"apply_filters('get_terms_orderby', $orderby, $args)"}]},"'list_terms_exclusions'":{"name":"'list_terms_exclusions'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1327,"type":"filter","source":"apply_filters('list_terms_exclusions', $exclusions, $args)"}]},"'get_terms_fields'":{"name":"'get_terms_fields'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1383,"type":"filter","source":"apply_filters('get_terms_fields', $selects, $args)"}]},"'terms_clauses'":{"name":"'terms_clauses'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1388,"type":"filter","source":"apply_filters('terms_clauses', compact($pieces), $taxonomies, $args)"}]},"\"edit_term_{$field}\"":{"name":"\"edit_term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1644,"type":"filter","source":"apply_filters(\"edit_term_{$field}\", $value, $term_id, $taxonomy)"}]},"\"edit_{$taxonomy}_{$field}\"":{"name":"\"edit_{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1645,"type":"filter","source":"apply_filters(\"edit_{$taxonomy}_{$field}\", $value, $term_id)"}]},"\"pre_term_{$field}\"":{"name":"\"pre_term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1651,"type":"filter","source":"apply_filters(\"pre_term_{$field}\", $value, $taxonomy)"}]},"\"pre_{$taxonomy}_{$field}\"":{"name":"\"pre_{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1652,"type":"filter","source":"apply_filters(\"pre_{$taxonomy}_{$field}\", $value)"}]},"'pre_category_nicename'":{"name":"'pre_category_nicename'","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1655,"type":"filter","source":"apply_filters('pre_category_nicename', $value)"}]},"\"term_{$field}_rss\"":{"name":"\"term_{$field}_rss\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1658,"type":"filter","source":"apply_filters(\"term_{$field}_rss\", $value, $taxonomy)"}]},"\"{$taxonomy}_{$field}_rss\"":{"name":"\"{$taxonomy}_{$field}_rss\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1659,"type":"filter","source":"apply_filters(\"{$taxonomy}_{$field}_rss\", $value)"}]},"\"term_{$field}\"":{"name":"\"term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1662,"type":"filter","source":"apply_filters(\"term_{$field}\", $value, $term_id, $taxonomy, $context)"}]},"\"{$taxonomy}_{$field}\"":{"name":"\"{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1663,"type":"filter","source":"apply_filters(\"{$taxonomy}_{$field}\", $value, $term_id, $context)"}]},"'delete_term_relationships'":{"name":"'delete_term_relationships'","callers":[{"name":"wp_delete_object_term_relationships","file":"taxonomy.php","line":1731,"type":"action","source":"do_action('delete_term_relationships', $object_id, $tt_ids)"},{"name":"wp_set_object_terms","file":"taxonomy.php","line":2221,"type":"action","source":"do_action('delete_term_relationships', $object_id, $delete_terms)"}]},"'deleted_term_relationships'":{"name":"'deleted_term_relationships'","callers":[{"name":"wp_delete_object_term_relationships","file":"taxonomy.php","line":1733,"type":"action","source":"do_action('deleted_term_relationships', $object_id, $tt_ids)"},{"name":"wp_set_object_terms","file":"taxonomy.php","line":2223,"type":"action","source":"do_action('deleted_term_relationships', $object_id, $delete_terms)"}]},"'edit_term_taxonomies'":{"name":"'edit_term_taxonomies'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1800,"type":"action","source":"do_action('edit_term_taxonomies', $edit_tt_ids)"}]},"'edited_term_taxonomies'":{"name":"'edited_term_taxonomies'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1802,"type":"action","source":"do_action('edited_term_taxonomies', $edit_tt_ids)"}]},"'delete_term_taxonomy'":{"name":"'delete_term_taxonomy'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1828,"type":"action","source":"do_action('delete_term_taxonomy', $tt_id)"}]},"'deleted_term_taxonomy'":{"name":"'deleted_term_taxonomy'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1830,"type":"action","source":"do_action('deleted_term_taxonomy', $tt_id)"}]},"'delete_term'":{"name":"'delete_term'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1838,"type":"action","source":"do_action('delete_term', $term, $tt_id, $taxonomy, $deleted_term)"}]},"\"delete_{$taxonomy}\"":{"name":"\"delete_{$taxonomy}\"","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1839,"type":"action","source":"do_action(\"delete_{$taxonomy}\", $term, $tt_id, $deleted_term)"}]},"'wp_get_object_terms'":{"name":"'wp_get_object_terms'","callers":[{"name":"wp_get_object_terms","file":"taxonomy.php","line":1985,"type":"filter","source":"apply_filters('wp_get_object_terms', $terms, $object_ids, $taxonomies, $args)"}]},"'pre_insert_term'":{"name":"'pre_insert_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2047,"type":"filter","source":"apply_filters('pre_insert_term', $term, $taxonomy)"}]},"'edit_terms'":{"name":"'edit_terms'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2080,"type":"action","source":"do_action('edit_terms', $alias->term_id)"},{"name":"wp_insert_term","file":"taxonomy.php","line":2121,"type":"action","source":"do_action('edit_terms', $term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2395,"type":"action","source":"do_action('edit_terms', $alias->term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2414,"type":"action","source":"do_action('edit_terms', $term_id)"}]},"'edited_terms'":{"name":"'edited_terms'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2082,"type":"action","source":"do_action('edited_terms', $alias->term_id)"},{"name":"wp_insert_term","file":"taxonomy.php","line":2123,"type":"action","source":"do_action('edited_terms', $term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2397,"type":"action","source":"do_action('edited_terms', $alias->term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2420,"type":"action","source":"do_action('edited_terms', $term_id)"}]},"'create_term'":{"name":"'create_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2134,"type":"action","source":"do_action('create_term', $term_id, $tt_id, $taxonomy)"}]},"\"create_{$taxonomy}\"":{"name":"\"create_{$taxonomy}\"","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2135,"type":"action","source":"do_action(\"create_{$taxonomy}\", $term_id, $tt_id)"}]},"'term_id_filter'":{"name":"'term_id_filter'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2137,"type":"filter","source":"apply_filters('term_id_filter', $term_id, $tt_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2430,"type":"filter","source":"apply_filters('term_id_filter', $term_id, $tt_id)"}]},"'created_term'":{"name":"'created_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2141,"type":"action","source":"do_action('created_term', $term_id, $tt_id, $taxonomy)"}]},"\"created_{$taxonomy}\"":{"name":"\"created_{$taxonomy}\"","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2142,"type":"action","source":"do_action(\"created_{$taxonomy}\", $term_id, $tt_id)"}]},"'add_term_relationship'":{"name":"'add_term_relationship'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2208,"type":"action","source":"do_action('add_term_relationship', $object_id, $tt_id)"}]},"'added_term_relationship'":{"name":"'added_term_relationship'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2210,"type":"action","source":"do_action('added_term_relationship', $object_id, $tt_id)"}]},"'set_object_terms'":{"name":"'set_object_terms'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2243,"type":"action","source":"do_action('set_object_terms', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids)"}]},"'wp_update_term_parent'":{"name":"'wp_update_term_parent'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2402,"type":"filter","source":"apply_filters('wp_update_term_parent', $parent, $term_id, $taxonomy, compact(array_keys($args)), $args)"}]},"'edit_term_taxonomy'":{"name":"'edit_term_taxonomy'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2423,"type":"action","source":"do_action('edit_term_taxonomy', $tt_id, $taxonomy)"},{"name":"_update_post_term_count","file":"taxonomy.php","line":2946,"type":"action","source":"do_action('edit_term_taxonomy', $term, $taxonomy)"},{"name":"_update_generic_term_count","file":"taxonomy.php","line":2971,"type":"action","source":"do_action('edit_term_taxonomy', $term, $taxonomy)"}]},"'edited_term_taxonomy'":{"name":"'edited_term_taxonomy'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2425,"type":"action","source":"do_action('edited_term_taxonomy', $tt_id, $taxonomy)"},{"name":"_update_post_term_count","file":"taxonomy.php","line":2948,"type":"action","source":"do_action('edited_term_taxonomy', $term, $taxonomy)"},{"name":"_update_generic_term_count","file":"taxonomy.php","line":2973,"type":"action","source":"do_action('edited_term_taxonomy', $term, $taxonomy)"}]},"'edit_term'":{"name":"'edit_term'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2427,"type":"action","source":"do_action('edit_term', $term_id, $tt_id, $taxonomy)"}]},"\"edit_{$taxonomy}\"":{"name":"\"edit_{$taxonomy}\"","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2428,"type":"action","source":"do_action(\"edit_{$taxonomy}\", $term_id, $tt_id)"}]},"'edited_term'":{"name":"'edited_term'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2434,"type":"action","source":"do_action('edited_term', $term_id, $tt_id, $taxonomy)"}]},"\"edited_{$taxonomy}\"":{"name":"\"edited_{$taxonomy}\"","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2435,"type":"action","source":"do_action(\"edited_{$taxonomy}\", $term_id, $tt_id)"}]},"'clean_object_term_cache'":{"name":"'clean_object_term_cache'","callers":[{"name":"clean_object_term_cache","file":"taxonomy.php","line":2575,"type":"action","source":"do_action('clean_object_term_cache', $object_ids, $object_type)"}]},"'clean_term_cache'":{"name":"'clean_term_cache'","callers":[{"name":"clean_term_cache","file":"taxonomy.php","line":2632,"type":"action","source":"do_action('clean_term_cache', $ids, $taxonomy)"}]},"'tag_link'":{"name":"'tag_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3040,"type":"filter","source":"apply_filters('tag_link', $termlink, $term->term_id)"}]},"'category_link'":{"name":"'category_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3042,"type":"filter","source":"apply_filters('category_link', $termlink, $term->term_id)"}]},"'term_link'":{"name":"'term_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3044,"type":"filter","source":"apply_filters('term_link', $termlink, $term, $taxonomy)"}]},"'get_ancestors'":{"name":"'get_ancestors'","callers":[{"name":"get_ancestors","file":"taxonomy.php","line":3230,"type":"filter","source":"apply_filters('get_ancestors', $ancestors, $object_id, $object_type)"},{"name":"get_ancestors","file":"taxonomy.php","line":3243,"type":"filter","source":"apply_filters('get_ancestors', $ancestors, $object_id, $object_type)"}]},"'template_redirect'":{"name":"'template_redirect'","callers":[{"name":"__main","file":"template-loader.php","line":7,"type":"action","source":"do_action('template_redirect')"}]},"'exit_on_http_head'":{"name":"'exit_on_http_head'","callers":[{"name":"__main","file":"template-loader.php","line":10,"type":"filter","source":"apply_filters('exit_on_http_head', true)"}]},"'do_robots'":{"name":"'do_robots'","callers":[{"name":"__main","file":"template-loader.php","line":15,"type":"action","source":"do_action('do_robots')"}]},"'template_include'":{"name":"'template_include'","callers":[{"name":"__main","file":"template-loader.php","line":46,"type":"filter","source":"apply_filters('template_include', $template)"}]},"\"{$type}_template\"":{"name":"\"{$type}_template\"","callers":[{"name":"get_query_template","file":"template.php","line":29,"type":"filter","source":"apply_filters(\"{$type}_template\", locate_template($templates))"}]},"'locate_template'":{"name":"'locate_template'","callers":[{"name":"locate_template","file":"template.php","line":370,"type":"filter","source":"apply_filters('locate_template', $template_names, $load, $require_once)"}]},"'stylesheet'":{"name":"'stylesheet'","callers":[{"name":"get_stylesheet","file":"theme.php","line":147,"type":"filter","source":"apply_filters('stylesheet', get_option('stylesheet'))"}]},"'stylesheet_directory'":{"name":"'stylesheet_directory'","callers":[{"name":"get_stylesheet_directory","file":"theme.php","line":163,"type":"filter","source":"apply_filters('stylesheet_directory', $stylesheet_dir, $stylesheet, $theme_root)"}]},"'stylesheet_directory_uri'":{"name":"'stylesheet_directory_uri'","callers":[{"name":"get_stylesheet_directory_uri","file":"theme.php","line":178,"type":"filter","source":"apply_filters('stylesheet_directory_uri', $stylesheet_dir_uri, $stylesheet, $theme_root_uri)"}]},"'stylesheet_uri'":{"name":"'stylesheet_uri'","callers":[{"name":"get_stylesheet_uri","file":"theme.php","line":195,"type":"filter","source":"apply_filters('stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri)"}]},"'locale_stylesheet_uri'":{"name":"'locale_stylesheet_uri'","callers":[{"name":"get_locale_stylesheet_uri","file":"theme.php","line":228,"type":"filter","source":"apply_filters('locale_stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri)"}]},"'template'":{"name":"'template'","callers":[{"name":"get_template","file":"theme.php","line":240,"type":"filter","source":"apply_filters('template', get_option('template'))"}]},"'template_directory'":{"name":"'template_directory'","callers":[{"name":"get_template_directory","file":"theme.php","line":256,"type":"filter","source":"apply_filters('template_directory', $template_dir, $template, $theme_root)"}]},"'template_directory_uri'":{"name":"'template_directory_uri'","callers":[{"name":"get_template_directory_uri","file":"theme.php","line":272,"type":"filter","source":"apply_filters('template_directory_uri', $template_dir_uri, $template, $theme_root_uri)"}]},"'theme_root'":{"name":"'theme_root'","callers":[{"name":"get_theme_root","file":"theme.php","line":455,"type":"filter","source":"apply_filters('theme_root', $theme_root)"}]},"'theme_root_uri'":{"name":"'theme_root_uri'","callers":[{"name":"get_theme_root_uri","file":"theme.php","line":495,"type":"filter","source":"apply_filters('theme_root_uri', $theme_root_uri, get_option('siteurl'), $stylesheet_or_template)"}]},"'switch_theme'":{"name":"'switch_theme'","callers":[{"name":"switch_theme","file":"theme.php","line":700,"type":"action","source":"do_action('switch_theme', $new_name, $new_theme)"}]},"'validate_current_theme'":{"name":"'validate_current_theme'","callers":[{"name":"validate_current_theme","file":"theme.php","line":718,"type":"filter","source":"apply_filters('validate_current_theme', true)"}]},"\"theme_mod_{$name}\"":{"name":"\"theme_mod_{$name}\"","callers":[{"name":"get_theme_mod","file":"theme.php","line":780,"type":"filter","source":"apply_filters(\"theme_mod_{$name}\", $mods[$name])"},{"name":"get_theme_mod","file":"theme.php","line":785,"type":"filter","source":"apply_filters(\"theme_mod_{$name}\", $default)"}]},"'current_theme_supports-' . $feature":{"name":"'current_theme_supports-' . $feature","callers":[{"name":"current_theme_supports","file":"theme.php","line":1564,"type":"filter","source":"apply_filters('current_theme_supports-' . $feature, true, $args, $_wp_theme_features[$feature])"}]},"'after_switch_theme'":{"name":"'after_switch_theme'","callers":[{"name":"check_theme_switched","file":"theme.php","line":1613,"type":"action","source":"do_action('after_switch_theme', $old_theme->get('Name'), $old_theme)"},{"name":"check_theme_switched","file":"theme.php","line":1615,"type":"action","source":"do_action('after_switch_theme', $stylesheet)"}]},"'core_version_check_locale'":{"name":"'core_version_check_locale'","callers":[{"name":"wp_version_check","file":"update.php","line":43,"type":"filter","source":"apply_filters('core_version_check_locale', get_locale())"}]},"'wp_get_update_data'":{"name":"'wp_get_update_data'","callers":[{"name":"wp_get_update_data","file":"update.php","line":365,"type":"filter","source":"apply_filters('wp_get_update_data', array('counts' => $counts, 'title' => $update_title), $titles)"}]},"'wp_authenticate'":{"name":"'wp_authenticate'","callers":[{"name":"wp_signon","file":"user.php","line":41,"type":"action_reference","source":"do_action_ref_array('wp_authenticate', array(&$credentials['user_login'], &$credentials['user_password']))"}]},"'secure_signon_cookie'":{"name":"'secure_signon_cookie'","callers":[{"name":"wp_signon","file":"user.php","line":46,"type":"filter","source":"apply_filters('secure_signon_cookie', $secure_cookie, $credentials)"}]},"'wp_login'":{"name":"'wp_login'","callers":[{"name":"wp_signon","file":"user.php","line":64,"type":"action","source":"do_action('wp_login', $user->user_login, $user)"}]},"'wp_authenticate_user'":{"name":"'wp_authenticate_user'","callers":[{"name":"wp_authenticate_username_password","file":"user.php","line":105,"type":"filter","source":"apply_filters('wp_authenticate_user', $user, $password)"}]},"'get_usernumposts'":{"name":"'get_usernumposts'","callers":[{"name":"count_user_posts","file":"user.php","line":159,"type":"filter","source":"apply_filters('get_usernumposts', $count, $userid)"}]},"\"get_user_option_{$option}\"":{"name":"\"get_user_option_{$option}\"","callers":[{"name":"get_user_option","file":"user.php","line":252,"type":"filter","source":"apply_filters(\"get_user_option_{$option}\", $result, $option, $user)"}]},"'pre_user_query'":{"name":"'pre_user_query'","callers":[{"name":"WP_User_Query::prepare_query","file":"user.php","line":529,"type":"action_reference","source":"do_action_ref_array('pre_user_query', array(&$this))"}]},"'found_users_query'":{"name":"'found_users_query'","callers":[{"name":"WP_User_Query::query","file":"user.php","line":550,"type":"filter","source":"apply_filters('found_users_query', 'SELECT FOUND_ROWS()')"}]},"'get_blogs_of_user'":{"name":"'get_blogs_of_user'","callers":[{"name":"get_blogs_of_user","file":"user.php","line":757,"type":"filter","source":"apply_filters('get_blogs_of_user', $blogs, $user_id, $all)"}]},"'wp_dropdown_users'":{"name":"'wp_dropdown_users'","callers":[{"name":"wp_dropdown_users","file":"user.php","line":1076,"type":"filter","source":"apply_filters('wp_dropdown_users', $output)"}]},"\"edit_user_{$field}\"":{"name":"\"edit_user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1123,"type":"filter","source":"apply_filters(\"edit_user_{$field}\", $value, $user_id)"}]},"\"pre_user_{$field}\"":{"name":"\"pre_user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1134,"type":"filter","source":"apply_filters(\"pre_user_{$field}\", $value)"}]},"\"user_{$field}\"":{"name":"\"user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1141,"type":"filter","source":"apply_filters(\"user_{$field}\", $value, $user_id, $context)"}]},"'validate_username'":{"name":"'validate_username'","callers":[{"name":"validate_username","file":"user.php","line":1233,"type":"filter","source":"apply_filters('validate_username', $valid, $username)"}]},"'pre_user_login'":{"name":"'pre_user_login'","callers":[{"name":"wp_insert_user","file":"user.php","line":1304,"type":"filter","source":"apply_filters('pre_user_login', $user_login)"}]},"'pre_user_nicename'":{"name":"'pre_user_nicename'","callers":[{"name":"wp_insert_user","file":"user.php","line":1317,"type":"filter","source":"apply_filters('pre_user_nicename', $user_nicename)"}]},"'pre_user_url'":{"name":"'pre_user_url'","callers":[{"name":"wp_insert_user","file":"user.php","line":1321,"type":"filter","source":"apply_filters('pre_user_url', $user_url)"}]},"'pre_user_email'":{"name":"'pre_user_email'","callers":[{"name":"wp_insert_user","file":"user.php","line":1325,"type":"filter","source":"apply_filters('pre_user_email', $user_email)"}]},"'pre_user_nickname'":{"name":"'pre_user_nickname'","callers":[{"name":"wp_insert_user","file":"user.php","line":1332,"type":"filter","source":"apply_filters('pre_user_nickname', $nickname)"}]},"'pre_user_first_name'":{"name":"'pre_user_first_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1336,"type":"filter","source":"apply_filters('pre_user_first_name', $first_name)"}]},"'pre_user_last_name'":{"name":"'pre_user_last_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1340,"type":"filter","source":"apply_filters('pre_user_last_name', $last_name)"}]},"'pre_user_display_name'":{"name":"'pre_user_display_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1355,"type":"filter","source":"apply_filters('pre_user_display_name', $display_name)"}]},"'pre_user_description'":{"name":"'pre_user_description'","callers":[{"name":"wp_insert_user","file":"user.php","line":1359,"type":"filter","source":"apply_filters('pre_user_description', $description)"}]},"'profile_update'":{"name":"'profile_update'","callers":[{"name":"wp_insert_user","file":"user.php","line":1419,"type":"action","source":"do_action('profile_update', $user_id, $old_user_data)"}]},"'user_register'":{"name":"'user_register'","callers":[{"name":"wp_insert_user","file":"user.php","line":1421,"type":"action","source":"do_action('user_register', $user_id)"}]},"'user_contactmethods'":{"name":"'user_contactmethods'","callers":[{"name":"_wp_get_user_contactmethods","file":"user.php","line":1544,"type":"filter","source":"apply_filters('user_contactmethods', $user_contactmethods, $user)"}]},"'use_google_chrome_frame'":{"name":"'use_google_chrome_frame'","callers":[{"name":"__main","file":"vars.php","line":55,"type":"filter","source":"apply_filters('use_google_chrome_frame', is_admin())"}]},"'widget_display_callback'":{"name":"'widget_display_callback'","callers":[{"name":"WP_Widget::display_callback","file":"widgets.php","line":180,"type":"filter","source":"apply_filters('widget_display_callback', $instance, $this, $args)"}]},"'widget_update_callback'":{"name":"'widget_update_callback'","callers":[{"name":"WP_Widget::update_callback","file":"widgets.php","line":235,"type":"filter","source":"apply_filters('widget_update_callback', $instance, $new_instance, $old_instance, $this)"}]},"'widget_form_callback'":{"name":"'widget_form_callback'","callers":[{"name":"WP_Widget::form_callback","file":"widgets.php","line":266,"type":"filter","source":"apply_filters('widget_form_callback', $instance, $this)"}]},"'in_widget_form'":{"name":"'in_widget_form'","callers":[{"name":"WP_Widget::form_callback","file":"widgets.php","line":273,"type":"action_reference","source":"do_action_ref_array('in_widget_form', array(&$this, &$return, $instance))"}]},"'register_sidebar'":{"name":"'register_sidebar'","callers":[{"name":"register_sidebar","file":"widgets.php","line":574,"type":"action","source":"do_action('register_sidebar', $sidebar)"}]},"'wp_register_sidebar_widget'":{"name":"'wp_register_sidebar_widget'","callers":[{"name":"wp_register_sidebar_widget","file":"widgets.php","line":647,"type":"action","source":"do_action('wp_register_sidebar_widget', $widget)"}]},"'wp_unregister_sidebar_widget'":{"name":"'wp_unregister_sidebar_widget'","callers":[{"name":"wp_unregister_sidebar_widget","file":"widgets.php","line":703,"type":"action","source":"do_action('wp_unregister_sidebar_widget', $id)"}]},"'dynamic_sidebar_params'":{"name":"'dynamic_sidebar_params'","callers":[{"name":"dynamic_sidebar","file":"widgets.php","line":897,"type":"filter","source":"apply_filters('dynamic_sidebar_params', $params)"}]},"'dynamic_sidebar'":{"name":"'dynamic_sidebar'","callers":[{"name":"dynamic_sidebar","file":"widgets.php","line":901,"type":"action","source":"do_action('dynamic_sidebar', $wp_registered_widgets[$id])"}]},"'sidebars_widgets'":{"name":"'sidebars_widgets'","callers":[{"name":"wp_get_sidebars_widgets","file":"widgets.php","line":1027,"type":"filter","source":"apply_filters('sidebars_widgets', $sidebars_widgets)"}]},"'the_widget'":{"name":"'the_widget'","callers":[{"name":"the_widget","file":"widgets.php","line":1145,"type":"action","source":"do_action('the_widget', $widget, $instance, $args)"}]},"'query'":{"name":"'query'","callers":[{"name":"wpdb::query","file":"wp-db.php","line":1181,"type":"filter","source":"apply_filters('query', $query)"}]}}} \ No newline at end of file diff --git a/filters.php b/filters.php new file mode 100755 index 000000000..e9c0cfc9a --- /dev/null +++ b/filters.php @@ -0,0 +1,46 @@ +<?php +define('QP_INCLUDE_BUILTIN', false); +require dirname(__FILE__) . '/library/class-utility.php'; +require dirname(__FILE__) . '/library/class-phpdoc-parser.php'; + +$data = json_decode(file_get_contents('output.json')); +$filters = json_decode(file_get_contents('filters.json')); +?> +<html> +<head> + <link href="http://localhost/work/Renku/cosmonaut/store/content/themes/roscosmos/bootstrap/css/bootstrap.css" rel="stylesheet" /> +</head> +<body> + <div class="container"> +<?php + +function esc_id($name) { + $name = str_replace(array('"', "'"), '', $name); + $name = str_replace(array('{', '}', '$', ' ', '.', '[', ']'), '_', $name); + return $name; +} + +$data->__main->doc = 'This is a placeholder for the global scope.'; +$filters = (array) $filters->filters; + +echo '<h1>' . count($filters) . ' actions and filters</h1>'; + +foreach ($filters as $name => $filter): +?> + <article id="<?php echo esc_id($name) ?>" class="row"> + <h2><?php echo $name ?></h2> + <p><?php echo $filter->callers[0]->type ?></p> + <div class="span12"> + <h3>Used by</h3> + <ul> +<?php + foreach ($filter->callers as $caller) { + echo '<li><a href="display.php#' . $caller->name .'">' . $caller->name . '()</a>: <code>' . htmlspecialchars($caller->source) .'</code></li>'; + } +?> + </ul> + </div> + </article> +<?php +endforeach; +?> \ No newline at end of file diff --git a/library/QP/NodeVisitor.php b/library/QP/NodeVisitor.php new file mode 100755 index 000000000..a44f0b306 --- /dev/null +++ b/library/QP/NodeVisitor.php @@ -0,0 +1,148 @@ +<?php + +class QP_NodeVisitor extends PHPParser_NodeVisitorAbstract { + protected $file = ''; + protected $location = array(); + protected $printer = null; + public $functions = null; + + public function __construct($file, $repository, &$filters) { + $this->file = $file; + $this->printer = new PHPParser_PrettyPrinter_Default; + $this->functions = $repository; + $this->filters = &$filters; + } + + public function enterNode(PHPParser_Node $node) { + switch ($node->getType()) { + case 'Stmt_Class': + array_push($this->location, $node->name); + break; + case 'Stmt_Function': + case 'Stmt_ClassMethod': + array_push($this->location, $node->name); + $func = $this->getLocation(); + $this->functions[$func]->line = $node->getLine(); + $this->functions[$func]->file = $this->file; + if ($node->getDocComment()) + $this->functions[$func]->doc = $node->getDocComment()->getReformattedText(); + else + $this->functions[$func]->missingDoc = true; + break; + case 'Expr_FuncCall': + $caller = $this->getLocation(); + + if ( $this->isFilter($node) ) { + $filtered = $this->processFilter($node); + if (!$filtered) + break; + + $this->functions[$caller]->filters[] = $filtered; + } + else { + $this->handleCall($node); + } + break; + case 'Expr_MethodCall': + $this->handleCall($node); + break; + } + } + + protected function isFilter(PHPParser_Node $node) { + // Ignore variable functions + if ($node->name->getType() !== 'Name') + return false; + + $calling = (string) $node->name; + if ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' ) { + return true; + } + } + + protected function handleCall(PHPParser_Node $node) { + // Ignore variable functions + if (!is_string($node->name) && $node->name->getType() !== 'Name') + return false; + + $caller = $this->getLocation(); + $callee = (string) $node->name; + + if (empty($this->functions[$caller]->uses[$callee])) + $this->functions[$caller]->uses[$callee] = array(); + + $this->functions[$caller]->uses[$callee][] = $node->getLine(); + + if (empty($this->functions[$callee]->used_by[$caller])) + $this->functions[$callee]->used_by[$caller] = array(); + + $this->functions[$callee]->used_by[$caller][] = $node->getLine(); + } + + protected function processFilter(PHPParser_Node $node) { + $filter = $node->args[0]->value; + $name = ''; + $nameParts = array(); + switch ($filter->getType()) { + case 'Expr_Concat': + case 'Scalar_Encapsed': + $name = $this->printer->prettyPrintExpr($filter); + $nameParts = $filter->parts; + break; + case 'Scalar_String': + $name = "'" . $filter->value . "'"; + $nameParts[] = $name; + break; + case 'Expr_Variable': + return false; + } + + $caller = new QP_Caller; + $caller->name = $this->getLocation(); + $caller->file = $this->file; + $caller->line = $node->getLine(); + $caller->source = $this->printer->prettyPrintExpr($node); + + $args = $node->args; + array_shift($args); + + switch ((string) $node->name) { + case 'do_action': + $caller->type = 'action'; + break; + case 'do_action_ref_array': + $args = $args[0]->value->items; + $caller->type = 'action_reference'; + break; + case 'apply_filters': + $caller->type = 'filter'; + break; + } + #$caller->args = $args; + + $this->filters[$name]->callers[] = $caller; + + return $name; + } + + protected function getLocation() { + $caller = implode('::', $this->location); + if (empty($caller)) + $caller = '__main'; + return $caller; + } + + protected function parsePHPDoc($doc) { + return Codex_Generator_Phpdoc_Parser::parse_doc($function->doc); + } + + public function leaveNode(PHPParser_Node $node) { + switch ($node->getType()) { + case 'Stmt_Class': + case 'Stmt_Function': + case 'Stmt_ClassMethod': + array_pop($this->location); + break; + } + } +} \ No newline at end of file diff --git a/library/class-phpdoc-parser.php b/library/class-phpdoc-parser.php new file mode 100755 index 000000000..c086776a9 --- /dev/null +++ b/library/class-phpdoc-parser.php @@ -0,0 +1,231 @@ +<?php + +class Codex_Generator_Phpdoc_Parser extends Codex_Generator_Utility { + + static $arrays = array(); + static $versions = array(); + static $paths = array(); + + /** + * Parses function information, using PHPDoc and Reflection. + * + * @param string $function Function name. + * + * @return boolean|array false is failed or containing descriptions, tags and parameters + */ + static function parse( $function ) { + + // TODO PHPDoc parameter mismatch + // TODO PHPDoc invalid parameter type + // TODO PHPDoc missing short description + // TODO PHPDoc deprecated + // TODO PHPDoc package/subpackage + + if( isset( self::$arrays[$function] ) ) + return self::$arrays[$function]; + + $reflect = new ReflectionFunction( $function ); + $output = array(); + $output['name'] = $reflect->getName(); + $output['path'] = self::sanitize_path( $reflect->getFileName() ); + + if ( ! in_array( $output['path'], self::$paths ) ) + self::$paths[] = $output['path']; + + $output['line'] = absint( $reflect->getStartLine() ); + + $params = self::parse_params( $reflect->getParameters() ); + $doc = $reflect->getDocComment(); + $output['has_doc'] = ! empty( $doc ); + $doc = self::parse_doc( $doc ); + $output = array_merge( $output, $doc ); + $output['parameters'] = self::merge_params( $params, $doc['tags']['param'] ); + + if ( isset( $output['tags']['since'] ) ) { + $version = self::trim_version( self::sanitize_version( $doc['tags']['since'] ) ); + + if ( ! empty( $version ) ) { + $output['tags']['since'] = $version; + + if ( ! in_array( $version, self::$versions ) ) + self::$versions[] = $version; + } + } + + self::$arrays[$function] = $output; + + return $output; + } + + /** + * Parses PHPDoc + * + * @param string $doc PHPDoc string + * + * @return array of parsed information + */ + static function parse_doc( $doc ) { + + $short_desc = $long_desc = $last_tag = ''; + $tags = array( 'param' => array() ); + $did_short_desc = false; + $did_long_desc = false; + $prepend_short_desc = ''; + $prepend_long_desc = ''; + $doc = explode( "\n", $doc ); + + foreach ( $doc as $line ) { + $line = trim( $line ); + $line = trim( $line, " *\t{}" ); + $line = preg_replace( '/\s+/', ' ', $line ); + + // Start or end + if ('/' == $line) + continue; + + // Empty lines as start + if (empty($line) && !$short_desc) + continue; + + // Tag, also means done with descriptions + if ( '@' == substr( $line, 0, 1 ) ) { + if ( ! $did_long_desc ) + $did_long_desc = $did_short_desc = true; + + $line = trim( $line, '@' ); + list( $tag, $value ) = self::explode( ' ', $line, 2, true ); + $last_tag = $tag; + + if ( ! isset( $tags[$tag] ) ) + $tags[$tag] = $value; + elseif ( ! is_array( $tags[$tag] ) ) + $tags[$tag] = array( $tags[$tag], $value ); + else + $tags[$tag][] = $value; + + continue; + } + + // Short description + if ( ! $did_short_desc ) { + if ( empty( $line ) ) { + $did_short_desc = true; + } + else { + $short_desc .= $prepend_short_desc . $line; + $prepend_short_desc = ' '; + } + + continue; + } + + // Long description + if ( ! $did_long_desc ) { + if ( ! empty( $line ) ) { + if ( '-' == substr( $line, 0, 1 ) ) + $prepend_long_desc .= "\n*"; + + $long_desc .= $prepend_long_desc . $line; + $prepend_long_desc = ' '; + } + else { + $prepend_long_desc = "\n\n"; + } + + continue; + } + + // Additional line for a tag + if ( ! empty( $line ) && ! empty( $last_tag ) ) { + if ( is_array( $tags[$last_tag] ) ) { + end( $tags[$last_tag] ); + $key = key( $tags[$last_tag] ); + $tags[$last_tag][$key] .= ' ' . $line; + } + else { + $tags[$last_tag] .= ' ' . $line; + } + + continue; + } + } + + return compact( 'short_desc', 'long_desc', 'tags' ); + } + + + /** + * Parses parameters from Reflection. + * + * @param array $params of ReflectionParameter objects + * + * @return array of parameters' properties + */ + static function parse_params( $params ) { + + $output = array(); + + foreach ( $params as $param ) { + /** + * @var ReflectionParameter $param + */ + $name = $param->getName(); + $append = array( + 'name' => $name, + 'has_default' => $param->isDefaultValueAvailable(), + 'optional' => $param->isOptional() ? 'optional' : 'required', + ); + + if( $append['has_default'] ) + $append['default'] = $param->getDefaultValue(); + + $output[$name] = $append; + } + + return $output; + } + + /** + * Merges parameter information, obtained from Reflection and PHPDoc. + * + * @param array $from_params info from Reflection + * @param array $from_tags info from PHPDoc + * + * @return array merged info + */ + static function merge_params( $from_params, $from_tags ) { + + foreach ( $from_tags as $param ) { + + // TODO fix case if name is skipped + list( $type, $name, $description ) = self::explode( ' ', $param, 3, '' ); + $name = trim( $name, '$' ); + + // TODO consider merging in order if names are missing in PHPDoc + if( !isset($from_params[$name]) ) + continue; + + if (!empty($type)) + $from_params[$name]['type'] = $type; + + if (!empty($description)) + $from_params[$name]['description'] = $description; + } + + return $from_params; + } + + static function get_versions() { + + usort( self::$versions, 'version_compare' ); + + return self::$versions; + } + + static function get_paths() { + + sort( self::$paths ); + + return self::$paths; + } +} diff --git a/library/class-utility.php b/library/class-utility.php new file mode 100755 index 000000000..fea331c0b --- /dev/null +++ b/library/class-utility.php @@ -0,0 +1,220 @@ +<?php + +class Codex_Generator_Utility { + + /** + * Pads exploded array to target number of elements with default value. + * + * @param string $delimiter + * @param string $string + * @param int $count + * @param mixed $default + * + * @return array + */ + static function explode( $delimiter, $string, $count, $default ) { + + $output = array(); + $pieces = substr_count( $string, $delimiter ) + 1; + + if ($pieces < 2) + $output[] = $string; + elseif ($pieces >= $count) + $output = explode( $delimiter, $string, $count ); + else + $output = explode( $delimiter, $string ); + + while ( $count > count( $output ) ) + $output[] = $default; + + return $output; + } + + /** + * Retrieves relative path to file, containing a function. + * + * @param string $path full local path + * + * @return string file path + */ + static function sanitize_path( $path ) { + + static $abspath, $content, $content_dir, $plugin, $plugin_dir; + + if ( empty( $abspath ) ) { + $abspath = self::trim_and_forward_slashes( ABSPATH ); + $content = self::trim_and_forward_slashes( WP_CONTENT_DIR ); + $content_dir = self::last_dir( $content ); + $plugin = self::trim_and_forward_slashes( WP_PLUGIN_DIR ); + $plugin_dir = self::last_dir( $plugin ); + } + + $path = self::trim_and_forward_slashes( $path ); + + if ( false !== strpos( $path, $plugin ) ) { + $prepend = false !== strpos( $path, $content ) ? "{$content_dir}/{$plugin_dir}" : $plugin_dir; + $path = $prepend . str_replace( $plugin, '', $path ); + } + elseif ( false !== strpos( $path, $content ) ) { + $path = $content_dir . str_replace( $content, '', $path ); + } + else { + $path = str_replace( $abspath, '', $path ); + } + + $path = self::trim_and_forward_slashes( $path ); + + return $path; + } + + /** + * Trims any slashes and turns rest to forward. + * + * @param string $path + * + * @return string + */ + static function trim_and_forward_slashes( $path ) { + + $path = trim( $path, '\/' ); + $path = str_replace( '\\', '/', $path ); + + return $path; + } + + /** + * Returns last level of path. + * + * @param string $path + * + * @return string + */ + static function last_dir( $path ) { + + return array_pop( preg_split( '/[\/\\\]/', $path ) ); + } + + /** + * Cleans up version, changes MU to 3.0.0 + * + * @param string $version + * + * @return string + */ + static function sanitize_version( $version ) { + + if ( 'MU' == trim( $version ) ) + $version = '3.0.0'; + + $version = preg_replace( '/[^\d\.]/', '', $version ); + $version = trim( $version, '.' ); + + return $version; + } + + /** + * @param string $compare + * + * @return string + */ + static function sanitize_compare( $compare ) { + + $valid_compare = self::get_compare(); + $compare = html_entity_decode( $compare ); + + if ( in_array( $compare, $valid_compare ) ) + return $compare; + + return '='; + } + + /** + * @return array + */ + static function get_compare() { + + return array( '=', '>', '>=', '<', '<=', '!=' ); + } + + /** + * Trims trailing zero on major versions. + * + * @param string $version + * + * @return string + */ + static function trim_version( $version ) { + + if ( strlen( $version ) > 3 && '.0' === substr( $version, - 2 ) ) + $version = substr( $version, 0, 3 ); + + return $version; + } + + /** + * Adjust type names to forms, supported by Codex. + * + * @param mixed $type + * @param string $context + * + * @return string + */ + static function type_to_string( $type, $context = '' ) { + + if ( 'wiki' == $context ) + $type = str_replace( '|', '|', $type ); + + if ( false === strpos( $type, 'boolean' ) ) + $type = str_replace( 'bool', 'boolean', $type ); + + return $type; + } + + /** + * Turns mixed type values into string representation. + * + * @param mixed $value + * + * @return string + */ + static function value_to_string( $value ) { + + if ( is_null( $value ) ) + $value = 'null'; + + elseif ( is_bool( $value ) ) + $value = $value ? 'true' : 'false'; + + elseif ( is_string( $value ) && empty( $value ) ) + $value = "''"; + + elseif ( is_array( $value ) ) + if ( empty( $value ) ) + $value = 'array()'; + else + $value = "array( '" . implode( "','", $value ) . "')"; + + return $value; + } + + /** + * Get link markup for function reference. + * + * @param string $function + * @param string $anchor + * + * @return string + */ + static function get_codex_link( $function, $anchor = '' ) { + + $link = esc_html( 'codex.wordpress.org/Function_Reference/' . $function ); + $href = esc_url( $link ); + + if( $anchor ) + $link = $anchor; + + $link = "<a href='{$href}'>{$link}</a>"; + + return $link; + } +} \ No newline at end of file diff --git a/output.json b/output.json new file mode 100755 index 000000000..4f47297a4 --- /dev/null +++ b/output.json @@ -0,0 +1 @@ +{"_wp_admin_bar_init":{"doc":"\/**\n * Instantiate the admin bar object and set it up as a global for access elsewhere.\n *\n * To hide the admin bar, you're looking in the wrong place. Unhooking this function will not\n * properly remove the admin bar. For that, use show_admin_bar(false) or the show_admin_bar filter.\n *\n * @since 3.1.0\n * @access private\n * @return bool Whether the admin bar was successfully initialized.\n *\/","file":"admin-bar.php","line":18,"missingDoc":false,"filters":["'wp_admin_bar_class'"],"uses":{"is_admin_bar_showing":[21],"class_exists":[29],"initialize":[34],"add_menus":[35]},"used_by":[]},"is_admin_bar_showing":{"doc":"\/**\n * Determine whether the admin bar should be showing.\n *\n * @since 3.1.0\n *\n * @return bool Whether the admin bar should be showing.\n *\/","file":"admin-bar.php","line":729,"missingDoc":false,"filters":["'show_admin_bar'"],"uses":{"defined":[733,733,733],"is_admin":[737],"_get_admin_bar_pref":[744],"is_user_logged_in":[741]},"used_by":{"_wp_admin_bar_init":[21],"wp_admin_bar_render":[55],"get_body_class":[513]}},"__main":{"doc":"","file":"","line":0,"missingDoc":false,"filters":["'atom_ns'","'atom_comments_ns'","'comments_atom_head'","'the_title_rss'","'comment_atom_entry'","'atom_ns'","'atom_head'","'atom_author'","'atom_entry'","'rdf_ns'","'rss_update_period'","'rss_update_frequency'","'rdf_header'","'rdf_item'","'rss_head'","'rss_item'","'rss2_ns'","'rss2_comments_ns'","'rss_update_period'","'rss_update_frequency'","'commentsrss2_head'","'the_title_rss'","'commentrss2_item'","'rss2_ns'","'rss_update_period'","'rss_update_frequency'","'rss2_head'","'rss2_item'","'load_feed_engine'","'template_redirect'","'exit_on_http_head'","'do_robots'","'template_include'","'comment_form'","'comment_form'","'use_google_chrome_frame'"],"uses":{"add_action":[39,66,67,392,506,536,183,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,218,221,222,223,227,232,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,263,264,265,268,269,272,273,276,282,283,1201,1282,1283,1284,1285,1392,1393,1300,151,18,19,20,21,25,26,29,32,37,38,39,40,41,48,51,1777,165,1562,870,874,121,582,1420,1601,1638,1671,434,435,437,438,439,440,441,443,444,445,446,447,449],"class_exists":[3,836,2,2,8,6,182,10,13,19,11,105,145,185,200,12,230,11],"define":[62,67,72,77,82,87,92,108,113,119,124,130,135,141,147,153,159,165,171,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,368,373,378,383,388,393,398,403,408,413,418,423,428,433,438,443,448,453,458,463,10,11,12,13,14,15,16,17,18,19,20,22,23,24,11,12,13,14,15,45,11,12,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,26,27,28,15,20,25,30,35],"version_compare":[38],"function_exists":[648,32,10,16,35,64,77,122,37,60,33,18,39,56,73,98,115,136,9,43,60,111,125,148,177,460,492,504,565,592,639,688,718,736,794,822,852,881,900,928,979,1084,1167,1188,1225,1243,1275,1296,1384,1401,1428,1478,1507,1554,1578,1677,389,821,865,900,15],"spl_autoload_register":[41],"gmdate":[119,16,26,54,58],"_deprecated_file":[6,7,7,8,18,10,10,10,10,10],"basename":[6,7,7,8,18,10,10,10,10,13,10,10,10,10,10,10],"add_filter":[17,18,19,26,27,29,34,40,42,47,48,49,54,56,62,63,64,70,71,73,78,83,87,88,92,97,98,99,104,105,109,110,115,116,117,118,123,127,128,131,132,133,135,136,137,138,139,140,142,143,144,145,146,147,149,150,151,152,153,154,156,158,160,163,164,165,166,167,168,169,170,171,172,173,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,194,279,286,289,17,24,33,36,44,45,46,47,54,56,58,59,66,1836,1865,494,5449,5468,5482,5506,5522,871,872,875,335,29,71],"is_admin":[24,38,55,69,72,20,55],"defined":[231,3,44,55,57,17,84,83,95,117,6,25,431],"header":[8,8,8,8,8,8,13,14,15,16,17,18,19,10,24,25,26,27,32,41,43,47,50,56,57,58,91,98,56],"feed_content_type":[8,8,8,8,8,8],"get_option":[8,9,8,11,45,8,11,45,8,11,8,10,8,11,43,15,14,16,25,25,69,68,64],"bloginfo_rss":[13,25,30,34,38,38,39,40,57,75,80,15,16,19,20,24,24,39,50,21,22,23,24,14,15,16,19,29,30,24,26,27,29],"printf":[19,21,23,52,54,22,24,26,44,46,232,14,38,56,67,71,118,26,65,72,87,17,19,20,32,35,38,41,44,47],"ent2ncr":[19,21,23,52,54,22,24,26,44,46,54],"__":[19,21,23,52,54,22,24,26,44,46,54,232,35,121,122,7,7,10,10,14,38,56,67,71,118,10,10,58,58,65,72,87,10,10,17,19,19,19,20,10,10,10,10,32,35,35,38,38,41,44,47,55,63],"get_the_title_rss":[19,22],"is_search":[20,33,23,28,43,27],"get_bloginfo_rss":[21,23,24,26],"get_search_query":[21,34,24,44],"get_wp_title_rss":[23,26],"is_singular":[18,29,49,21,41,36],"mysql2date":[27,66,67,22,25,42,17,31,51,28,38],"get_lastcommentmodified":[27,31],"comments_link_feed":[30,37],"esc_url":[31,32,51,54,35],"get_post_comments_feed_link":[31,32,51,54,35],"home_url":[34,232,45],"get_search_comments_feed_link":[35,36],"have_comments":[44,44,36,36,25],"the_comment":[44,36],"get_post":[45,37,46],"get_the_title":[50,42,27],"get_comment_author_rss":[52,54,44,46,50],"comment_link":[57,69,71,49],"comment_author_rss":[60],"get_comment_author_url":[61,61],"comment_guid":[65,80,52],"get_comment_time":[66,67,51,56],"get_the_password_form":[69,55,48],"comment_text":[71,58,55],"post_password_required":[68,53,47,16],"the_guid":[75,40,42],"the_permalink_rss":[75,39,46,50,33,39,41,26,29,36],"get_comment":[77],"get_comment_link":[80],"wp_title_rss":[19,22,14,24],"get_lastpostmodified":[22,25,17,28],"bloginfo":[25,15,16,18,16,16,18,20,21,29,29,31,45,46],"self_link":[26,28,25],"have_posts":[29,32,38,22,33,31,30],"the_post":[29,32,38,22,33,31],"the_author":[32,43,39],"get_the_author_meta":[33],"the_author_meta":[34],"html_type_rss":[38,44,46],"the_title_rss":[38,40,24,35],"get_post_modified_time":[41],"get_post_time":[42,38],"the_category_rss":[43,44,40],"the_excerpt_rss":[44,46,48,25,44,46,51],"the_content_feed":[46,49],"atom_enclosure":[48],"get_comments_number":[50,51,52,55,26,27],"rewind_posts":[38],"is_single":[29,34,27],"comment_text_rss":[57],"get_the_content_feed":[47],"strlen":[48,63,66],"rss_enclosure":[56],"wp_mce_translation":[564],"error_reporting":[10,7,19],"dirname":[13,14,15,16,19,9,12,12,10,11,10,10,17,17,13,15,17],"getRequestParam":[25],"fopen":[38],"feof":[42,78],"fread":[43],"fclose":[45,81],"file_get_contents":[48],"parse_url":[57],"fsockopen":[71],"intval":[71],"fputs":[74],"fgets":[79],"explode":[84],"decode":[93],"call_user_func_array":[98],"encode":[110],"get_bloginfo":[10,17,19,19,35,35,38,38,41,41,44,44,47,47],"language_attributes":[13,13],"_e":[16,162,163,164,165,171,172,173,174,175,179,180,181,182,183,184,185,186,187,191,192,195,195,195,195,196,196,197,197,198,198,200,200,201,201,202,202,203,203,204,204,207,209,209,209,209,210,210,211,211,212,212,213,213,214,214,215,215,216,216,217,217,220,222,223,224,229,231,233,234,33,35,62,66,75,80,85,90,103,108,114,17,49,72,77,77,80,80,83,21,57,69,73,74],"wp_admin_css":[19],"is_rtl":[140],"esc_attr_e":[162,163,164,165,237,245,245,98,72,91,73,74,75],"esc_attr__":[232],"time":[26,58],"get_file":[35,36,30],"stripos":[30,53,54,61,76],"array_map":[450],"wp_kses_array_lc":[452,453],"add_shortcode":[609,610,658],"remove_filter":[62,63,33],"is_multisite":[14],"ms_file_constants":[17],"status_header":[22,28,77],"rtrim":[26,39],"str_replace":[26,47,45,89],"is_file":[27,72],"wp_check_filetype":[32],"mime_content_type":[34],"substr":[39,28,29,30,31,32,27,42,41,64,66,68,70,36],"strrpos":[39],"filesize":[43],"strpos":[42,26,64,68,67,70,69,63,65,65,67,67,69,71,71,51,87,87,93,93,99],"filemtime":[54],"md5":[55],"stripslashes":[61],"trim":[66,29],"strtotime":[68,71],"readfile":[82],"ms_subdomain_constants":[21],"addslashes":[25],"wp_load_translations_early":[34,120],"wp_die":[35,122],"preg_replace":[44,46,30],"wpmu_current_site":[48],"get_var":[50,62,121],"prepare":[50,60,62],"wp_cache_get":[53,74],"get_blog_details":[55,76,101],"wp_cache_set":[57,78],"get_row":[60],"htmlspecialchars":[66],"in_array":[72],"is_subdomain_install":[52,83],"is_object":[83],"ms_not_installed":[104],"get_current_site_name":[114],"set_prefix":[126],"set_blog_id":[127],"get_blog_prefix":[128],"wp_start_object_cache":[133],"ms_upload_constants":[136],"_deprecated_function":[95,112,133,169],"ini_set":[14],"is_feed":[17],"do_feed":[18],"is_trackback":[20],"is_robots":[14],"get_search_template":[28],"is_tax":[29],"get_taxonomy_template":[29],"is_front_page":[30],"get_front_page_template":[30],"is_home":[31,66],"get_home_template":[31],"is_attachment":[32],"get_attachment_template":[32],"get_single_template":[34],"is_page":[35,66],"get_page_template":[35],"is_category":[36,31,26],"get_category_template":[36],"is_tag":[37],"get_tag_template":[37],"is_author":[38],"get_author_template":[38],"is_date":[39],"get_date_template":[39],"is_archive":[40],"get_archive_template":[40],"is_comments_popup":[41],"get_comments_popup_template":[41],"is_paged":[42,27],"get_paged_template":[42],"get_index_template":[44],"is_404":[27,30,26],"get_404_template":[27],"sprintf":[10,10,10,10,10,10,10,10,10,10],"the_title":[14],"get_trackback_url":[38],"pings_open":[37],"wp_get_current_commenter":[43],"extract":[44],"get_approved_comments":[45],"comment_ID":[54],"comment_type":[56],"get_comment_author_link":[56],"get_comment_date":[56],"get_comment_ID":[56],"allowed_tags":[67,87],"get_edit_user_link":[71,72],"wp_logout_url":[71,72],"get_permalink":[71,65,72],"esc_attr":[74,79,84,97,76,79,82],"comments_open":[65,44,54],"timer_stop":[118,20],"_n":[26],"number_format_i18n":[27],"previous_comments_link":[30,39],"next_comments_link":[31,40],"wp_list_comments":[35],"comment_form_title":[58],"cancel_comment_reply_link":[61],"wp_login_url":[65],"is_user_logged_in":[70,64],"comment_id_fields":[92],"get_num_queries":[20],"wp_footer":[28],"wp_title":[18],"wp_enqueue_script":[36],"wp_head":[38],"body_class":[40],"get_search_form":[17],"single_cat_title":[32],"is_day":[34,26],"get_the_time":[35,38,41],"is_month":[37,26],"is_year":[40,27],"esc_html":[44],"wp_list_pages":[55],"wp_get_archives":[59],"wp_list_categories":[63],"wp_list_bookmarks":[67],"wp_register":[71],"wp_loginout":[72],"wp_meta":[76],"dynamic_sidebar":[15],"is_main_site":[431],"is_network_admin":[431,22],"preg_match":[23,25,27,34,40],"is_user_admin":[24],"strtolower":[35,41]},"used_by":[]},"add_action":{"doc":"\/**\n * Hooks a function on to a specific action.\n *\n * Actions are the hooks that the WordPress core launches at specific points\n * during execution, or when specific events occur. Plugins can specify that\n * one or more of its PHP functions are executed at these points, using the\n * Action API.\n *\n * @uses add_filter() Adds an action. Parameter list and functionality are the same.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The name of the action to which the $function_to_add is hooked.\n * @param callback $function_to_add The name of the function you wish to be called.\n * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.\n * @param int $accepted_args optional. The number of arguments the function accept (default 1).\n *\/","file":"plugin.php","line":333,"missingDoc":false,"filters":[],"uses":{"add_filter":[334]},"used_by":{"__main":[39,66,67,392,506,536,183,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,218,221,222,223,227,232,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,263,264,265,268,269,272,273,276,282,283,1201,1282,1283,1284,1285,1392,1393,1300,151,18,19,20,21,25,26,29,32,37,38,39,40,41,48,51,1777,165,1562,870,874,121,582,1420,1601,1638,1671,434,435,437,438,439,440,441,443,444,445,446,447,449],"wp_admin_bar_appearance_menu":[595],"WP_Admin_Bar::initialize":[44,46,56],"WP_Admin_Bar::add_menus":[469,470,471,474,475,476,477,481,482,484,486],"WP_Customize_Image_Control::__construct":[488],"WP_Customize_Manager::__construct":[37,38,41,51,53,54,55],"WP_Customize_Manager::setup_theme":[128],"WP_Customize_Manager::customize_preview_init":[333,334,335,336],"_WP_Editors::editor_settings":[160,161,163,164],"WP_Embed::__construct":[29,32],"WP_Scripts::__construct":[35],"WP_Widget_Recent_Posts::__construct":[539,540,541],"WP_Widget_Recent_Comments::__construct":[640,642,643],"wp_maybe_load_widgets":[2698],"add_thickbox":[2121],"wp_print_media_templates":[71],"wp_enqueue_media":[1547,1548],"register_activation_hook":[624],"register_deactivation_hook":[649],"register_post_type":[1337,1344],"wp_get_post_autosave":[4997],"add_feed":[93],"_custom_header_background_just_in_time":[1399,1412],"WP_Widget_Factory::WP_Widget_Factory":[320]}},"wp_admin_bar_render":{"doc":"\/**\n * Render the admin bar to the page based on the $wp_admin_bar->menu member var.\n * This is called very late on the footer actions so that it will render after anything else being\n * added to the footer.\n *\n * It includes the action \"admin_bar_menu\" which should be used to hook in and\n * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point,\n * right before the admin bar is rendered. This also gives you access to the $post global, among others.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":52,"missingDoc":false,"filters":["'admin_bar_menu'","'wp_before_admin_bar_render'","'wp_after_admin_bar_render'"],"uses":{"is_admin_bar_showing":[55],"is_object":[55],"render":[62]},"used_by":[]},"wp_admin_bar_wp_menu":{"doc":"\/**\n * Add the WordPress logo menu.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":74,"missingDoc":false,"filters":[],"uses":{"add_menu":[75,86,95,103,111,119],"self_admin_url":[78,90],"__":[80,89,98,99,106,107,114,115,122,123],"is_user_logged_in":[84]},"used_by":[]},"self_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for either the current blog or the network depending on context.\n *\n * @package WordPress\n * @since 3.1.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2207,"missingDoc":false,"filters":[],"uses":{"network_admin_url":[2209],"is_user_admin":[2210],"user_admin_url":[2211],"admin_url":[2213],"is_network_admin":[2208]},"used_by":{"wp_admin_bar_wp_menu":[78,90],"get_edit_user_link":[1077]}},"__":{"doc":"\/**\n * Retrieves the translation of $text. If there is no translation, or\n * the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @since 2.1.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":96,"missingDoc":false,"filters":[],"uses":{"translate":[97]},"used_by":{"wp_admin_bar_wp_menu":[80,89,98,99,106,107,114,115,122,123],"wp_admin_bar_my_account_item":[141,151],"wp_admin_bar_my_account_menu":[192,198],"wp_admin_bar_site_menu":[225,227,247,255,265],"wp_admin_bar_my_sites_menu":[292,305,312,318,324,330,362,370,379,387],"wp_admin_bar_shortlink_menu":[411],"wp_admin_bar_appearance_menu":[580,589,598,601,604,607],"wp_admin_bar_search_menu":[646],"AtomParser::parse":[133],"the_author":[55],"get_the_author_link":[137],"the_author_posts_link":[204],"wp_list_authors":[318],"_walk_bookmarks":[81],"wp_list_bookmarks":[205],"WP_User::__isset":[590],"WP_User::__get":[610],"WP_User::__set":[636],"WP_User::has_cap":[920],"get_category_parents":[59],"get_the_category_list":[161,174,177,184,197,200,207],"wp_list_categories":[414,422],"Walker_Category::start_el":[830,845],"the_tags":[1017],"WP_Http::request":[122,125,145],"WP_Http::_dispatch_request":[244],"WP_Http_Fsockopen::request":[742,782],"WP_Http_Streams::request":[866,924,943,966],"WP_Http_Curl::request":[1123,1164,1183],"WP_Admin_Bar::add_node":[96],"WP_Customize_Control::render_content":[292],"WP_Customize_Color_Control::__construct":[344],"WP_Customize_Image_Control::__construct":[480,484,485],"WP_Customize_Background_Image_Control::__construct":[656,663],"WP_Customize_Header_Image_Control::__construct":[729,739,740,741,742],"WP_Customize_Header_Image_Control::prepare_control":[768],"WP_Customize_Manager::wp_die":[83],"WP_Customize_Manager::register_controls":[717,728,739,746,762,768,783,791,811,833,837,838,839,840,850,854,855,856,866,870,871,891,894,898,926,929,940,944,945,956,968],"_WP_Editors::editor":[115],"_WP_Editors::editor_settings":[295],"_WP_Editors::wp_fullscreen_html":[664,664,682,683,685,686,688,689,691,692,694,727,736],"_WP_Editors::wp_link_query":[788],"WP_Image_Editor_GD::load":[87,94,98],"WP_Image_Editor_GD::resize":[151],"WP_Image_Editor_GD::_resize":[157,169],"WP_Image_Editor_GD::crop":[249],"WP_Image_Editor_GD::rotate":[273],"WP_Image_Editor_GD::flip":[303],"WP_Image_Editor_GD::_save":[335,343,347,350],"WP_Image_Editor_Imagick::load":[120,129],"WP_Image_Editor_Imagick::update_size":[193],"WP_Image_Editor_Imagick::resize":[223],"WP_Theme::__construct":[208,210,214,218,236,255,267,271],"WP_Theme::markup_header":[656,663],"wp_xmlrpc_server::login":[181,188],"wp_xmlrpc_server::initialise_blog_option_info":[311,316,321,326,331,336,341,346,351,356,363,368,373,378,383,388,393,398,403,408,413,418,423,428,433],"wp_xmlrpc_server::minimum_args":[514],"wp_xmlrpc_server::_insert_post":[1003,1009,1011,1013,1016,1025,1030,1039,1044,1049,1082,1087,1100,1121,1124,1131,1144,1147,1166,1173,1217],"wp_xmlrpc_server::wp_editPost":[1258,1263],"wp_xmlrpc_server::wp_deletePost":[1318,1322,1327],"wp_xmlrpc_server::wp_getPost":[1400,1404],"wp_xmlrpc_server::wp_getPosts":[1459,1465],"wp_xmlrpc_server::wp_newTerm":[1545,1550,1559,1563,1572,1589],"wp_xmlrpc_server::wp_editTerm":[1633,1638,1651,1657,1662,1671,1688],"wp_xmlrpc_server::wp_deleteTerm":[1725,1730,1738,1746],"wp_xmlrpc_server::wp_getTerm":[1792,1797,1805],"wp_xmlrpc_server::wp_getTerms":[1845,1850],"wp_xmlrpc_server::wp_getTaxonomy":[1924,1929],"wp_xmlrpc_server::wp_getUser":[2037,2042],"wp_xmlrpc_server::wp_getUsers":[2090,2106],"wp_xmlrpc_server::wp_getProfile":[2157],"wp_xmlrpc_server::wp_editProfile":[2200,2234],"wp_xmlrpc_server::wp_getPage":[2265,2268,2278],"wp_xmlrpc_server::wp_getPages":[2306],"wp_xmlrpc_server::wp_deletePage":[2382,2386,2391],"wp_xmlrpc_server::wp_editPage":[2423,2427],"wp_xmlrpc_server::wp_getPageList":[2466],"wp_xmlrpc_server::wp_getAuthors":[2517],"wp_xmlrpc_server::wp_getTags":[2552],"wp_xmlrpc_server::wp_newCategory":[2597,2625,2627],"wp_xmlrpc_server::wp_deleteCategory":[2657],"wp_xmlrpc_server::wp_suggestCategories":[2688],"wp_xmlrpc_server::wp_getComment":[2724,2729],"wp_xmlrpc_server::wp_getComments":[2765],"wp_xmlrpc_server::wp_deleteComment":[2825,2828,2831],"wp_xmlrpc_server::wp_editComment":[2880,2883,2886,2895,2927],"wp_xmlrpc_server::wp_newComment":[2960,2973,2976,3002,3004],"wp_xmlrpc_server::wp_getCommentStatusList":[3040],"wp_xmlrpc_server::wp_getCommentCount":[3067],"wp_xmlrpc_server::wp_getPostStatusList":[3099],"wp_xmlrpc_server::wp_getPageStatusList":[3125],"wp_xmlrpc_server::wp_getPageTemplates":[3151],"wp_xmlrpc_server::wp_setOptions":[3229],"wp_xmlrpc_server::wp_getMediaItem":[3278,3283],"wp_xmlrpc_server::wp_getMediaLibrary":[3323],"wp_xmlrpc_server::wp_getPostFormats":[3364],"wp_xmlrpc_server::wp_getPostType":[3432,3437],"wp_xmlrpc_server::wp_getRevisions":[3532,3535,3539],"wp_xmlrpc_server::wp_restoreRevision":[3593,3596,3599,3602,3606],"wp_xmlrpc_server::blogger_getUserInfo":[3704],"wp_xmlrpc_server::blogger_getPost":[3740,3743],"wp_xmlrpc_server::blogger_getRecentPosts":[3792],"wp_xmlrpc_server::blogger_getTemplate":[3831],"wp_xmlrpc_server::blogger_setTemplate":[3841],"wp_xmlrpc_server::blogger_newPost":[3869,3889],"wp_xmlrpc_server::blogger_editPost":[3924,3929,3934,3945],"wp_xmlrpc_server::blogger_deletePost":[3978,3981,3986],"wp_xmlrpc_server::mw_newPost":[4055,4066,4070,4079,4084,4092,4121,4125,4128,4133,4275,4296],"wp_xmlrpc_server::mw_editPost":[4373,4376,4380,4384,4390,4425,4429,4432,4535,4537,4573,4592],"wp_xmlrpc_server::mw_getPost":[4634,4637,4733],"wp_xmlrpc_server::mw_getCategories":[4872],"wp_xmlrpc_server::mw_newMediaObject":[4925,4952,4961],"wp_xmlrpc_server::mt_getRecentPostTitles":[5019],"wp_xmlrpc_server::mt_getCategoryList":[5071],"wp_xmlrpc_server::mt_getPostCategories":[5109,5112],"wp_xmlrpc_server::mt_setPostCategories":[5155,5158],"wp_xmlrpc_server::mt_getTrackbackPings":[5221],"wp_xmlrpc_server::mt_publishPost":[5267,5270],"wp_xmlrpc_server::pingback_ping":[5315,5355,5362,5365,5369,5373,5381,5393,5429,5450],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5476,5483],"get_comment_author":[30],"comments_number":[580,582,584],"comment_type":[679,680],"trackback_url":[726],"comments_popup_link":[973,974,975,976,986,1013],"get_comment_reply_link":[1038,1039],"get_post_reply_link":[1099,1100],"get_cancel_comment_reply_link":[1139],"comment_form_title":[1196,1197],"Walker_Comment::start_el":[1354,1364,1364],"comment_form":[1524,1526,1528,1532,1536,1537,1538,1539,1542,1543,1544,1545],"get_comment_statuses":[420],"wp_allow_comment":[679,681],"check_comment_flood_db":[738,740],"wp_set_comment_status":[1462],"wp_clear_scheduled_hook":[159],"wp_get_schedules":[321,322,323],"WP_Widget_Pages::__construct":[17,18],"WP_Widget_Pages::widget":[24],"WP_Widget_Links::__construct":[93,94],"WP_Widget_Search::__construct":[193,194],"WP_Widget_Archives::__construct":[236,237],"WP_Widget_Archives::widget":[244,252],"WP_Widget_Meta::__construct":[301,302],"WP_Widget_Meta::widget":[307,316,317,318],"WP_Widget_Calendar::__construct":[352,353],"WP_Widget_Text::__construct":[393,395],"WP_Widget_Categories::__construct":[443,444],"WP_Widget_Categories::widget":[450,462],"WP_Widget_Recent_Posts::__construct":[535,536],"WP_Widget_Recent_Posts::widget":[561],"WP_Widget_Recent_Comments::__construct":[635,636],"WP_Widget_Recent_Comments::widget":[677],"WP_Widget_RSS::__construct":[739,741],"WP_Widget_RSS::widget":[777],"wp_widget_rss_output":[831,847,861],"wp_widget_rss_form":[939],"WP_Widget_Tag_Cloud::__construct":[1030,1031],"WP_Widget_Tag_Cloud::widget":[1041],"WP_Nav_Menu_Widget::__construct":[1097,1098],"WP_Nav_Menu_Widget::form":[1135],"start_wp":[62],"dropdown_cats":[707],"get_links":[987],"get_the_attachment_link":[1898],"get_boundary_post_rel_link":[2732,2732],"wp_admin_bar_dashboard_view_site_menu":[2847,2849,2851],"wp_explain_nonce":[3175],"wp_load_image":[3225,3228,3235],"__main":[19,21,23,52,54,22,24,26,44,46,54,232,35,121,122,7,7,10,10,14,38,56,67,71,118,10,10,58,58,65,72,87,10,10,17,19,19,19,20,10,10,10,10,32,35,35,38,38,41,44,47,55,63],"wp_trim_words":[2177],"sanitize_option":[2765,2852,2862,2903],"wp_sprintf_l":[3056,3058,3060],"do_feed":[1009],"is_blog_installed":[1153],"wp_upload_dir":[1623],"wp_upload_bits":[1720,1724,1746,1752],"wp_nonce_ays":[2019,2021,2022,2024,2026],"_default_wp_die_handler":[2100,2112],"wp_widgets_add_menu":[2713],"_deprecated_function":[2861,2863],"_deprecated_file":[2901,2903],"_deprecated_argument":[2945,2947],"_doing_it_wrong":[2979,2980,2981],"wp_timezone_choice":[3376,3425],"wp_print_scripts":[29],"wp_register_script":[56],"wp_localize_script":[90],"wp_deregister_script":[109],"wp_enqueue_script":[129],"wp_dequeue_script":[153],"wp_script_is":[179],"wp_print_styles":[30],"wp_add_inline_style":[57],"wp_register_style":[85],"wp_deregister_style":[106],"wp_enqueue_style":[137],"wp_dequeue_style":[159],"wp_style_is":[186],"get_search_form":[162],"wp_loginout":[189,191],"wp_login_form":[261,262,263,264],"wp_register":[341,345],"get_bloginfo":[410,410],"wp_title":[580,585],"wp_get_archives":[937],"get_calendar":[1172,1180],"feed_links":[1602,1604],"feed_links_extra":[1625,1627,1629,1631,1633,1635],"paginate_links":[1930,1931,1978],"wp_mce_translation":[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,81,82,83,84,85,89,90,91,92,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95,95,95,95,95,96,96,96,96,96,96,96,100,104,108,109,113,114,115,116,117,121,122,126,130,131,135,139,143,144,148,152,156,157,158,159,160,161,165,169,170,171,172,173,177,178,179,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,206,210,214,215,219,223,227,231,232,233,234,235,236,237,238,239,240,244,248,249,250,251,252,253,254,255,256,257,261,265,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,501,502,503,504,505,506,507,508,509,510,511,512,513,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],"post_comments_feed_link":[514],"edit_term_link":[725],"edit_post_link":[932],"edit_comment_link":[1007],"edit_bookmark_link":[1048],"get_adjacent_post":[1149],"get_adjacent_post_rel_link":[1221,1221],"adjacent_post_link":[1389,1389],"get_next_posts_link":[1535],"get_previous_posts_link":[1606],"get_posts_nav_link":[1642,1643],"get_next_comments_link":[1744],"get_previous_comments_link":[1781],"the_shortlink":[2427],"wp_check_php_mysql_versions":[108,113],"wp_set_wpdb_vars":[370],"wp_not_installed":[428],"WP_Locale::init":[99,100,101,102,103,104,105,109,109,110,110,111,111,112,112,113,113,114,114,115,115,122,122,123,123,124,124,125,125,126,126,127,127,128,128,131,132,133,134,135,136,137,138,139,140,141,142,146,146,147,147,148,148,149,149,150,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,164,165,166,167,173,177],"wp_print_media_templates":[93,99,319,320,321,322],"wp_get_image_editor":[1187],"wp_plupload_default_settings":[1264],"wp_prepare_attachment_for_js":[1365,1366,1367,1368],"wp_enqueue_media":[1490,1491,1492,1493,1494,1499,1500,1503,1504,1507,1508,1509,1510,1511,1512,1513,1513,1514,1514,1515,1518,1521,1522,1525,1526,1527,1528,1529,1530,1531,1532],"ms_subdomain_constants":[126,128],"add_user_to_blog":[185],"remove_user_from_blog":[247],"create_empty_blog":[290,297],"wpmu_validate_user_signup":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"wpmu_validate_blog_signup":[562,565,568,571,574,578,584,591,602,606,617],"wpmu_signup_blog_notification":[740,750],"wpmu_signup_user_notification":[793,801],"wpmu_activate_signup":[837,841,843,859,867],"wpmu_create_blog":[968,974],"newblog_notify_siteadmin":[1027,1034],"newuser_notify_siteadmin":[1062,1068],"install_blog":[1142,1142],"wpmu_welcome_notification":[1222,1258],"wpmu_welcome_user_notification":[1306],"upload_is_file_too_big":[1610],"signup_nonce_check":[1641],"maybe_add_existing_user_to_blog":[1686,1688,1688],"welcome_user_msg_filter":[1849],"ms_site_check":[89,96,103],"wpmu_current_site":[219,221],"ms_not_installed":[237,241,242,244,246,247,248,249],"wp_update_nav_menu_object":[226,233],"wp_update_nav_menu_item":[275],"wp_setup_nav_menu_item":[612],"wp_protect_special_option":[109],"wp_authenticate":[479],"check_admin_referer":[808],"wp_notify_postauthor":[1019,1021,1022,1023,1024,1025,1026,1028,1030,1032,1033,1034,1035,1037,1039,1041,1042,1043,1044,1046,1049,1051,1053,1054],"wp_notify_moderator":[1118,1120,1121,1122,1125,1127,1128,1129,1132,1134,1135,1136,1137,1138,1142,1144,1146,1147,1153],"wp_password_change_notification":[1179,1183],"wp_new_user_notification":[1207,1208,1209,1211,1216,1217,1220],"register_uninstall_hook":[679],"get_the_title":[110,113],"get_the_content":[186],"get_the_excerpt":[267],"wp_link_pages":[633,635,636],"wp_list_pages":[818],"wp_page_menu":[899],"wp_get_attachment_link":[1166],"get_the_password_form":[1226,1227],"wp_post_revision_title":[1306,1308],"wp_list_post_revisions":[1401],"create_initial_post_types":[58,59,80,81,98,99],"set_post_format":[808],"get_post_statuses":[866,867,868,869],"get_page_statuses":[887,888,889],"register_post_type":[1238],"get_post_type_labels":[1499,1499,1500,1500,1501,1501,1502,1502,1503,1503,1504,1504,1505,1505,1506,1507,1507],"get_post_mime_types":[2194,2194,2195,2195,2196,2196],"wp_get_recent_posts":[2633],"wp_insert_post":[2731,2797,2872,2888,2935],"_wp_post_revision_fields":[4881,4882,4883],"_wp_put_post_revision":[5076],"_show_post_preview":[5251],"is_archive":[143],"is_post_type_archive":[164],"is_attachment":[184],"is_author":[208],"is_category":[232],"is_tag":[256],"is_tax":[285],"is_comments_popup":[305],"is_date":[325],"is_day":[345],"is_feed":[366],"is_comment_feed":[386],"is_front_page":[416],"is_home":[445],"is_month":[465],"is_page":[492],"is_paged":[512],"is_preview":[532],"is_robots":[552],"is_search":[572],"is_single":[601],"is_singular":[628],"is_time":[648],"is_trackback":[668],"is_year":[688],"is_404":[708],"WP_Query::get_posts":[1958],"wp_default_scripts":[71,78,79,80,81,82,83,84,85,86,87,88,89,100,101,106,186,187,188,189,190,191,204,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,274,275,276,279,280,291,292,293,294,295,318,319,320,321,322,323,326,348,349,356,357,366,367,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,402,416,417,418,424,429,430,438,439,440,441,452,457,458,459,460,467,468],"wp_just_in_time_script_localization":[579,580],"create_initial_taxonomies":[68,69,81,82,83,85,86,87,88,89],"register_taxonomy":[335],"get_taxonomy_labels":[429,429,430,431,431,432,433,434,434,435,435,436,436,437,437,438,438,439,440,441],"get_objects_in_term":[518],"get_term":[875,880],"get_term_children":[1009],"get_terms":[1197],"wp_get_object_terms":[1901],"wp_insert_term":[2045,2052,2055,2093,2097,2104,2108,2114],"wp_set_object_terms":[2176,2238],"wp_update_term":[2353,2379,2412],"get_term_link":[3002],"is_object_in_term":[3163],"wp_get_update_data":[357],"wp_authenticate_username_password":[79,82,90,95,101,110],"wp_authenticate_cookie":[135],"wp_insert_user":[1310,1313,1328],"wp_update_user":[1456],"_wp_get_user_contactmethods":[1540,1541,1542],"WP_Widget::form":[67],"register_sidebars":[488,490],"register_sidebar":[558],"wpdb::select":[846],"wpdb::print_error":[1029,1031],"wpdb::db_connect":[1145],"wpdb::check_database_version":[1652]}},"is_user_logged_in":{"doc":"\/**\n * Checks if the current visitor is a logged in user.\n *\n * @since 2.0.0\n *\n * @return bool True if user is logged in, false if not logged in.\n *\/","file":"pluggable.php","line":726,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[727],"exists":[729]},"used_by":{"wp_admin_bar_wp_menu":[84],"wp_admin_bar_site_menu":[212],"wp_admin_bar_my_sites_menu":[283],"is_admin_bar_showing":[741],"WP_Admin_Bar::initialize":[30],"WP_Customize_Manager::setup_theme":[114],"WP::send_headers":[324,329],"comment_form":[1561,1555],"wp_loginout":[188],"wp_register":[339],"user_can_richedit":[1757],"get_body_class":[510],"wp_count_posts":[2129],"get_posts_by_author_sql":[4501],"WP_Query::get_posts":[2203,2504,2704],"__main":[70,64]}},"wp_admin_bar_my_account_item":{"doc":"\/**\n * Add the \"My Account\" item.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":132,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[133],"wp_get_current_user":[134],"get_edit_profile_url":[135],"get_avatar":[140],"sprintf":[141],"__":[141,151],"add_menu":[144]},"used_by":[]},"get_current_user_id":{"doc":"\/**\n * Get the current user's ID\n *\n * @since MU\n *\n * @uses wp_get_current_user\n *\n * @return int The current user's ID\n *\/","file":"user.php","line":208,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[209]},"used_by":{"wp_admin_bar_my_account_item":[133],"wp_admin_bar_my_account_menu":[162],"map_meta_cap":[1039,1089,1143],"is_super_admin":[1450],"WP_Admin_Bar::initialize":[32,34],"wp_admin_bar_dashboard_view_site_menu":[2843],"is_blog_user":[2869],"get_edit_user_link":[1064,1074],"is_site_admin":[47],"is_user_spammy":[1751],"wp_notify_postauthor":[1003],"wp_default_scripts":[65],"get_user_option":[240],"is_user_member_of_blog":[775],"setup_userdata":[964]}},"wp_get_current_user":{"doc":"\/**\n * Retrieve the current user object.\n *\n * @since 2.0.3\n *\n * @return WP_User Current user WP_User object\n *\/","file":"pluggable.php","line":51,"missingDoc":false,"filters":[],"uses":{"get_currentuserinfo":[54]},"used_by":{"wp_admin_bar_my_account_item":[134],"wp_admin_bar_my_account_menu":[163],"map_meta_cap":[1039,1089,1143],"current_user_can":[1281],"current_user_can_for_blog":[1305],"is_super_admin":[1451],"WP::init":[473],"comment_form":[1518],"wp_default_editor":[1781],"switch_to_blog":[546],"restore_current_blog":[607],"is_user_option_local":[1808],"wp_user_settings":[540],"get_all_user_settings":[667],"wp_set_all_user_settings":[702],"delete_all_user_settings":[733],"is_user_logged_in":[727],"wp_verify_nonce":[1257],"wp_create_nonce":[1285],"wp_count_posts":[2124],"get_current_user_id":[209],"wp_update_user":[1481]}},"get_edit_profile_url":{"doc":"\/**\n * Get the URL to the user's profile editor.\n *\n * @since 3.1.0\n *\n * @param int $user User ID\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Dashboard url link with optional path appended.\n *\/","file":"link-template.php","line":2293,"missingDoc":false,"filters":["'edit_profile_url'"],"uses":{"user_admin_url":[2297],"is_network_admin":[2298],"network_admin_url":[2299],"get_dashboard_url":[2301],"is_user_admin":[2296]},"used_by":{"wp_admin_bar_my_account_item":[135],"wp_admin_bar_my_account_menu":[164],"get_edit_user_link":[1075]}},"get_avatar":{"doc":"\/**\n * Retrieve the avatar for a user who provided a user ID or email address.\n *\n * @since 2.5\n * @param int|string|object $id_or_email A user ID, email address, or comment object\n * @param int $size Size of the avatar image\n * @param string $default URL to a default image to use if no avatar is available\n * @param string $alt Alternative text to use in image tag. Defaults to blank\n * @return string <img> tag for the user's avatar\n*\/","file":"pluggable.php","line":1589,"missingDoc":false,"filters":["'get_avatar_comment_types'","'get_avatar'"],"uses":{"get_option":[1590,1626,1664],"esc_attr":[1596],"is_numeric":[1598,1602],"get_userdata":[1604,1615],"is_object":[1607],"in_array":[1610],"md5":[1634],"strtolower":[1634],"trim":[1634],"sprintf":[1640],"hexdec":[1640],"is_ssl":[1636],"includes_url":[1648],"strpos":[1655],"add_query_arg":[1656],"urlencode":[1662]},"used_by":{"wp_admin_bar_my_account_item":[140],"wp_admin_bar_my_account_menu":[174],"Walker_Comment::start_el":[1353]}},"wp_admin_bar_my_account_menu":{"doc":"\/**\n * Add the \"My Account\" submenu items.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":161,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[162],"wp_get_current_user":[163],"get_edit_profile_url":[164],"add_group":[169],"get_avatar":[174],"add_menu":[180,189,195],"__":[192,198],"wp_logout_url":[199]},"used_by":[]},"wp_logout_url":{"doc":"\/**\n * Returns the Log Out URL.\n *\n * Returns the URL that allows the user to log out of the site\n *\n * @since 2.7.0\n * @uses wp_nonce_url() To protect against CSRF\n * @uses site_url() To generate the log in URL\n * @uses apply_filters() calls 'logout_url' hook on final logout url\n *\n * @param string $redirect Path to redirect to on logout.\n * @return string A log out URL.\n *\/","file":"general-template.php","line":212,"missingDoc":false,"filters":["'logout_url'"],"uses":{"urlencode":[215],"add_query_arg":[218],"site_url":[218],"wp_nonce_url":[219]},"used_by":{"wp_admin_bar_my_account_menu":[199],"WP_Admin_Bar::_render":[357],"comment_form":[1537],"wp_nonce_ays":[2022],"wp_loginout":[191],"__main":[71,72]}},"wp_admin_bar_site_menu":{"doc":"\/**\n * Add the \"Site Name\" menu.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":208,"missingDoc":false,"filters":[],"uses":{"is_user_logged_in":[212],"is_user_member_of_blog":[216],"is_super_admin":[216],"get_bloginfo":[219],"preg_replace":[222],"get_home_url":[222],"sprintf":[225,227],"__":[225,227,247,255,265],"esc_html":[225,227],"is_user_admin":[226],"is_network_admin":[224],"wp_html_excerpt":[230],"trim":[232],"add_menu":[234,244,252,262],"is_admin":[237,242],"home_url":[237,248],"admin_url":[237,266],"network_admin_url":[256],"get_current_blog_id":[256],"is_blog_admin":[251],"is_multisite":[251],"current_user_can":[251],"wp_admin_bar_appearance_menu":[270]},"used_by":[]},"is_user_member_of_blog":{"doc":"\/**\n * Find out whether a user is a member of a given blog.\n *\n * @since MU 1.1\n * @uses get_blogs_of_user()\n *\n * @param int $user_id Optional. The unique ID of the user. Defaults to the current user.\n * @param int $blog_id Optional. ID of the blog to check. Defaults to the current site.\n * @return bool\n *\/","file":"user.php","line":770,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[775],"get_current_blog_id":[778],"get_blogs_of_user":[780],"array_key_exists":[781]},"used_by":{"wp_admin_bar_site_menu":[216],"is_blog_user":[2869],"wp_notify_postauthor":[995]}},"is_super_admin":{"doc":"\/**\n * Determine if user is a site admin.\n *\n * @since 3.0.0\n *\n * @param int $user_id (Optional) The ID of a user. Defaults to the current user.\n * @return bool True if the user is a site admin.\n *\/","file":"capabilities.php","line":1449,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1451],"get_userdata":[1453],"get_current_user_id":[1450],"exists":[1455],"get_super_admins":[1459],"is_array":[1460],"in_array":[1460],"has_cap":[1463],"is_multisite":[1458]},"used_by":{"wp_admin_bar_site_menu":[216],"wp_admin_bar_my_sites_menu":[287,296,340],"WP_User::has_cap":[929],"map_meta_cap":[1010,1183,1192,1205,1221,1238,1246],"get_dashboard_url":[2270,2264],"is_site_admin":[57],"wpmu_validate_blog_signup":[570],"wpmu_create_blog":[992],"ms_site_check":[82],"wp_user_settings":[543],"wp_set_all_user_settings":[705],"wp_authenticate_username_password":[98]}},"get_bloginfo":{"doc":"\/**\n * Retrieve information about the blog.\n *\n * Some show parameter values are deprecated and will be removed in future\n * versions. These options will trigger the _deprecated_argument() function.\n * The deprecated blog info options are listed in the function contents.\n *\n * The possible values for the 'show' parameter are listed below.\n * <ol>\n * <li><strong>url<\/strong> - Blog URI to homepage.<\/li>\n * <li><strong>wpurl<\/strong> - Blog URI path to WordPress.<\/li>\n * <li><strong>description<\/strong> - Secondary title<\/li>\n * <\/ol>\n *\n * The feed URL options can be retrieved from 'rdf_url' (RSS 0.91),\n * 'rss_url' (RSS 1.0), 'rss2_url' (RSS 2.0), or 'atom_url' (Atom feed). The\n * comment feeds can be retrieved from the 'comments_atom_url' (Atom comment\n * feed) or 'comments_rss2_url' (RSS 2.0 comment feed).\n *\n * @since 0.71\n *\n * @param string $show Blog info to retrieve.\n * @param string $filter How to filter what is retrieved.\n * @return string Mostly string values, might be empty.\n *\/","file":"general-template.php","line":405,"missingDoc":false,"filters":["'bloginfo_url'","'bloginfo'"],"uses":{"_deprecated_argument":[410],"sprintf":[410,410],"__":[410,410],"home_url":[412],"site_url":[415],"get_option":[418,439,452,455,459,479],"get_feed_link":[421,424,427,430,433,436],"get_stylesheet_uri":[442],"get_stylesheet_directory_uri":[445],"get_template_directory_uri":[449],"get_locale":[466],"str_replace":[467],"is_rtl":[472],"function_exists":[471],"strpos":[484,485,486]},"used_by":{"wp_admin_bar_site_menu":[219],"WP_Http::request":[89,132],"WP::send_headers":[320],"weblog_ping":[1950],"get_index_rel_link":[2775,2775],"get_bloginfo_rss":[29],"get_the_category_rss":[327],"html_type_rss":[359],"cache_javascript_headers":[955],"wp_nonce_ays":[2021],"bloginfo":[377],"feed_links":[1609,1610],"feed_links_extra":[1645,1651,1656,1661,1664,1667],"rsd_link":[1682],"wlwmanifest_link":[1693],"language_attributes":[1864],"wp_admin_css_uri":[2059],"get_the_generator":[2190,2193,2205],"__main":[10,17,19,19,35,35,38,38,41,41,44,44,47,47],"get_pagenum_link":[1433,1455],"filter_SSL":[1899],"wp_mail":[422],"wp_default_scripts":[57],"wp_default_styles":[499],"wp_update_plugins":[202],"wp_update_themes":[307]}},"get_home_url":{"doc":"\/**\n * Retrieve the home url for a given site.\n *\n * Returns the 'home' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":1902,"missingDoc":false,"filters":["'home_url'"],"uses":{"get_option":[1906,1909],"switch_to_blog":[1908],"restore_current_blog":[1910],"is_multisite":[1905],"parse_url":[1917],"is_ssl":[1914],"is_admin":[1914],"in_array":[1913],"set_url_scheme":[1920],"ltrim":[1923],"is_string":[1922],"strpos":[1922]},"used_by":{"wp_admin_bar_site_menu":[222],"WP_Admin_Bar::initialize":[35],"home_url":[1884]}},"esc_html":{"doc":"\/**\n * Escaping for HTML blocks.\n *\n * @since 2.8.0\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2671,"missingDoc":false,"filters":["'esc_html'"],"uses":{"wp_check_invalid_utf8":[2672],"_wp_specialchars":[2673]},"used_by":{"wp_admin_bar_site_menu":[225,227],"sanitize_bookmark_field":[358],"WP_oEmbed::data2html":[286],"WP_Customize_Control::render_content":[240,249,260,266,277],"WP_Customize_Color_Control::render_content":[385],"WP_Customize_Upload_Control::render_content":[442],"WP_Customize_Image_Control::render_content":[526,546],"WP_Customize_Section::render":[83],"_WP_Editors::wp_link_query":[794],"WP_Embed::maybe_make_link":[273],"wp_xmlrpc_server::wp_getTags":[2564,2565],"wp_xmlrpc_server::mw_getCategories":[4885,4886],"wp_xmlrpc_server::pingback_ping":[5433],"get_cancel_comment_reply_link":[1142],"WP_Widget_RSS::widget":[770],"wp_widget_rss_output":[872,894],"the_content_rss":[1714],"wp_specialchars":[2127],"sanitize_option":[2810],"wp_pre_kses_less_than_callback":[2965],"do_feed":[1009],"wp_nonce_url":[1177],"wp_timezone_choice":[3412,3445],"wp_login_form":[279,283,287],"feed_links_extra":[1645],"esc_html__":[129],"esc_html_e":[170],"esc_html_x":[213],"wp_print_media_templates":[93,93,330,365],"wpmu_admin_do_redirect":[244],"wpmu_signup_blog_notification":[736],"wpmu_signup_user_notification":[789],"wpmu_welcome_notification":[1251],"wpmu_welcome_user_notification":[1299],"wp_update_nav_menu_object":[226,233],"wp_protect_special_option":[109],"Walker_PageDropdown::start_el":[1119],"wp_rss":[889],"get_rss":[924],"sanitize_term_field":[1647],"__main":[44],"wp_version_check":[110],"wp_dropdown_users":[1063,1070],"sanitize_user_field":[1127],"wp_widget_description":[671],"wp_sidebar_description":[692]}},"is_user_admin":{"doc":"\/**\n * Whether the current request is for a user admin screen \/wp-admin\/user\/\n *\n * Does not inform on whether the user is an admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress user administration pages.\n *\/","file":"load.php","line":642,"missingDoc":false,"filters":[],"uses":{"in_admin":[644],"defined":[645]},"used_by":{"wp_admin_bar_site_menu":[226],"WP_Admin_Bar::add_menus":[480],"self_admin_url":[2210],"get_edit_profile_url":[2296],"auth_redirect":[760],"__main":[24]}},"is_network_admin":{"doc":"\/**\n * Whether the current request is for a network admin screen \/wp-admin\/network\/\n *\n * Does not inform on whether the user is a network admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress network administration pages.\n *\/","file":"load.php","line":623,"missingDoc":false,"filters":[],"uses":{"in_admin":[625],"defined":[626]},"used_by":{"wp_admin_bar_site_menu":[224],"WP_Admin_Bar::add_menus":[480],"add_thickbox":[2120],"load_default_textdomain":[398],"self_admin_url":[2208],"get_edit_profile_url":[2298],"get_currentuserinfo":[101],"__main":[431,22]}},"wp_html_excerpt":{"doc":"\/**\n * Safely extracts not more than the first $count characters from html string.\n *\n * UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT*\n * be counted as one character. For example & will be counted as 4, < as\n * 3, etc.\n *\n * @since 2.5.0\n *\n * @param integer $str String to get the excerpt from.\n * @param integer $count Maximum number of characters to take.\n * @return string The excerpt.\n *\/","file":"formatting.php","line":3093,"missingDoc":false,"filters":[],"uses":{"wp_strip_all_tags":[3094],"mb_substr":[3095],"preg_replace":[3097]},"used_by":{"wp_admin_bar_site_menu":[230],"WP_Customize_Manager::register_controls":[900],"do_trackbacks":[1759],"wp_widget_rss_output":[864]}},"is_admin":{"doc":"\/**\n * Whether the current request is for a network or blog admin page\n *\n * Does not inform on whether the user is an admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 1.5.1\n *\n * @return bool True if inside WordPress administration pages.\n *\/","file":"load.php","line":585,"missingDoc":false,"filters":[],"uses":{"in_admin":[587],"defined":[588]},"used_by":{"wp_admin_bar_site_menu":[237,242],"wp_admin_bar_edit_menu":[425],"wp_admin_bar_search_menu":[641],"is_admin_bar_showing":[737],"redirect_canonical":[42],"WP_Customize_Manager::setup_theme":[112],"WP_Customize_Manager::wp_loaded":[280],"WP_Customize_Manager::wp_redirect_status":[296],"_WP_Editors::editor_settings":[159],"_WP_Editors::editor_js":[641],"WP_Theme::get_allowed_on_site":[1146],"WP::handle_404":[507],"__main":[24,38,55,69,72,20,55],"wp_widget_rss_output":[830],"wp_admin_bar_dashboard_view_site_menu":[2846],"load_default_textdomain":[395],"get_pagenum_link":[1432],"get_home_url":[1914],"network_home_url":[2143],"image_constrain_size_for_editor":[40],"ms_not_installed":[239],"wp_get_nav_menu_items":[531],"wp_user_settings":[534],"get_the_title":[108],"get_post_class":[325],"register_post_type":[1293],"_post_format_request":[5445],"WP_Query::parse_query":[1594],"wp_default_scripts":[344],"script_concat_settings":[853],"register_taxonomy":[345],"switch_theme":[694],"get_theme_mods":[753],"add_editor_style":[1211],"remove_editor_styles":[1236],"_custom_header_background_just_in_time":[1401,1414],"_wp_customize_include":[1630],"wp_get_sidebars_widgets":[1015],"wp_convert_widget_settings":[1091,1111,1116]}},"home_url":{"doc":"\/**\n * Retrieve the home url for the current site.\n *\n * Returns the 'home' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @uses get_home_url()\n *\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":1883,"missingDoc":false,"filters":[],"uses":{"get_home_url":[1884]},"used_by":{"wp_admin_bar_site_menu":[237,248],"wp_admin_bar_my_sites_menu":[388],"wp_admin_bar_search_menu":[644],"get_author_posts_url":[223,232],"redirect_canonical":[125,314],"wp_redirect_admin_locations":[514,515,516,526,527],"wp_list_categories":[460],"WP_Admin_Bar::initialize":[39],"WP_Customize_Manager::customize_preview_base":[352],"wp_xmlrpc_server::wp_getUsersBlogs":[491],"WP::parse_request":[154],"comments_popup_link":[993],"weblog_ping":[1949],"WP_Widget_Categories::widget":[471],"WP_Widget_RSS::widget":[759],"wp_admin_bar_dashboard_view_site_menu":[2847],"__main":[34,232,45],"self_link":[490],"get_search_form":[161],"get_bloginfo":[412],"wp_get_archives":[1008],"get_allowed_http_origins":[250],"get_permalink":[160,163],"get_post_permalink":[200,206],"get_page_link":[244],"_get_page_link":[278,281],"get_attachment_link":[325],"get_year_link":[345,347],"get_month_link":[370,372],"get_day_link":[400,402],"get_feed_link":[442,450],"get_post_comments_feed_link":[487,489],"get_author_feed_link":[541],"get_term_feed_link":[603,606,609],"get_search_link":[754,759],"get_post_type_archive_link":[846,848],"get_pagenum_link":[1425],"network_home_url":[2138],"wp_get_shortlink":[2364],"maybe_add_existing_user_to_blog":[1686,1688],"_wp_menu_item_classes_by_context":[317,384,397],"wp_validate_redirect":[968],"wp_page_menu":[905],"is_local_attachment":[3854,3856],"url_to_postid":[309,313,322,325,320],"WP_Rewrite::rewrite_rules":[1525],"WP_Rewrite::mod_rewrite_rules":[1648],"get_term_link":[3021,3036],"preview_theme_ob_filter_callback":[638],"_wp_customize_loader_settings":[1649],"wp_customize_support_script":[1705],"wp_version_check":[64,82,85]}},"admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the current site.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":1990,"missingDoc":false,"filters":[],"uses":{"get_admin_url":[1991]},"used_by":{"wp_admin_bar_site_menu":[237,266],"wp_admin_bar_my_sites_menu":[293,356,363,371,380],"wp_admin_bar_new_content_menu":[529,542],"wp_admin_bar_comments_menu":[566],"wp_admin_bar_appearance_menu":[580,598,601,604,607],"wp_redirect_admin_locations":[521],"_WP_Editors::editor_js":[642],"WP_Embed::maybe_run_ajax_cache":[82],"WP_Nav_Menu_Widget::form":[1135],"wp_admin_bar_dashboard_view_site_menu":[2851],"wp_register":[345],"register_admin_color_schemes":[2038,2040],"wp_admin_css_uri":[2057],"get_allowed_http_origins":[249],"get_edit_term_link":[699],"get_edit_post_link":[911],"get_delete_post_link":[967],"get_edit_comment_link":[986],"get_edit_bookmark_link":[1027],"get_shortcut_link":[1854],"network_admin_url":[2168],"self_admin_url":[2213],"get_dashboard_url":[2267,2271],"wp_print_media_templates":[97],"wp_plupload_default_settings":[1261],"wp_enqueue_media":[1460],"maybe_add_existing_user_to_blog":[1688],"check_admin_referer":[810],"wp_safe_redirect":[922],"wp_notify_postauthor":[1051,1053,1054],"wp_notify_moderator":[1142,1144,1146,1147,1151],"wp_default_scripts":[333],"_wp_customize_loader_settings":[1648,1658],"wp_customize_url":[1682],"wp_customize_support_script":[1704]}},"network_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the network.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2166,"missingDoc":false,"filters":["'network_admin_url'"],"uses":{"admin_url":[2168],"is_multisite":[2167],"network_site_url":[2170],"ltrim":[2173],"is_string":[2172],"strpos":[2172]},"used_by":{"wp_admin_bar_site_menu":[256],"wp_admin_bar_my_sites_menu":[306,313,319,325],"wp_admin_bar_updates_menu":[628],"self_admin_url":[2209],"get_edit_profile_url":[2299],"newblog_notify_siteadmin":[1020],"newuser_notify_siteadmin":[1061]}},"get_current_blog_id":{"doc":"\/**\n * Retrieve the current blog id\n *\n * @since 3.1.0\n *\n * @return int Blog id\n *\/","file":"load.php","line":675,"missingDoc":false,"filters":[],"uses":{"absint":[677]},"used_by":{"wp_admin_bar_site_menu":[256],"WP_Admin_Bar::initialize":[38],"WP_Theme::get_allowed_on_site":[1108,1113],"wp_upload_dir":[1562,1564],"is_main_site":[3226],"get_dashboard_url":[2269],"get_blog_details":[170],"get_blog_option":[384,386],"add_blog_option":[419,421],"delete_blog_option":[444,446],"update_blog_option":[472],"wp_user_settings":[544],"wp_set_all_user_settings":[706],"get_blogs_of_user":[695],"is_user_member_of_blog":[778],"count_users":[878]}},"is_blog_admin":{"doc":"\/**\n * Whether the current request is for a blog admin screen \/wp-admin\/\n *\n * Does not inform on whether the user is a blog admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress network administration pages.\n *\/","file":"load.php","line":604,"missingDoc":false,"filters":[],"uses":{"in_admin":[606],"defined":[607]},"used_by":{"wp_admin_bar_site_menu":[251],"get_currentuserinfo":[101]}},"is_multisite":{"doc":"\/**\n * Whether Multisite support is enabled\n *\n * @since 3.0.0\n *\n * @return bool True if multisite is enabled, false otherwise.\n *\/","file":"load.php","line":658,"missingDoc":false,"filters":[],"uses":{"defined":[659,662,662,662]},"used_by":{"wp_admin_bar_site_menu":[251],"wp_admin_bar_my_sites_menu":[283],"WP_Object_Cache::__construct":[630],"redirect_canonical":[284],"WP_User::has_cap":[929],"map_meta_cap":[1010,1183,1192,1205,1221,1228,1238,1244],"current_user_can_for_blog":[1302,1315],"is_super_admin":[1458],"WP_Admin_Bar::initialize":[33],"WP_Theme::is_allowed":[1048],"WP_Theme::get_allowed_on_site":[1107],"wp_xmlrpc_server::wp_getUsersBlogs":[460],"wp_xmlrpc_server::blogger_getUsersBlogs":[3628],"wp_initial_constants":[20],"wp_admin_bar_dashboard_view_site_menu":[2848],"wp_upload_dir":[1546,1552],"is_main_site":[3222],"global_terms_enabled":[3241],"get_locale":[39],"load_default_textdomain":[390],"get_home_url":[1905],"get_site_url":[1964],"network_site_url":[2106],"network_home_url":[2137],"network_admin_url":[2167],"get_dashboard_url":[2266],"wp_not_installed":[426],"wp_get_active_and_valid_plugins":[492],"wp_print_media_templates":[52],"wp_plupload_default_settings":[1290],"__main":[14],"get_active_blog_for_user":[76],"wp_load_alloptions":[138,152],"wp_load_core_site_options":[171],"get_site_option":[767],"add_site_option":[815],"delete_site_option":[862],"update_site_option":[910],"wp_delete_attachment":[4101],"WP_Rewrite::rewrite_rules":[1536],"wp_get_themes":[50],"wp_version_check":[54],"wp_authenticate_username_password":[92],"WP_User_Query::prepare_query":[497],"get_blogs_of_user":[694],"wpdb::init_charset":[620],"wpdb::set_prefix":[675,686],"wpdb::get_blog_prefix":[736],"wpdb::tables":[781,789],"wpdb::print_error":[1040]}},"current_user_can":{"doc":"\/**\n * Whether current user has capability or role.\n *\n * @since 2.0.0\n *\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1280,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1281],"array_slice":[1286],"func_get_args":[1286],"array_merge":[1287],"call_user_func_array":[1289]},"used_by":{"wp_admin_bar_site_menu":[251],"wp_admin_bar_my_sites_menu":[366,375],"wp_admin_bar_edit_menu":[432,470,460],"wp_admin_bar_new_content_menu":[492,495,498,501,508,518,518],"wp_admin_bar_comments_menu":[553],"wp_admin_bar_appearance_menu":[579,579,582],"WP_Customize_Manager::setup_theme":[119,130],"_WP_Editors::editor":[100],"wp_xmlrpc_server::get_custom_fields":[254],"wp_xmlrpc_server::set_custom_fields":[287,289,292],"wp_xmlrpc_server::wp_getUsersBlogs":[487],"wp_xmlrpc_server::_insert_post":[1010,1015,1015,1024,1029,1038,1043,1086,1123,1146,1172],"wp_xmlrpc_server::wp_deletePost":[1321],"wp_xmlrpc_server::wp_getPost":[1403],"wp_xmlrpc_server::wp_getPosts":[1464,1499],"wp_xmlrpc_server::wp_newTerm":[1549],"wp_xmlrpc_server::wp_editTerm":[1637],"wp_xmlrpc_server::wp_deleteTerm":[1729],"wp_xmlrpc_server::wp_getTerm":[1796],"wp_xmlrpc_server::wp_getTerms":[1849],"wp_xmlrpc_server::wp_getTaxonomy":[1928],"wp_xmlrpc_server::wp_getTaxonomies":[1974],"wp_xmlrpc_server::wp_getUser":[2036],"wp_xmlrpc_server::wp_getUsers":[2089,2119],"wp_xmlrpc_server::wp_getProfile":[2156],"wp_xmlrpc_server::wp_editProfile":[2199],"wp_xmlrpc_server::wp_getPage":[2267],"wp_xmlrpc_server::wp_getPages":[2305,2318],"wp_xmlrpc_server::wp_deletePage":[2385],"wp_xmlrpc_server::wp_editPage":[2426],"wp_xmlrpc_server::wp_getPageList":[2465],"wp_xmlrpc_server::wp_getAuthors":[2516],"wp_xmlrpc_server::wp_getTags":[2551],"wp_xmlrpc_server::wp_newCategory":[2596],"wp_xmlrpc_server::wp_deleteCategory":[2656],"wp_xmlrpc_server::wp_suggestCategories":[2687],"wp_xmlrpc_server::wp_getComment":[2723],"wp_xmlrpc_server::wp_getComments":[2764],"wp_xmlrpc_server::wp_deleteComment":[2824,2830],"wp_xmlrpc_server::wp_editComment":[2879,2885],"wp_xmlrpc_server::wp_getCommentStatusList":[3039],"wp_xmlrpc_server::wp_getCommentCount":[3066],"wp_xmlrpc_server::wp_getPostStatusList":[3098],"wp_xmlrpc_server::wp_getPageStatusList":[3124],"wp_xmlrpc_server::wp_getPageTemplates":[3150],"wp_xmlrpc_server::wp_setOptions":[3228],"wp_xmlrpc_server::wp_getMediaItem":[3277],"wp_xmlrpc_server::wp_getMediaLibrary":[3322],"wp_xmlrpc_server::wp_getPostFormats":[3363],"wp_xmlrpc_server::wp_getPostType":[3436],"wp_xmlrpc_server::wp_getPostTypes":[3482],"wp_xmlrpc_server::wp_getRevisions":[3534,3549],"wp_xmlrpc_server::wp_restoreRevision":[3601],"wp_xmlrpc_server::blogger_getUsersBlogs":[3641],"wp_xmlrpc_server::blogger_getUserInfo":[3703],"wp_xmlrpc_server::blogger_getPost":[3742],"wp_xmlrpc_server::blogger_getRecentPosts":[3797],"wp_xmlrpc_server::blogger_newPost":[3868,3868],"wp_xmlrpc_server::blogger_editPost":[3928,3933],"wp_xmlrpc_server::blogger_deletePost":[3980],"wp_xmlrpc_server::mw_newPost":[4083,4085,4120,4124],"wp_xmlrpc_server::mw_editPost":[4375,4424,4428,4536,4534],"wp_xmlrpc_server::mw_getPost":[4636],"wp_xmlrpc_server::mw_getRecentPosts":[4769],"wp_xmlrpc_server::mw_getCategories":[4871],"wp_xmlrpc_server::mw_newMediaObject":[4924,4960],"wp_xmlrpc_server::mt_getRecentPostTitles":[5026],"wp_xmlrpc_server::mt_getCategoryList":[5070],"wp_xmlrpc_server::mt_getPostCategories":[5111],"wp_xmlrpc_server::mt_setPostCategories":[5157],"wp_xmlrpc_server::mt_publishPost":[5269,5269],"wp_comment_form_unfiltered_html_nonce":[816],"check_comment_flood_db":[727],"WP_Widget_Text::update":[412],"wp_widget_rss_output":[830],"wp_upload_bits":[1723],"kses_init_filters":[1332],"kses_init":[1388],"get_edit_term_link":[685],"edit_term_link":[721],"get_edit_post_link":[908],"get_delete_post_link":[962],"get_edit_comment_link":[983],"edit_comment_link":[1003],"get_edit_bookmark_link":[1024],"edit_bookmark_link":[1044],"get_edit_user_link":[1066],"wp_prepare_attachment_for_js":[1354,1359],"wp_post_revision_title":[1311],"wp_list_post_revisions":[1381,1383],"wp_count_posts":[2131],"wp_insert_post":[2767,2915],"wp_insert_attachment":[4036],"get_posts_by_author_sql":[4498],"WP_Query::get_posts":[2468,2474,2508,2710,2718,2726],"preview_theme":[556],"wp_get_update_data":[336,342,350,348]}},"wp_admin_bar_appearance_menu":{"doc":"\/**\n * Add appearance submenu items to the \"Site Name\" menu.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":576,"missingDoc":false,"filters":[],"uses":{"add_group":[577],"add_menu":[580,586,598,601,604,607],"__":[580,589,598,601,604,607],"admin_url":[580,598,601,604,607],"current_user_can":[579,579,582],"is_ssl":[585],"add_query_arg":[590],"urlencode":[590],"wp_customize_url":[590],"add_action":[595],"current_theme_supports":[597,600,600,603,606]},"used_by":{"wp_admin_bar_site_menu":[270]}},"wp_admin_bar_my_sites_menu":{"doc":"\/**\n * Add the \"My Sites\/[Site Name]\" menu and all submenus.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":279,"missingDoc":false,"filters":[],"uses":{"is_user_logged_in":[283],"is_multisite":[283],"count":[287],"is_super_admin":[287,296,340],"add_menu":[290,302,309,315,321,327,352,359,367,376,384],"__":[292,305,312,318,324,330,362,370,379,387],"admin_url":[293,356,363,371,380],"add_group":[297,336],"network_admin_url":[306,313,319,325],"network_home_url":[331],"switch_to_blog":[345],"current_user_can":[366,375],"get_post_type_object":[366],"home_url":[388],"restore_current_blog":[391]},"used_by":[]},"network_home_url":{"doc":"\/**\n * Retrieve the home url for the current network.\n *\n * Returns the home url with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":2134,"missingDoc":false,"filters":["'network_home_url'"],"uses":{"home_url":[2138],"is_multisite":[2137],"is_ssl":[2143],"is_admin":[2143],"in_array":[2142],"set_url_scheme":[2148],"ltrim":[2151],"is_string":[2150],"strpos":[2150]},"used_by":{"wp_admin_bar_my_sites_menu":[331],"get_blogaddress_by_name":[51,55],"maybe_redirect_404":[1655]}},"switch_to_blog":{"doc":"\/**\n * Switch the current blog.\n *\n * This function is useful if you need to pull posts, or other information,\n * from other blogs. You can switch back afterwards using restore_current_blog().\n *\n * Things that aren't switched:\n * - autoloaded options. See #14992\n * - plugins. See #14941\n *\n * @see restore_current_blog()\n * @since MU\n *\n * @param int $new_blog The id of the blog you want to switch to. Default: current blog\n * @param bool $deprecated Deprecated argument\n * @return bool True on success, false if the validation failed\n *\/","file":"ms-blogs.php","line":501,"missingDoc":false,"filters":["'switch_blog'","'switch_blog'"],"uses":{"set_blog_id":[518],"wp_cache_switch_to_blog":[524],"is_object":[528],"wp_cache_init":[533],"wp_cache_add_global_groups":[537,539],"is_array":[536],"wp_cache_add_non_persistent_groups":[540],"function_exists":[535,523],"reinit":[545],"wp_get_current_user":[546],"for_blog":[547],"did_action":[544]},"used_by":{"wp_admin_bar_my_sites_menu":[345],"wp_cache_switch_to_blog":[194],"current_user_can_for_blog":[1303],"WP_Theme::get_allowed_on_site":[1118,1129,1151],"wp_xmlrpc_server::wp_getUsersBlogs":[485],"get_home_url":[1908],"get_site_url":[1967],"get_blog_details":[231],"update_blog_details":[333],"get_blog_option":[389],"add_blog_option":[424],"delete_blog_option":[449],"update_blog_option":[475],"get_blog_post":[158],"add_user_to_blog":[179],"remove_user_from_blog":[220],"create_empty_blog":[299],"get_blog_permalink":[316],"wpmu_create_blog":[976],"newblog_notify_siteadmin":[1022]}},"get_post_type_object":{"doc":"\/**\n * Retrieve a post type object by name\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_types\n * @see register_post_type\n * @see get_post_types\n *\n * @param string $post_type The name of a registered post type\n * @return object A post type object\n *\/","file":"post.php","line":1094,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_admin_bar_my_sites_menu":[366],"wp_admin_bar_edit_menu":[431,459],"redirect_canonical":[97],"map_meta_cap":[1023,1073,1121,1154,1162,1178],"wp_xmlrpc_server::_insert_post":[1001],"wp_xmlrpc_server::wp_deletePost":[1320],"wp_xmlrpc_server::wp_getPost":[1402],"wp_xmlrpc_server::wp_getPosts":[1457,1461,1498],"wp_xmlrpc_server::wp_getPostType":[3434],"wp_xmlrpc_server::blogger_newPost":[3868],"wp_xmlrpc_server::mw_newPost":[4083],"get_post_permalink":[192],"get_post_type_archive_link":[834],"get_post_type_archive_feed_link":[870],"get_edit_post_link":[904],"edit_post_link":[934],"get_delete_post_link":[958],"_update_blog_date_on_post_publish":[742],"_update_blog_date_on_post_delete":[764],"wp_setup_nav_menu_item":[580,632],"is_post_type_hierarchical":[1047],"post_type_exists":[1061],"_add_post_type_submenus":[1555],"wp_count_posts":[2130],"get_posts_by_author_sql":[4476],"WP_Query::parse_query":[1569],"WP_Query::get_posts":[2085,2113,2400,2413,2416,2419,2422],"WP_Query::get_queried_object":[3012],"register_taxonomy_for_object_type":[466]}},"restore_current_blog":{"doc":"\/**\n * Restore the current blog, after calling switch_to_blog()\n *\n * @see switch_to_blog()\n * @since MU\n *\n * @return bool True on success, false if we're already on the current blog\n *\/","file":"ms-blogs.php","line":564,"missingDoc":false,"filters":["'switch_blog'","'switch_blog'"],"uses":{"array_pop":[570],"set_blog_id":[579],"wp_cache_switch_to_blog":[585],"is_object":[589],"wp_cache_init":[594],"wp_cache_add_global_groups":[598,600],"is_array":[597],"wp_cache_add_non_persistent_groups":[601],"function_exists":[596,584],"reinit":[606],"wp_get_current_user":[607],"for_blog":[608],"did_action":[605]},"used_by":{"wp_admin_bar_my_sites_menu":[391],"current_user_can_for_blog":[1316],"WP_Theme::get_allowed_on_site":[1120,1131,1154],"wp_xmlrpc_server::wp_getUsersBlogs":[497],"get_home_url":[1910],"get_site_url":[1969],"get_blog_details":[235],"update_blog_details":[335],"get_blog_option":[391],"add_blog_option":[426],"delete_blog_option":[451],"update_blog_option":[477],"get_blog_post":[160],"add_user_to_blog":[184,198],"remove_user_from_blog":[246,264],"create_empty_blog":[301],"get_blog_permalink":[318],"wpmu_create_blog":[995],"newblog_notify_siteadmin":[1025]}},"wp_admin_bar_shortlink_menu":{"doc":"\/**\n * Provide a shortlink.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":400,"missingDoc":false,"filters":[],"uses":{"wp_get_shortlink":[401],"esc_attr":[407],"add_menu":[409],"__":[411]},"used_by":[]},"wp_get_shortlink":{"doc":"\/**\n * Return a shortlink for a post, page, attachment, or blog.\n *\n * This function exists to provide a shortlink tag that all themes and plugins can target. A plugin must hook in to\n * provide the actual shortlinks. Default shortlink support is limited to providing ?p= style links for posts.\n * Plugins can short-circuit this function via the pre_get_shortlink filter or filter the output\n * via the get_shortlink filter.\n *\n * @since 3.0.0.\n *\n * @param int $id A post or blog id. Default is 0, which means the current post or blog.\n * @param string $context Whether the id is a 'blog' id, 'post' id, or 'media' id. If 'post', the post_type of the post is consulted. If 'query', the current query is consulted to determine the id and context. Default is 'post'.\n * @param bool $allow_slugs Whether to allow post slugs in the shortlink. It is up to the plugin how and whether to honor this.\n * @return string A shortlink or an empty string if no shortlink exists for the requested resource or if shortlinks are not enabled.\n *\/","file":"link-template.php","line":2343,"missingDoc":false,"filters":["'pre_get_shortlink'","'get_shortlink'"],"uses":{"get_queried_object_id":[2352],"get_post":[2354,2362],"is_single":[2351],"home_url":[2364],"get_option":[2361]},"used_by":{"wp_admin_bar_shortlink_menu":[401],"wp_shortlink_wp_head":[2380],"wp_shortlink_header":[2401],"the_shortlink":[2432]}},"esc_attr":{"doc":"\/**\n * Escaping for HTML attributes.\n *\n * @since 2.8.0\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2685,"missingDoc":false,"filters":["'attribute_escape'"],"uses":{"wp_check_invalid_utf8":[2686],"_wp_specialchars":[2687]},"used_by":{"wp_admin_bar_shortlink_menu":[407],"wp_admin_bar_comments_menu":[558],"get_the_author_link":[137],"the_author_posts_link":[204],"wp_list_authors":[318,330,331],"_walk_bookmarks":[74,75,92],"sanitize_bookmark_field":[360,369],"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_dropdown_categories":[334,335,336],"wp_list_categories":[449],"wp_generate_tag_cloud":[674],"Walker_Category::start_el":[826,830,832],"WP_oEmbed::data2html":[275,275,275],"WP_Admin_Bar::add_node":[98],"WP_Admin_Bar::_render_container":[367],"WP_Admin_Bar::_render_group":[382,386],"WP_Admin_Bar::_render_item":[414,418,425,428,434],"WP_Customize_Control::render":[196,196],"WP_Customize_Control::get_link":[213],"WP_Customize_Control::render_content":[241,248,265,265,281],"WP_Customize_Color_Control::render_content":[380],"WP_Customize_Image_Control::render_content":[545,551],"WP_Customize_Header_Image_Control::print_header_image":[796],"WP_Customize_Section::render":[82,83],"WP_Embed::maybe_make_link":[273],"WP_Styles::do_item":[60,66],"comments_popup_link":[981,1013],"comment_form":[1525,1527,1529,1559,1577,1577],"sanitize_comment_cookies":[636,643],"WP_Widget_Pages::form":[63,64],"WP_Widget_Search::form":[215],"WP_Widget_Archives::widget":[252],"WP_Widget_Archives::form":[281],"WP_Widget_Meta::widget":[316,317,318],"WP_Widget_Meta::form":[339],"WP_Widget_Calendar::form":[380],"WP_Widget_Text::form":[426],"WP_Widget_Categories::form":[506],"WP_Widget_Recent_Posts::widget":[574],"WP_Widget_Recent_Posts::form":[611],"WP_Widget_Recent_Comments::form":[719],"WP_Widget_RSS::widget":[768],"wp_widget_rss_output":[859,863],"wp_widget_rss_form":[928,929],"WP_Widget_Tag_Cloud::form":[1068,1076],"get_links":[981,982],"get_the_attachment_link":[1903],"get_attachment_icon":[2003],"get_attachment_innerHTML":[2032],"attribute_escape":[2144],"get_boundary_post_rel_link":[2741],"get_index_rel_link":[2775],"get_parent_post_rel_link":[2816],"get_the_category_rss":[327,327],"translate_smiley":[1739],"_links_add_target":[3175],"wp_nonce_field":[1209],"wp_referer_field":[1235],"wp_original_referer_field":[1261],"wp_timezone_choice":[3392,3412,3425,3445],"wp_login_form":[279,280,280,283,284,287,289,289],"get_archives_link":[827],"get_calendar":[1160,1172,1180,1220,1234,1248,1259],"feed_links":[1609,1610],"feed_links_extra":[1672],"get_search_query":[1830],"the_search_query":[1844],"esc_attr__":[113],"esc_attr_e":[156],"esc_attr_x":[209],"edit_post_link":[935],"get_adjacent_post_rel_link":[1232],"wp_print_media_templates":[329,364],"get_image_tag":[233,235,235,238,238],"img_caption_shortcode":[652,654],"wp_embed_handler_googlevideo":[1100,1100,1100],"Walker_Nav_Menu::start_el":[76,79,83,84,85,86],"wp_nav_menu":[191,192,231,231],"form_option":[123],"get_avatar":[1596],"the_title_attribute":[82],"wp_dropdown_pages":[788,788,792],"wp_page_menu":[905,924],"wp_get_attachment_link":[1171],"wp_list_post_revisions":[1426],"sanitize_post_field":[2029,2048],"wp_rss":[888],"wp_default_scripts":[79,80,81,82,87,88,89,348],"_print_scripts":[709],"_print_styles":[828],"sanitize_term_field":[1649,1667],"get_the_taxonomies":[3122],"__main":[74,79,84,97,76,79,82],"preview_theme_ob_filter_callback":[649],"wp_get_update_data":[363],"wp_dropdown_users":[1040,1044],"sanitize_user_field":[1129,1148]}},"wp_admin_bar_edit_menu":{"doc":"\/**\n * Provide an edit link for posts and terms.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":422,"missingDoc":false,"filters":[],"uses":{"get_current_screen":[426],"get_post":[427],"add_menu":[436,446,463,473],"get_permalink":[439],"is_object":[442],"get_taxonomy":[443,469],"get_term_link":[449],"get_post_type_object":[431,459],"current_user_can":[432,470,460],"get_queried_object":[453],"get_edit_post_link":[466],"get_edit_term_link":[476],"is_admin":[425]},"used_by":[]},"get_post":{"doc":"\/**\n * Retrieves post data given a post ID or post object.\n *\n * See {@link sanitize_post()} for optional $filter values. Also, the parameter\n * $post, must be given as a variable, since it is passed by reference.\n *\n * @since 1.5.1\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post\n *\n * @param int|object $post Post ID or post object. Optional, default is the current post from the loop.\n * @param string $output Optional, default is Object. Either OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter Optional, default is raw.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":386,"missingDoc":false,"filters":[],"uses":{"is_object":[392],"sanitize_post":[394],"is_a":[390],"filter":[408],"to_array":[411,413],"array_values":[413]},"used_by":{"wp_admin_bar_edit_menu":[427],"get_the_modified_author":[72],"get_the_author_posts":[166],"redirect_canonical":[96],"map_meta_cap":[1017,1020,1067,1070,1115,1118,1153,1161,1177],"author_can":[1331],"get_the_terms":[1062],"has_term":[1182],"_WP_Editors::editor_settings":[399],"_WP_Editors::wp_fullscreen_html":[659],"WP_Embed::maybe_run_ajax_cache":[73],"WP_Embed::shortcode":[138],"WP_Embed::cache_oembed":[220],"wp_xmlrpc_server::_prepare_post":[650],"wp_xmlrpc_server::_prepare_page":[786],"wp_xmlrpc_server::_insert_post":[1008,1099],"wp_xmlrpc_server::wp_editPost":[1255],"wp_xmlrpc_server::wp_deletePost":[1316],"wp_xmlrpc_server::wp_getPost":[1397],"wp_xmlrpc_server::wp_getPage":[2263],"wp_xmlrpc_server::wp_deletePage":[2380],"wp_xmlrpc_server::wp_editPage":[2421],"wp_xmlrpc_server::wp_newComment":[2975],"wp_xmlrpc_server::wp_getMediaItem":[3282],"wp_xmlrpc_server::wp_getRevisions":[3531],"wp_xmlrpc_server::wp_restoreRevision":[3598],"wp_xmlrpc_server::blogger_getPost":[3738],"wp_xmlrpc_server::blogger_editPost":[3921],"wp_xmlrpc_server::blogger_deletePost":[3975],"wp_xmlrpc_server::mw_editPost":[4367],"wp_xmlrpc_server::mw_getPost":[4632],"wp_xmlrpc_server::mt_getPostCategories":[5108],"wp_xmlrpc_server::mt_setPostCategories":[5154],"wp_xmlrpc_server::mt_getTrackbackPings":[5218],"wp_xmlrpc_server::mt_publishPost":[5265],"wp_xmlrpc_server::pingback_ping":[5359],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5479],"get_comment_class":[315],"get_comments_number":[553],"comments_open":[774],"pings_open":[791],"wp_comment_form_unfiltered_html_nonce":[813],"get_comment_reply_link":[1051],"get_post_reply_link":[1104],"wp_new_comment":[1408],"wp_update_comment_count_now":[1614],"do_trackbacks":[1746],"_close_comments_for_old_post":[2052],"get_postdata":[29],"start_wp":[67],"user_can_edit_post":[251],"get_the_attachment_link":[1895],"get_attachment_icon_src":[1924],"get_attachment_icon":[1969],"get_attachment_innerHTML":[2026],"get_parent_post_rel_link":[2804],"wp_get_single_post":[3301],"__main":[45,37,46],"wp_scheduled_delete":[3483],"the_date_xml":[1321],"get_the_date":[1376],"get_the_time":[1447],"get_post_time":[1468],"get_post_modified_time":[1518],"the_weekday":[1538],"the_weekday_date":[1559],"feed_links_extra":[1642],"permalink_anchor":[58],"get_permalink":[99],"get_post_permalink":[181],"get_page_link":[241],"_get_page_link":[267],"get_attachment_link":[303,306],"get_edit_post_link":[896],"edit_post_link":[925],"get_delete_post_link":[955],"get_adjacent_post":[1125,1182,1193],"get_adjacent_post_rel_link":[1213,1212],"get_boundary_post":[1306],"adjacent_post_link":[1379,1379],"wp_get_shortlink":[2354,2362],"the_shortlink":[2424],"wp_get_attachment_image":[553],"gallery_shortcode":[672],"adjacent_image_link":[830],"get_attachment_taxonomies":[859],"wp_prepare_attachment_for_js":[1312],"wp_enqueue_media":[1474],"_update_blog_date_on_post_delete":[762],"get_blog_post":[159],"wp_update_nav_menu_item":[325],"wp_setup_nav_menu_item":[590],"wp_notify_postauthor":[991],"wp_notify_moderator":[1101],"get_the_ID":[29],"get_the_title":[103],"get_the_guid":[151],"get_the_content":[183],"get_the_excerpt":[264],"has_excerpt":[282],"get_post_class":[317],"get_body_class":[491],"post_password_required":[572],"_wp_link_page":[696],"Walker_Page::start_el":[1038],"wp_get_attachment_link":[1163],"prepend_attachment":[1196],"get_the_password_form":[1223],"get_page_template_slug":[1274],"wp_post_revision_title":[1297],"wp_list_post_revisions":[1353],"update_attached_file":[209],"get_post_ancestors":[687,696],"get_post_field":[725],"get_post_mime_type":[748],"get_post_format":[766],"set_post_format":[805],"get_post_status":[833],"get_post_type":[1075],"wp_trash_post":[2401],"wp_untrash_post":[2433],"wp_trash_post_comments":[2470],"wp_untrash_post_comments":[2511],"wp_insert_post":[2763,2928,2946],"wp_update_post":[2976],"wp_publish_post":[3021],"check_and_publish_future_post":[3053],"trackback_url_list":[3380],"get_page":[3438],"get_page_by_path":[3491],"get_page_by_title":[3511],"get_page_uri":[3597,3602],"is_local_attachment":[3859],"wp_get_attachment_metadata":[4169],"wp_update_attachment_metadata":[4191],"wp_get_attachment_url":[4210],"wp_get_attachment_thumb_file":[4249],"wp_get_attachment_thumb_url":[4271],"wp_attachment_is_image":[4298],"wp_mime_type_icon":[4330],"clean_post_cache":[4646],"wp_save_post_revision":[4934],"wp_get_post_autosave":[4984],"_wp_put_post_revision":[5071],"wp_get_post_revision":[5106],"wp_get_post_revisions":[5214],"wp_get_post_parent_id":[5267],"set_post_thumbnail":[5377,5379],"delete_post_thumbnail":[5397],"WP_Query::get_posts":[2136,2727],"WP_Query::get_queried_object":[3015],"get_the_taxonomies":[3094],"get_post_taxonomies":[3140]}},"get_permalink":{"doc":"\/**\n * Retrieve full permalink for current post or post ID.\n *\n * @since 1.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name.\n * @return string\n *\/","file":"link-template.php","line":80,"missingDoc":false,"filters":["'pre_post_link'","'post_link_category'","'post_link'"],"uses":{"get_post":[99],"is_object":[95],"get_page_link":[107],"get_attachment_link":[109],"in_array":[110,117],"get_post_types":[110],"get_post_permalink":[111],"get_option":[113,134],"strtotime":[118],"get_the_category":[122],"usort":[124],"get_term":[126],"get_category_parents":[129],"get_category":[134],"is_wp_error":[135],"strpos":[121,140],"get_userdata":[141],"explode":[145],"date":[145],"home_url":[160,163],"str_replace":[160],"user_trailingslashit":[161]},"used_by":{"wp_admin_bar_edit_menu":[439],"redirect_canonical":[86,99,116,119,122,127,210,216],"redirect_guess_404_permalink":[498,500],"wp_list_categories":[460],"_WP_Editors::wp_link_query":[795],"get_comment_link":[500,502,504],"get_comments_link":[519],"get_trackback_url":[708],"comments_popup_link":[1000],"get_comment_reply_link":[1059],"get_post_reply_link":[1110,1112],"comment_form":[1536,1537],"pingback":[1859],"trackback":[1913],"WP_Widget_RSS::widget":[771],"wp_widget_rss_process":[1010],"previous_post":[150],"next_post":[186],"get_boundary_post_rel_link":[2742],"get_parent_post_rel_link":[2817],"the_permalink_rss":[191],"wp_get_archives":[1031],"the_permalink":[16],"post_permalink":[225],"get_attachment_link":[310],"get_post_comments_feed_link":[478],"get_adjacent_post_rel_link":[1233],"adjacent_post_link":[1395],"get_comments_pagenum_link":[1692],"paginate_comments_links":[1825],"rel_canonical":[2320],"get_blog_permalink":[317],"wp_setup_nav_menu_item":[588,637],"wp_notify_postauthor":[1048,1049],"wp_notify_moderator":[1119,1126,1133],"get_the_content":[219],"_wp_link_page":[699,702,704,706],"Walker_Page::start_el":[1051],"wp_insert_post":[2924],"_transition_post_status":[4797],"wp_old_slug_redirect":[3606],"SimplePie_Item::get_id":[241,252,250],"__main":[71,65,72]}},"get_taxonomy":{"doc":"\/**\n * Retrieves the taxonomy object of $taxonomy.\n *\n * The get_taxonomy function will first check that the parameter string given\n * is a taxonomy object and if it is, it will return it.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wp_taxonomies\n * @uses taxonomy_exists() Checks whether taxonomy exists\n *\n * @param string $taxonomy Name of taxonomy object to return\n * @return object|bool The Taxonomy Object or false if $taxonomy doesn't exist\n *\/","file":"taxonomy.php","line":205,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[208]},"used_by":{"wp_admin_bar_edit_menu":[443,469],"redirect_canonical":[178],"wp_xmlrpc_server::wp_newTerm":[1547],"wp_xmlrpc_server::wp_editTerm":[1635],"wp_xmlrpc_server::wp_deleteTerm":[1727],"wp_xmlrpc_server::wp_getTerm":[1794],"wp_xmlrpc_server::wp_getTerms":[1847],"wp_xmlrpc_server::wp_getTaxonomy":[1926],"WP_Widget_Tag_Cloud::widget":[1043],"WP_Widget_Tag_Cloud::form":[1072],"wp_title":[546],"get_term_feed_link":[608],"get_edit_term_link":[684],"edit_term_link":[720],"wp_setup_nav_menu_item":[595,653],"wp_insert_post":[2912],"wp_insert_attachment":[4033],"_post_format_request":[5444],"is_taxonomy_hierarchical":[256],"wp_delete_term":[1821],"wp_get_object_terms":[1914,1921],"wp_set_object_terms":[2228],"wp_update_term_count_now":[2519],"_pad_term_counts":[2873],"get_term_link":[3012],"get_the_taxonomies":[3107]}},"get_term_link":{"doc":"\/**\n * Generates a permalink for a taxonomy term archive.\n *\n * @since 2.5.0\n *\n * @uses apply_filters() Calls 'term_link' with term link and term object, and taxonomy parameters.\n * @uses apply_filters() For the post_tag Taxonomy, Calls 'tag_link' with tag link and tag ID as parameters.\n * @uses apply_filters() For the category Taxonomy, Calls 'category_link' filter on category link and category ID.\n *\n * @param object|int|string $term\n * @param string $taxonomy (optional if $term is object)\n * @return string|WP_Error HTML link to taxonomy term archive on success, WP_Error if term does not exist.\n *\/","file":"taxonomy.php","line":2990,"missingDoc":false,"filters":["'tag_link'","'category_link'","'term_link'"],"uses":{"get_term":[2995,3027],"get_term_by":[2997],"is_int":[2994],"is_object":[2993,3001],"__":[3002],"is_wp_error":[3004],"get_extra_permastruct":[3009],"get_taxonomy":[3012],"home_url":[3021,3036],"get_ancestors":[3025],"array_reverse":[3030],"str_replace":[3032,3034],"implode":[3032],"user_trailingslashit":[3036]},"used_by":{"wp_admin_bar_edit_menu":[449],"redirect_canonical":[167],"get_category_link":[22],"wp_tag_cloud":[538],"Walker_Category::start_el":[828],"get_tag_link":[968],"get_the_term_list":[1101],"get_term_feed_link":[612],"wp_setup_nav_menu_item":[603,658],"get_post_format_link":[5415],"get_the_taxonomies":[3122]}},"get_queried_object":{"doc":"\/**\n * Retrieve the currently-queried object. Wrapper for $wp_query->get_queried_object()\n *\n * @uses WP_Query::get_queried_object\n *\n * @since 3.1.0\n * @access public\n *\n * @return object\n *\/","file":"query.php","line":40,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[42]},"used_by":{"wp_admin_bar_edit_menu":[453],"redirect_canonical":[166],"wp_list_categories":[469],"term_description":[1044],"WP::handle_404":[516],"wp_title":[545,552],"single_post_title":[629],"post_type_archive_title":[657],"single_term_title":[726],"feed_links_extra":[1649,1654,1668],"edit_term_link":[717],"_wp_menu_item_classes_by_context":[256],"get_body_class":[429,458,465,472,479],"get_queried_object":[42],"WP_Query::get_queried_object_id":[3037],"WP_Query::is_post_type_archive":[3088],"WP_Query::is_author":[3122],"WP_Query::is_category":[3154],"WP_Query::is_tag":[3186],"WP_Query::is_tax":[3221],"WP_Query::is_page":[3381],"WP_Query::is_single":[3462],"WP_Query::is_singular":[3494],"get_author_template":[83],"get_category_template":[109],"get_tag_template":[135],"get_taxonomy_template":[166],"get_page_template":[243],"get_single_template":[289]}},"get_edit_post_link":{"doc":"\/**\n * Retrieve edit posts link for post.\n *\n * Can be used within the WordPress loop or outside of it. Can be used with\n * pages, posts, attachments, and revisions.\n *\n * @since 2.3.0\n *\n * @param int $id Optional. Post ID.\n * @param string $context Optional, defaults to display. How to write the '&', defaults to '&'.\n * @return string\n *\/","file":"link-template.php","line":895,"missingDoc":false,"filters":["'get_edit_post_link'"],"uses":{"get_post":[896],"get_post_type_object":[904],"current_user_can":[908],"admin_url":[911],"sprintf":[911]},"used_by":{"wp_admin_bar_edit_menu":[466],"edit_post_link":[928],"wp_prepare_attachment_for_js":[1356],"wp_post_revision_title":[1311]}},"get_edit_term_link":{"doc":"\/**\n * Retrieve edit term url.\n *\n * @since 3.1.0\n *\n * @param int $term_id Term ID\n * @param string $taxonomy Taxonomy\n * @param string $object_type The object type\n * @return string\n *\/","file":"link-template.php","line":683,"missingDoc":false,"filters":["'get_edit_term_link'"],"uses":{"get_taxonomy":[684],"current_user_can":[685],"get_term":[688],"add_query_arg":[699],"admin_url":[699]},"used_by":{"wp_admin_bar_edit_menu":[476],"get_edit_tag_link":[654],"edit_term_link":[727]}},"wp_admin_bar_new_content_menu":{"doc":"\/**\n * Add \"Add New\" menu.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":487,"missingDoc":false,"filters":[],"uses":{"get_post_types":[490],"current_user_can":[492,495,498,501,508,518,518],"_x":[499,519,524,531],"add_menu":[526,538],"admin_url":[529,542],"current":[529],"array_keys":[529]},"used_by":[]},"get_post_types":{"doc":"\/**\n * Get a list of all registered post type objects.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.9.0\n * @uses $wp_post_types\n * @see register_post_type\n *\n * @param array|string $args An array of key => value arguments to match against the post type objects.\n * @param string $output The type of output to return, either post type 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of post type names or objects\n *\/","file":"post.php","line":1118,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[1123]},"used_by":{"wp_admin_bar_new_content_menu":[490],"redirect_guess_404_permalink":[483],"_WP_Editors::wp_link_query":[756],"wp_xmlrpc_server::wp_getPostTypes":[3477],"WP::parse_request":[289],"get_permalink":[110],"_add_post_type_submenus":[1554],"wp_unique_post_slug":[3098],"get_pages":[3642],"_get_last_post_time":[4583],"WP_Query::get_posts":[2226,2406],"WP_Rewrite::generate_rewrite_rules":[1394]}},"_x":{"doc":"\/**\n * Retrieve translated string with gettext context\n *\n * Quite a few times, there will be collisions with similar translatable text\n * found in more than two places but with different translated context.\n *\n * By including the context in the pot file translators can translate the two\n * strings differently.\n *\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $context Context information for the translators\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"l10n.php","line":189,"missingDoc":false,"filters":[],"uses":{"translate_with_gettext_context":[190]},"used_by":{"wp_admin_bar_new_content_menu":[499,519,524,531],"_WP_Editors::editor":[114],"comment_type":[678],"comment_form":[1535],"get_comment_statuses":[422,424],"WP_Widget_Recent_Comments::widget":[694],"wptexturize":[37,39,42,45,47,50,52,55,57],"wp_trim_words":[2182],"capital_P_dangit":[3272],"get_calendar":[1146],"feed_links":[1600],"feed_links_extra":[1623],"register_admin_color_schemes":[2038,2040],"wp_mce_translation":[357,401],"_ex":[205],"WP_Locale::init":[184],"wp_post_revision_title":[1304],"wp_list_post_revisions":[1374],"create_initial_post_types":[22,38,55,56,57,110,117,124,131,138,145],"get_post_type_labels":[1496,1496,1497,1497,1498,1498],"wp_set_post_terms":[3203],"get_post_format_strings":[5325,5326,5327,5328,5329,5330,5331,5332,5333,5334],"wp_default_scripts":[278,306,394,419,466],"create_initial_taxonomies":[111,112],"get_taxonomy_labels":[427,427,428,428],"wp_insert_user":[1347]}},"wp_admin_bar_comments_menu":{"doc":"\/**\n * Add edit comments link with awaiting moderation count bubble.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":552,"missingDoc":false,"filters":[],"uses":{"current_user_can":[553],"wp_count_comments":[556],"esc_attr":[558],"sprintf":[558],"_n":[558],"number_format_i18n":[558,561],"add_menu":[563],"admin_url":[566]},"used_by":[]},"wp_count_comments":{"doc":"\/**\n * Retrieve total comments for blog or single post.\n *\n * The properties of the returned object contain the 'moderated', 'approved',\n * and spam comments for either the entire blog or single post. Those properties\n * contain the amount of comments that match the status. The 'total_comments'\n * property contains the integer of total comments.\n *\n * The comment stats are cached and then retrieved, if they already exist in the\n * cache.\n *\n * @since 2.5.0\n *\n * @param int $post_id Optional. Post ID.\n * @return object Comment stats.\n *\/","file":"comment.php","line":935,"missingDoc":false,"filters":["'wp_count_comments'"],"uses":{"wp_cache_get":[944],"prepare":[951],"get_results":[953],"wp_cache_set":[972]},"used_by":{"wp_admin_bar_comments_menu":[556],"wp_xmlrpc_server::wp_getCommentCount":[3071]}},"_n":{"doc":"\/**\n * Retrieve the plural or single form based on the amount.\n *\n * If the domain is not set in the $l10n list, then a comparison will be made\n * and either $plural or $single parameters returned.\n *\n * If the domain does exist, then the parameters $single, $plural, and $number\n * will first be passed to the domain's ngettext method. Then it will be passed\n * to the 'ngettext' filter hook along with the same parameters. The expected\n * type will be a string.\n *\n * @since 2.8.0\n * @uses $l10n Gets list of domain translated string (gettext_reader) objects\n * @uses apply_filters() Calls 'ngettext' hook on domains text returned,\n *\t\talong with $single, $plural, and $number parameters. Expected to return string.\n *\n * @param string $single The text that will be used if $number is 1\n * @param string $plural The text that will be used if $number is not 1\n * @param int $number The number to compare against to use either $single or $plural\n * @param string $domain Optional. The domain identifier the text should be retrieved in\n * @return string Either $single or $plural translated text\n *\/","file":"l10n.php","line":238,"missingDoc":false,"filters":["'ngettext'"],"uses":{"get_translations_for_domain":[239],"translate_plural":[240]},"used_by":{"wp_admin_bar_comments_menu":[558],"default_topic_count_text":[563],"WP_Customize_Manager::register_controls":[894],"_nc":[1831],"human_time_diff":[2113,2119,2125],"translate_nooped_plural":[307],"wp_notify_moderator":[1149],"__main":[26],"wp_get_update_data":[359,361]}},"number_format_i18n":{"doc":"\/**\n * Convert integer number to format based on the locale.\n *\n * @since 2.3.0\n *\n * @param int $number The number to convert based on locale.\n * @param int $decimals Precision of the number of decimal places.\n * @return string Converted number in string format.\n *\/","file":"functions.php","line":153,"missingDoc":false,"filters":["'number_format_i18n'"],"uses":{"number_format":[155],"absint":[155]},"used_by":{"wp_admin_bar_comments_menu":[558,561],"wp_admin_bar_updates_menu":[622],"default_topic_count_text":[563],"WP_Customize_Manager::register_controls":[894],"comments_number":[580],"size_format":[191],"paginate_links":[1964],"timer_stop":[227],"wp_notify_moderator":[1150],"__main":[27]}},"is_ssl":{"doc":"\/**\n * Determine if SSL is used.\n *\n * @since 2.6.0\n *\n * @return bool True if SSL, false if not used.\n *\/","file":"functions.php","line":3092,"missingDoc":false,"filters":[],"uses":{"strtolower":[3094]},"used_by":{"wp_admin_bar_appearance_menu":[585],"redirect_canonical":[47],"WP_Admin_Bar::__get":[18],"wp_guess_url":[3158],"wp_login_form":[259],"get_home_url":[1914],"network_home_url":[2143],"set_url_scheme":[2235],"filter_SSL":[1901],"wp_parse_auth_cookie":[615],"wp_set_auth_cookie":[661],"auth_redirect":[745,750],"get_avatar":[1636],"wp_signon":[44]}},"add_query_arg":{"doc":"\/**\n * Retrieve a modified URL query string.\n *\n * You can rebuild the URL and append a new query variable to the URL query by\n * using this function. You can also retrieve the full URL with query data.\n *\n * Adding a single key & value or an associative array. Setting a key value to\n * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER\n * value. Additional values provided are expected to be encoded appropriately\n * with urlencode() or rawurlencode().\n *\n * @since 1.5.0\n *\n * @param mixed $param1 Either newkey or an associative_array\n * @param mixed $param2 Either newvalue or oldquery or uri\n * @param mixed $param3 Optional. Old query or uri\n * @return string New URL query string.\n *\/","file":"functions.php","line":638,"missingDoc":false,"filters":[],"uses":{"func_get_args":[640],"count":[642,647,670],"is_array":[641,687],"substr":[654,660,663],"strlen":[654],"strstr":[653],"stripos":[661,658],"explode":[669],"strpos":[677,668],"wp_parse_str":[685],"urlencode_deep":[686],"array_merge":[689],"build_query":[699],"trim":[700],"preg_replace":[701],"rtrim":[703]},"used_by":{"wp_admin_bar_appearance_menu":[590],"redirect_canonical":[192,266,307],"WP_oEmbed::fetch":[167,168,169],"WP_oEmbed::_fetch_with_format":[192],"WP_Scripts::do_item":[118],"WP_Styles::_css_href":[143],"get_comment_link":[502],"get_comment_reply_link":[1061],"spawn_cron":[233],"dropdown_cats":[711],"wp_get_links":[899],"remove_query_arg":[719,722],"wp_nonce_url":[1177],"wp_logout_url":[218],"wp_login_url":[241,244],"wp_lostpassword_url":[319],"paginate_links":[1959,1973,1987],"wp_admin_css_uri":[2059],"get_post_permalink":[203,205],"get_post_comments_feed_link":[487,489],"get_edit_term_link":[699],"get_search_feed_link":[784],"get_search_comments_feed_link":[815,817],"get_post_type_archive_feed_link":[877],"get_delete_post_link":[967],"get_edit_user_link":[1077],"get_pagenum_link":[1436],"get_comments_pagenum_link":[1699,1705],"paginate_comments_links":[1817],"wp_enqueue_media":[1460],"get_avatar":[1656],"_wp_link_page":[702],"wp_list_post_revisions":[1401],"_post_format_link":[5465],"wp_style_loader_src":[625],"preview_theme_ob_filter_callback":[646]}},"wp_customize_url":{"doc":"\/**\n * Returns a URL to load the theme customizer.\n *\n * @since 3.4.0\n *\n * @param string $stylesheet Optional. Theme to customize. Defaults to current theme.\n * \tThe theme's stylesheet will be urlencoded if necessary.\n *\/","file":"theme.php","line":1681,"missingDoc":false,"filters":[],"uses":{"admin_url":[1682],"urlencode":[1684],"esc_url":[1685]},"used_by":{"wp_admin_bar_appearance_menu":[590]}},"current_theme_supports":{"doc":"\/**\n * Checks a theme's support for a given feature\n *\n * @since 2.9.0\n * @param string $feature the feature being checked\n * @return boolean\n *\/","file":"theme.php","line":1522,"missingDoc":false,"filters":["'current_theme_supports-' . $feature"],"uses":{"current_theme_supports":[1526],"func_num_args":[1532],"array_slice":[1535],"func_get_args":[1535],"in_array":[1545,1552]},"used_by":{"wp_admin_bar_appearance_menu":[597,600,600,603,606],"WP_Admin_Bar::initialize":[48],"wp_xmlrpc_server::initialise_blog_option_info":[358],"wp_xmlrpc_server::_prepare_post":[649],"wp_xmlrpc_server::wp_getPostFormats":[3373],"WP_Widget_Recent_Comments::recent_comments_style":[647],"wp_widgets_add_menu":[2710],"feed_links":[1595],"wp_enqueue_media":[1480],"create_initial_taxonomies":[118],"display_header_text":[874],"_get_random_header_data":[924],"get_custom_header":[1037],"remove_editor_styles":[1233],"_custom_header_background_just_in_time":[1393,1407],"current_theme_supports":[1526],"require_if_theme_supports":[1575]}},"wp_admin_bar_updates_menu":{"doc":"\/**\n * Provide an update link if theme\/plugin\/core updates are available.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":615,"missingDoc":false,"filters":[],"uses":{"wp_get_update_data":[617],"number_format_i18n":[622],"add_menu":[625],"network_admin_url":[628]},"used_by":[]},"wp_get_update_data":{"doc":"","file":"update.php","line":333,"missingDoc":true,"filters":["'wp_get_update_data'"],"uses":{"get_site_transient":[337,343],"count":[339,345],"current_user_can":[336,342,350,348],"get_core_updates":[349],"in_array":[350],"function_exists":[348],"sprintf":[357,359,361],"__":[357],"_n":[359,361],"esc_attr":[363],"implode":[363]},"used_by":{"wp_admin_bar_updates_menu":[617]}},"wp_admin_bar_search_menu":{"doc":"\/**\n * Add search form.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":640,"missingDoc":false,"filters":[],"uses":{"is_admin":[641],"esc_url":[644],"home_url":[644],"__":[646],"add_menu":[649]},"used_by":[]},"esc_url":{"doc":"\/**\n * Checks and cleans a URL.\n *\n * A number of characters are removed from the URL. If the URL is for displaying\n * (the default behaviour) ampersands are also replaced. The 'clean_url' filter\n * is applied to the returned cleaned URL.\n *\n * @since 2.8.0\n * @uses wp_kses_bad_protocol() To only permit protocols in the URL set\n *\t\tvia $protocols or the common ones set in the function.\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols Optional. An array of acceptable protocols.\n *\t\tDefaults to 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' if not set.\n * @param string $_context Private. Use esc_url_raw() for database usage.\n * @return string The cleaned $url after the 'clean_url' filter is applied.\n *\/","file":"formatting.php","line":2580,"missingDoc":false,"filters":["'clean_url'"],"uses":{"preg_replace":[2585],"_deep_replace":[2587],"str_replace":[2588,2600,2601],"strpos":[2593],"in_array":[2593],"preg_match":[2594],"wp_kses_normalize_entities":[2599],"wp_allowed_protocols":[2605],"is_array":[2604],"wp_kses_bad_protocol":[2606]},"used_by":{"wp_admin_bar_search_menu":[644],"wp_list_authors":[339],"_walk_bookmarks":[72],"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_list_categories":[461],"wp_generate_tag_cloud":[671],"Walker_Category::start_el":[828,842],"get_the_term_list":[1104],"WP_oEmbed::data2html":[275,275,286],"WP_Admin_Bar::_render":[357],"WP_Admin_Bar::_render_item":[420],"WP_Customize_Image_Control::render_content":[534],"WP_Customize_Image_Control::print_tab_image":[630,631],"WP_Customize_Header_Image_Control::print_header_image":[795,797],"WP_Theme::markup_header":[669],"WP_Scripts::do_item":[120],"WP_Styles::_css_href":[145],"get_comment_author_url":[210],"comments_template":[879],"get_comment_reply_link":[1059,1061],"wp_set_comment_cookies":[621],"WP_Widget_Recent_Comments::widget":[694],"WP_Widget_RSS::widget":[771,780],"wp_widget_rss_output":[858],"wp_widget_rss_form":[930],"wp_widget_rss_process":[1010],"get_links":[976],"comments_rss":[1218],"clean_url":[2093],"get_index_rel_link":[2775],"__main":[31,32,51,54,35],"the_permalink_rss":[191],"comments_link_feed":[201],"comment_guid":[214],"comment_link":[242],"self_link":[491],"_make_url_clickable_cb":[1512],"_make_web_ftp_clickable_cb":[1535],"esc_url_raw":[2623],"wp_nonce_ays":[2026],"get_search_form":[161],"wp_loginout":[189,191],"wp_login_form":[276,290],"get_archives_link":[828],"feed_links_extra":[1672],"paginate_links":[1961,1975,1989],"wp_admin_css":[2102,2104],"the_feed_link":[415],"post_comments_feed_link":[512],"get_pagenum_link":[1470],"next_posts":[1506],"previous_posts":[1586],"get_next_comments_link":[1746],"get_previous_comments_link":[1783],"wp_shortlink_wp_head":[2385],"the_shortlink":[2435],"get_blogaddress_by_id":[34],"get_blogaddress_by_name":[57],"get_blogaddress_by_domain":[83],"get_most_active_blogs":[196],"wpmu_signup_blog_notification":[732,744,754],"newblog_notify_siteadmin":[1020],"newuser_notify_siteadmin":[1061],"the_guid":[135],"_wp_link_page":[709],"get_the_password_form":[1225],"wp_rss":[887],"_wp_customize_loader_settings":[1658],"wp_customize_url":[1685],"wp_version_check":[108],"sanitize_user_field":[1145]}},"wp_admin_bar_add_secondary_groups":{"doc":"\/**\n * Add secondary menus.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":665,"missingDoc":false,"filters":[],"uses":{"add_group":[666,673]},"used_by":[]},"wp_admin_bar_header":{"doc":"\/**\n * Style and scripts for the admin bar.\n *\n * @since 3.1.0\n *\n *\/","file":"admin-bar.php","line":688,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_admin_bar_bump_cb":{"doc":"\/**\n * Default admin bar callback.\n *\n * @since 3.1.0\n *\n *\/","file":"admin-bar.php","line":699,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"show_admin_bar":{"doc":"\/**\n * Set the display status of the admin bar.\n *\n * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action.\n *\n * @since 3.1.0\n *\n * @param bool $show Whether to allow the admin bar to show.\n * @return void\n *\/","file":"admin-bar.php","line":717,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Customize_Manager::setup_theme":[117],"preview_theme":[561]}},"_get_admin_bar_pref":{"doc":"\/**\n * Retrieve the admin bar display preference of a user.\n *\n * @since 3.1.0\n * @access private\n *\n * @param string $context Context of this preference check. Defaults to 'front'. The 'admin'\n * \tpreference is no longer used.\n * @param int $user Optional. ID of the user to check, defaults to 0 for current user.\n * @return bool Whether the admin bar should be showing for this user.\n *\/","file":"admin-bar.php","line":764,"missingDoc":false,"filters":[],"uses":{"get_user_option":[765]},"used_by":{"is_admin_bar_showing":[744]}},"get_user_option":{"doc":"\/**\n * Retrieve user option that can be either per Site or per Network.\n *\n * If the user ID is not given, then the current user will be used instead. If\n * the user ID is given, then the user data will be retrieved. The filter for\n * the result, will also pass the original option name and finally the user data\n * object as the third parameter.\n *\n * The option will first check for the per site name and then the per Network name.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database object for queries.\n * @uses apply_filters() Calls 'get_user_option_$option' hook with result,\n *\t\toption parameter, and user data object.\n *\n * @param string $option User option name.\n * @param int $user Optional. User ID.\n * @param bool $deprecated Use get_option() to check for an option in the options table.\n * @return mixed\n *\/","file":"user.php","line":233,"missingDoc":false,"filters":["\"get_user_option_{$option}\""],"uses":{"_deprecated_argument":[237],"get_current_user_id":[240],"get_userdata":[242],"get":[246,248],"has_prop":[247,245]},"used_by":{"_get_admin_bar_pref":[765],"user_can_richedit":[1757],"wp_user_settings":[548,557],"get_all_user_settings":[681],"auth_redirect":[769],"wp_style_loader_src":[611]}},"AtomParser::AtomParser":{"doc":"","file":"atomlib.php","line":90,"missingDoc":true,"filters":[],"uses":{"create_function":[94,95]},"used_by":[]},"AtomParser::_p":{"doc":"","file":"atomlib.php","line":98,"missingDoc":true,"filters":[],"uses":{"str_repeat":[100]},"used_by":[]},"AtomParser::error_handler":{"doc":"","file":"atomlib.php","line":104,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::parse":{"doc":"","file":"atomlib.php","line":108,"missingDoc":true,"filters":[],"uses":{"set_error_handler":[110],"array_unshift":[112],"xml_parser_create_ns":[114],"xml_set_object":[115],"xml_set_element_handler":[116],"xml_parser_set_option":[117,118],"xml_set_character_data_handler":[119],"xml_set_default_handler":[120],"xml_set_start_namespace_decl_handler":[121],"xml_set_end_namespace_decl_handler":[122],"fopen":[128],"fread":[129],"trigger_error":[133],"sprintf":[133],"__":[133],"xml_error_string":[134],"xml_get_error_code":[134],"xml_get_current_line_number":[135],"xml_parse":[132],"feof":[132],"fclose":[140],"xml_parser_free":[142],"restore_error_handler":[144]},"used_by":[]},"AtomParser::start_element":{"doc":"","file":"atomlib.php","line":149,"missingDoc":true,"filters":[],"uses":{"array_pop":[151],"split":[151],"_p":[162],"array_unshift":[166,198],"trigger_error":[175],"ns_to_prefix":[181,190],"xml_escape":[182],"join":[185,199],"array_map":[185,199],"array_keys":[185,199,211,214],"array_values":[185,199],"strlen":[186,200],"array_push":[193,205,217,220,222],"is_declared_content_ns":[192],"count":[197],"in_array":[211,214,207,207]},"used_by":[]},"AtomParser::end_element":{"doc":"","file":"atomlib.php","line":228,"missingDoc":true,"filters":[],"uses":{"array_pop":[230],"split":[230],"count":[232,244],"array_shift":[241,270],"array_push":[245,248,250,266,275],"xml_escape":[248],"join":[255,257],"in_array":[254],"substr":[262],"ns_to_prefix":[265],"_p":[279]},"used_by":[]},"AtomParser::start_ns":{"doc":"","file":"atomlib.php","line":282,"missingDoc":true,"filters":[],"uses":{"_p":[283],"array_push":[284]},"used_by":[]},"AtomParser::end_ns":{"doc":"","file":"atomlib.php","line":287,"missingDoc":true,"filters":[],"uses":{"_p":[288]},"used_by":[]},"AtomParser::cdata":{"doc":"","file":"atomlib.php","line":291,"missingDoc":true,"filters":[],"uses":{"_p":[292],"str_replace":[292],"trim":[292],"array_push":[294]},"used_by":[]},"AtomParser::_default":{"doc":"","file":"atomlib.php","line":298,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::ns_to_prefix":{"doc":"","file":"atomlib.php","line":303,"missingDoc":true,"filters":[],"uses":{"split":[305],"array_pop":[308],"join":[312],"strlen":[315,327]},"used_by":[]},"AtomParser::is_declared_content_ns":{"doc":"","file":"atomlib.php","line":335,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::xml_escape":{"doc":"","file":"atomlib.php","line":346,"missingDoc":true,"filters":[],"uses":{"str_replace":[348]},"used_by":[]},"get_the_author":{"doc":"\/**\n * Retrieve the author of the current post.\n *\n * @since 1.5\n * @uses $authordata The current author's DB object.\n * @uses apply_filters() Calls 'the_author' hook on the author display name.\n *\n * @param string $deprecated Deprecated.\n * @return string The author's display name.\n *\/","file":"author-template.php","line":23,"missingDoc":false,"filters":["'the_author'"],"uses":{"_deprecated_argument":[27],"is_object":[29]},"used_by":{"the_author":[57,58],"get_the_author_link":[137,137,139],"the_author_posts_link":[204,205]}},"_deprecated_argument":{"doc":"\/**\n * Marks a function argument as deprecated and informs when it has been used.\n *\n * This function is to be used whenever a deprecated function argument is used.\n * Before this function is called, the argument must be checked for whether it was\n * used by comparing it to its default value or evaluating whether it is empty.\n * For example:\n * <code>\n * if ( !empty($deprecated) )\n * \t_deprecated_argument( __FUNCTION__, '3.0' );\n * <\/code>\n *\n * There is a hook deprecated_argument_run that will be called that can be used\n * to get the backtrace up to what file and function used the deprecated\n * argument.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 3.0.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_argument_run' and passes the function name, a message on the change,\n * and the version in which the argument was deprecated.\n * @uses apply_filters() Calls 'deprecated_argument_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called\n * @param string $version The version of WordPress that deprecated the argument used\n * @param string $message Optional. A message regarding the change.\n *\/","file":"functions.php","line":2938,"missingDoc":false,"filters":["'deprecated_argument_run'","'deprecated_argument_trigger_error'"],"uses":{"trigger_error":[2945,2947],"sprintf":[2945,2947],"__":[2945,2947],"is_null":[2944]},"used_by":{"get_the_author":[27],"the_author":[53,55],"the_author_posts_link":[196],"WP_User::__isset":[590],"WP_User::__get":[610],"WP_User::__set":[636],"WP_User::has_cap":[920],"wp_dropdown_categories":[317],"get_categories":[47],"WP_Admin_Bar::__get":[21],"WP_Admin_Bar::add_node":[127],"comments_link":[532,534],"comments_number":[575],"trackback_url":[726],"trackback_rdf":[744],"discover_pingback_server_uri":[1648],"wp_clear_scheduled_hook":[159],"convert_chars":[1081],"is_email":[1792],"wp_get_http_headers":[544],"wp_upload_bits":[1717],"get_bloginfo":[410],"safecss_filter_attr":[1402],"load_plugin_textdomain":[422],"post_permalink":[223],"get_delete_post_link":[953],"get_adjacent_post":[1149],"update_blog_option":[470],"update_blog_status":[670],"get_last_updated":[727],"ms_subdomain_constants":[130],"add_option":[297],"get_the_excerpt":[262],"the_attachment_link":[1140],"wp_get_recent_posts":[2633],"WP_Query::get_posts":[1958],"get_user_option":[237],"wp_get_sidebars_widgets":[1009]}},"the_author":{"doc":"\/**\n * Display the name of the author of the current post.\n *\n * The behavior of this function is based off of old functionality predating\n * get_the_author(). This function is not deprecated, but is designed to echo\n * the value from get_the_author() and as an result of any old theme that might\n * still use the old behavior will also pass the value from get_the_author().\n *\n * The normal, expected behavior of this function is to echo the author and not\n * return it. However, backwards compatibility has to be maintained.\n *\n * @since 0.71\n * @see get_the_author()\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author\n *\n * @param string $deprecated Deprecated.\n * @param string $deprecated_echo Deprecated. Use get_the_author(). Echo the string or return it.\n * @return string The author's display name, from get_the_author().\n *\/","file":"author-template.php","line":51,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[53,55],"__":[55],"get_the_author":[57,58]},"used_by":{"__main":[32,43,39]}},"get_the_modified_author":{"doc":"\/**\n * Retrieve the author who last edited the current post.\n *\n * @since 2.8\n * @uses $post The current post's DB object.\n * @uses get_post_meta() Retrieves the ID of the author who last edited the current post.\n * @uses get_userdata() Retrieves the author's DB object.\n * @uses apply_filters() Calls 'the_modified_author' hook on the author display name.\n * @return string The author's display name.\n *\/","file":"author-template.php","line":71,"missingDoc":false,"filters":["'the_modified_author'"],"uses":{"get_userdata":[73],"get_post_meta":[72],"get_post":[72]},"used_by":{"the_modified_author":[86]}},"get_userdata":{"doc":"\/**\n * Retrieve user info by user ID.\n *\n * @since 0.71\n *\n * @param int $user_id User ID\n * @return bool|object False on failure, WP_User object on success\n *\/","file":"pluggable.php","line":120,"missingDoc":false,"filters":[],"uses":{"get_user_by":[121]},"used_by":{"get_the_modified_author":[73],"get_the_author_meta":[103],"get_author_posts_url":[227],"wp_list_authors":[291],"redirect_canonical":[155],"map_meta_cap":[1039,1089,1143],"author_can":[1334],"user_can":[1356],"is_super_admin":[1453],"wp_xmlrpc_server::_prepare_page":[805],"wp_xmlrpc_server::_insert_post":[1046],"wp_xmlrpc_server::wp_getUser":[2039],"wp_xmlrpc_server::wp_getProfile":[2159],"wp_xmlrpc_server::mw_newPost":[4131],"wp_xmlrpc_server::mw_getPost":[4666],"wp_xmlrpc_server::mw_getRecentPosts":[4797],"get_comment_author":[27],"get_comment_class":[310],"wp_allow_comment":[687],"user_can_create_post":[210],"user_can_create_draft":[230],"user_can_edit_post":[250,252],"user_can_set_post_date":[299],"user_can_edit_post_date":[319],"user_can_edit_user":[378,379],"get_permalink":[141],"get_edit_user_link":[1069],"add_user_to_blog":[181],"remove_user_from_blog":[244],"newuser_notify_siteadmin":[1059],"wpmu_welcome_notification":[1237],"wpmu_welcome_user_notification":[1286],"wpmu_log_new_registrations":[1512],"is_user_spammy":[1755],"wp_generate_auth_cookie":[579],"wp_notify_postauthor":[992],"wp_notify_moderator":[1102],"wp_new_user_notification":[1198],"get_avatar":[1604,1615],"WP_Query::get_queried_object":[3022],"setup_postdata":[3630],"get_user_option":[242],"setup_userdata":[965],"wp_dropdown_users":[1067],"wp_update_user":[1454]}},"get_post_meta":{"doc":"\/**\n * Retrieve post meta field for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"post.php","line":1795,"missingDoc":false,"filters":[],"uses":{"get_metadata":[1796]},"used_by":{"get_the_modified_author":[72],"map_meta_cap":[1047,1097],"WP_Embed::shortcode":[171],"wp_xmlrpc_server::_prepare_post":[686],"wp_get_attachment_image":[557],"wp_prepare_attachment_for_js":[1332],"wp_enqueue_media":[1481],"_wp_menu_item_classes_by_context":[348,378],"wp_update_nav_menu_item":[386],"wp_get_nav_menu_items":[504,505,506],"wp_setup_nav_menu_item":[574,575,576,577,614,617,624,625],"wp_get_associated_nav_menu_items":[695],"get_page_template_slug":[1277],"get_post_thumbnail_id":[34],"get_attached_file":[186],"WP_Post::__get":[617,645],"get_post_custom":[1855],"wp_untrash_post":[2441],"wp_untrash_post_comments":[2517],"wp_delete_attachment":[4092],"wp_get_attachment_metadata":[4172],"wp_get_attachment_url":[4217],"wp_check_for_changed_slugs":[4430]}},"the_modified_author":{"doc":"\/**\n * Display the name of the author who last edited the current post.\n *\n * @since 2.8\n * @see get_the_author()\n * @return string The author's display name, from get_the_modified_author().\n *\/","file":"author-template.php","line":85,"missingDoc":false,"filters":[],"uses":{"get_the_modified_author":[86]},"used_by":[]},"get_the_author_meta":{"doc":"\/**\n * Retrieve the requested data of the author of the current post.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_meta\n * @since 2.8.0\n * @uses $authordata The current author's DB object (if $user_id not specified).\n * @param string $field selects the field of the users record.\n * @param int $user_id Optional. User ID.\n * @return string The author's field from the current author's DB object.\n *\/","file":"author-template.php","line":98,"missingDoc":false,"filters":["'get_the_author_' . $field"],"uses":{"get_userdata":[103],"in_array":[106]},"used_by":{"the_author_meta":[123],"get_the_author_link":[137,136],"get_the_author_description":[1333],"get_the_author_login":[1361],"get_the_author_firstname":[1389],"get_the_author_lastname":[1417],"get_the_author_nickname":[1445],"get_the_author_email":[1473],"get_the_author_icq":[1501],"get_the_author_yim":[1529],"get_the_author_msn":[1557],"get_the_author_aim":[1585],"get_author_name":[1614],"get_the_author_url":[1629],"get_the_author_ID":[1657],"get_profile":[2473],"__main":[33],"feed_links_extra":[1661],"wp_list_post_revisions":[1389]}},"the_author_meta":{"doc":"\/**\n * Retrieve the requested data of the author of the current post.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_meta\n * @since 2.8.0\n * @param string $field selects the field of the users record.\n * @param int $user_id Optional. User ID.\n * @echo string The author's field from the current author's DB object.\n *\/","file":"author-template.php","line":122,"missingDoc":false,"filters":["'the_author_' . $field"],"uses":{"get_the_author_meta":[123]},"used_by":{"the_author_description":[1346],"the_author_login":[1374],"the_author_firstname":[1402],"the_author_lastname":[1430],"the_author_nickname":[1458],"the_author_email":[1486],"the_author_icq":[1514],"the_author_yim":[1542],"the_author_msn":[1570],"the_author_aim":[1598],"the_author_url":[1642],"the_author_ID":[1670],"__main":[34]}},"get_the_author_link":{"doc":"\/**\n * Retrieve either author's link or author's name.\n *\n * If the author has a home page set, return an HTML link, otherwise just return the\n * author's name.\n *\n * @uses get_the_author_meta()\n * @uses get_the_author()\n *\/","file":"author-template.php","line":135,"missingDoc":false,"filters":[],"uses":{"get_the_author_meta":[137,136],"esc_attr":[137],"sprintf":[137],"__":[137],"get_the_author":[137,137,139]},"used_by":{"the_author_link":[154]}},"the_author_link":{"doc":"\/**\n * Display either author's link or author's name.\n *\n * If the author has a home page set, echo an HTML link, otherwise just echo the\n * author's name.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_link\n * @since 2.1\n * @uses get_the_author_link()\n *\/","file":"author-template.php","line":153,"missingDoc":false,"filters":[],"uses":{"get_the_author_link":[154]},"used_by":[]},"get_the_author_posts":{"doc":"\/**\n * Retrieve the number of posts by the author of the current post.\n *\n * @since 1.5\n * @uses $post The current post in the Loop's DB object.\n * @uses count_user_posts()\n * @return int The number of posts by the author.\n *\/","file":"author-template.php","line":165,"missingDoc":false,"filters":[],"uses":{"count_user_posts":[166],"get_post":[166]},"used_by":{"the_author_posts":[177]}},"count_user_posts":{"doc":"\/**\n * Number of posts user has written.\n *\n * @since 3.0.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param int $userid User ID.\n * @return int Amount of posts user has written.\n *\/","file":"user.php","line":152,"missingDoc":false,"filters":["'get_usernumposts'"],"uses":{"get_posts_by_author_sql":[155],"get_var":[157]},"used_by":{"get_the_author_posts":[166],"get_usernumposts":[2486]}},"the_author_posts":{"doc":"\/**\n * Display the number of posts by the author of the current post.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_posts\n * @since 0.71\n * @uses get_the_author_posts() Echoes returned value from function.\n *\/","file":"author-template.php","line":176,"missingDoc":false,"filters":[],"uses":{"get_the_author_posts":[177]},"used_by":[]},"the_author_posts_link":{"doc":"\/**\n * Display an HTML link to the author page of the author of the current post.\n *\n * Does just echo get_author_posts_url() function, like the others do. The\n * reason for this, is that another function is used to help in printing the\n * link to the author's posts.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_posts_link\n * @since 1.2.0\n * @uses $authordata The current author's DB object.\n * @uses get_author_posts_url()\n * @uses get_the_author()\n * @param string $deprecated Deprecated.\n *\/","file":"author-template.php","line":194,"missingDoc":false,"filters":["'the_author_posts_link'"],"uses":{"_deprecated_argument":[196],"is_object":[199],"sprintf":[201,204],"get_author_posts_url":[203],"esc_attr":[204],"__":[204],"get_the_author":[204,205]},"used_by":[]},"get_author_posts_url":{"doc":"\/**\n * Retrieve the URL to the author page for the user with the ID provided.\n *\n * @since 2.1.0\n * @uses $wp_rewrite WP_Rewrite\n * @return string The URL to the author's page.\n *\/","file":"author-template.php","line":217,"missingDoc":false,"filters":["'author_link'"],"uses":{"get_author_permastruct":[220],"home_url":[223,232],"get_userdata":[227],"str_replace":[231],"user_trailingslashit":[232]},"used_by":{"the_author_posts_link":[203],"wp_list_authors":[318],"redirect_canonical":[157],"get_author_link":[805],"get_author_feed_link":[543]}},"user_trailingslashit":{"doc":"\/**\n * Retrieve trailing slash string, if blog set for adding trailing slashes.\n *\n * Conditionally adds a trailing slash if the permalink structure has a trailing\n * slash, strips the trailing slash if not. The string is passed through the\n * 'user_trailingslashit' filter. Will remove trailing slash from string, if\n * blog is not set to have them.\n *\n * @since 2.2.0\n * @uses $wp_rewrite\n *\n * @param string $string URL with or without a trailing slash.\n * @param string $type_of_url The type of URL being considered (e.g. single, category, etc) for use in the filter.\n * @return string\n *\/","file":"link-template.php","line":34,"missingDoc":false,"filters":["'user_trailingslashit'"],"uses":{"trailingslashit":[37],"untrailingslashit":[39]},"used_by":{"get_author_posts_url":[232],"redirect_canonical":[217,236,238,261,271,275,364],"redirect_guess_404_permalink":[498],"get_comment_link":[500],"get_trackback_url":[708],"get_index_rel_link":[2775],"get_permalink":[161],"get_post_permalink":[200],"_get_page_link":[279],"get_attachment_link":[318],"get_year_link":[345],"get_month_link":[370],"get_day_link":[400],"get_feed_link":[442],"get_post_comments_feed_link":[483],"get_author_feed_link":[549],"get_term_feed_link":[618],"get_search_link":[759],"get_post_type_archive_link":[846],"get_pagenum_link":[1461],"get_comments_pagenum_link":[1697,1703],"paginate_comments_links":[1825],"_wp_link_page":[704,706],"get_term_link":[3036]}},"wp_list_authors":{"doc":"\/**\n * List all the authors of the blog, with several options available.\n *\n * <ul>\n * <li>optioncount (boolean) (false): Show the count in parenthesis next to the\n * author's name.<\/li>\n * <li>exclude_admin (boolean) (true): Exclude the 'admin' user that is\n * installed bydefault.<\/li>\n * <li>show_fullname (boolean) (false): Show their full names.<\/li>\n * <li>hide_empty (boolean) (true): Don't show authors without any posts.<\/li>\n * <li>feed (string) (''): If isn't empty, show links to author's feeds.<\/li>\n * <li>feed_image (string) (''): If isn't empty, use this image to link to\n * feeds.<\/li>\n * <li>echo (boolean) (true): Set to false to return the output, instead of\n * echoing.<\/li>\n * <li>style (string) ('list'): Whether to display list of authors in list form\n * or as a string.<\/li>\n * <li>html (bool) (true): Whether to list the items in html form or plaintext.\n * <\/li>\n * <\/ul>\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_list_authors\n * @since 1.2.0\n * @param array $args The argument array.\n * @return null|string The output, if echo is set to false.\n *\/","file":"author-template.php","line":266,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[277],"extract":[278],"wp_array_slice_assoc":[282],"get_users":[284],"get_results":[287],"get_private_posts_cap_sql":[287],"get_userdata":[291],"get_author_posts_url":[318],"esc_attr":[318,330,331],"sprintf":[318],"__":[318],"get_author_feed_link":[326],"esc_url":[339],"rtrim":[356]},"used_by":{"list_authors":[733]}},"wp_parse_args":{"doc":"\/**\n * Merge user defined arguments into defaults array.\n *\n * This function is used throughout WordPress to allow for both string or array\n * to be merged into another array.\n *\n * @since 2.2.0\n *\n * @param string|array $args Value to merge with $defaults\n * @param array $defaults Array that serves as the defaults.\n * @return array Merged user defined values with defaults.\n *\/","file":"functions.php","line":2551,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[2553],"is_array":[2554,2559],"wp_parse_str":[2557],"is_object":[2552],"array_merge":[2560]},"used_by":{"wp_list_authors":[277],"_walk_bookmarks":[58],"wp_list_bookmarks":[212],"get_bookmarks":[132],"wp_dropdown_categories":[321],"wp_list_categories":[427],"wp_tag_cloud":[527],"wp_generate_tag_cloud":[622],"get_categories":[41],"WP_Http::request":[102,108],"WP_Http::post":[274],"WP_Http::get":[292],"WP_Http::head":[310],"WP_Http_Fsockopen::request":[619],"WP_Http_Streams::request":[850],"WP_Http_Curl::request":[1040],"WP_oEmbed::fetch":[165],"WP_Admin_Bar::add_node":[116,118],"WP_Ajax_Response::add":[63],"_WP_Editors::parse_settings":[31],"WP_Embed::shortcode":[144],"wp_xmlrpc_server::_insert_post":[999],"get_comment_link":[485],"get_comment_reply_link":[1041],"get_post_reply_link":[1102],"wp_list_comments":[1423],"comment_form":[1548],"WP_Comment_Query::query":[241],"get_page_of_comment":[832],"WP_Widget_Pages::form":[62],"WP_Widget_Links::form":[142],"WP_Widget_Search::form":[212],"WP_Widget_Search::update":[221],"WP_Widget_Archives::update":[267],"WP_Widget_Archives::form":[276],"WP_Widget_Meta::form":[336],"WP_Widget_Calendar::form":[376],"WP_Widget_Text::form":[421],"WP_Widget_Categories::form":[505],"wp_widget_rss_output":[836],"wp_widget_rss_form":[924],"wp_get_linksbyname":[446],"wp_list_cats":[658],"wp_get_links":[918],"_default_wp_die_handler":[2073],"_xmlrpc_wp_die_handler":[2271],"wp_login_form":[273],"wp_get_archives":[881],"feed_links":[1607],"feed_links_extra":[1638],"paginate_links":[1939],"wp_http_supports":[207],"get_posts_nav_link":[1645],"paginate_comments_links":[1827],"wp_get_attachment_image":[564],"wp_enqueue_media":[1437],"wp_nav_menu":[143],"wp_update_nav_menu_item":[299],"wp_get_nav_menus":[411],"wp_get_nav_menu_items":[487],"wp_text_diff":[1706],"the_title_attribute":[78],"wp_link_pages":[640],"wp_dropdown_pages":[778],"wp_list_pages":[823],"wp_page_menu":[889],"wp_list_post_revisions":[1357],"get_children":[309],"register_post_status":[942],"register_post_type":[1231],"get_posts":[1709],"wp_get_post_categories":[2562],"wp_get_post_terms":[2611],"wp_get_recent_posts":[2647],"wp_insert_post":[2709],"get_pages":[3636],"wp_insert_attachment":[3915],"wp_get_post_revisions":[5218],"WP_Query::parse_query":[1430,1612],"WP_Query::query":[2971],"WP_Rewrite::add_permastruct":[1863],"register_taxonomy":[332,346],"get_objects_in_term":[522],"get_terms":[1207],"wp_count_terms":[1692],"wp_delete_term":[1783],"wp_get_object_terms":[1909],"wp_insert_term":[2058],"wp_update_term":[2370],"the_taxonomies":[3075],"get_the_taxonomies":[3096],"wp_get_themes":[31],"get_custom_header":[1061],"add_theme_support":[1294,1299,1363,1366],"WP_User_Query::__construct":[361],"get_users":[664],"wp_dropdown_users":[1031],"WP_Widget::__construct":[97,98],"WP_Widget::display_callback":[173],"WP_Widget::update_callback":[194],"WP_Widget::form_callback":[253],"register_sidebar":[568],"wp_register_sidebar_widget":[637],"wp_register_widget_control":[750],"_register_widget_form_callback":[806],"the_widget":[1142,1143]}},"wp_array_slice_assoc":{"doc":"\/**\n * Extract a slice of an array, given a list of keys.\n *\n * @since 3.1.0\n *\n * @param array $array The original array\n * @param array $keys The list of keys\n * @return array The array slice\n *\/","file":"functions.php","line":2588,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_list_authors":[282],"wp_dropdown_users":[1034]}},"get_users":{"doc":"\/**\n * Retrieve list of users matching criteria.\n *\n * @since 3.1.0\n * @uses $wpdb\n * @uses WP_User_Query See for default arguments and information.\n *\n * @param array $args Optional.\n * @return array List of users.\n *\/","file":"user.php","line":662,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[664],"get_results":[669]},"used_by":{"wp_list_authors":[284],"wp_xmlrpc_server::wp_getUsers":[2115],"wp_xmlrpc_server::wp_getAuthors":[2522],"wp_dropdown_users":[1036]}},"get_private_posts_cap_sql":{"doc":"\/**\n * Retrieve the private post SQL based on capability.\n *\n * This function provides a standardized way to appropriately select on the\n * post_status of a post type. The function will return a piece of SQL code\n * that can be added to a WHERE clause; this SQL is constructed to allow all\n * published posts, and all private posts to which the user has access.\n *\n * @since 2.2.0\n *\n * @uses $user_ID\n *\n * @param string $post_type currently only supports 'post' or 'page'.\n * @return string SQL code that can be added to a where clause.\n *\/","file":"post.php","line":4456,"missingDoc":false,"filters":[],"uses":{"get_posts_by_author_sql":[4457]},"used_by":{"wp_list_authors":[287]}},"get_author_feed_link":{"doc":"\/**\n * Retrieve the feed link for a given author.\n *\n * Returns a link to the feed for all posts by a given author. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int $author_id ID of an author.\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the author specified by $author_id.\n*\/","file":"link-template.php","line":533,"missingDoc":false,"filters":["'author_feed_link'"],"uses":{"get_option":[535],"get_default_feed":[538,544],"home_url":[541],"get_author_posts_url":[543],"trailingslashit":[549],"user_trailingslashit":[549]},"used_by":{"wp_list_authors":[326],"get_author_rss_link":[1200],"feed_links_extra":[1662]}},"is_multi_author":{"doc":"\/**\n * Does this site have more than one author\n *\n * Checks to see if more than one author has published posts.\n *\n * @since 3.2.0\n * @return bool Whether or not we have more than one author\n *\/","file":"author-template.php","line":372,"missingDoc":false,"filters":["'is_multi_author'"],"uses":{"get_col":[376],"count":[377],"wp_cache_set":[378],"wp_cache_get":[375]},"used_by":[]},"wp_cache_set":{"doc":"\/**\n * Saves the data to the cache.\n *\n * @since 2.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::set()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":176,"missingDoc":false,"filters":[],"uses":{"set":[179]},"used_by":{"is_multi_author":[378],"get_bookmarks":[183,264],"WP_Comment_Query::query":[254],"wp_count_comments":[972],"wp_insert_comment":[1297],"clean_comment_cache":[1975],"WP_Widget_Recent_Posts::widget":[589],"WP_Widget_Recent_Comments::widget":[702],"is_blog_installed":[1123,1159],"wp_get_archives":[928,950,971,994,1024],"get_calendar":[1097,1264],"get_adjacent_post":[1190],"get_id_from_blogname":[112],"get_blog_details":[143,160,221,227,239,242],"get_blog_id_from_url":[352,356],"get_current_site_name":[124],"wpmu_current_site":[176],"__main":[57,78],"get_option":[69],"wp_load_core_site_options":[187],"update_option":[241,252,254],"add_option":[324,326,334],"delete_option":[376],"set_transient":[497],"get_site_option":[782],"add_site_option":[824],"update_site_option":[915],"set_site_transient":[1037],"wp_count_posts":[2152],"get_pages":[3831],"_get_last_post_time":[4600],"get_terms":[1246],"clean_term_cache":[2635]}},"wp_cache_get":{"doc":"\/**\n * Retrieves the cache contents from the cache by key and group.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::get()\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false)\n * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value.\n * @return bool|mixed False on failure to retrieve contents or the cache\n *\t\tcontents on success\n *\/","file":"cache.php","line":110,"missingDoc":false,"filters":[],"uses":{"get":[113]},"used_by":{"is_multi_author":[375],"get_bookmark":[34],"get_bookmarks":[137],"WP_User::get_data_by":[552,556,561,569],"get_all_category_ids":[17],"WP_Theme::cache_get":[495],"get_comment":[145],"WP_Comment_Query::query":[252,257],"wp_count_comments":[944],"wp_insert_comment":[1296],"clean_comment_cache":[1974],"WP_Widget_Recent_Posts::widget":[545],"WP_Widget_Recent_Posts::update":[599],"WP_Widget_Recent_Comments::widget":[662],"WP_Widget_Recent_Comments::update":[711],"get_usermeta":[2333],"is_blog_installed":[1108],"_get_non_cached_ids":[3829],"wp_get_archives":[924,946,967,990,1020],"get_calendar":[1078],"get_adjacent_post":[1179],"get_metadata":[282],"metadata_exists":[326],"update_meta_cache":[546],"get_id_from_blogname":[99],"get_blog_details":[133,150,180,198,200],"get_blog_id_from_url":[342],"get_current_site_name":[119],"wpmu_current_site":[163],"__main":[53,74],"get_option":[49,58],"wp_load_alloptions":[139],"update_option":[238],"add_option":[311,331],"get_transient":[450],"get_site_option":[773],"get_site_transient":[990],"WP_Post::get_instance":[577],"wp_count_posts":[2138],"get_all_page_ids":[3415],"get_pages":[3654],"wp_mime_type_icon":[4323,4346],"_get_last_post_time":[4578],"get_term":[892],"get_terms":[1243,1249],"get_object_term_cache":[2652],"update_object_term_cache":[2692]}},"__clear_multi_author_cache":{"doc":"\/**\n * Helper function to clear the cache for number of authors.\n *\n * @private\n *\/","file":"author-template.php","line":389,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[390]},"used_by":[]},"wp_cache_delete":{"doc":"\/**\n * Removes the cache contents matching key and group.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::delete()\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @return bool True on successful removal, false on failure\n *\/","file":"cache.php","line":75,"missingDoc":false,"filters":[],"uses":{"delete":[78]},"used_by":{"__clear_multi_author_cache":[390],"clean_bookmark_cache":[384,385],"WP_Theme::cache_delete":[506],"clean_comment_cache":[1969],"WP_Widget_Recent_Posts::flush_widget_cache":[607],"WP_Widget_Recent_Comments::flush_widget_cache":[656],"delete_usermeta":[2298],"update_usermeta":[2406],"delete_get_calendar_cache":[1280],"add_metadata":[75],"update_metadata":[156],"delete_metadata":[239,242],"update_metadata_by_mid":[441],"delete_metadata_by_mid":[498],"get_blog_details":[188,208],"clean_blog_cache":[354,355,356,357,358,359,360],"add_user_to_blog":[197],"delete_option":[379],"delete_transient":[409],"delete_site_option":[869],"delete_site_transient":[949],"wp_set_password":[1574],"clean_post_cache":[4650,4651,4655,4660,4663],"clean_attachment_cache":[4765,4766],"_transition_post_status":[4804,4805],"wp_set_object_terms":[2241],"clean_object_term_cache":[2573],"clean_term_cache":[2607,2614,2625,2626],"clean_user_cache":[1183,1184,1185,1186],"wp_insert_user":[1415,1416],"wp_update_user":[1474]}},"_walk_bookmarks":{"doc":"\/**\n * The formatted output of a list of bookmarks.\n *\n * The $bookmarks array must contain bookmark objects and will be iterated over\n * to retrieve the bookmark to be used in the output.\n *\n * The output is formatted as HTML with no way to change that format. However,\n * what is between, before, and after can be changed. The link itself will be\n * HTML.\n *\n * This function is used internally by wp_list_bookmarks() and should not be\n * used by themes.\n *\n * The defaults for overwriting are:\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'show_description' - Default is 0 (integer). Whether to show the description\n *\t\tof the bookmark.\n * 'show_images' - Default is 1 (integer). Whether to show link image if\n *\t\tavailable.\n * 'show_name' - Default is 0 (integer). Whether to show link name if\n *\t\tavailable.\n * 'before' - Default is '<li>' (string). The html or text to prepend to each\n *\t\tbookmarks.\n * 'after' - Default is '<\/li>' (string). The html or text to append to each\n *\t\tbookmarks.\n * 'link_before' - Default is '' (string). The html or text to prepend to each\n *\t\tbookmarks inside the <a> tag.\n * 'link_after' - Default is '' (string). The html or text to append to each\n *\t\tbookmarks inside the <a> tag.\n * 'between' - Default is '\\n' (string). The string for use in between the link,\n *\t\tdescription, and image.\n * 'show_rating' - Default is 0 (integer). Whether to show the link rating.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $bookmarks List of bookmarks to traverse\n * @param string|array $args Optional. Overwrite the defaults.\n * @return string Formatted output in HTML\n *\/","file":"bookmark-template.php","line":50,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[58],"extract":[59],"get_option":[68,81,81,106,119],"esc_url":[72],"esc_attr":[74,75,92],"sanitize_bookmark_field":[74,75,125],"sprintf":[81],"__":[81],"date":[81],"substr":[79],"strpos":[103]},"used_by":{"wp_list_bookmarks":[233,244,247]}},"get_option":{"doc":"\/**\n * Retrieve option value based on name of option.\n *\n * If the option does not exist or does not have a value, then the return value\n * will be false. This is useful to check whether you need to install an option\n * and is commonly used during installation of plugin options and to test\n * whether upgrading is required.\n *\n * If the option was serialized then it will be unserialized when it is returned.\n *\n * @since 1.5.0\n * @package WordPress\n * @subpackage Option\n * @uses apply_filters() Calls 'pre_option_$option' before checking the option.\n * \tAny value other than false will \"short-circuit\" the retrieval of the option\n *\tand return the returned value. You should not try to override special options,\n * \tbut you will not be prevented from doing so.\n * @uses apply_filters() Calls 'option_$option', after checking the option, with\n * \tthe option value.\n *\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional. Default value to return if the option does not exist.\n * @return mixed Value set for the option.\n *\/","file":"option.php","line":32,"missingDoc":false,"filters":["'pre_option_' . $option","'default_option_' . $option","'default_option_' . $option","'default_option_' . $option","'option_' . $option"],"uses":{"trim":[35],"defined":[44,47],"wp_cache_get":[49,58],"wp_load_alloptions":[53],"get_row":[61,76],"prepare":[61,76],"wp_cache_add":[66],"wp_cache_set":[69],"is_object":[64,78],"suppress_errors":[75,77],"get_option":[86],"untrailingslashit":[89],"in_array":[88],"maybe_unserialize":[91]},"used_by":{"_walk_bookmarks":[68,81,81,106,119],"get_bookmarks":[212,211],"redirect_canonical":[124,124,126,126,127,270,270,270],"WP_Roles::_init":[103],"WP_Roles::reinit":[135],"map_meta_cap":[1252],"wp_list_categories":[460,460,460],"WP_Http::request":[177],"WP_Http::block_request":[508],"WP_Http_Fsockopen::test":[807],"WP_HTTP_Proxy::send_through_proxy":[1391],"IXR_Server::output":[469],"WP_Ajax_Response::send":[129,130],"WP_Customize_Manager::register_controls":[722,733,933],"WP_Customize_Setting::_update_option":[206],"WP_Theme::get_allowed_on_site":[1116,1119,1127,1130],"wp_xmlrpc_server::wp_getUsersBlogs":[493],"wp_xmlrpc_server::wp_newComment":[2959,3000],"wp_xmlrpc_server::_getOptions":[3200],"wp_xmlrpc_server::blogger_getUsersBlogs":[3645,3647],"wp_xmlrpc_server::mw_newPost":[4171,4184,4189,4202,4214,4219],"wp_xmlrpc_server::mw_editPost":[4448,4461,4477,4489],"wp_xmlrpc_server::pingback_ping":[5313],"WP::send_headers":[331,331,336,336],"get_comment_date":[375],"get_comment_link":[488,487],"get_comment_time":[633],"get_trackback_url":[710,707],"comments_template":[857,903,902],"comments_popup_link":[995],"get_comment_reply_link":[1058],"get_post_reply_link":[1109],"wp_list_comments":[1452,1462,1461,1472,1482],"comment_form":[1521,1555],"check_comment":[44,50,57,83],"get_comment_pages_count":[796,801],"get_page_of_comment":[834,845,844],"wp_blacklist_check":[890],"wp_new_comment":[1410],"wp_set_comment_status":[1443],"generic_ping":[1786],"privacy_ping_filter":[1883],"trackback":[1914],"weblog_ping":[1951,1950],"_close_comments_for_old_posts":[2012,2019],"_close_comments_for_old_post":[2045,2048],"_mb_substr":[25],"_get_cron_array":[362],"wp_plugin_directory_constants":[94],"wp_cookie_constants":[206,212],"WP_Widget_Recent_Comments::widget":[691],"WP_Widget_RSS::widget":[768],"wp_widget_rss_output":[863,885],"wp_widgets_init":[1177],"get_settings":[851],"get_links":[973,987,987,1004,1012],"make_url_footnote":[1763],"get_boundary_post_rel_link":[2734],"get_parent_post_rel_link":[2809],"get_current_theme":[2979],"__main":[8,9,8,11,45,8,11,45,8,11,8,10,8,11,43,15,14,16,25,25,69,68,64],"get_the_category_rss":[329],"wp_check_invalid_utf8":[518],"balanceTags":[1148],"convert_smilies":[1761],"get_gmt_from_date":[1900,1915],"get_date_from_gmt":[1935],"iso8601_to_datetime":[1979],"wp_trim_words":[2182],"sanitize_option":[2763,2850,2860,2869,2901],"current_time":[62,65],"date_i18n":[124],"get_weekstartend":[212],"do_robots":[1077],"wp_upload_dir":[1525,1526,1537,1594],"wp_send_json":[2320],"smilies_init":[2452],"wp_timezone_override_offset":[3265],"_wp_mysql_week":[3657],"wp_register":[340],"get_bloginfo":[418,439,452,455,459,479],"wp_get_archives":[910,911,912,1005],"get_calendar":[1106],"get_the_date":[1380],"get_the_modified_date":[1420],"get_the_time":[1450],"get_the_modified_time":[1500],"noindex":[1709],"language_attributes":[1865,1868],"get_locale":[41],"get_permalink":[113,134],"get_page_link":[243,243],"get_attachment_link":[312],"get_post_comments_feed_link":[475,475,474],"get_author_feed_link":[535],"get_term_feed_link":[599],"get_post_type_archive_link":[840],"get_post_type_archive_feed_link":[871],"get_adjacent_post_rel_link":[1225],"adjacent_post_link":[1392],"get_comments_pagenum_link":[1694],"get_next_comments_link":[1727],"get_previous_comments_link":[1770],"paginate_comments_links":[1809],"get_home_url":[1906,1909],"get_site_url":[1965,1968],"wp_get_shortlink":[2361],"wp_get_active_and_valid_plugins":[481,484],"wp_set_internal_encoding":[517],"image_constrain_size_for_editor":[47,48,56,57,65,66],"wp_prepare_attachment_for_js":[1346],"wp_enqueue_media":[1453,1454,1455],"get_blog_details":[232,233,234],"get_blog_option":[387,390],"ms_cookie_constants":[66],"wpmu_signup_blog_notification":[737],"wpmu_signup_user_notification":[790],"newblog_notify_siteadmin":[1023],"wpmu_welcome_notification":[1252],"wpmu_welcome_user_notification":[1300],"global_terms":[1569],"maybe_add_existing_user_to_blog":[1681],"get_space_allowed":[1961],"_wp_menu_item_classes_by_context":[265],"_wp_auto_add_pages_to_menu":[759],"get_option":[86],"form_option":[123],"update_option":[228],"add_option":[313],"get_transient":[458,466],"set_transient":[501],"get_site_option":[769],"wp_notify_postauthor":[1014,1069],"wp_notify_moderator":[1097,1104,1105,1113],"wp_password_change_notification":[1182,1183,1178],"wp_new_user_notification":[1205,1211],"get_avatar":[1590,1626,1664],"register_uninstall_hook":[686],"_wp_link_page":[703,703,701],"wp_list_pages":[816],"wp_page_menu":[913,907],"Walker_Page::start_el":[1045],"register_post_type":[1293],"is_sticky":[1918],"stick_post":[2065],"unstick_post":[2086],"wp_delete_post":[2338,2342],"wp_insert_post":[2704,2749,2831,2834],"wp_set_post_categories":[3237],"wp_insert_attachment":[3911,3974,3977],"_publish_post_hook":[4851],"WP_Query::parse_query":[1619,1611,1611,1635,1635,1643,1643],"WP_Query::get_posts":[1990,2005,2015,2020,2017,2017,2131,2132,2175,2175,2559,2692,2731],"WP_Query::get_queried_object":[3014],"WP_Query::is_front_page":[3323,3323,3323,3321],"WP_Rewrite::generate_rewrite_rules":[1334,1331,1361],"WP_Rewrite::wp_rewrite_rules":[1616],"WP_Rewrite::init":[1906],"WP_Rewrite::set_category_base":[1963],"WP_Rewrite::set_tag_base":[1982],"create_initial_taxonomies":[31,31,32,36,36,37],"register_taxonomy":[345],"wp_delete_term":[1778],"_get_term_hierarchy":[2766],"get_stylesheet":[147],"get_template":[240],"get_theme_root_uri":[495],"get_raw_theme_root":[518,519,520,517],"preview_theme":[578],"switch_theme":[695,694],"get_theme_mods":[747,749,752,748],"set_theme_mod":[801],"remove_theme_mod":[827],"remove_theme_mods":[837,840],"get_uploaded_header_images":[1003],"check_theme_switched":[1609],"wp_update_plugins":[147],"wp_update_themes":[248],"get_blogs_of_user":[698,702],"wp_insert_user":[1413],"WP_Widget::get_settings":[291,294],"is_dynamic_sidebar":[965],"wp_get_sidebars_widgets":[1017,1021],"wp_convert_widget_settings":[1092,1095]}},"sanitize_bookmark_field":{"doc":"\/**\n * Sanitizes a bookmark field\n *\n * Sanitizes the bookmark fields based on what the field name is. If the field\n * has a strict value set, then it will be tested for that, else a more generic\n * filtering is applied. After the more strict filter is applied, if the\n * $context is 'raw' then the value is immediately return.\n *\n * Hooks exist for the more generic cases. With the 'edit' context, the\n * 'edit_$field' filter will be called and passed the $value and $bookmark_id\n * respectively. With the 'db' context, the 'pre_$field' filter is called and\n * passed the value. The 'display' context is the final context and has the\n * $field has the filter name and is passed the $value, $bookmark_id, and\n * $context respectively.\n *\n * @since 2.3.0\n *\n * @param string $field The bookmark field\n * @param mixed $value The bookmark field value\n * @param int $bookmark_id Bookmark ID\n * @param string $context How to filter the field value. Either 'raw', 'edit',\n *\t\t'attribute', 'js', 'db', or 'display'\n * @return mixed The filtered value\n *\/","file":"bookmark.php","line":329,"missingDoc":false,"filters":["\"edit_{$field}\"","\"pre_{$field}\""],"uses":{"array_map":[336],"preg_replace":[342],"in_array":[346],"esc_html":[358],"esc_attr":[360,369],"esc_js":[371]},"used_by":{"_walk_bookmarks":[74,75,125],"get_bookmark_field":[84],"sanitize_bookmark":[295,298],"get_links":[981,982],"get_linkrating":[1115]}},"wp_list_bookmarks":{"doc":"\/**\n * Retrieve or echo all of the bookmarks.\n *\n * List of default arguments are as follows:\n * 'orderby' - Default is 'name' (string). How to order the links by. String is\n *\t\tbased off of the bookmark scheme.\n * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either\n *\t\tascending or descending order.\n * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to\n *\t\tdisplay.\n * 'category' - Default is empty string (string). Include the links in what\n *\t\tcategory ID(s).\n * 'category_name' - Default is empty string (string). Get links by category\n *\t\tname.\n * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide\n *\t\tlinks marked as 'invisible'.\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'echo' - Default is 1 (integer). Whether to echo (default) or return the\n *\t\tformatted bookmarks.\n * 'categorize' - Default is 1 (integer). Whether to show links listed by\n *\t\tcategory (default) or show links in one column.\n * 'show_description' - Default is 0 (integer). Whether to show the description\n *\t\tof the bookmark.\n *\n * These options define how the Category name will appear before the category\n * links are displayed, if 'categorize' is 1. If 'categorize' is 0, then it will\n * display for only the 'title_li' string and only if 'title_li' is not empty.\n * 'title_li' - Default is 'Bookmarks' (translatable string). What to show\n *\t\tbefore the links appear.\n * 'title_before' - Default is '<h2>' (string). The HTML or text to show before\n *\t\tthe 'title_li' string.\n * 'title_after' - Default is '<\/h2>' (string). The HTML or text to show after\n *\t\tthe 'title_li' string.\n * 'class' - Default is 'linkcat' (string). The CSS class to use for the\n *\t\t'title_li'.\n *\n * 'category_before' - Default is '<li id=\"%id\" class=\"%class\">'. String must\n *\t\tcontain '%id' and '%class' to get\n * the id of the category and the 'class' argument. These are used for\n *\t\tformatting in themes.\n * Argument will be displayed before the 'title_before' argument.\n * 'category_after' - Default is '<\/li>' (string). The HTML or text that will\n *\t\tappear after the list of links.\n *\n * These are only used if 'categorize' is set to 1 or true.\n * 'category_orderby' - Default is 'name'. How to order the bookmark category\n *\t\tbased on term scheme.\n * 'category_order' - Default is 'ASC'. Set the order by either ASC (ascending)\n *\t\tor DESC (descending).\n *\n * @see _walk_bookmarks() For other arguments that can be set in this function\n *\t\tand passed to _walk_bookmarks().\n * @see get_bookmarks() For other arguments that can be set in this function and\n *\t\tpassed to get_bookmarks().\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_list_bookmarks\n *\n * @since 2.1.0\n * @uses _walk_bookmarks() Used to iterate over all of the bookmarks and return\n *\t\tthe html\n * @uses get_terms() Gets all of the categories that are for links.\n *\n * @param string|array $args Optional. Overwrite the defaults of the function\n * @return string|null Will only return if echo option is set to not echo.\n *\t\tDefault is not return anything.\n *\/","file":"bookmark-template.php","line":199,"missingDoc":false,"filters":["'link_category'","'wp_list_bookmarks'"],"uses":{"__":[205],"wp_parse_args":[212],"extract":[213],"get_terms":[218],"array_merge":[226],"get_bookmarks":[227,238],"str_replace":[230,242],"_walk_bookmarks":[233,244,247]},"used_by":{"WP_Widget_Links::widget":[110],"wp_get_linksbyname":[448],"wp_get_links":[920],"__main":[67]}},"get_terms":{"doc":"\/**\n * Retrieve the terms in a given taxonomy or list of taxonomies.\n *\n * You can fully inject any customizations to the query before it is sent, as\n * well as control the output with a filter.\n *\n * The 'get_terms' filter will be called when the cache has the term and will\n * pass the found term along with the array of $taxonomies and array of $args.\n * This filter is also called before the array of terms is passed and will pass\n * the array of terms, along with the $taxonomies and $args.\n *\n * The 'list_terms_exclusions' filter passes the compiled exclusions along with\n * the $args.\n *\n * The 'get_terms_orderby' filter passes the ORDER BY clause for the query\n * along with the $args array.\n *\n * The 'get_terms_fields' filter passes the fields for the SELECT query\n * along with the $args array.\n *\n * The list of arguments that $args can contain, which will overwrite the defaults:\n *\n * orderby - Default is 'name'. Can be name, count, term_group, slug or nothing\n * (will use term_id), Passing a custom value other than these will cause it to\n * order based on the custom value.\n *\n * order - Default is ASC. Can use DESC.\n *\n * hide_empty - Default is true. Will not return empty terms, which means\n * terms whose count is 0 according to the given taxonomy.\n *\n * exclude - Default is an empty array. An array, comma- or space-delimited string\n * of term ids to exclude from the return array. If 'include' is non-empty,\n * 'exclude' is ignored.\n *\n * exclude_tree - Default is an empty array. An array, comma- or space-delimited\n * string of term ids to exclude from the return array, along with all of their\n * descendant terms according to the primary taxonomy. If 'include' is non-empty,\n * 'exclude_tree' is ignored.\n *\n * include - Default is an empty array. An array, comma- or space-delimited string\n * of term ids to include in the return array.\n *\n * number - The maximum number of terms to return. Default is to return them all.\n *\n * offset - The number by which to offset the terms query.\n *\n * fields - Default is 'all', which returns an array of term objects.\n * If 'fields' is 'ids' or 'names', returns an array of\n * integers or strings, respectively.\n *\n * slug - Returns terms whose \"slug\" matches this value. Default is empty string.\n *\n * hierarchical - Whether to include terms that have non-empty descendants\n * (even if 'hide_empty' is set to true).\n *\n * search - Returned terms' names will contain the value of 'search',\n * case-insensitive. Default is an empty string.\n *\n * name__like - Returned terms' names will begin with the value of 'name__like',\n * case-insensitive. Default is empty string.\n *\n * The argument 'pad_counts', if set to true will include the quantity of a term's\n * children in the quantity of each term's \"count\" object variable.\n *\n * The 'get' argument, if set to 'all' instead of its default empty string,\n * returns terms regardless of ancestry or whether the terms are empty.\n *\n * The 'child_of' argument, when used, should be set to the integer of a term ID. Its default\n * is 0. If set to a non-zero value, all returned terms will be descendants\n * of that term according to the given taxonomy. Hence 'child_of' is set to 0\n * if more than one taxonomy is passed in $taxonomies, because multiple taxonomies\n * make term ancestry ambiguous.\n *\n * The 'parent' argument, when used, should be set to the integer of a term ID. Its default is\n * the empty string '', which has a different meaning from the integer 0.\n * If set to an integer value, all returned terms will have as an immediate\n * ancestor the term whose ID is specified by that integer according to the given taxonomy.\n * The 'parent' argument is different from 'child_of' in that a term X is considered a 'parent'\n * of term Y only if term X is the father of term Y, not its grandfather or great-grandfather, etc.\n *\n * The 'cache_domain' argument enables a unique cache key to be produced when this query is stored\n * in object cache. For instance, if you are using one of this function's filters to modify the\n * query (such as 'terms_clauses'), setting 'cache_domain' to a unique value will not overwrite\n * the cache for similar queries. Default value is 'core'.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses wp_parse_args() Merges the defaults with those defined by $args and allows for strings.\n *\n * @param string|array $taxonomies Taxonomy name or list of Taxonomy names\n * @param string|array $args The values of what to search for when returning terms\n * @return array|WP_Error List of Term Objects and their children. Will return WP_Error, if any of $taxonomies do not exist.\n *\/","file":"taxonomy.php","line":1187,"missingDoc":false,"filters":["'get_terms_args'","'get_terms'","'get_terms_orderby'","'list_terms_exclusions'","'get_terms_fields'","'terms_clauses'","'get_terms'","'get_terms'"],"uses":{"is_array":[1191,1192,1427,1423],"count":[1191,1454],"__":[1197],"taxonomy_exists":[1196],"wp_parse_args":[1207],"absint":[1208,1209],"is_taxonomy_hierarchical":[1210],"extract":[1226],"_get_term_hierarchy":[1229,1235,1413],"has_filter":[1241],"serialize":[1241,1242,1242],"md5":[1242],"compact":[1242,1388],"array_keys":[1242],"wp_cache_get":[1243,1249],"time":[1245],"wp_cache_set":[1246],"strtolower":[1255],"strtoupper":[1278],"in_array":[1279],"implode":[1282,1383],"wp_parse_id_list":[1287,1302,1316],"intval":[1290,1292,1304,1308,1310,1319,1321,1454],"get_terms":[1304],"sanitize_title":[1331],"like_escape":[1336,1359],"prepare":[1337,1360],"get_var":[1397],"get_results":[1401],"update_term_cache":[1403],"wp_cache_add":[1407,1458],"_get_term_children":[1415,1426],"_pad_term_counts":[1420],"reset":[1437],"array_shift":[1441,1445,1449],"array_slice":[1455]},"used_by":{"wp_list_bookmarks":[218],"wp_dropdown_categories":[333],"wp_tag_cloud":[529],"get_all_category_ids":[18],"get_categories":[51],"get_category_by_path":[121],"get_tags":[253],"wp_xmlrpc_server::_insert_post":[1152],"wp_xmlrpc_server::wp_getTerms":[1875],"WP_Widget_Links::form":[143],"WP_Nav_Menu_Widget::form":[1131],"wp_get_nav_menus":[412],"wp_get_nav_menu_items":[523],"get_terms":[1304],"wp_count_terms":[1702],"wp_insert_term":[2091],"_get_term_hierarchy":[2771]}},"get_bookmarks":{"doc":"\/**\n * Retrieves the list of bookmarks\n *\n * Attempts to retrieve from the cache first based on MD5 hash of arguments. If\n * that fails, then the query will be built from the arguments and executed. The\n * results will be stored to the cache.\n *\n * List of default arguments are as follows:\n * 'orderby' - Default is 'name' (string). How to order the links by. String is\n *\t\tbased off of the bookmark scheme.\n * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either\n *\t\tascending or descending order.\n * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to\n *\t\tdisplay.\n * 'category' - Default is empty string (string). Include the links in what\n *\t\tcategory ID(s).\n * 'category_name' - Default is empty string (string). Get links by category\n *\t\tname.\n * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide\n *\t\tlinks marked as 'invisible'.\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'include' - Default is empty string (string). Include bookmark ID(s)\n *\t\tseparated by commas.\n * 'exclude' - Default is empty string (string). Exclude bookmark ID(s)\n *\t\tseparated by commas.\n *\n * @since 2.1.0\n * @uses $wpdb Database Object\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/get_bookmarks\n *\n * @param string|array $args List of arguments to overwrite the defaults\n * @return array List of bookmark row objects\n *\/","file":"bookmark.php","line":121,"missingDoc":false,"filters":["'get_bookmarks'","'get_bookmarks'","'get_bookmarks'"],"uses":{"wp_parse_args":[132],"extract":[133],"md5":[136],"serialize":[136],"is_array":[138,142],"wp_cache_get":[137],"preg_split":[150,165,196],"intval":[154,156,169,171,200,202],"count":[151,166,197],"wp_cache_set":[183,264],"get_term_by":[179],"like_escape":[189],"get_option":[212,211],"strtolower":[219],"trim":[234],"in_array":[238,236,248],"explode":[233],"implode":[241],"strtoupper":[247],"get_results":[261]},"used_by":{"wp_list_bookmarks":[227,238],"get_linkobjects":[530],"get_links":[961]}},"get_bookmark":{"doc":"\/**\n * Retrieve Bookmark data\n *\n * @since 2.1.0\n * @uses $wpdb Database Object\n *\n * @param mixed $bookmark\n * @param string $output Optional. Either OBJECT, ARRAY_N, or ARRAY_A constant\n * @param string $filter Optional, default is 'raw'.\n * @return array|object Type returned depends on $output value.\n *\/","file":"bookmark.php","line":20,"missingDoc":false,"filters":[],"uses":{"is_object":[28],"wp_cache_add":[29,38],"wp_cache_get":[34],"get_row":[35],"prepare":[35],"array_unique":[37],"wp_get_object_terms":[37],"sanitize_bookmark":[46],"get_object_vars":[51,53],"array_values":[53]},"used_by":{"get_bookmark_field":[73],"get_link":[2051],"get_edit_bookmark_link":[1022],"edit_bookmark_link":[1042]}},"wp_cache_add":{"doc":"\/**\n * Adds data to the cache, if the cache key doesn't already exist.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::add()\n *\n * @param int|string $key The cache key to use for retrieval later\n * @param mixed $data The data to add to the cache store\n * @param string $group The group to add the cache to\n * @param int $expire When the cache data should be expired\n * @return unknown\n *\/","file":"cache.php","line":24,"missingDoc":false,"filters":[],"uses":{"add":[27]},"used_by":{"get_bookmark":[29,38],"get_the_terms":[1068],"get_all_category_ids":[19],"WP_Theme::cache_add":[480],"get_comment":[140,149],"WP_Comment_Query::query":[380],"update_comment_cache":[1994],"update_meta_cache":[581],"get_option":[66],"wp_load_alloptions":[153],"WP_Post::get_instance":[586],"get_all_page_ids":[3418],"wp_mime_type_icon":[4372,4392],"update_post_cache":[4620],"get_term":[885,896],"get_term_by":[970],"get_terms":[1407,1458],"update_object_term_cache":[2720],"update_term_cache":[2741],"update_user_caches":[1163,1164,1165,1166]}},"wp_get_object_terms":{"doc":"\/**\n * Retrieves the terms associated with the given object(s), in the supplied taxonomies.\n *\n * The following information has to do the $args parameter and for what can be\n * contained in the string or array of that parameter, if it exists.\n *\n * The first argument is called, 'orderby' and has the default value of 'name'.\n * The other value that is supported is 'count'.\n *\n * The second argument is called, 'order' and has the default value of 'ASC'.\n * The only other value that will be acceptable is 'DESC'.\n *\n * The final argument supported is called, 'fields' and has the default value of\n * 'all'. There are multiple other options that can be used instead. Supported\n * values are as follows: 'all', 'ids', 'names', and finally\n * 'all_with_object_id'.\n *\n * The fields argument also decides what will be returned. If 'all' or\n * 'all_with_object_id' is chosen or the default kept intact, then all matching\n * terms objects will be returned. If either 'ids' or 'names' is used, then an\n * array of all matching term ids or term names will be returned respectively.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $object_ids The ID(s) of the object(s) to retrieve.\n * @param string|array $taxonomies The taxonomies to retrieve terms from.\n * @param array|string $args Change what is returned\n * @return array|WP_Error The requested term data or empty array if no terms found. WP_Error if any of the $taxonomies don't exist.\n *\/","file":"taxonomy.php","line":1890,"missingDoc":false,"filters":["'wp_get_object_terms'"],"uses":{"is_array":[1896,1904,1915,1922],"__":[1901],"taxonomy_exists":[1900],"array_map":[1906],"wp_parse_args":[1909],"get_taxonomy":[1914,1921],"array_merge":[1917,1917,1915,1923,1974,1977],"wp_get_object_terms":[1917],"count":[1912],"extract":[1926],"strtoupper":[1952],"in_array":[1953],"implode":[1956,1957],"get_results":[1974],"update_term_cache":[1975],"get_col":[1977,1979]},"used_by":{"get_bookmark":[37],"redirect_canonical":[208],"get_the_terms":[1067],"wp_xmlrpc_server::_prepare_post":[674],"get_adjacent_post":[1138],"get_boundary_post":[1316],"_wp_menu_item_classes_by_context":[271],"wp_get_post_categories":[2564],"wp_get_post_terms":[2613],"_update_term_count_on_transition_post_status":[5536],"wp_delete_object_term_relationships":[1729],"wp_delete_term":[1808],"wp_get_object_terms":[1917],"wp_set_object_terms":[2182,2232],"update_object_term_cache":[2702],"get_the_taxonomies":[3117],"is_object_in_term":[3167]}},"sanitize_bookmark":{"doc":"\/**\n * Sanitizes all bookmark fields\n *\n * @since 2.3.0\n *\n * @param object|array $bookmark Bookmark row\n * @param string $context Optional, default is 'display'. How to filter the\n *\t\tfields\n * @return object|array Same type as $bookmark but with fields sanitized.\n *\/","file":"bookmark.php","line":279,"missingDoc":false,"filters":[],"uses":{"is_object":[284],"sanitize_bookmark_field":[295,298]},"used_by":{"get_bookmark":[46]}},"get_bookmark_field":{"doc":"\/**\n * Retrieve single bookmark data item or field.\n *\n * @since 2.3.0\n * @uses get_bookmark() Gets bookmark object using $bookmark as ID\n * @uses sanitize_bookmark_field() Sanitizes Bookmark field based on $context.\n *\n * @param string $field The name of the data field to return\n * @param int $bookmark The bookmark ID to get field\n * @param string $context Optional. The context of how the field will be used.\n * @return string\n *\/","file":"bookmark.php","line":71,"missingDoc":false,"filters":[],"uses":{"get_bookmark":[73],"is_wp_error":[75],"is_object":[78],"sanitize_bookmark_field":[84]},"used_by":[]},"is_wp_error":{"doc":"\/**\n * Check whether variable is a WordPress Error.\n *\n * Looks at the object and if a WP_Error class. Does not check to see if the\n * parent is also WP_Error, so can't inherit WP_Error and still use this\n * function.\n *\n * @since 2.1.0\n *\n * @param mixed $thing Check if unknown variable is WordPress Error object.\n * @return bool True, if WP_Error. False, if not WP_Error.\n *\/","file":"class-wp-error.php","line":206,"missingDoc":false,"filters":[],"uses":{"is_object":[207],"is_a":[207]},"used_by":{"get_bookmark_field":[75],"redirect_canonical":[167,209,209],"get_category_link":[24],"get_category_parents":[45],"get_the_category":[76],"get_the_category_by_ID":[139],"wp_tag_cloud":[531,539],"get_tag_link":[970],"term_description":[1049],"get_the_term_list":[1094,1102],"the_terms":[1127],"has_term":[1188],"get_category":[83],"get_category_by_path":[131],"get_cat_name":[189],"WP_SimplePie_File::__construct":[79],"WP_Http::_dispatch_request":[254],"WP_oEmbed::fetch":[175,177],"WP_Ajax_Response::add":[67,73],"WP_HTTP_IXR_Client::query":[60],"WP_Image_Editor_GD::resize":[148],"WP_Image_Editor_GD::multi_resize":[194,189],"WP_Image_Editor_GD::save":[319],"WP_Image_Editor_Imagick::load":[142],"WP_Image_Editor_Imagick::multi_resize":[272,265],"WP_Image_Editor_Imagick::save":[390],"WP_Theme::errors":[437],"wp_xmlrpc_server::login":[187],"wp_xmlrpc_server::_insert_post":[1177,1198,1213],"wp_xmlrpc_server::wp_newTerm":[1568,1585],"wp_xmlrpc_server::wp_editTerm":[1647,1667,1684],"wp_xmlrpc_server::wp_deleteTerm":[1734,1742],"wp_xmlrpc_server::wp_getTerm":[1801],"wp_xmlrpc_server::wp_getTerms":[1877],"wp_xmlrpc_server::wp_editProfile":[2230],"wp_xmlrpc_server::wp_newCategory":[2621],"wp_xmlrpc_server::wp_editComment":[2923],"wp_xmlrpc_server::blogger_newPost":[3885],"wp_xmlrpc_server::mw_newPost":[4292],"wp_xmlrpc_server::mw_editPost":[4569],"discover_pingback_server_uri":[1666,1679],"trackback":[1920],"WP_Widget_RSS::widget":[767,791],"wp_widget_rss_output":[829],"wp_widget_rss_process":[1007],"get_category_children":[1310],"image_resize":[3268,3273,3279],"user_pass_ok":[3319],"get_wp_title_rss":[84],"wp_get_http":[507],"wp_get_http_headers":[548],"wp_remote_fopen":[764],"_default_wp_die_handler":[2077],"wp_remote_retrieve_headers":[120],"wp_remote_retrieve_header":[136],"wp_remote_retrieve_response_code":[156],"wp_remote_retrieve_response_message":[173],"wp_remote_retrieve_body":[188],"get_permalink":[135],"get_post_permalink":[183],"get_term_feed_link":[593],"get_adjacent_post":[1139],"wp_set_wpdb_vars":[368],"image_make_intermediate_size":[393,393,398],"wp_get_image_editor":[1181],"wpmu_activate_signup":[879],"wpmu_create_user":[916],"maybe_add_existing_user_to_blog":[1685],"wp_nav_menu":[166,177,181],"is_nav_menu":[57],"is_nav_menu_item":[154],"wp_delete_nav_menu":[191],"wp_update_nav_menu_object":[222,237,229,252],"wp_update_nav_menu_item":[279,361],"wp_get_nav_menu_items":[495],"wp_setup_nav_menu_item":[604,607],"wp_login":[162],"wp_authenticate":[484],"get_post_class":[334],"get_body_class":[440],"_wp_put_post_revision":[5082],"wp_restore_post_revision":[5161],"wp_delete_post_revision":[5190],"wp_get_post_parent_id":[5268],"get_post_format_link":[5413],"WP_Query::get_queried_object":[3004],"_fetch_remote_file":[540],"WP_Tax_Query::get_sql":[672],"WP_Tax_Query::clean_query":[757],"get_term_by":[961],"get_term_field":[1050],"get_term_to_edit":[1081],"wp_delete_term":[1770,1795],"wp_insert_term":[2048],"wp_set_object_terms":[2200],"wp_unique_term_slug":[2283],"wp_update_term":[2360],"_get_term_children":[2812],"get_term_link":[3004],"is_object_in_term":[3169],"get_ancestors":[3235],"wp_get_term_taxonomy_parent_id":[3258],"wp_version_check":[91],"wp_update_plugins":[207],"wp_update_themes":[312],"wp_signon":[55],"wp_authenticate_username_password":[106]}},"get_term_by":{"doc":"\/**\n * Get all Term data from database by Term field and data.\n *\n * Warning: $value is not escaped for 'name' $field. You must do it yourself, if\n * required.\n *\n * The default $field is 'id', therefore it is possible to also use null for\n * field, but not recommended that you do so.\n *\n * If $value does not exist, the return value will be false. If $taxonomy exists\n * and $field and $value combinations exist, the Term will be returned.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses sanitize_term() Cleanses the term based on $filter context before returning.\n * @see sanitize_term_field() The $context param lists the available values for get_term_by() $filter param.\n *\n * @param string $field Either 'slug', 'name', or 'id'\n * @param string|int $value Search for this term value\n * @param string $taxonomy Taxonomy Name\n * @param string $output Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional, default is raw or no WordPress defined filter will applied.\n * @return mixed Term Row from database. Will return false if $taxonomy does not exist or $term was not found.\n *\/","file":"taxonomy.php","line":944,"missingDoc":false,"filters":["'get_term'","\"get_{$taxonomy}\""],"uses":{"taxonomy_exists":[947],"sanitize_title":[952],"stripslashes":[957],"get_term":[960],"is_wp_error":[961],"get_row":[966],"prepare":[966],"wp_cache_add":[970],"sanitize_term":[974],"get_object_vars":[979,981],"array_values":[981]},"used_by":{"get_bookmarks":[179],"get_category_by_slug":[156],"get_cat_ID":[172],"wp_xmlrpc_server::_insert_post":[1128,1168],"get_linksbyname":[413],"get_linkobjectsbyname":[477],"wp_get_nav_menu_object":[28,31],"wp_update_nav_menu_object":[219,230],"get_post_format_link":[5412],"WP_Query::get_posts":[2261,2273],"WP_Query::get_queried_object":[3002],"get_term_link":[2997]}},"like_escape":{"doc":"\/**\n * Escapes text for SQL LIKE special characters % and _.\n *\n * @since 2.5.0\n *\n * @param string $text The text to be escaped.\n * @return string text, safe for inclusion in LIKE query.\n *\/","file":"formatting.php","line":2725,"missingDoc":false,"filters":[],"uses":{"str_replace":[2726]},"used_by":{"get_bookmarks":[189],"redirect_guess_404_permalink":[477],"wp_xmlrpc_server::pingback_ping":[5346],"WP_Comment_Query::get_search_sql":[396],"do_enclose":[429,448],"WP_Meta_Query::get_sql":[807],"WP_Query::get_posts":[2196],"get_terms":[1336,1359],"WP_User_Query::get_search_sql":[621],"count_users":[893]}},"esc_js":{"doc":"\/**\n * Escape single quotes, htmlspecialchar \" < > &, and fix line endings.\n *\n * Escapes text strings for echoing in JS. It is intended to be used for inline JS\n * (in a tag attribute, for example onclick=\"...\"). Note that the strings have to\n * be in single quotes. The filter 'js_escape' is also applied here.\n *\n * @since 2.8.0\n *\n * @param string $text The text to be escaped.\n * @return string Escaped text.\n *\/","file":"formatting.php","line":2654,"missingDoc":false,"filters":["'js_escape'"],"uses":{"wp_check_invalid_utf8":[2655],"_wp_specialchars":[2656],"preg_replace":[2657],"stripslashes":[2657],"str_replace":[2658,2659],"addslashes":[2659]},"used_by":{"sanitize_bookmark_field":[371],"WP_Admin_Bar::_render_item":[422],"WP_Customize_Manager::customize_preview_settings":[381],"js_escape":[2111],"mce_escape":[11],"wp_print_media_templates":[327],"sanitize_post_field":[2050],"sanitize_term_field":[1669],"sanitize_user_field":[1150]}},"clean_bookmark_cache":{"doc":"\/**\n * Deletes bookmark cache\n *\n * @since 2.7.0\n * @uses wp_cache_delete() Deletes the contents of 'get_bookmarks'\n *\/","file":"bookmark.php","line":383,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[384,385],"clean_object_term_cache":[386]},"used_by":[]},"clean_object_term_cache":{"doc":"\/**\n * Removes the taxonomy relationship to terms from the cache.\n *\n * Will remove the entire taxonomy relationship containing term $object_id. The\n * term IDs have to exist within the taxonomy $object_type for the deletion to\n * take place.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @see get_object_taxonomies() for more on $object_type\n * @uses do_action() Will call action hook named, 'clean_object_term_cache' after completion.\n *\tPasses, function params in same order.\n *\n * @param int|array $object_ids Single or list of term object ID(s)\n * @param array|string $object_type The taxonomy object type\n *\/","file":"taxonomy.php","line":2565,"missingDoc":false,"filters":["'clean_object_term_cache'"],"uses":{"is_array":[2566],"get_object_taxonomies":[2569],"wp_cache_delete":[2573]},"used_by":{"clean_bookmark_cache":[386],"clean_post_cache":[4653],"clean_attachment_cache":[4769],"wp_delete_term":[1823]}},"wp_cache_close":{"doc":"\/**\n * Closes the cache.\n *\n * This function has ceased to do anything since WordPress 2.5. The\n * functionality was removed along with the rest of the persistent cache. This\n * does not mean that plugins can't implement this function when they need to\n * make sure that the cache is cleaned up after WordPress no longer needs it.\n *\n * @since 2.0.0\n *\n * @return bool Always returns True\n *\/","file":"cache.php","line":42,"missingDoc":false,"filters":[],"uses":[],"used_by":{"shutdown_action_hook":[557]}},"wp_cache_decr":{"doc":"\/**\n * Decrement numeric cache item's value\n *\n * @since 3.3.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::decr()\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to decrement the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":58,"missingDoc":false,"filters":[],"uses":{"decr":[61]},"used_by":[]},"wp_cache_flush":{"doc":"\/**\n * Removes all cache items.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::flush()\n *\n * @return bool Always returns true\n *\/","file":"cache.php","line":90,"missingDoc":false,"filters":[],"uses":{"flush":[93]},"used_by":[]},"wp_cache_incr":{"doc":"\/**\n * Increment numeric cache item's value\n *\n * @since 3.3.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::incr()\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to increment the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":128,"missingDoc":false,"filters":[],"uses":{"incr":[131]},"used_by":{"wp_insert_comment":[1294],"clean_comment_cache":[1972]}},"wp_cache_init":{"doc":"\/**\n * Sets up Object Cache Global and assigns it.\n *\n * @since 2.0.0\n * @global WP_Object_Cache $wp_object_cache WordPress Object Cache\n *\/","file":"cache.php","line":140,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_start_object_cache":[409],"switch_to_blog":[533],"restore_current_blog":[594]}},"wp_cache_replace":{"doc":"\/**\n * Replaces the contents of the cache with new data.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::replace()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":157,"missingDoc":false,"filters":[],"uses":{"replace":[160]},"used_by":[]},"wp_cache_switch_to_blog":{"doc":"\/**\n * Switch the interal blog id.\n *\n * This changes the blog id used to create keys in blog specific groups.\n *\n * @since 3.5.0\n *\n * @param int $blog_id Blog ID\n *\/","file":"cache.php","line":191,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[194]},"used_by":{"wp_start_object_cache":[407],"switch_to_blog":[524],"restore_current_blog":[585]}},"wp_cache_add_global_groups":{"doc":"\/**\n * Adds a group or set of groups to the list of global groups.\n *\n * @since 2.6.0\n *\n * @param string|array $groups A group or an array of groups to add\n *\/","file":"cache.php","line":204,"missingDoc":false,"filters":[],"uses":{"add_global_groups":[207]},"used_by":{"WP_Theme::__construct":[174],"wp_start_object_cache":[412],"switch_to_blog":[537,539],"restore_current_blog":[598,600]}},"wp_cache_add_non_persistent_groups":{"doc":"\/**\n * Adds a group or set of groups to the list of non-persistent groups.\n *\n * @since 2.6.0\n *\n * @param string|array $groups A group or an array of groups to add\n *\/","file":"cache.php","line":217,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::__construct":[178],"wp_start_object_cache":[413],"switch_to_blog":[540],"restore_current_blog":[601]}},"wp_cache_reset":{"doc":"\/**\n * Reset internal cache keys and structures. If the cache backend uses global\n * blog or site IDs as part of its cache keys, this function instructs the\n * backend to reset those keys and perform any cleanup since blog or site IDs\n * have changed since cache init.\n *\n * This function is deprecated. Use wp_cache_switch_to_blog() instead of this\n * function when preparing the cache for a blog switch. For clearing the cache\n * during unit tests, consider using wp_cache_init(). wp_cache_init() is not\n * recommended outside of unit tests as the performance penality for using it is\n * high.\n *\n * @since 2.6.0\n * @deprecated 3.5.0\n *\/","file":"cache.php","line":237,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[238],"reset":[242]},"used_by":[]},"_deprecated_function":{"doc":"\/**\n * Marks a function as deprecated and informs when it has been used.\n *\n * There is a hook deprecated_function_run that will be called that can be used\n * to get the backtrace up to what file and function called the deprecated\n * function.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * This function is to be used in every function that is deprecated.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 2.5.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_function_run' and passes the function name, what to use instead,\n * and the version the function was deprecated in.\n * @uses apply_filters() Calls 'deprecated_function_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called\n * @param string $version The version of WordPress that deprecated the function\n * @param string $replacement Optional. The function that should have been called\n *\/","file":"functions.php","line":2854,"missingDoc":false,"filters":["'deprecated_function_run'","'deprecated_function_trigger_error'"],"uses":{"trigger_error":[2861,2863],"sprintf":[2861,2863],"__":[2861,2863],"is_null":[2860]},"used_by":{"wp_cache_reset":[238],"WP_Object_Cache::reset":[533],"WP_Admin_Bar::recursive_render":[463],"WP_Scripts::print_scripts_l10n":[57],"get_postdata":[27],"start_wp":[62],"the_category_ID":[82],"the_category_head":[108],"previous_post":[138],"next_post":[174],"user_can_create_post":[208],"user_can_create_draft":[228],"user_can_edit_post":[248],"user_can_delete_post":[277],"user_can_set_post_date":[297],"user_can_edit_post_date":[317],"user_can_edit_post_comments":[337],"user_can_delete_post_comments":[357],"user_can_edit_user":[376],"get_linksbyname":[410],"wp_get_linksbyname":[433],"get_linkobjectsbyname":[474],"get_linkobjects":[528],"get_linksbyname_withrating":[562],"get_links_withrating":[590],"get_autotoggle":[606],"list_cats":[639],"wp_list_cats":[656],"dropdown_cats":[699],"list_authors":[730],"wp_get_post_cats":[747],"wp_set_post_cats":[765],"get_archives":[784],"get_author_link":[803],"link_pages":[831],"get_settings":[849],"permalink_link":[863],"permalink_single_rss":[878],"wp_get_links":[895],"get_links":[950],"get_links_list":[1043],"links_popup_script":[1089],"get_linkrating":[1114],"get_linkcatname":[1130],"comments_rss_link":[1159],"get_category_rss_link":[1176],"get_author_rss_link":[1198],"comments_rss":[1217],"create_user":[1235],"gzip_compression":[1245],"get_commentdata":[1263],"get_catname":[1279],"get_category_children":[1298],"get_the_author_description":[1332],"the_author_description":[1345],"get_the_author_login":[1360],"the_author_login":[1373],"get_the_author_firstname":[1388],"the_author_firstname":[1401],"get_the_author_lastname":[1416],"the_author_lastname":[1429],"get_the_author_nickname":[1444],"the_author_nickname":[1457],"get_the_author_email":[1472],"the_author_email":[1485],"get_the_author_icq":[1500],"the_author_icq":[1513],"get_the_author_yim":[1528],"the_author_yim":[1541],"get_the_author_msn":[1556],"the_author_msn":[1569],"get_the_author_aim":[1584],"the_author_aim":[1597],"get_author_name":[1613],"get_the_author_url":[1628],"the_author_url":[1641],"get_the_author_ID":[1656],"the_author_ID":[1669],"the_content_rss":[1708],"make_url_footnote":[1754],"_c":[1794],"translate_with_context":[1813],"_nc":[1830],"__ngettext":[1843],"__ngettext_noop":[1857],"get_alloptions":[1874],"get_the_attachment_link":[1893],"get_attachment_icon_src":[1922],"get_attachment_icon":[1967],"get_attachment_innerHTML":[2024],"get_link":[2050],"sanitize_url":[2067],"clean_url":[2090,2092],"js_escape":[2110],"wp_specialchars":[2122],"attribute_escape":[2143],"register_sidebar_widget":[2168],"unregister_sidebar_widget":[2200],"register_widget_control":[2225],"unregister_widget_control":[2259],"delete_usermeta":[2277],"get_usermeta":[2324],"update_usermeta":[2378],"get_users_of_blog":[2431],"automatic_feed_links":[2451],"get_profile":[2468],"get_usernumposts":[2485],"funky_javascript_fix":[2517],"is_taxonomy":[2541],"is_term":[2559],"is_plugin_page":[2575],"update_category_cache":[2598],"wp_timezone_supported":[2612],"the_editor":[2632],"get_user_metavalues":[2648],"sanitize_user_object":[2682],"get_boundary_post_rel_link":[2721],"start_post_rel_link":[2759],"get_index_rel_link":[2773],"index_rel_link":[2786],"get_parent_post_rel_link":[2801],"parent_post_rel_link":[2829],"wp_admin_bar_dashboard_view_site_menu":[2841],"is_blog_user":[2867],"debug_fopen":[2881],"debug_fwrite":[2894],"debug_fclose":[2908],"get_themes":[2926],"get_theme":[2958],"get_current_theme":[2977],"clean_pre":[2998],"add_custom_image_header":[3026],"remove_custom_image_header":[3047],"add_custom_background":[3064],"remove_custom_background":[3084],"get_theme_data":[3100],"update_page_cache":[3136],"clean_page_cache":[3155],"wp_explain_nonce":[3174],"sticky_class":[3189],"_get_post_ancestors":[3205],"wp_load_image":[3219],"image_resize":[3265],"wp_get_single_post":[3300],"user_pass_ok":[3317],"gd_edit_image_support":[3344],"generate_random_password":[23],"is_site_admin":[44],"graceful_fail":[68],"get_user_details":[105],"clear_global_post_cache":[116],"is_main_blog":[126],"validate_email":[137],"get_blog_list":[147],"get_most_active_blogs":[174],"wpmu_admin_do_redirect":[223],"wpmu_admin_redirect_add_updated_param":[263],"set_current_user":[34],"get_userdatabylogin":[51],"get_user_by_email":[68],"wp_setcookie":[90],"__main":[95,112,133,169],"wp_clearcookie":[108],"wp_get_cookie_login":[129],"wp_login":[157],"wp_atom_server::__call":[185],"wp_atom_server::__callStatic":[189],"wpdb::supports_collation":[1667]}},"WP_Object_Cache::add":{"doc":"\/**\n * Adds data to the cache if it doesn't already exist.\n *\n * @uses WP_Object_Cache::_exists Checks to see if the cache already has data.\n * @uses WP_Object_Cache::set Sets the data after the checking the cache\n *\t\tcontents existence.\n *\n * @since 2.0.0\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":323,"missingDoc":false,"filters":[],"uses":{"wp_suspend_cache_addition":[324],"_exists":[334],"set":[337]},"used_by":[]},"wp_suspend_cache_addition":{"doc":"\/**\n * Temporarily suspend cache additions.\n *\n * Stops more data being added to the cache, but still allows cache retrieval.\n * This is useful for actions, such as imports, when a lot of data would otherwise\n * be almost uselessly added to the cache.\n *\n * Suspension lasts for a single page load at most. Remember to call this\n * function again if you wish to re-enable cache adds earlier.\n *\n * @since 3.3.0\n *\n * @param bool $suspend Optional. Suspends additions if true, re-enables them if false.\n * @return bool The current suspend setting\n *\/","file":"functions.php","line":3180,"missingDoc":false,"filters":[],"uses":{"is_bool":[3183]},"used_by":{"WP_Object_Cache::add":[324]}},"WP_Object_Cache::add_global_groups":{"doc":"\/**\n * Sets the list of global groups.\n *\n * @since 3.0.0\n *\n * @param array $groups List of groups that are global.\n *\/","file":"cache.php","line":347,"missingDoc":false,"filters":[],"uses":{"array_fill_keys":[350],"array_merge":[351]},"used_by":[]},"WP_Object_Cache::decr":{"doc":"\/**\n * Decrement numeric cache item's value\n *\n * @since 3.3.0\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to decrement the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":364,"missingDoc":false,"filters":[],"uses":{"_exists":[371],"is_numeric":[374]},"used_by":[]},"WP_Object_Cache::delete":{"doc":"\/**\n * Remove the contents of the cache key in the group\n *\n * If the cache key does not exist in the group and $force parameter is set\n * to false, then nothing will happen. The $force parameter is set to false\n * by default.\n *\n * @since 2.0.0\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param bool $force Optional. Whether to force the unsetting of the cache\n *\t\tkey in the group\n * @return bool False if the contents weren't deleted and true on success\n *\/","file":"cache.php","line":402,"missingDoc":false,"filters":[],"uses":{"_exists":[409]},"used_by":[]},"WP_Object_Cache::flush":{"doc":"\/**\n * Clears the object cache of all data\n *\n * @since 2.0.0\n *\n * @return bool Always returns true\n *\/","file":"cache.php","line":423,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Object_Cache::get":{"doc":"\/**\n * Retrieves the cache contents, if it exists\n *\n * The contents will be first attempted to be retrieved by searching by the\n * key in the cache group. If the cache is hit (success) then the contents\n * are returned.\n *\n * On failure, the number of cache misses will be incremented.\n *\n * @since 2.0.0\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param string $force Whether to force a refetch rather than relying on the local cache (default is false)\n * @return bool|mixed False on failure to retrieve contents or the cache\n *\t\tcontents on success\n *\/","file":"cache.php","line":446,"missingDoc":false,"filters":[],"uses":{"is_object":[456],"_exists":[453]},"used_by":[]},"WP_Object_Cache::incr":{"doc":"\/**\n * Increment numeric cache item's value\n *\n * @since 3.3.0\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to increment the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":477,"missingDoc":false,"filters":[],"uses":{"_exists":[484],"is_numeric":[487]},"used_by":[]},"WP_Object_Cache::replace":{"doc":"\/**\n * Replace the contents in the cache, if contents already exist\n *\n * @since 2.0.0\n * @see WP_Object_Cache::set()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if not exists, true if contents were replaced\n *\/","file":"cache.php","line":512,"missingDoc":false,"filters":[],"uses":{"_exists":[520],"set":[523]},"used_by":[]},"WP_Object_Cache::reset":{"doc":"\/**\n * Reset keys\n *\n * @since 3.0.0\n * @deprecated 3.5.0\n *\/","file":"cache.php","line":532,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[533],"array_keys":[536]},"used_by":[]},"WP_Object_Cache::set":{"doc":"\/**\n * Sets the data contents into the cache\n *\n * The cache contents is grouped by the $group parameter followed by the\n * $key. This allows for duplicate ids in unique groups. Therefore, naming of\n * the group should be used with care and should follow normal function\n * naming guidelines outside of core WordPress usage.\n *\n * The $expire parameter is not used, because the cache will automatically\n * expire for each time a page is accessed and PHP finishes. The method is\n * more for cache plugins which use files.\n *\n * @since 2.0.0\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire Not Used\n * @return bool Always returns true\n *\/","file":"cache.php","line":562,"missingDoc":false,"filters":[],"uses":{"is_object":[569]},"used_by":[]},"WP_Object_Cache::stats":{"doc":"\/**\n * Echoes the stats of the caching.\n *\n * Gives the cache hits, and cache misses. Also prints every cached group,\n * key and the data.\n *\n * @since 2.0.0\n *\/","file":"cache.php","line":584,"missingDoc":false,"filters":[],"uses":{"number_format":[591],"strlen":[591],"serialize":[591]},"used_by":[]},"WP_Object_Cache::switch_to_blog":{"doc":"\/**\n * Switch the interal blog id.\n *\n * This changes the blog id used to create keys in blog specific groups.\n *\n * @since 3.5.0\n *\n * @param int $blog_id Blog ID\n *\/","file":"cache.php","line":605,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Object_Cache::_exists":{"doc":"\/**\n * Utility function to determine whether a key exists in the cache.\n *\n * @since 3.4.0\n *\n * @access protected\n *\/","file":"cache.php","line":617,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[618]},"used_by":[]},"WP_Object_Cache::__construct":{"doc":"\/**\n * Sets up object properties; PHP 5 style constructor\n *\n * @since 2.0.8\n * @return null|WP_Object_Cache If cache is disabled, returns null.\n *\/","file":"cache.php","line":627,"missingDoc":false,"filters":[],"uses":{"is_multisite":[630],"register_shutdown_function":[638]},"used_by":[]},"WP_Object_Cache::__destruct":{"doc":"\/**\n * Will save the object cache before object is completely destroyed.\n *\n * Called upon object destruction, which should be when PHP ends.\n *\n * @since 2.0.8\n *\n * @return bool True value. Won't be used by PHP\n *\/","file":"cache.php","line":650,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"redirect_canonical":{"doc":"\/**\n * Redirects incoming links to the proper URL based on the site url.\n *\n * Search engines consider www.somedomain.com and somedomain.com to be two\n * different URLs when they both go to the same location. This SEO enhancement\n * prevents penalty for duplicate content by redirecting all incoming links to\n * one or the other.\n *\n * Prevents redirection for feeds, trackbacks, searches, comment popup, and\n * admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7,\n * page\/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST\n * requests.\n *\n * Will also attempt to find the correct link when a user enters a URL that does\n * not exist based on exact WordPress query. Will instead try to parse the URL\n * or query in an attempt to figure the correct page to go to.\n *\n * @since 2.3.0\n * @uses $wp_rewrite\n * @uses $is_IIS\n *\n * @param string $requested_url Optional. The URL that was requested, used to\n *\t\tfigure if redirect is needed.\n * @param bool $do_redirect Optional. Redirect to the new URL.\n * @return null|false|string Null, if redirect not needed. False, if redirect\n *\t\tnot needed or the string of the URL\n *\/","file":"canonical.php","line":39,"missingDoc":false,"filters":["'wp_signup_location'","'redirect_canonical'"],"uses":{"is_trackback":[42],"is_search":[42],"is_comments_popup":[42],"is_admin":[42],"is_preview":[42],"is_robots":[42],"iis7_supports_permalinks":[42],"is_ssl":[47],"parse_url":[52,74,189,297,311,314],"_remove_qs_args_if_not_in_url":[73,87,100,106],"get_post_comments_feed_link":[72],"get_query_var":[72,71,78,95,95,95,113,116,122,126,130,145,145,146,146,146,148,149,149,152,155,206,217,214,233,238,238,238,235,235,240,231,257,256,271,270,270,222,222,353,351],"is_feed":[71,124,240,231,259,222],"get_results":[80],"prepare":[80,156],"get_permalink":[86,99,116,119,122,127,210,216],"is_singular":[78,214,233],"max":[95],"get_post_type_object":[97],"get_post":[96],"redirect_guess_404_permalink":[105],"is_object":[110,351],"using_permalinks":[110,351],"remove_query_arg":[114,117,120,123,128,143,147,150,153,158,186,200,218,239,258,272],"get_attachment_link":[113],"is_single":[115,118,206,262,260],"get_queried_object_id":[119,208,210,216],"is_page":[121,124],"get_option":[124,124,126,126,127,270,270,270],"home_url":[125,314],"is_home":[126],"is_year":[129,151],"is_month":[129,148],"is_day":[129,145],"strlen":[131],"get_year_link":[133,152],"get_month_link":[136,149],"substr":[136,136,139,139,139],"get_day_link":[139,146],"is_author":[154],"preg_match":[154,223,223,223],"get_userdata":[155],"get_author_posts_url":[157],"get_var":[156],"is_category":[160,171],"is_tag":[160,174],"is_tax":[160],"count":[164],"get_queried_object":[166],"get_taxonomy":[178],"array_diff":[183,185],"array_keys":[183,183,185],"parse_str":[191,296,300],"add_query_arg":[192,266,307],"get_term_link":[167],"is_wp_error":[167,209,209],"strpos":[206,276,370,412],"get_category_by_path":[207],"wp_get_object_terms":[208],"in_array":[209,231],"is_attachment":[112],"trailingslashit":[217,232,261,263,271,277,279,366,375,374,374],"user_trailingslashit":[217,236,238,261,271,275,364],"is_front_page":[214,365,351,351],"preg_replace":[225,226,227,275,294,327,330,334,337,340,343,371],"get_default_feed":[236,238,235,244],"get_feed_link":[250],"basename":[250,249,283],"wp_redirect":[251,288,430],"using_index_permalinks":[276,347],"network_site_url":[285],"site_url":[287],"is_multisite":[284],"is_404":[92,351],"rawurlencode_deep":[306],"trim":[337],"str_replace":[348],"call_user_func":[358],"strtolower":[379,379,380,380,380,380],"function_exists":[413],"preg_replace_callback":[418],"redirect_canonical":[429]},"used_by":{"redirect_canonical":[429]}},"is_trackback":{"doc":"\/**\n * Is the query for a trackback endpoint call?\n *\n * @see WP_Query::is_trackback()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":664,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[668],"__":[668],"is_trackback":[672]},"used_by":{"redirect_canonical":[42],"is_trackback":[672],"__main":[20]}},"is_search":{"doc":"\/**\n * Is the query for a search?\n *\n * @see WP_Query::is_search()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":568,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[572],"__":[572],"is_search":[576]},"used_by":{"redirect_canonical":[42],"WP::handle_404":[522],"__main":[20,33,23,28,43,27],"wp_title":[578],"feed_links_extra":[1663],"get_body_class":[416,541],"is_search":[576]}},"is_comments_popup":{"doc":"\/**\n * Whether the current URL is within the comments popup window.\n *\n * @see WP_Query::is_comments_popup()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":301,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[305],"__":[305],"is_comments_popup":[309]},"used_by":{"redirect_canonical":[42],"is_comments_popup":[309],"__main":[41]}},"is_preview":{"doc":"\/**\n * Is the query for a post or page preview?\n *\n * @see WP_Query::is_preview()\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":528,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[532],"__":[532],"is_preview":[536]},"used_by":{"redirect_canonical":[42],"WP_Customize_Manager::start_previewing_theme":[165],"WP_Customize_Manager::stop_previewing_theme":[195],"WP_Customize_Manager::wp_loaded":[280],"WP_Customize_Manager::wp_redirect_status":[296],"WP_Customize_Manager::save":[495],"is_preview":[536]}},"is_robots":{"doc":"\/**\n * Is the query for the robots file?\n *\n * @see WP_Query::is_robots()\n * @since 2.1.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":548,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[552],"__":[552],"is_robots":[556]},"used_by":{"redirect_canonical":[42],"WP::handle_404":[507],"is_robots":[556],"__main":[14]}},"iis7_supports_permalinks":{"doc":"\/**\n * Check if IIS 7 supports pretty permalinks.\n *\n * @since 2.8.0\n *\n * @return bool\n *\/","file":"functions.php","line":3034,"missingDoc":false,"filters":["'iis7_supports_permalinks'"],"uses":{"class_exists":[3049],"php_sapi_name":[3049]},"used_by":{"redirect_canonical":[42]}},"_remove_qs_args_if_not_in_url":{"doc":"\/**\n * Removes arguments from a query string if they are not present in a URL\n * DO NOT use this in plugin code.\n *\n * @since 3.4\n * @access private\n *\n * @return string The altered query string\n *\/","file":"canonical.php","line":451,"missingDoc":false,"filters":[],"uses":{"parse_url":[452],"parse_str":[454],"remove_query_arg":[457,460]},"used_by":{"redirect_canonical":[73,87,100,106]}},"get_post_comments_feed_link":{"doc":"\/**\n * Retrieve the permalink for the post comments feed.\n *\n * @since 2.2.0\n *\n * @param int $post_id Optional. Post ID.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":465,"missingDoc":false,"filters":["'post_comments_feed_link'"],"uses":{"absint":[466],"get_the_ID":[469],"get_default_feed":[472,481],"_get_page_link":[476],"get_permalink":[478],"get_option":[475,475,474],"trailingslashit":[480],"user_trailingslashit":[483],"get_post_field":[485],"add_query_arg":[487,489],"home_url":[487,489]},"used_by":{"redirect_canonical":[72],"redirect_guess_404_permalink":[496],"comments_rss":[1218],"__main":[31,32,51,54,35],"feed_links_extra":[1646],"post_comments_feed_link":[512]}},"get_query_var":{"doc":"\/**\n * Retrieve variable in the WP_Query class.\n *\n * @see WP_Query::get()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string $var The variable key to retrieve.\n * @return mixed\n *\/","file":"query.php","line":24,"missingDoc":false,"filters":[],"uses":{"get":[27]},"used_by":{"redirect_canonical":[72,71,78,95,95,95,113,116,122,126,130,145,145,146,146,146,148,149,149,152,155,206,217,214,233,238,238,238,235,235,240,231,257,256,271,270,270,222,222,353,351],"redirect_guess_404_permalink":[477,481,480,486,485,488,487,490,489,496,497,498,495,476],"wp_dropdown_categories":[313],"get_comment_link":[497],"comments_template":[902],"wp_list_comments":[1453,1469],"get_comment_pages_count":[794],"get_page_of_comment":[835],"do_feed":[999],"wp_title":[524,525,526,527,528],"single_month_title":[770,771,772],"feed_links_extra":[1659],"get_search_query":[1828],"get_posts_nav_link":[1648],"get_next_comments_link":[1730],"get_previous_comments_link":[1773],"paginate_comments_links":[1812],"rel_canonical":[2322],"get_body_class":[456],"wp_old_slug_redirect":[3574,3573],"setup_postdata":[3635],"get_archive_template":[62],"get_page_template":[239],"wp_dropdown_users":[1029]}},"is_feed":{"doc":"\/**\n * Is the query for a feed?\n *\n * @see WP_Query::is_feed()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string|array $feeds Optional feed types to check.\n * @return bool\n *\/","file":"query.php","line":362,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[366],"__":[366],"is_feed":[370]},"used_by":{"redirect_canonical":[71,124,240,231,259,222],"SimplePie::fetch_data":[1571],"gallery_shortcode":[729],"is_feed":[370],"setup_postdata":[3638],"SimplePie_Locator::find":[96],"SimplePie_Locator::search_elements_by_tag":[252],"SimplePie_Locator::extension":[331],"SimplePie_Locator::body":[359],"__main":[17]}},"is_singular":{"doc":"\/**\n * Is the query for an existing single post of any post type (post, attachment, page, ... )?\n *\n * If the $post_types parameter is specified, this function will additionally\n * check if the query is for one of the Posts Types specified.\n *\n * @see is_page()\n * @see is_single()\n *\n * @see WP_Query::is_singular()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $post_types Optional. Post Type or array of Post Types\n * @return bool\n *\/","file":"query.php","line":624,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[628],"__":[628],"is_singular":[632]},"used_by":{"redirect_canonical":[78,214,233],"_close_comments_for_old_posts":[2012],"__main":[18,29,49,21,41,36],"adjacent_posts_rel_link_wp_head":[1261],"get_posts_nav_link":[1639],"get_next_comments_link":[1727],"get_previous_comments_link":[1770],"paginate_comments_links":[1809],"rel_canonical":[2313],"is_singular":[632]}},"redirect_guess_404_permalink":{"doc":"\/**\n * Attempts to guess the correct URL based on query vars\n *\n * @since 2.3.0\n * @uses $wpdb\n *\n * @return bool|string The correct URL if one is found. False on failure.\n *\/","file":"canonical.php","line":473,"missingDoc":false,"filters":[],"uses":{"prepare":[477,481,486,488,490],"like_escape":[477],"get_query_var":[477,481,480,486,485,488,487,490,489,496,497,498,495,476],"implode":[483],"get_post_types":[483],"get_var":[492],"get_post_comments_feed_link":[496],"trailingslashit":[498],"get_permalink":[498,500],"user_trailingslashit":[498]},"used_by":{"redirect_canonical":[105]}},"remove_query_arg":{"doc":"\/**\n * Removes an item or list from the query string.\n *\n * @since 1.5.0\n *\n * @param string|array $key Query key or keys to remove.\n * @param bool $query When false uses the $_SERVER value.\n * @return string New URL query string.\n *\/","file":"functions.php","line":716,"missingDoc":false,"filters":[],"uses":{"add_query_arg":[719,722],"is_array":[717]},"used_by":{"redirect_canonical":[114,117,120,123,128,143,147,150,153,158,186,200,218,239,258,272],"_remove_qs_args_if_not_in_url":[457,460],"get_cancel_comment_reply_link":[1142],"wp_nonce_ays":[2026],"get_pagenum_link":[1423],"_post_format_link":[5464]}},"get_attachment_link":{"doc":"\/**\n * Retrieve permalink for attachment.\n *\n * This can be used in the WordPress Loop or outside of it.\n *\n * @since 2.0.0\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional. Leave name.\n * @return string\n *\/","file":"link-template.php","line":298,"missingDoc":false,"filters":["'attachment_link'"],"uses":{"get_post":[303,306],"_get_page_link":[308],"get_permalink":[310],"is_numeric":[312],"strpos":[312,317],"get_option":[312],"user_trailingslashit":[318],"trailingslashit":[318],"str_replace":[321],"using_permalinks":[305],"home_url":[325]},"used_by":{"redirect_canonical":[113],"get_the_attachment_link":[1901],"get_permalink":[109],"wp_prepare_attachment_for_js":[1331],"wp_get_attachment_link":[1169]}},"is_single":{"doc":"\/**\n * Is the query for an existing single post?\n *\n * Works for any post type, except attachments and pages\n *\n * If the $post parameter is specified, this function will additionally\n * check if the query is for one of the Posts specified.\n *\n * @see is_page()\n * @see is_singular()\n *\n * @see WP_Query::is_single()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $post Post ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":597,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[601],"__":[601],"is_single":[605]},"used_by":{"redirect_canonical":[115,118,206,262,260],"WP::register_globals":[461],"comments_template":[851],"__main":[29,34,27],"wp_title":[534],"feed_links_extra":[1640],"get_boundary_post":[1307],"get_next_posts_page_link":[1488],"get_next_posts_link":[1537],"get_previous_posts_page_link":[1570],"get_previous_posts_link":[1608],"wp_get_shortlink":[2351],"get_body_class":[427,529],"is_single":[605],"setup_postdata":[3638]}},"get_queried_object_id":{"doc":"\/**\n * Retrieve ID of the current queried object. Wrapper for $wp_query->get_queried_object_id()\n *\n * @uses WP_Query::get_queried_object_id()\n *\n * @since 3.1.0\n * @access public\n *\n * @return int\n *\/","file":"query.php","line":55,"missingDoc":false,"filters":[],"uses":{"get_queried_object_id":[57]},"used_by":{"redirect_canonical":[119,208,210,216],"wp_list_categories":[471],"rel_canonical":[2317],"wp_get_shortlink":[2352],"get_body_class":[428,489],"wp_list_pages":[846],"is_page_template":[1250],"get_queried_object_id":[57],"get_page_template":[237]}},"is_page":{"doc":"\/**\n * Is the query for an existing single page?\n *\n * If the $page parameter is specified, this function will additionally\n * check if the query is for one of the pages specified.\n *\n * @see is_single()\n * @see is_singular()\n *\n * @see WP_Query::is_page()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $page Page ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":488,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[492],"__":[492],"is_page":[496]},"used_by":{"redirect_canonical":[121,124],"WP::register_globals":[461],"comments_template":[851],"wp_title":[534],"feed_links_extra":[1640],"get_body_class":[486,531],"wp_list_pages":[845],"is_page_template":[1247],"is_page":[496],"WP_Query::is_front_page":[3323],"setup_postdata":[3638],"__main":[35,66]}},"is_home":{"doc":"\/**\n * Is the query for the blog homepage?\n *\n * This is the page which shows the time based blog content of your site.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_for_posts'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true only on the page you set as the \"Posts page\".\n *\n * @see is_front_page()\n *\n * @see WP_Query::is_home()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool True if blog view homepage.\n *\/","file":"query.php","line":441,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[445],"__":[445],"is_home":[449]},"used_by":{"redirect_canonical":[126],"WP::handle_404":[522],"wp_title":[534],"get_post_class":[345],"get_body_class":[410],"is_home":[449],"WP_Query::is_front_page":[3321],"__main":[31,66]}},"is_year":{"doc":"\/**\n * Is the query for an existing year archive?\n *\n * @see WP_Query::is_year()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":684,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[688],"__":[688],"is_year":[692]},"used_by":{"redirect_canonical":[129,151],"is_year":[692],"__main":[40,27]}},"is_month":{"doc":"\/**\n * Is the query for an existing month archive?\n *\n * @see WP_Query::is_month()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":461,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[465],"__":[465],"is_month":[469]},"used_by":{"redirect_canonical":[129,148],"is_month":[469],"__main":[37,26]}},"is_day":{"doc":"\/**\n * Is the query for an existing day archive?\n *\n * @see WP_Query::is_day()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":341,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[345],"__":[345],"is_day":[349]},"used_by":{"redirect_canonical":[129,145],"is_day":[349],"__main":[34,26]}},"get_year_link":{"doc":"\/**\n * Retrieve the permalink for the year archives.\n *\n * @since 1.5.0\n *\n * @param int|bool $year False for current year or year for permalink.\n * @return string\n *\/","file":"link-template.php","line":338,"missingDoc":false,"filters":["'year_link'","'year_link'"],"uses":{"gmdate":[341],"current_time":[341],"get_year_permastruct":[342],"str_replace":[344],"home_url":[345,347],"user_trailingslashit":[345]},"used_by":{"redirect_canonical":[133,152],"wp_get_archives":[957]}},"get_month_link":{"doc":"\/**\n * Retrieve the permalink for the month archives with year.\n *\n * @since 1.0.0\n *\n * @param bool|int $year False for current year. Integer of year.\n * @param bool|int $month False for current month. Integer of month.\n * @return string\n *\/","file":"link-template.php","line":360,"missingDoc":false,"filters":["'month_link'","'month_link'"],"uses":{"gmdate":[363,365],"current_time":[363,365],"get_month_permastruct":[366],"str_replace":[368,369],"zeroise":[369,372],"intval":[369],"home_url":[370,372],"user_trailingslashit":[370]},"used_by":{"redirect_canonical":[136,149],"wp_get_archives":[935],"get_calendar":[1172,1180]}},"get_day_link":{"doc":"\/**\n * Retrieve the permalink for the day archives with year and month.\n *\n * @since 1.0.0\n *\n * @param bool|int $year False for current year. Integer of year.\n * @param bool|int $month False for current month. Integer of month.\n * @param bool|int $day False for current day. Integer of day.\n * @return string\n *\/","file":"link-template.php","line":386,"missingDoc":false,"filters":["'day_link'","'day_link'"],"uses":{"gmdate":[389,391,393],"current_time":[389,391,393],"get_day_permastruct":[395],"str_replace":[397,398,399],"zeroise":[398,399,402,402],"intval":[398,399],"home_url":[400,402],"user_trailingslashit":[400]},"used_by":{"redirect_canonical":[139,146],"wp_get_archives":[978],"get_calendar":[1248]}},"is_author":{"doc":"\/**\n * Is the query for an existing author archive page?\n *\n * If the $author parameter is specified, this function will additionally\n * check if the query is for one of the authors specified.\n *\n * @see WP_Query::is_author()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $author Optional. User ID, nickname, nicename, or array of User IDs, nicknames, and nicenames\n * @return bool\n *\/","file":"query.php","line":204,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[208],"__":[208],"is_author":[212]},"used_by":{"redirect_canonical":[154],"WP::handle_404":[516],"wp_title":[551],"feed_links_extra":[1658],"get_body_class":[457,539],"is_author":[212],"__main":[38],"wp_dropdown_users":[1029]}},"is_category":{"doc":"\/**\n * Is the query for an existing category archive page?\n *\n * If the $category parameter is specified, this function will additionally\n * check if the query is for one of the categories specified.\n *\n * @see WP_Query::is_category()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $category Optional. Category ID, name, slug, or array of Category IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":228,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[232],"__":[232],"is_category":[236]},"used_by":{"redirect_canonical":[160,171],"wp_dropdown_categories":[313],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[539],"single_term_title":[731],"feed_links_extra":[1648],"get_body_class":[464,533],"is_category":[236],"__main":[36,31,26]}},"is_tag":{"doc":"\/**\n * Is the query for an existing tag archive page?\n *\n * If the $tag parameter is specified, this function will additionally\n * check if the query is for one of the tags specified.\n *\n * @see WP_Query::is_tag()\n * @since 2.3.0\n * @uses $wp_query\n *\n * @param mixed $slug Optional. Tag slug or array of slugs.\n * @return bool\n *\/","file":"query.php","line":252,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[256],"__":[256],"is_tag":[260]},"used_by":{"redirect_canonical":[160,174],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[539],"single_term_title":[733],"feed_links_extra":[1653],"get_body_class":[471,535],"is_tag":[260],"__main":[37]}},"is_tax":{"doc":"\/**\n * Is the query for an existing taxonomy archive page?\n *\n * If the $taxonomy parameter is specified, this function will additionally\n * check if the query is for that specific $taxonomy.\n *\n * If the $term parameter is specified in addition to the $taxonomy parameter,\n * this function will additionally check if the query is for one of the terms\n * specified.\n *\n * @see WP_Query::is_tax()\n * @since 2.5.0\n * @uses $wp_query\n *\n * @param mixed $taxonomy Optional. Taxonomy slug or slugs.\n * @param mixed $term Optional. Term ID, name, slug or array of Term IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":281,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[285],"__":[285],"is_tax":[289]},"used_by":{"redirect_canonical":[160],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[544],"single_term_title":[735],"get_body_class":[478],"is_tax":[289],"__main":[29]}},"get_category_by_path":{"doc":"\/**\n * Retrieve category based on URL containing the category slug.\n *\n * Breaks the $category_path parameter up to get the category slug.\n *\n * Tries to find the child path and will return it. If it doesn't find a\n * match, then it will return the first category matching slug, if $full_match,\n * is set to false. If it does not, then it will return null.\n *\n * It is also possible that it will return a WP_Error object on failure. Check\n * for it when using this function.\n *\n * @since 2.1.0\n *\n * @param string $category_path URL containing category slugs.\n * @param bool $full_match Optional. Whether full path should be matched.\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @return null|object|array Null on failure. Type is based on $output value.\n *\/","file":"category.php","line":110,"missingDoc":false,"filters":[],"uses":{"rawurlencode":[111],"urldecode":[111],"str_replace":[112,113],"trim":[114],"sanitize_title":[115,119],"basename":[115],"explode":[116],"get_terms":[121],"get_term":[130],"is_wp_error":[131],"get_category":[137,142]},"used_by":{"redirect_canonical":[207]}},"is_attachment":{"doc":"\/**\n * Is the query for an existing attachment page?\n *\n * @see WP_Query::is_attachment()\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":180,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[184],"__":[184],"is_attachment":[188]},"used_by":{"redirect_canonical":[112],"get_adjacent_post_rel_link":[1212],"adjacent_posts_rel_link_wp_head":[1261],"get_boundary_post":[1307],"adjacent_post_link":[1378],"get_body_class":[422,447],"wp_list_pages":[845],"is_attachment":[188],"__main":[32]}},"trailingslashit":{"doc":"\/**\n * Appends a trailing slash.\n *\n * Will remove trailing slash if it exists already before adding a trailing\n * slash. This prevents double slashing a string or path.\n *\n * The primary use of this is for paths and thus should be used for paths. It is\n * not restricted to paths and offers no specific path support.\n *\n * @since 1.2.0\n * @uses untrailingslashit() Unslashes string if it was slashed already.\n *\n * @param string $string What to add the trailing slash to.\n * @return string String with trailing slash added.\n *\/","file":"formatting.php","line":1367,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[1368]},"used_by":{"redirect_canonical":[217,232,261,263,271,277,279,366,375,374,374],"redirect_guess_404_permalink":[498],"WP_Admin_Bar::initialize":[35,39],"_WP_Editors::editor_settings":[251],"WP_Image_Editor::get_output_format":[265],"WP_Image_Editor::generate_filename":[297],"WP_Theme::scandir":[976],"get_comment_link":[500],"get_trackback_url":[708],"weblog_ping":[1949],"get_temp_dir":[1414,1417,1422,1427],"wp_upload_dir":[1541,1548,1586],"load_muplugin_textdomain":[444],"user_trailingslashit":[37],"get_attachment_link":[318],"get_post_comments_feed_link":[480],"get_author_feed_link":[549],"get_term_feed_link":[618],"get_search_feed_link":[786],"get_post_type_archive_feed_link":[872],"get_pagenum_link":[1433,1455,1461],"get_comments_pagenum_link":[1697,1703],"paginate_comments_links":[1825],"insert_blog":[1107],"plugin_dir_path":[587],"plugin_dir_url":[600],"_wp_link_page":[704,706],"WP_Rewrite::mod_rewrite_rules":[1646,1650]}},"is_front_page":{"doc":"\/**\n * Is the query for the front page of the site?\n *\n * This is for what is displayed at your site's main URL.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_on_front'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true when viewing that page.\n *\n * Otherwise the same as @see is_home()\n *\n * @see WP_Query::is_front_page()\n * @since 2.5.0\n * @uses is_home()\n * @uses get_option()\n *\n * @return bool True, if front of site.\n *\/","file":"query.php","line":412,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[416],"__":[416],"is_front_page":[420]},"used_by":{"redirect_canonical":[214,365,351,351],"wp_title":[534,534],"_wp_menu_item_classes_by_context":[393],"get_body_class":[408],"wp_page_menu":[903],"is_front_page":[420],"__main":[30]}},"get_default_feed":{"doc":"\/**\n * Retrieve the default feed.\n *\n * The default feed is 'rss2', unless a plugin changes it through the\n * 'default_feed' filter.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n * @uses apply_filters() Calls 'default_feed' hook on the default feed string.\n *\n * @return string Default feed, or for example 'rss2', 'atom', etc.\n *\/","file":"feed.php","line":65,"missingDoc":false,"filters":["'default_feed'"],"uses":[],"used_by":{"redirect_canonical":[236,238,235,244],"get_the_content_feed":[147],"get_the_category_rss":[303],"feed_content_type":[503],"do_feed":[1005],"feed_links":[1610],"get_feed_link":[437,445],"get_post_comments_feed_link":[472,481],"get_author_feed_link":[538,544],"get_term_feed_link":[597,613],"get_search_feed_link":[779],"get_search_comments_feed_link":[808],"get_post_type_archive_feed_link":[864],"WP_Query::is_feed":[3286]}},"get_feed_link":{"doc":"\/**\n * Retrieve the permalink for the feed type.\n *\n * @since 1.5.0\n *\n * @param string $feed Optional, defaults to default feed. Feed type.\n * @return string\n *\/","file":"link-template.php","line":427,"missingDoc":false,"filters":["'feed_link'"],"uses":{"get_feed_permastruct":[430],"str_replace":[433,440,448],"get_comment_feed_permastruct":[434],"strpos":[432,447],"get_default_feed":[437,445],"preg_replace":[441],"home_url":[442,450],"user_trailingslashit":[442]},"used_by":{"redirect_canonical":[250],"get_bloginfo":[421,424,427,430,433,436],"feed_links":[1609,1610],"the_feed_link":[415]}},"wp_redirect":{"doc":"\/**\n * Redirects to another page.\n *\n * @since 1.5.1\n * @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.\n *\n * @param string $location The path to redirect to\n * @param int $status Status code to use\n * @return bool False if $location is not set\n *\/","file":"pluggable.php","line":863,"missingDoc":false,"filters":["'wp_redirect'","'wp_redirect_status'"],"uses":{"wp_sanitize_redirect":[872],"status_header":[875],"php_sapi_name":[874],"header":[877]},"used_by":{"redirect_canonical":[251,288,430],"wp_redirect_admin_locations":[521,531],"WP_Customize_Manager::after_setup_theme":[151],"spawn_cron":[233],"wp_not_installed":[436],"wpmu_admin_do_redirect":[233,237,248],"maybe_redirect_404":[1656],"auth_redirect":[752,755,771,774,789],"wp_safe_redirect":[924],"wp_old_slug_redirect":[3611]}},"network_site_url":{"doc":"\/**\n * Retrieve the site url for the current network.\n *\n * Returns the site url with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. See set_url_scheme().\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":2103,"missingDoc":false,"filters":["'network_site_url'"],"uses":{"site_url":[2107],"is_multisite":[2106],"set_url_scheme":[2112],"ltrim":[2115],"is_string":[2114],"strpos":[2114]},"used_by":{"redirect_canonical":[285],"wp_lostpassword_url":[319],"network_admin_url":[2170],"user_admin_url":[2189],"wpmu_signup_blog_notification":[728],"wp_version_check":[57]}},"site_url":{"doc":"\/**\n * Retrieve the site url for the current site.\n *\n * Returns the 'site_url' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @uses get_site_url()\n *\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. See set_url_scheme().\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":1944,"missingDoc":false,"filters":[],"uses":{"get_site_url":[1945]},"used_by":{"redirect_canonical":[287],"wp_redirect_admin_locations":[517,518,528,531],"wp_xmlrpc_server::wp_getUsersBlogs":[494],"wp_xmlrpc_server::blogger_getUsersBlogs":[3648],"comment_form":[1559],"spawn_cron":[248],"WP_Widget_RSS::widget":[759],"translate_smiley":[1741],"do_robots":[1081],"wp_logout_url":[218],"wp_login_url":[238],"wp_login_form":[276],"wp_register":[341],"get_bloginfo":[415],"includes_url":[2024],"network_site_url":[2107],"wpmu_signup_user_notification":[796],"newblog_notify_siteadmin":[1024],"get_the_password_form":[1225],"WP_Rewrite::mod_rewrite_rules":[1644],"wp_default_scripts":[52],"wp_default_styles":[494],"get_theme_root_uri":[483]}},"is_404":{"doc":"\/**\n * Is the query a 404 (returns no results)?\n *\n * @see WP_Query::is_404()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":704,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[708],"__":[708],"is_404":[712]},"used_by":{"redirect_canonical":[92,351],"wp_redirect_admin_locations":[510],"WP::handle_404":[503],"wp_title":[584],"maybe_redirect_404":[1653],"get_body_class":[424],"is_404":[712],"wp_old_slug_redirect":[3569],"__main":[27,30,26]}},"rawurlencode_deep":{"doc":"\/**\n * Navigates through an array and raw encodes the values to be used in a URL.\n *\n * @since 3.4.0\n *\n * @param array|string $value The array or string to be encoded.\n * @return array|string $value The encoded array (or string from the callback).\n *\/","file":"formatting.php","line":1452,"missingDoc":false,"filters":[],"uses":{"is_array":[1453],"array_map":[1453],"rawurlencode":[1453]},"used_by":{"redirect_canonical":[306]}},"redirect_canonical::lowercase_octets":{"doc":"","file":"canonical.php","line":414,"missingDoc":true,"filters":[],"uses":{"strtolower":[415]},"used_by":[]},"wp_redirect_admin_locations":{"doc":"","file":"canonical.php","line":508,"missingDoc":true,"filters":[],"uses":{"is_404":[510],"using_permalinks":[510],"home_url":[514,515,516,526,527],"site_url":[517,518,528,531],"wp_redirect":[521,531],"admin_url":[521],"in_array":[520,530],"untrailingslashit":[520,530]},"used_by":[]},"untrailingslashit":{"doc":"\/**\n * Removes trailing slash if it exists.\n *\n * The primary use of this is for paths and thus should be used for paths. It is\n * not restricted to paths and offers no specific path support.\n *\n * @since 2.2.0\n *\n * @param string $string What to remove the trailing slash from.\n * @return string String without the trailing slash.\n *\/","file":"formatting.php","line":1382,"missingDoc":false,"filters":[],"uses":{"rtrim":[1383]},"used_by":{"wp_redirect_admin_locations":[520,530],"WP_Widget_RSS::widget":[759],"trailingslashit":[1368],"wp_upload_dir":[1583],"_config_wp_home":[2376],"_config_wp_siteurl":[2396],"user_trailingslashit":[39],"install_blog":[1153],"recurse_dirsize":[1439],"_wp_menu_item_classes_by_context":[366,369,370,384,384,397],"get_option":[89]}},"WP_Roles::__construct":{"doc":"\/**\n * Constructor\n *\n * @since 2.0.0\n *\/","file":"capabilities.php","line":80,"missingDoc":false,"filters":[],"uses":{"_init":[81]},"used_by":[]},"WP_Roles::_init":{"doc":"\/**\n * Set up the object properties.\n *\n * The role key is set to the current prefix for the $wpdb object with\n * 'user_roles' appended. If the $wp_user_roles global is set, then it will\n * be used and the role option will not be updated or used.\n *\n * @since 2.1.0\n * @access protected\n * @uses $wpdb Used to get the database prefix.\n * @global array $wp_user_roles Used to set the 'roles' property value.\n *\/","file":"capabilities.php","line":96,"missingDoc":false,"filters":[],"uses":{"get_option":[103],"array_keys":[111]},"used_by":[]},"WP_Roles::reinit":{"doc":"\/**\n * Reinitialize the object\n *\n * Recreates the role objects. This is typically called only by switch_to_blog()\n * after switching wpdb to a new blog ID.\n *\n * @since 3.5.0\n * @access public\n *\/","file":"capabilities.php","line":126,"missingDoc":false,"filters":[],"uses":{"get_option":[135],"array_keys":[141]},"used_by":[]},"WP_Roles::add_role":{"doc":"\/**\n * Add role name with capabilities to list.\n *\n * Updates the list of roles, if the role doesn't already exist.\n *\n * The capabilities are defined in the following format `array( 'read' => true );`\n * To explicitly deny a role a capability you set the value for that capability to false.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $display_name Role display name.\n * @param array $capabilities List of role capabilities in the above format.\n * @return null|WP_Role WP_Role object if role is added, null if already exists.\n *\/","file":"capabilities.php","line":163,"missingDoc":false,"filters":[],"uses":{"update_option":[172]},"used_by":[]},"update_option":{"doc":"\/**\n * Update the value of an option that was already added.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * If the option does not exist, then the option will be added with the option\n * value, but you will not be able to set whether it is autoloaded. If you want\n * to set whether an option is autoloaded, then you need to use the add_option().\n *\n * @since 1.0.0\n * @package WordPress\n * @subpackage Option\n *\n * @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'update_option' hook before updating the option.\n * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success.\n *\n * @param string $option Option name. Expected to not be SQL-escaped.\n * @param mixed $newvalue Option value. Expected to not be SQL-escaped.\n * @return bool False if value was not updated and true if value was updated.\n *\/","file":"option.php","line":215,"missingDoc":false,"filters":["'pre_update_option_' . $option","'update_option'","\"update_option_{$option}\"","'updated_option'"],"uses":{"trim":[218],"wp_protect_special_option":[222],"is_object":[224],"sanitize_option":[227],"get_option":[228],"add_option":[236],"wp_cache_get":[238],"wp_cache_set":[241,252,254],"is_array":[239],"maybe_serialize":[245],"wp_load_alloptions":[249],"defined":[248],"update":[258]},"used_by":{"WP_Roles::add_role":[172],"WP_Roles::remove_role":[195],"WP_Roles::add_cap":[214],"WP_Roles::remove_cap":[232],"WP_Customize_Setting::_update_option":[203,209],"WP_Theme::get_allowed_on_site":[1148,1152],"wp_xmlrpc_server::wp_setOptions":[3239],"_set_cron_array":[384],"_upgrade_cron_array":[412],"update_blog_details":[334],"update_blog_option":[473,476],"wpmu_create_blog":[986,990],"install_blog":[1155,1156,1159,1161,1163,1164],"update_posts_count":[1499],"global_terms":[1570],"set_transient":[510,511],"update_site_option":[911],"register_uninstall_hook":[688],"stick_post":[2073],"unstick_post":[2100],"wp_delete_post":[2339],"WP_Rewrite::wp_rewrite_rules":[1620],"WP_Rewrite::set_permalink_structure":[1944],"WP_Rewrite::set_category_base":[1964],"WP_Rewrite::set_tag_base":[1983],"_get_term_hierarchy":[2776],"switch_theme":[679,680,683,684,692,699],"get_theme_mods":[754],"set_theme_mod":[802],"remove_theme_mod":[828],"check_theme_switched":[1617],"WP_Widget::save_settings":[287],"wp_set_sidebars_widgets":[1042],"wp_convert_widget_settings":[1112,1117]}},"WP_Roles::remove_role":{"doc":"\/**\n * Remove role by name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":186,"missingDoc":false,"filters":[],"uses":{"update_option":[195]},"used_by":[]},"WP_Roles::add_cap":{"doc":"\/**\n * Add capability to role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $cap Capability name.\n * @param bool $grant Optional, default is true. Whether role is capable of performing capability.\n *\/","file":"capabilities.php","line":208,"missingDoc":false,"filters":[],"uses":{"update_option":[214]},"used_by":[]},"WP_Roles::remove_cap":{"doc":"\/**\n * Remove capability from role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":226,"missingDoc":false,"filters":[],"uses":{"update_option":[232]},"used_by":[]},"WP_Roles::get_role":{"doc":"\/**\n * Retrieve role object by name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @return object|null Null, if role does not exist. WP_Role object, if found.\n *\/","file":"capabilities.php","line":244,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Roles::get_names":{"doc":"\/**\n * Retrieve list of role names.\n *\n * @since 2.0.0\n * @access public\n *\n * @return array List of role names.\n *\/","file":"capabilities.php","line":259,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Roles::is_role":{"doc":"\/**\n * Whether role name is currently in the list of available roles.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name to look up.\n * @return bool\n *\/","file":"capabilities.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Role::__construct":{"doc":"\/**\n * Constructor - Set up object properties.\n *\n * The list of capabilities, must have the key as the name of the capability\n * and the value a boolean of whether it is granted to the role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param array $capabilities List of capabilities.\n *\/","file":"capabilities.php","line":315,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Role::add_cap":{"doc":"\/**\n * Assign role a capability.\n *\n * @see WP_Roles::add_cap() Method uses implementation for role.\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @param bool $grant Whether role has capability privilege.\n *\/","file":"capabilities.php","line":330,"missingDoc":false,"filters":[],"uses":{"add_cap":[337]},"used_by":[]},"WP_Role::remove_cap":{"doc":"\/**\n * Remove capability from role.\n *\n * This is a container for {@link WP_Roles::remove_cap()} to remove the\n * capability from the role. That is to say, that {@link\n * WP_Roles::remove_cap()} implements the functionality, but it also makes\n * sense to use this class, because you don't need to enter the role name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":353,"missingDoc":false,"filters":[],"uses":{"remove_cap":[360]},"used_by":[]},"WP_Role::has_cap":{"doc":"\/**\n * Whether role has capability.\n *\n * The capabilities is passed through the 'role_has_cap' filter. The first\n * parameter for the hook is the list of capabilities the class has\n * assigned. The second parameter is the capability name to look for. The\n * third and final parameter for the hook is the role name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @return bool True, if user has capability. False, if doesn't have capability.\n *\/","file":"capabilities.php","line":377,"missingDoc":false,"filters":["'role_has_cap'"],"uses":[],"used_by":[]},"WP_User::__construct":{"doc":"\/**\n * Constructor\n *\n * Retrieves the userdata and passes it to {@link WP_User::init()}.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int|string|stdClass|WP_User $id User's ID, a WP_User object, or a user object from the DB.\n * @param string $name Optional. User's username\n * @param int $blog_id Optional Blog ID, defaults to current blog.\n * @return WP_User\n *\/","file":"capabilities.php","line":473,"missingDoc":false,"filters":[],"uses":{"init":[487,490,505],"is_object":[489],"is_a":[486],"is_numeric":[494]},"used_by":[]},"init":{"doc":"\/**\n * Set up constants with default values, unless user overrides.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\/","file":"rss.php","line":628,"missingDoc":false,"filters":[],"uses":{"define":[633,637,641,645,649,653,666,670,675],"defined":[629,636,640,644,648,652,656,669,674]},"used_by":{"WP_User::__construct":[487,490,505],"SimplePie::__construct":[710],"SimplePie::init":[1311],"SimplePie::fetch_data":[1489],"WP::main":[546],"WP_Scripts::__construct":[34],"fetch_feed":[542],"WP_Locale::__construct":[317],"get_user_by":[142],"WP_Query::parse_query":[1429],"WP_Query::query":[2970],"WP_Rewrite::set_permalink_structure":[1945],"WP_Rewrite::set_category_base":[1965],"WP_Rewrite::set_tag_base":[1984],"WP_Rewrite::__construct":[1997],"fetch_rss":[402]}},"WP_User::init":{"doc":"\/**\n * Sets up object properties, including capabilities.\n *\n * @param object $data User DB row object\n * @param int $blog_id Optional. The blog id to initialize for\n *\/","file":"capabilities.php","line":514,"missingDoc":false,"filters":[],"uses":{"for_blog":[518]},"used_by":[]},"WP_User::get_data_by":{"doc":"\/**\n * Return only the main user fields\n *\n * @since 3.3.0\n *\n * @param string $field The field to query against: 'id', 'slug', 'email' or 'login'\n * @param string|int $value The field value\n * @return object Raw user object\n *\/","file":"capabilities.php","line":530,"missingDoc":false,"filters":[],"uses":{"is_numeric":[536],"absint":[538],"trim":[540],"wp_cache_get":[552,556,561,569],"sanitize_user":[560],"get_row":[573],"prepare":[573],"update_user_caches":[578]},"used_by":[]},"absint":{"doc":"\/**\n * Converts value to nonnegative integer.\n *\n * @since 2.5.0\n *\n * @param mixed $maybeint Data you wish to have converted to a nonnegative integer\n * @return int An nonnegative integer\n *\/","file":"functions.php","line":2790,"missingDoc":false,"filters":[],"uses":{"abs":[2791],"intval":[2791]},"used_by":{"WP_User::get_data_by":[538],"_WP_Editors::wp_link_query":[770],"wp_xmlrpc_server::_insert_post":[1041,1099],"wp_xmlrpc_server::wp_getPosts":[1473,1476],"wp_xmlrpc_server::wp_getTerms":[1855,1858],"wp_xmlrpc_server::wp_getUsers":[2094,2095],"wp_xmlrpc_server::wp_getComments":[2776,2780,2784],"wp_xmlrpc_server::wp_newComment":[2968,3008],"wp_xmlrpc_server::wp_getMediaLibrary":[3327,3329,3330],"wp_xmlrpc_server::blogger_getRecentPosts":[3780],"wp_xmlrpc_server::mw_getRecentPosts":[4753],"wp_xmlrpc_server::mt_getRecentPostTitles":[5007],"get_comments_number":[548],"WP_Comment_Query::query":[260,310,311],"wp_new_comment":[1386],"WP_Widget_Recent_Posts::widget":[562],"WP_Widget_Recent_Posts::form":[612],"WP_Widget_Recent_Comments::widget":[679],"WP_Widget_Recent_Comments::update":[708],"WP_Widget_Recent_Comments::form":[720],"sanitize_option":[2788],"number_format_i18n":[155],"get_status_header_desc":[796],"wp_get_archives":[888],"get_post_comments_feed_link":[466],"get_current_blog_id":[677],"add_image_size":[190,190],"add_metadata":[35],"update_metadata":[105],"delete_metadata":[188],"get_metadata":[271],"metadata_exists":[319],"get_metadata_by_mid":[354],"update_metadata_by_mid":[394],"delete_metadata_by_mid":[474],"get_post_custom":[1851],"is_sticky":[1913],"wp_get_recent_posts":[2634],"set_post_thumbnail":[5378],"WP_Query::parse_query":[1442,1443,1444,1445,1446,1447,1448,1449,1453,1454,1455,1456,1464],"WP_Query::parse_tax_query":[1808],"WP_Query::get_posts":[2025,2154,2158,2298,2306,2326,2529,2536],"url_to_postid":[288],"get_terms":[1208,1209],"WP_User_Query::prepare_query":[486]}},"sanitize_user":{"doc":"\/**\n * Sanitize username stripping out unsafe characters.\n *\n * Removes tags, octets, entities, and if strict is enabled, will only keep\n * alphanumeric, _, space, ., -, @. After sanitizing, it passes the username,\n * raw username (the username in the parameter), and the value of $strict as\n * parameters for the 'sanitize_user' filter.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'sanitize_user' hook on username, raw username,\n *\t\tand $strict parameter.\n *\n * @param string $username The username to be sanitized.\n * @param bool $strict If set limits $username to specific characters. Default false.\n * @return string The sanitized username, after passing through filters.\n *\/","file":"formatting.php","line":886,"missingDoc":false,"filters":["'sanitize_user'"],"uses":{"wp_strip_all_tags":[888],"remove_accents":[889],"preg_replace":[891,892,896,900],"trim":[898]},"used_by":{"WP_User::get_data_by":[560],"wpmu_validate_user_signup":[436],"wpmu_signup_user":[677],"wpmu_create_user":[913],"wpmu_create_blog":[955],"wp_authenticate":[471],"validate_username":[1231],"wp_insert_user":[1303]}},"update_user_caches":{"doc":"\/**\n * Update all user caches\n *\n * @since 3.0.0\n *\n * @param object $user User object to be cached\n *\/","file":"user.php","line":1162,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[1163,1164,1165,1166]},"used_by":{"WP_User::get_data_by":[578],"cache_users":[170]}},"WP_User::__isset":{"doc":"\/**\n * Magic method for checking the existence of a certain custom field\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":588,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[590],"__":[590],"metadata_exists":[600]},"used_by":[]},"metadata_exists":{"doc":"\/**\n * Determine if a meta key is set for a given object\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key.\n * @return boolean true of the key is set, false if not.\n *\/","file":"meta.php","line":315,"missingDoc":false,"filters":["\"get_{$meta_type}_metadata\""],"uses":{"absint":[319],"wp_cache_get":[326],"update_meta_cache":[329]},"used_by":{"WP_User::__isset":[600],"WP_Post::__isset":[612]}},"WP_User::__get":{"doc":"\/**\n * Magic method for accessing custom fields\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":608,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[610],"__":[610],"get_user_meta":[619],"sanitize_user_field":[623]},"used_by":[]},"get_user_meta":{"doc":"\/**\n * Retrieve user meta field for a user.\n *\n * @since 3.0.0\n * @uses get_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"user.php","line":836,"missingDoc":false,"filters":[],"uses":{"get_metadata":[837]},"used_by":{"WP_User::__get":[619],"WP_User::_init_caps":[714],"get_active_blog_for_user":[79,105,107],"add_user_to_blog":[188],"remove_user_from_blog":[226],"wpmu_create_blog":[992],"get_blogs_of_user":[690],"wp_update_user":[1462]}},"sanitize_user_field":{"doc":"\/**\n * Sanitize user field based on context.\n *\n * Possible context values are: 'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The\n * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'\n * when calling filters.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'edit_$field' passing $value and $user_id if $context == 'edit'.\n * $field is prefixed with 'user_' if it isn't already.\n * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db'. $field is prefixed with\n * 'user_' if it isn't already.\n * @uses apply_filters() Calls '$field' passing $value, $user_id and $context if $context == anything\n * other than 'raw', 'edit' and 'db'. $field is prefixed with 'user_' if it isn't already.\n *\n * @param string $field The user Object field name.\n * @param mixed $value The user Object value.\n * @param int $user_id user ID.\n * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',\n * 'attribute' and 'js'.\n * @return mixed Sanitized value.\n *\/","file":"user.php","line":1106,"missingDoc":false,"filters":["\"edit_{$field}\"","\"edit_user_{$field}\"","\"pre_{$field}\"","\"pre_user_{$field}\"","\"user_{$field}\""],"uses":{"in_array":[1108],"is_string":[1114],"is_numeric":[1114],"strpos":[1117],"esc_html":[1127],"esc_attr":[1129,1148],"esc_url":[1145],"esc_js":[1150]},"used_by":{"WP_User::__get":[623],"sanitize_user_object":[2691,2699]}},"WP_User::__set":{"doc":"\/**\n * Magic method for setting custom fields\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":634,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[636],"__":[636]},"used_by":[]},"WP_User::exists":{"doc":"\/**\n * Determine whether the user exists in the database.\n *\n * @since 3.4.0\n * @access public\n *\n * @return bool True if user exists in the database, false if not.\n *\/","file":"capabilities.php","line":652,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User::get":{"doc":"\/**\n * Retrieve the value of a property or meta key.\n *\n * Retrieves from the users and usermeta table.\n *\n * @since 3.3.0\n *\n * @param string $key Property\n *\/","file":"capabilities.php","line":665,"missingDoc":false,"filters":[],"uses":{"__get":[666]},"used_by":[]},"WP_User::has_prop":{"doc":"\/**\n * Determine whether a property or meta key is set\n *\n * Consults the users and usermeta tables.\n *\n * @since 3.3.0\n *\n * @param string $key Property\n *\/","file":"capabilities.php","line":678,"missingDoc":false,"filters":[],"uses":{"__isset":[679]},"used_by":[]},"WP_User::to_array":{"doc":"","file":"capabilities.php","line":689,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[690]},"used_by":[]},"WP_User::_init_caps":{"doc":"\/**\n * Set up capability object properties.\n *\n * Will set the value for the 'cap_key' property to current database table\n * prefix, followed by 'capabilities'. Will then check to see if the\n * property matching the 'cap_key' exists and is an array. If so, it will be\n * used.\n *\n * @access protected\n * @since 2.1.0\n *\n * @param string $cap_key Optional capability key\n *\/","file":"capabilities.php","line":706,"missingDoc":false,"filters":[],"uses":{"get_user_meta":[714],"is_array":[716],"get_role_caps":[719]},"used_by":[]},"WP_User::get_role_caps":{"doc":"\/**\n * Retrieve all of the role capabilities and merge with individual capabilities.\n *\n * All of the capabilities of the roles the user belongs to are merged with\n * the users individual roles. This also means that the user can be denied\n * specific roles that their role might have, but the specific user isn't\n * granted permission to.\n *\n * @since 2.0.0\n * @uses $wp_roles\n * @access public\n *\/","file":"capabilities.php","line":734,"missingDoc":false,"filters":[],"uses":{"array_filter":[742],"array_keys":[742],"is_array":[741],"get_role":[747],"array_merge":[748,750]},"used_by":[]},"get_role":{"doc":"\/**\n * Retrieve role object.\n *\n * @see WP_Roles::get_role() Uses method to retrieve role object.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @return object\n *\/","file":"capabilities.php","line":1376,"missingDoc":false,"filters":[],"uses":{"get_role":[1382]},"used_by":{"WP_User::get_role_caps":[747],"get_role":[1382],"wp_xmlrpc_server::wp_getUsers":[2105]}},"WP_User::add_role":{"doc":"\/**\n * Add role to user.\n *\n * Updates the user's meta data option with capabilities and roles.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":763,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[765],"get_role_caps":[766],"update_user_level_from_caps":[767]},"used_by":[]},"update_user_meta":{"doc":"\/**\n * Update user meta field based on user ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and user ID.\n *\n * If the meta field for the user does not exist, it will be added.\n *\n * @since 3.0.0\n * @uses update_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"user.php","line":858,"missingDoc":false,"filters":[],"uses":{"update_metadata":[859]},"used_by":{"WP_User::add_role":[765],"WP_User::remove_role":[782],"WP_User::set_role":[812],"WP_User::update_user_level_from_caps":[859],"WP_User::add_cap":[873],"WP_User::remove_cap":[888],"get_active_blog_for_user":[83,91,106,108],"add_user_to_blog":[189,191],"remove_user_from_blog":[239,240,254,255],"wpmu_create_blog":[993],"add_new_user_to_blog":[1725],"update_user_option":[284],"wp_insert_user":[1407]}},"WP_User::remove_role":{"doc":"\/**\n * Remove role from user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":778,"missingDoc":false,"filters":[],"uses":{"in_array":[779],"update_user_meta":[782],"get_role_caps":[783],"update_user_level_from_caps":[784]},"used_by":[]},"WP_User::set_role":{"doc":"\/**\n * Set the role of the user.\n *\n * This will remove the previous roles of the user and assign the user the\n * new one. You can set the role to an empty string and it will remove all\n * of the roles from the user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":799,"missingDoc":false,"filters":["'set_user_role'"],"uses":{"count":[800],"current":[800],"update_user_meta":[812],"get_role_caps":[813],"update_user_level_from_caps":[814]},"used_by":[]},"WP_User::level_reduction":{"doc":"\/**\n * Choose the maximum level the user has.\n *\n * Will compare the level from the $item parameter against the $max\n * parameter. If the item is incorrect, then just the $max parameter value\n * will be returned.\n *\n * Used to get the max level based on the capabilities the user has. This\n * is also based on roles, so if the user is assigned the Administrator role\n * then the capability 'level_10' will exist and the user will get that\n * value.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int $max Max level of user.\n * @param string $item Level capability name.\n * @return int Max Level.\n *\/","file":"capabilities.php","line":837,"missingDoc":false,"filters":[],"uses":{"intval":[839],"max":[840],"preg_match":[838]},"used_by":[]},"WP_User::update_user_level_from_caps":{"doc":"\/**\n * Update the maximum user level for the user.\n *\n * Updates the 'user_level' user metadata (includes prefix that is the\n * database table prefix) with the maximum user level. Gets the value from\n * the all of the capabilities that the user has.\n *\n * @since 2.0.0\n * @access public\n *\/","file":"capabilities.php","line":856,"missingDoc":false,"filters":[],"uses":{"array_reduce":[858],"array_keys":[858],"update_user_meta":[859]},"used_by":[]},"WP_User::add_cap":{"doc":"\/**\n * Add capability and grant or deny access to capability.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @param bool $grant Whether to grant capability to user.\n *\/","file":"capabilities.php","line":871,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[873]},"used_by":[]},"WP_User::remove_cap":{"doc":"\/**\n * Remove capability from user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":884,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[888]},"used_by":[]},"WP_User::remove_all_caps":{"doc":"\/**\n * Remove all of the capabilities of the user.\n *\n * @since 2.1.0\n * @access public\n *\/","file":"capabilities.php","line":897,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[900,901],"get_role_caps":[902]},"used_by":[]},"delete_user_meta":{"doc":"\/**\n * Remove metadata matching criteria from a user.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 3.0.0\n * @uses delete_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_user_meta\n *\n * @param int $user_id user ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"user.php","line":819,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[820]},"used_by":{"WP_User::remove_all_caps":[900,901],"update_user_option":[282],"delete_user_option":[307]}},"WP_User::has_cap":{"doc":"\/**\n * Whether user has capability or role name.\n *\n * This is useful for looking up whether the user has a specific role\n * assigned to the user. The second optional parameter can also be used to\n * check for capabilities against a specific object, such as a post or user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string|int $cap Capability or role name to search.\n * @return bool True, if user has capability; false, if user does not have capability.\n *\/","file":"capabilities.php","line":918,"missingDoc":false,"filters":["'user_has_cap'"],"uses":{"_deprecated_argument":[920],"__":[920],"translate_level_to_cap":[921],"is_numeric":[919],"array_slice":[924],"func_get_args":[924],"array_merge":[925],"call_user_func_array":[926],"in_array":[930],"is_multisite":[929],"is_super_admin":[929]},"used_by":[]},"WP_User::translate_level_to_cap":{"doc":"\/**\n * Convert numeric level to level capability name.\n *\n * Prepends 'level_' to level number.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int $level Level number, 1 to 10.\n * @return string\n *\/","file":"capabilities.php","line":957,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User::for_blog":{"doc":"\/**\n * Set the blog to operate on. Defaults to the current blog.\n *\n * @since 3.0.0\n *\n * @param int $blog_id Optional Blog ID, defaults to current blog.\n *\/","file":"capabilities.php","line":968,"missingDoc":false,"filters":[],"uses":{"get_blog_prefix":[971],"_init_caps":[974]},"used_by":[]},"map_meta_cap":{"doc":"\/**\n * Map meta capabilities to primitive capabilities.\n *\n * This does not actually compare whether the user ID has the actual capability,\n * just what the capability or capabilities are. Meta capability list value can\n * be 'delete_user', 'edit_user', 'remove_user', 'promote_user', 'delete_post',\n * 'delete_page', 'edit_post', 'edit_page', 'read_post', or 'read_page'.\n *\n * @since 2.0.0\n *\n * @param string $cap Capability name.\n * @param int $user_id User ID.\n * @return array Actual capabilities for meta capability.\n *\/","file":"capabilities.php","line":992,"missingDoc":false,"filters":["\"auth_post_meta_{$meta_key}\"","'map_meta_cap'"],"uses":{"array_slice":[993],"func_get_args":[993],"is_multisite":[1010,1183,1192,1205,1221,1228,1238,1244],"is_super_admin":[1010,1183,1192,1205,1221,1238,1246],"get_post":[1017,1020,1067,1070,1115,1118,1153,1161,1177],"get_post_type_object":[1023,1073,1121,1154,1162,1178],"get_current_user_id":[1039,1089,1143],"wp_get_current_user":[1039,1089,1143],"get_userdata":[1039,1089,1143],"get_post_meta":[1047,1097],"is_object":[1042,1092,1145],"get_post_status_object":[1131],"map_meta_cap":[1150,1163,1180],"is_protected_meta":[1171],"has_filter":[1167],"get_comment":[1176],"defined":[1183,1190,1203,1201,1219],"get_site_option":[1230,1246],"get_option":[1252],"_post_type_meta_capabilities":[1259],"array_merge":[1261],"call_user_func_array":[1262]},"used_by":{"map_meta_cap":[1150,1163,1180]}},"get_post_status_object":{"doc":"\/**\n * Retrieve a post status object by name\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses\n * @see register_post_status\n * @see get_post_statuses\n *\n * @param string $post_status The name of a registered post status\n * @return object A post status object\n *\/","file":"post.php","line":999,"missingDoc":false,"filters":[],"uses":[],"used_by":{"map_meta_cap":[1131],"wp_xmlrpc_server::_insert_post":[1033],"WP_Query::get_posts":[2701]}},"is_protected_meta":{"doc":"\/**\n * Determine whether a meta key is protected\n *\n * @since 3.1.3\n *\n * @param string $meta_key Meta key\n * @return bool True if the key is protected, false otherwise.\n *\/","file":"meta.php","line":862,"missingDoc":false,"filters":["'is_protected_meta'"],"uses":[],"used_by":{"map_meta_cap":[1171],"register_meta":[898],"the_meta":[747]}},"has_filter":{"doc":"\/**\n * Check if any filter has been registered for a hook.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @global array $wp_filter Stores all of the filters\n *\n * @param string $tag The name of the filter hook.\n * @param callback $function_to_check optional.\n * @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.\n * \tWhen checking a specific function, the priority of that hook is returned, or false if the function is not attached.\n * \tWhen using the $function_to_check argument, this function may return a non-boolean value that evaluates to false\n * \t(e.g.) 0, so use the === operator for testing the return value.\n *\/","file":"plugin.php","line":89,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[96],"array_keys":[99]},"used_by":{"map_meta_cap":[1167],"WP::build_query_string":[430],"has_action":[510],"get_terms":[1241]}},"get_comment":{"doc":"\/**\n * Retrieves comment data given a comment ID or comment object.\n *\n * If an object is passed then the comment data will be cached and then returned\n * after being passed through a filter. If the comment is empty, then the global\n * comment variable will be used, if it is set.\n *\n * If the comment is empty, then the global comment variable will be used, if it\n * is set.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param object|string|int $comment Comment to retrieve.\n * @param string $output Optional. OBJECT or ARRAY_A or ARRAY_N constants.\n * @return object|array|null Depends on $output value.\n *\/","file":"comment.php","line":130,"missingDoc":false,"filters":["'get_comment'"],"uses":{"is_object":[139],"wp_cache_add":[140,149],"wp_cache_get":[145],"get_row":[146],"prepare":[146],"get_object_vars":[158,161],"array_values":[161]},"used_by":{"map_meta_cap":[1176],"wp_xmlrpc_server::wp_getComment":[2728],"wp_xmlrpc_server::wp_deleteComment":[2827],"wp_xmlrpc_server::wp_editComment":[2882],"get_comment_author":[24],"get_comment_author_email":[62],"get_comment_author_IP":[182],"get_comment_author_url":[208],"get_comment_class":[302],"get_comment_date":[373],"get_comment_excerpt":[408],"get_comment_link":[475],"get_comment_text":[599],"comment_text":[613],"get_comment_type":[661],"get_comment_reply_link":[1048],"comment_form_title":[1204],"get_page_of_comment":[828],"wp_delete_comment":[999],"wp_trash_comment":[1051],"wp_spam_comment":[1107],"wp_get_comment_status":[1159],"wp_insert_comment":[1290],"wp_set_comment_status":[1444,1458,1469],"wp_update_comment":[1495,1527],"get_commentdata":[1264],"__main":[77],"get_comment_guid":[228],"wp_scheduled_delete":[3500],"get_edit_comment_link":[981],"wp_notify_postauthor":[990],"wp_notify_moderator":[1100]}},"get_site_option":{"doc":"\/**\n * Retrieve site option value based on name of option.\n *\n * @see get_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses apply_filters() Calls 'pre_site_option_$option' before checking the option.\n * \tAny value other than false will \"short-circuit\" the retrieval of the option\n *\tand return the returned value.\n * @uses apply_filters() Calls 'site_option_$option', after checking the option, with\n * \tthe option value.\n *\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional value to return if option doesn't exist. Default false.\n * @param bool $use_cache Whether to use cache. Multisite only. Default true.\n * @return mixed Value set for the option.\n *\/","file":"option.php","line":759,"missingDoc":false,"filters":["'pre_site_option_' . $option","'default_site_option_' . $option","'default_site_option_' . $option","'site_option_' . $option"],"uses":{"get_option":[769],"wp_cache_get":[773],"get_row":[776],"prepare":[776],"maybe_unserialize":[781],"wp_cache_set":[782],"is_object":[779],"is_multisite":[767]},"used_by":{"map_meta_cap":[1230,1246],"get_super_admins":[1438],"WP_Theme::get_allowed_on_network":[1091],"wp_cookie_constants":[159],"wp_upload_dir":[1546,1554],"global_terms_enabled":[3250],"get_locale":[42],"ms_upload_constants":[24],"get_user_count":[131],"get_blog_count":[145],"is_email_address_unsafe":[377],"wpmu_validate_user_signup":[448,474],"wpmu_validate_blog_signup":[551],"wpmu_signup_blog_notification":[733,736,736],"wpmu_signup_user_notification":[786,789,789],"wpmu_create_blog":[989],"newblog_notify_siteadmin":[1013,1016],"newuser_notify_siteadmin":[1051,1054],"install_blog":[1158],"wpmu_welcome_notification":[1220,1246,1251,1251],"wpmu_welcome_user_notification":[1284,1294,1299,1299],"check_upload_mimes":[1477],"upload_is_file_too_big":[1606,1610,1609],"get_dashboard_blog":[1788],"users_can_register_signup_filter":[1830],"get_space_allowed":[1964],"get_upload_space_available":[1981],"is_upload_space_available":[1999],"upload_size_limit_filter":[2011,2012],"wp_get_active_network_plugins":[40],"ms_site_check":[96],"add_site_option":[820],"update_site_option":[901],"get_site_transient":[997,1005],"set_site_transient":[1041],"wp_salt":[1361,1370],"script_concat_settings":[859,865]}},"_post_type_meta_capabilities":{"doc":"\/**\n * Stores or returns a list of post type meta caps for map_meta_cap().\n *\n * @since 3.1.0\n * @access private\n *\/","file":"post.php","line":1460,"missingDoc":false,"filters":[],"uses":{"in_array":[1465]},"used_by":{"map_meta_cap":[1259],"get_post_type_capabilities":[1449]}},"current_user_can_for_blog":{"doc":"\/**\n * Whether current user has a capability or role for a given blog.\n *\n * @since 3.0.0\n *\n * @param int $blog_id Blog ID\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1301,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[1303],"is_multisite":[1302,1315],"wp_get_current_user":[1305],"array_slice":[1310],"func_get_args":[1310],"array_merge":[1311],"call_user_func_array":[1313],"restore_current_blog":[1316]},"used_by":[]},"author_can":{"doc":"\/**\n * Whether author of supplied post has capability or role.\n *\n * @since 2.9.0\n *\n * @param int|object $post Post ID or post object.\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1330,"missingDoc":false,"filters":[],"uses":{"get_post":[1331],"get_userdata":[1334],"array_slice":[1339],"func_get_args":[1339],"array_merge":[1340],"call_user_func_array":[1342]},"used_by":{"WP_Embed::shortcode":[182]}},"user_can":{"doc":"\/**\n * Whether a particular user has capability or role.\n *\n * @since 3.1.0\n *\n * @param int|object $user User ID or object.\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1354,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1356],"is_object":[1355],"exists":[1358],"array_slice":[1361],"func_get_args":[1361],"array_merge":[1362],"call_user_func_array":[1364]},"used_by":{"wp_notify_moderator":[1105]}},"add_role":{"doc":"\/**\n * Add role, if it does not exist.\n *\n * @see WP_Roles::add_role() Uses method to add role.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @param string $display_name Display name for role.\n * @param array $capabilities List of capabilities, e.g. array( 'edit_posts' => true, 'delete_posts' => false );\n * @return null|WP_Role WP_Role object if role is added, null if already exists.\n *\/","file":"capabilities.php","line":1396,"missingDoc":false,"filters":[],"uses":{"add_role":[1402]},"used_by":{"add_role":[1402]}},"remove_role":{"doc":"\/**\n * Remove role, if it exists.\n *\n * @see WP_Roles::remove_role() Uses method to remove role.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @return null\n *\/","file":"capabilities.php","line":1414,"missingDoc":false,"filters":[],"uses":{"remove_role":[1420]},"used_by":{"remove_role":[1420]}},"get_super_admins":{"doc":"\/**\n * Retrieve a list of super admins.\n *\n * @since 3.0.0\n *\n * @uses $super_admins Super admins global variable, if set.\n *\n * @return array List of super admin logins\n *\/","file":"capabilities.php","line":1432,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1438]},"used_by":{"is_super_admin":[1459]}},"get_category_link":{"doc":"\/**\n * Retrieve category link URL.\n *\n * @since 1.0.0\n * @see get_term_link()\n *\n * @param int|object $category Category ID or object.\n * @return string Link on success, empty string if category does not exist.\n *\/","file":"category-template.php","line":18,"missingDoc":false,"filters":[],"uses":{"is_object":[19],"get_term_link":[22],"is_wp_error":[24]},"used_by":{"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_xmlrpc_server::mw_getCategories":[4885]}},"get_category_parents":{"doc":"\/**\n * Retrieve category parents with separator.\n *\n * @since 1.2.0\n *\n * @param int $id Category ID.\n * @param bool $link Optional, default is false. Whether to format with link.\n * @param string $separator Optional, default is '\/'. How to separate categories.\n * @param bool $nicename Optional, default is false. Whether to use nice name for display.\n * @param array $visited Optional. Already linked to categories to prevent duplicates.\n * @return string\n *\/","file":"category-template.php","line":42,"missingDoc":false,"filters":[],"uses":{"get_category":[44],"is_wp_error":[45],"get_category_parents":[55],"in_array":[53],"esc_url":[59],"get_category_link":[59],"esc_attr":[59],"sprintf":[59],"__":[59]},"used_by":{"get_category_parents":[55],"get_the_category_list":[173,179,196,202],"get_permalink":[129]}},"get_category":{"doc":"\/**\n * Retrieves category data given a category ID or category object.\n *\n * If you pass the $category parameter an object, which is assumed to be the\n * category row object retrieved the database. It will cache the category data.\n *\n * If you pass $category an integer of the category ID, then that category will\n * be retrieved from the database, if it isn't already cached, and pass it back.\n *\n * If you look at get_term(), then both types will be passed through several\n * filters and finally sanitized based on the $filter parameter value.\n *\n * The category will converted to maintain backwards compatibility.\n *\n * @since 1.5.1\n * @uses get_term() Used to get the category data from the taxonomy.\n *\n * @param int|object $category Category ID or Category row object\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional. Default is raw or no WordPress defined filter will applied.\n * @return mixed Category data in type defined by $output parameter.\n *\/","file":"category.php","line":81,"missingDoc":false,"filters":[],"uses":{"get_term":[82],"is_wp_error":[83],"_make_cat_compat":[86]},"used_by":{"get_category_parents":[44],"get_the_category_by_ID":[138],"get_category_by_path":[137,142],"get_cat_name":[188],"get_linkcatname":[1144],"get_category_children":[1309],"get_permalink":[134]}},"get_the_category":{"doc":"\/**\n * Retrieve post categories.\n *\n * @since 0.71\n * @uses $post\n *\n * @param int $id Optional, default to current post ID. The post ID.\n * @return array\n *\/","file":"category-template.php","line":74,"missingDoc":false,"filters":["'get_the_categories'"],"uses":{"get_the_terms":[75],"is_wp_error":[76],"array_values":[79],"_make_cat_compat":[82],"array_keys":[81]},"used_by":{"get_the_category_list":[159],"the_category_ID":[85],"the_category_head":[111],"get_the_category_rss":[304],"get_permalink":[122],"get_post_class":[353]}},"get_the_terms":{"doc":"\/**\n * Retrieve the terms of the taxonomy that are attached to the post.\n *\n * @since 2.5.0\n *\n * @param mixed $post Post ID or object.\n * @param string $taxonomy Taxonomy name.\n * @return array|bool False on failure. Array of term objects on success.\n *\/","file":"category-template.php","line":1061,"missingDoc":false,"filters":["'get_the_terms'"],"uses":{"get_post":[1062],"get_object_term_cache":[1065],"wp_get_object_terms":[1067],"wp_cache_add":[1068]},"used_by":{"get_the_category":[75],"get_the_tags":[986],"get_the_term_list":[1092],"WP_Post::__get":[622,632],"get_post_format":[771]}},"_make_cat_compat":{"doc":"\/**\n * Update category structure to old pre 2.3 from new taxonomy structure.\n *\n * This function was added for the taxonomy support to update the new category\n * structure with the old category one. This will maintain compatibility with\n * plugins and themes which depend on the old key or property names.\n *\n * The parameter should only be passed a variable and not create the array or\n * object inline to the parameter. The reason for this is that parameter is\n * passed by reference and PHP will fail unless it has the variable.\n *\n * There is no return value, because everything is updated on the variable you\n * pass to it. This is one of the features with using pass by reference in PHP.\n *\n * @since 2.3.0\n * @access private\n *\n * @param array|object $category Category Row object or array\n *\/","file":"category.php","line":320,"missingDoc":false,"filters":[],"uses":{"is_array":[328],"is_object":[321]},"used_by":{"get_the_category":[82],"get_categories":[54],"get_category":[86],"get_category_by_slug":[158],"WP_Query::get_queried_object":[3009]}},"_usort_terms_by_name":{"doc":"\/**\n * Sort categories by name.\n *\n * Used by usort() as a callback, should not be used directly. Can actually be\n * used to sort any term object.\n *\n * @since 2.3.0\n * @access private\n *\n * @param object $a\n * @param object $b\n * @return int\n *\/","file":"category-template.php","line":102,"missingDoc":false,"filters":[],"uses":{"strcmp":[103]},"used_by":[]},"_usort_terms_by_ID":{"doc":"\/**\n * Sort categories by ID.\n *\n * Used by usort() as a callback, should not be used directly. Can actually be\n * used to sort any term object.\n *\n * @since 2.3.0\n * @access private\n *\n * @param object $a\n * @param object $b\n * @return int\n *\/","file":"category-template.php","line":119,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_the_category_by_ID":{"doc":"\/**\n * Retrieve category name based on category ID.\n *\n * @since 0.71\n *\n * @param int $cat_ID Category ID.\n * @return string Category name.\n *\/","file":"category-template.php","line":136,"missingDoc":false,"filters":[],"uses":{"get_category":[138],"is_wp_error":[139]},"used_by":{"the_category_head":[115]}},"get_the_category_list":{"doc":"\/**\n * Retrieve category list in either HTML list or custom format.\n *\n * @since 1.5.1\n *\n * @param string $separator Optional, default is empty string. Separator for between the categories.\n * @param string $parents Optional. How to display the parents.\n * @param int $post_id Optional. Post ID to retrieve categories.\n * @return string\n *\/","file":"category-template.php","line":154,"missingDoc":false,"filters":["'the_category'","'the_category'","'the_category'"],"uses":{"is_object_in_taxonomy":[156],"get_post_type":[156],"get_the_category":[159],"__":[161,174,177,184,197,200,207],"is_object":[163],"using_permalinks":[163],"strtolower":[170,193],"get_category_parents":[173,179,196,202],"esc_url":[174,177,184,197,200,207],"get_category_link":[174,177,184,197,200,207],"esc_attr":[174,177,184,197,200,207],"sprintf":[174,177,184,197,200,207]},"used_by":{"the_category":[250]}},"is_object_in_taxonomy":{"doc":"\/**\n * Determine if the given object type is associated with the given taxonomy.\n *\n * @since 3.0.0\n * @uses get_object_taxonomies()\n *\n * @param string $object_type Object type string\n * @param string $taxonomy Single taxonomy name\n * @return bool True if object is associated with the taxonomy, otherwise false.\n *\/","file":"taxonomy.php","line":3205,"missingDoc":false,"filters":[],"uses":{"get_object_taxonomies":[3206],"in_array":[3211]},"used_by":{"get_the_category_list":[156],"get_adjacent_post":[1136],"get_post_class":[352,361],"WP_Post::__get":[621,631],"wp_insert_post":[2903,2906],"wp_insert_attachment":[4024,4027]}},"get_post_type":{"doc":"\/**\n * Retrieve the post type of the current post or of a given post.\n *\n * @since 2.1.0\n *\n * @uses $post The Loop current post global\n *\n * @param mixed $post Optional. Post object or post ID.\n * @return bool|string post type or false on failure.\n *\/","file":"post.php","line":1074,"missingDoc":false,"filters":[],"uses":{"get_post":[1075]},"used_by":{"get_the_category_list":[156],"wp_xmlrpc_server::_insert_post":[1012],"is_nav_menu_item":[154],"wp_set_post_categories":[3232]}},"in_category":{"doc":"\/**\n * Check if the current post in within any of the given categories.\n *\n * The given categories are checked against the post's categories' term_ids, names and slugs.\n * Categories given as integers will only be checked against the post's categories' term_ids.\n *\n * Prior to v2.5 of WordPress, category names were not supported.\n * Prior to v2.7, category slugs were not supported.\n * Prior to v2.7, only one category could be compared: in_category( $single_category ).\n * Prior to v2.7, this function could only be used in the WordPress Loop.\n * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.\n *\n * @since 1.2.0\n *\n * @param int|string|array $category Category ID, name or slug, or array of said.\n * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)\n * @return bool True if the current post is in any of the given categories.\n *\/","file":"category-template.php","line":233,"missingDoc":false,"filters":[],"uses":{"has_term":[237]},"used_by":[]},"has_term":{"doc":"\/**\n * Check if the current post has any of given terms.\n *\n * The given terms are checked against the post's terms' term_ids, names and slugs.\n * Terms given as integers will only be checked against the post's terms' term_ids.\n * If no terms are given, determines if post has any terms.\n *\n * @since 3.1.0\n *\n * @param string|int|array $term Optional. The term name\/term_id\/slug or array of them to check for.\n * @param string $taxonomy Taxonomy name\n * @param int|object $post Optional. Post to check instead of the current post.\n * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).\n *\/","file":"category-template.php","line":1181,"missingDoc":false,"filters":[],"uses":{"get_post":[1182],"is_object_in_term":[1187],"is_wp_error":[1188]},"used_by":{"in_category":[237],"has_category":[1143],"has_tag":[1164],"has_post_format":[792]}},"the_category":{"doc":"\/**\n * Display the category list for the post.\n *\n * @since 0.71\n *\n * @param string $separator Optional, default is empty string. Separator for between the categories.\n * @param string $parents Optional. How to display the parents.\n * @param int $post_id Optional. Post ID to retrieve categories.\n *\/","file":"category-template.php","line":249,"missingDoc":false,"filters":[],"uses":{"get_the_category_list":[250]},"used_by":[]},"category_description":{"doc":"\/**\n * Retrieve category description.\n *\n * @since 1.0.0\n *\n * @param int $category Optional. Category ID. Will use global category ID by default.\n * @return string Category description, available.\n *\/","file":"category-template.php","line":261,"missingDoc":false,"filters":[],"uses":{"term_description":[262]},"used_by":[]},"term_description":{"doc":"\/**\n * Retrieve term description.\n *\n * @since 2.8\n *\n * @param int $term Optional. Term ID. Will use global term ID by default.\n * @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'.\n * @return string Term description, available.\n *\/","file":"category-template.php","line":1042,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[1044],"is_tax":[1043],"is_tag":[1043],"is_category":[1043],"get_term_field":[1048],"is_wp_error":[1049]},"used_by":{"category_description":[262],"tag_description":[1030]}},"wp_dropdown_categories":{"doc":"\/**\n * Display or retrieve the HTML dropdown list of categories.\n *\n * The list of arguments is below:\n * 'show_option_all' (string) - Text to display for showing all categories.\n * 'show_option_none' (string) - Text to display for showing no categories.\n * 'orderby' (string) default is 'ID' - What column to use for ordering the\n * categories.\n * 'order' (string) default is 'ASC' - What direction to order categories.\n * 'show_count' (bool|int) default is 0 - Whether to show how many posts are\n * in the category.\n * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that\n * don't have any posts attached to them.\n * 'child_of' (int) default is 0 - See {@link get_categories()}.\n * 'exclude' (string) - See {@link get_categories()}.\n * 'echo' (bool|int) default is 1 - Whether to display or retrieve content.\n * 'depth' (int) - The max depth.\n * 'tab_index' (int) - Tab index for select element.\n * 'name' (string) - The name attribute value for select element.\n * 'id' (string) - The ID attribute value for select element. Defaults to name if omitted.\n * 'class' (string) - The class attribute value for select element.\n * 'selected' (int) - Which category ID is selected.\n * 'taxonomy' (string) - The name of the taxonomy to retrieve. Defaults to category.\n *\n * The 'hierarchical' argument, which is disabled by default, will override the\n * depth argument, unless it is true. When the argument is false, it will\n * display all of the categories. When it is enabled it will use the value in\n * the 'depth' argument.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override default arguments.\n * @return string HTML content only if 'echo' argument is 0.\n *\/","file":"category-template.php","line":299,"missingDoc":false,"filters":["'list_cats'","'list_cats'","'list_cats'","'wp_dropdown_cats'"],"uses":{"is_category":[313],"get_query_var":[313],"_deprecated_argument":[317],"wp_parse_args":[321],"extract":[327],"get_terms":[333],"esc_attr":[334,335,336],"strval":[352,358],"walk_category_dropdown_tree":[367]},"used_by":{"WP_Widget_Categories::widget":[463],"dropdown_cats":[712]}},"walk_category_dropdown_tree":{"doc":"\/**\n * Retrieve HTML dropdown (select) content for category list.\n *\n * @uses Walker_CategoryDropdown to create HTML dropdown content.\n * @since 2.1.0\n * @see Walker_CategoryDropdown::walk() for parameters and return description.\n *\/","file":"category-template.php","line":748,"missingDoc":false,"filters":[],"uses":{"func_get_args":[749],"is_a":[751],"call_user_func_array":[756]},"used_by":{"wp_dropdown_categories":[367]}},"wp_list_categories":{"doc":"\/**\n * Display or retrieve the HTML list of categories.\n *\n * The list of arguments is below:\n * 'show_option_all' (string) - Text to display for showing all categories.\n * 'orderby' (string) default is 'ID' - What column to use for ordering the\n * categories.\n * 'order' (string) default is 'ASC' - What direction to order categories.\n * 'show_count' (bool|int) default is 0 - Whether to show how many posts are\n * in the category.\n * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that\n * don't have any posts attached to them.\n * 'use_desc_for_title' (bool|int) default is 1 - Whether to use the\n * description instead of the category title.\n * 'feed' - See {@link get_categories()}.\n * 'feed_type' - See {@link get_categories()}.\n * 'feed_image' - See {@link get_categories()}.\n * 'child_of' (int) default is 0 - See {@link get_categories()}.\n * 'exclude' (string) - See {@link get_categories()}.\n * 'exclude_tree' (string) - See {@link get_categories()}.\n * 'echo' (bool|int) default is 1 - Whether to display or retrieve content.\n * 'current_category' (int) - See {@link get_categories()}.\n * 'hierarchical' (bool) - See {@link get_categories()}.\n * 'title_li' (string) - See {@link get_categories()}.\n * 'depth' (int) - The max depth.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override default arguments.\n * @return string HTML content only if 'echo' argument is 0.\n *\/","file":"category-template.php","line":412,"missingDoc":false,"filters":["'wp_list_categories'"],"uses":{"__":[414,422],"wp_parse_args":[427],"extract":[440],"taxonomy_exists":[442],"get_categories":[445],"esc_attr":[449],"get_option":[460,460,460],"get_permalink":[460],"home_url":[460],"esc_url":[461],"get_queried_object":[469],"get_queried_object_id":[471],"is_category":[468],"is_tax":[468],"is_tag":[468],"walk_category_tree":[479]},"used_by":{"WP_Widget_Categories::widget":[484],"wp_list_cats":[675],"__main":[63]}},"taxonomy_exists":{"doc":"\/**\n * Checks that the taxonomy name exists.\n *\n * Formerly is_taxonomy(), introduced in 2.3.0.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n *\n * @uses $wp_taxonomies\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy exists.\n *\/","file":"taxonomy.php","line":228,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_list_categories":[442],"wp_xmlrpc_server::wp_newTerm":[1544],"wp_xmlrpc_server::wp_editTerm":[1632],"wp_xmlrpc_server::wp_deleteTerm":[1724],"wp_xmlrpc_server::wp_getTerm":[1791],"wp_xmlrpc_server::wp_getTerms":[1844],"wp_xmlrpc_server::wp_getTaxonomy":[1923],"WP_Widget_Tag_Cloud::_get_current_taxonomy":[1082],"is_taxonomy":[2542],"get_taxonomy":[208],"is_taxonomy_hierarchical":[253],"get_objects_in_term":[517],"WP_Tax_Query::clean_query":[747],"get_term":[879],"get_term_by":[947],"get_term_children":[1008],"get_terms":[1196],"wp_get_object_terms":[1900],"wp_insert_term":[2044],"wp_set_object_terms":[2175],"wp_update_term":[2352]}},"get_categories":{"doc":"\/**\n * Retrieve list of category objects.\n *\n * If you change the type to 'link' in the arguments, then the link categories\n * will be returned instead. Also all categories will be updated to be backwards\n * compatible with pre-2.3 plugins and themes.\n *\n * @since 2.1.0\n * @see get_terms() Type of arguments that can be changed.\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_categories\n *\n * @param string|array $args Optional. Change the defaults retrieving categories.\n * @return array List of categories.\n *\/","file":"category.php","line":39,"missingDoc":false,"filters":["'get_categories_taxonomy'"],"uses":{"wp_parse_args":[41],"_deprecated_argument":[47],"get_terms":[51],"_make_cat_compat":[54],"array_keys":[53]},"used_by":{"wp_list_categories":[445],"SimplePie::get_category":[2082],"wp_xmlrpc_server::wp_suggestCategories":[2694],"wp_xmlrpc_server::mw_getCategories":[4878],"wp_xmlrpc_server::mt_getCategoryList":[5077],"get_links_list":[1057],"SimplePie_Enclosure::get_category":[336],"SimplePie_Item::get_category":[419],"SimplePie_Source::get_category":[142]}},"walk_category_tree":{"doc":"\/**\n * Retrieve HTML list content for category list.\n *\n * @uses Walker_Category to create HTML list content.\n * @since 2.1.0\n * @see Walker_Category::walk() for parameters and return description.\n *\/","file":"category-template.php","line":730,"missingDoc":false,"filters":[],"uses":{"func_get_args":[731],"is_a":[733],"call_user_func_array":[738]},"used_by":{"wp_list_categories":[479]}},"wp_tag_cloud":{"doc":"\/**\n * Display tag cloud.\n *\n * The text size is set by the 'smallest' and 'largest' arguments, which will\n * use the 'unit' argument value for the CSS text size unit. The 'format'\n * argument can be 'flat' (default), 'list', or 'array'. The flat value for the\n * 'format' argument will separate tags with spaces. The list value for the\n * 'format' argument will format the tags in a UL HTML list. The array value for\n * the 'format' argument will return in PHP array type format.\n *\n * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.\n * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC'.\n *\n * The 'number' argument is how many tags to return. By default, the limit will\n * be to return the top 45 tags in the tag cloud list.\n *\n * The 'topic_count_text_callback' argument is a function, which, given the count\n * of the posts with that tag, returns a text for the tooltip of the tag link.\n *\n * The 'exclude' and 'include' arguments are used for the {@link get_tags()}\n * function. Only one should be used, because only one will be used and the\n * other ignored, if they are both set.\n *\n * @since 2.3.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument.\n *\/","file":"category-template.php","line":521,"missingDoc":false,"filters":["'wp_tag_cloud'"],"uses":{"wp_parse_args":[527],"get_terms":[529],"array_merge":[529],"is_wp_error":[531,539],"get_edit_tag_link":[536],"get_term_link":[538],"intval":[538],"wp_generate_tag_cloud":[546]},"used_by":{"WP_Widget_Tag_Cloud::widget":[1053]}},"get_edit_tag_link":{"doc":"\/**\n * Retrieve edit tag link.\n *\n * @since 2.7.0\n *\n * @param int $tag_id Tag ID\n * @param string $taxonomy Taxonomy\n * @return string\n *\/","file":"link-template.php","line":653,"missingDoc":false,"filters":["'get_edit_tag_link'"],"uses":{"get_edit_term_link":[654]},"used_by":{"wp_tag_cloud":[536]}},"wp_generate_tag_cloud":{"doc":"\/**\n * Generates a tag cloud (heatmap) from provided data.\n *\n * The text size is set by the 'smallest' and 'largest' arguments, which will\n * use the 'unit' argument value for the CSS text size unit. The 'format'\n * argument can be 'flat' (default), 'list', or 'array'. The flat value for the\n * 'format' argument will separate tags with spaces. The list value for the\n * 'format' argument will format the tags in a UL HTML list. The array value for\n * the 'format' argument will return in PHP array type format.\n *\n * The 'tag_cloud_sort' filter allows you to override the sorting.\n * Passed to the filter: $tags array and $args array, has to return the $tags array\n * after sorting it.\n *\n * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.\n * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or\n * 'RAND'.\n *\n * The 'number' argument is how many tags to return. By default, the limit will\n * be to return the entire tag cloud list.\n *\n * The 'topic_count_text_callback' argument is a function, which given the count\n * of the posts with that tag returns a text for the tooltip of the tag link.\n *\n * @todo Complete functionality.\n * @since 2.3.0\n *\n * @param array $tags List of tags.\n * @param string|array $args Optional, override default arguments.\n * @return string\n *\/","file":"category-template.php","line":607,"missingDoc":false,"filters":["'tag_cloud_sort'","'wp_generate_tag_cloud'"],"uses":{"var_export":[617,617],"create_function":[619],"wp_parse_args":[622],"extract":[623],"shuffle":[634],"uasort":[638,640],"array_reverse":[643],"array_slice":[648],"min":[657],"max":[658],"esc_url":[671],"esc_attr":[674],"call_user_func":[674],"str_replace":[675],"join":[685,689]},"used_by":{"wp_tag_cloud":[546]}},"default_topic_count_text":{"doc":"\/**\n * Default text for tooltip for tag links\n *\n * @param integer $count number of posts with that tag\n * @return string text for the tooltip of a tag link.\n *\/","file":"category-template.php","line":562,"missingDoc":false,"filters":[],"uses":{"sprintf":[563],"_n":[563],"number_format_i18n":[563]},"used_by":[]},"default_topic_count_scale":{"doc":"\/**\n * Default topic count scaling for tag links\n *\n * @param integer $count number of posts with that tag\n * @return integer scaled count\n *\/","file":"category-template.php","line":572,"missingDoc":false,"filters":[],"uses":{"round":[573],"log10":[573]},"used_by":[]},"_wp_object_name_sort_cb":{"doc":"\/**\n * Callback for comparing objects based on name\n *\n * @since 3.1.0\n * @access private\n *\/","file":"category-template.php","line":705,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[706]},"used_by":[]},"_wp_object_count_sort_cb":{"doc":"\/**\n * Callback for comparing objects based on count\n *\n * @since 3.1.0\n * @access private\n *\/","file":"category-template.php","line":715,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Category::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of category. Used for tab indentation.\n * @param array $args Will only append content if style argument value is 'list'.\n *\/","file":"category-template.php","line":790,"missingDoc":false,"filters":[],"uses":{"str_repeat":[794]},"used_by":[]},"Walker_Category::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of category. Used for tab indentation.\n * @param array $args Will only append content if style argument value is 'list'.\n *\/","file":"category-template.php","line":806,"missingDoc":false,"filters":[],"uses":{"str_repeat":[810]},"used_by":[]},"Walker_Category::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $category Category data object.\n * @param int $depth Depth of category in reference to parents.\n * @param array $args\n *\/","file":"category-template.php","line":823,"missingDoc":false,"filters":["'list_cats'","'category_description'"],"uses":{"extract":[824],"esc_attr":[826,830,832],"esc_url":[828,842],"get_term_link":[828],"sprintf":[830,845],"__":[830,845],"strip_tags":[832],"get_term_feed_link":[842],"intval":[867],"get_term":[873]},"used_by":[]},"get_term_feed_link":{"doc":"\/**\n * Retrieve the feed link for a term.\n *\n * Returns a link to the feed for all posts in a given term. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @since 3.0\n *\n * @param int $term_id ID of a category.\n * @param string $taxonomy Optional. Taxonomy of $term_id\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the term specified by $term_id and $taxonomy.\n*\/","file":"link-template.php","line":588,"missingDoc":false,"filters":["'category_feed_link'","'tag_feed_link'","'taxonomy_feed_link'"],"uses":{"get_term":[591],"is_wp_error":[593],"get_default_feed":[597,613],"get_option":[599],"home_url":[603,606,609],"get_taxonomy":[608],"get_term_link":[612],"trailingslashit":[618],"user_trailingslashit":[618]},"used_by":{"Walker_Category::start_el":[842],"get_category_feed_link":[572],"get_tag_feed_link":[641]}},"get_term":{"doc":"\/**\n * Get all Term data from database by Term ID.\n *\n * The usage of the get_term function is to apply filters to a term object. It\n * is possible to get a term object from the database before applying the\n * filters.\n *\n * $term ID must be part of $taxonomy, to get from the database. Failure, might\n * be able to be captured by the hooks. Failure would be the same value as $wpdb\n * returns for the get_row method.\n *\n * There are two hooks, one is specifically for each term, named 'get_term', and\n * the second is for the taxonomy name, 'term_$taxonomy'. Both hooks gets the\n * term object, and the taxonomy name as parameters. Both hooks are expected to\n * return a Term object.\n *\n * 'get_term' hook - Takes two parameters the term Object and the taxonomy name.\n * Must return term object. Used in get_term() as a catch-all filter for every\n * $term.\n *\n * 'get_$taxonomy' hook - Takes two parameters the term Object and the taxonomy\n * name. Must return term object. $taxonomy will be the taxonomy name, so for\n * example, if 'category', it would be 'get_category' as the filter name. Useful\n * for custom taxonomies or plugging into default taxonomies.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses sanitize_term() Cleanses the term based on $filter context before returning.\n * @see sanitize_term_field() The $context param lists the available values for get_term_by() $filter param.\n *\n * @param int|object $term If integer, will get from database. If object will apply filters and return $term.\n * @param string $taxonomy Taxonomy name that $term is part of.\n * @param string $output Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional, default is raw or no WordPress defined filter will applied.\n * @return mixed|null|WP_Error Term Row from database. Will return null if $term is empty. If taxonomy does not\n * exist then WP_Error will be returned.\n *\/","file":"taxonomy.php","line":870,"missingDoc":false,"filters":["'get_term'","\"get_{$taxonomy}\""],"uses":{"__":[875,880],"taxonomy_exists":[879],"wp_cache_add":[885,896],"is_object":[888,884],"get_row":[893],"prepare":[893],"wp_cache_get":[892],"sanitize_term":[902],"get_object_vars":[907,910],"array_values":[910]},"used_by":{"Walker_Category::start_el":[873],"get_category":[82],"get_category_by_path":[130],"get_tag":[284],"wp_xmlrpc_server::wp_newTerm":[1566],"wp_xmlrpc_server::wp_editTerm":[1645,1665],"wp_xmlrpc_server::wp_deleteTerm":[1732],"wp_xmlrpc_server::wp_getTerm":[1799],"get_permalink":[126],"get_term_feed_link":[591],"get_edit_term_link":[688],"wp_get_nav_menu_object":[25],"WP_Query::get_queried_object":[3000],"SimplePie_Category::get_label":[153],"get_term_by":[960],"get_term_field":[1049],"get_term_to_edit":[1079],"term_is_ancestor_of":[1544,1546,1553],"wp_delete_term":[1794,1826],"wp_unique_term_slug":[2282],"wp_update_term":[2358],"_get_term_children":[2811],"get_term_link":[2995,3027],"get_ancestors":[3234,3237],"wp_get_term_taxonomy_parent_id":[3257]}},"Walker_Category::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Not used.\n * @param int $depth Depth of category. Not used.\n * @param array $args Only uses 'list' for whether should append to output.\n *\/","file":"category-template.php","line":895,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_CategoryDropdown::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $category Category data object.\n * @param int $depth Depth of category. Used for padding.\n * @param array $args Uses 'selected' and 'show_count' keys, if they exist.\n *\/","file":"category-template.php","line":936,"missingDoc":false,"filters":["'list_cats'"],"uses":{"str_repeat":[937]},"used_by":[]},"get_tag_link":{"doc":"\/**\n * Retrieve the link to the tag.\n *\n * @since 2.3.0\n * @see get_term_link()\n *\n * @param int|object $tag Tag ID or object.\n * @return string Link on success, empty string if tag does not exist.\n *\/","file":"category-template.php","line":964,"missingDoc":false,"filters":[],"uses":{"is_object":[965],"get_term_link":[968],"is_wp_error":[970]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2564]}},"get_the_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'get_the_tags' filter on the list of post tags.\n *\n * @param int $id Post ID.\n * @return array\n *\/","file":"category-template.php","line":985,"missingDoc":false,"filters":["'get_the_tags'"],"uses":{"get_the_terms":[986]},"used_by":{"get_the_category_rss":[305],"get_post_class":[362]}},"get_the_tag_list":{"doc":"\/**\n * Retrieve the tags for a post formatted as a string.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'the_tags' filter on string list of tags.\n *\n * @param string $before Optional. Before tags.\n * @param string $sep Optional. Between tags.\n * @param string $after Optional. After tags.\n * @param int $id Optional. Post ID. Defaults to the current post.\n * @return string\n *\/","file":"category-template.php","line":1001,"missingDoc":false,"filters":["'the_tags'"],"uses":{"get_the_term_list":[1002]},"used_by":{"the_tags":[1018]}},"get_the_term_list":{"doc":"\/**\n * Retrieve a post's terms as a list with specified format.\n *\n * @since 2.5.0\n *\n * @param int $id Post ID.\n * @param string $taxonomy Taxonomy name.\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return string\n *\/","file":"category-template.php","line":1091,"missingDoc":false,"filters":["\"term_links-{$taxonomy}\""],"uses":{"get_the_terms":[1092],"is_wp_error":[1094,1102],"get_term_link":[1101],"esc_url":[1104],"join":[1109]},"used_by":{"get_the_tag_list":[1002],"the_terms":[1125]}},"the_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * @since 2.3.0\n *\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return string\n *\/","file":"category-template.php","line":1015,"missingDoc":false,"filters":[],"uses":{"__":[1017],"get_the_tag_list":[1018]},"used_by":[]},"tag_description":{"doc":"\/**\n * Retrieve tag description.\n *\n * @since 2.8\n *\n * @param int $tag Optional. Tag ID. Will use global tag ID by default.\n * @return string Tag description, available.\n *\/","file":"category-template.php","line":1029,"missingDoc":false,"filters":[],"uses":{"term_description":[1030]},"used_by":[]},"get_term_field":{"doc":"\/**\n * Get sanitized Term field.\n *\n * Does checks for $term, based on the $taxonomy. The function is for contextual\n * reasons and for simplicity of usage. See sanitize_term_field() for more\n * information.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term_field() Passes the return value in sanitize_term_field on success.\n *\n * @param string $field Term field to fetch\n * @param int $term Term ID\n * @param string $taxonomy Taxonomy Name\n * @param string $context Optional, default is display. Look at sanitize_term_field() for available options.\n * @return mixed Will return an empty string if $term is not an object or if $field is not set in $term.\n *\/","file":"taxonomy.php","line":1047,"missingDoc":false,"filters":[],"uses":{"get_term":[1049],"is_wp_error":[1050],"is_object":[1053],"sanitize_term_field":[1059]},"used_by":{"term_description":[1048],"wp_update_nav_menu_item":[321,322],"wp_setup_nav_menu_item":[606,661]}},"get_object_term_cache":{"doc":"\/**\n * Retrieves the taxonomy relationship to the term object id.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses wp_cache_get() Retrieves taxonomy relationship from cache\n *\n * @param int|array $id Term object ID\n * @param string $taxonomy Taxonomy Name\n * @return bool|array Empty array if $terms found, but not $taxonomy. False if nothing is in cache for $taxonomy and $id.\n *\/","file":"taxonomy.php","line":2651,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[2652]},"used_by":{"get_the_terms":[1065],"get_the_taxonomies":[3115],"is_object_in_term":[3165]}},"the_terms":{"doc":"\/**\n * Display the terms in a list.\n *\n * @since 2.5.0\n *\n * @param int $id Post ID.\n * @param string $taxonomy Taxonomy name.\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return null|bool False on WordPress error. Returns null when displaying.\n *\/","file":"category-template.php","line":1124,"missingDoc":false,"filters":["'the_terms'"],"uses":{"get_the_term_list":[1125],"is_wp_error":[1127]},"used_by":[]},"has_category":{"doc":"\/**\n * Check if the current post has any of given category.\n *\n * @since 3.1.0\n *\n * @param string|int|array $category Optional. The category name\/term_id\/slug or array of them to check for.\n * @param int|object $post Optional. Post to check instead of the current post.\n * @return bool True if the current post has any of the given categories (or any category, if no category specified).\n *\/","file":"category-template.php","line":1142,"missingDoc":false,"filters":[],"uses":{"has_term":[1143]},"used_by":[]},"has_tag":{"doc":"\/**\n * Check if the current post has any of given tags.\n *\n * The given tags are checked against the post's tags' term_ids, names and slugs.\n * Tags given as integers will only be checked against the post's tags' term_ids.\n * If no tags are given, determines if post has any tags.\n *\n * Prior to v2.7 of WordPress, tags given as integers would also be checked against the post's tags' names and slugs (in addition to term_ids)\n * Prior to v2.7, this function could only be used in the WordPress Loop.\n * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.\n *\n * @since 2.6.0\n *\n * @param string|int|array $tag Optional. The tag name\/term_id\/slug or array of them to check for.\n * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)\n * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).\n *\/","file":"category-template.php","line":1163,"missingDoc":false,"filters":[],"uses":{"has_term":[1164]},"used_by":[]},"is_object_in_term":{"doc":"\/**\n * Determine if the given object is associated with any of the given terms.\n *\n * The given terms are checked against the object's terms' term_ids, names and slugs.\n * Terms given as integers will only be checked against the object's terms' term_ids.\n * If no terms are given, determines if object is associated with any terms in the given taxonomy.\n *\n * @since 2.7.0\n * @uses get_object_term_cache()\n * @uses wp_get_object_terms()\n *\n * @param int $object_id ID of the object (post ID, link ID, ...)\n * @param string $taxonomy Single taxonomy name\n * @param int|string|array $terms Optional. Term term_id, name, slug or array of said\n * @return bool|WP_Error. WP_Error on input error.\n *\/","file":"taxonomy.php","line":3161,"missingDoc":false,"filters":[],"uses":{"__":[3163],"get_object_term_cache":[3165],"wp_get_object_terms":[3167],"is_wp_error":[3169],"array_diff":[3179],"array_filter":[3178],"in_array":[3184,3186,3187,3188]},"used_by":{"has_term":[1187],"wp_update_nav_menu_item":[353]}},"get_all_category_ids":{"doc":"\/**\n * Retrieves all category IDs.\n *\n * @since 2.0.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_all_category_ids\n *\n * @return object List of all of the category IDs.\n *\/","file":"category.php","line":16,"missingDoc":false,"filters":[],"uses":{"get_terms":[18],"wp_cache_add":[19],"wp_cache_get":[17]},"used_by":{"get_category_children":[1304]}},"sanitize_title":{"doc":"\/**\n * Sanitizes title or use fallback title.\n *\n * Specifically, HTML and PHP tags are stripped. Further actions can be added\n * via the plugin API. If $title is empty and $fallback_title is set, the latter\n * will be used.\n *\n * @since 1.0.0\n *\n * @param string $title The string to be sanitized.\n * @param string $fallback_title Optional. A title to use if $title is empty.\n * @param string $context Optional. The operation for which the string is sanitized\n * @return string The sanitized string.\n *\/","file":"formatting.php","line":936,"missingDoc":false,"filters":["'sanitize_title'"],"uses":{"remove_accents":[940]},"used_by":{"get_category_by_path":[115,119],"WP_Admin_Bar::add_node":[98],"register_sidebar_widget":[2177],"register_widget_control":[2234],"sanitize_title_for_query":[951],"permalink_anchor":[61],"wp_insert_post":[2774,2779,2783,2899],"wp_insert_attachment":[3953,3955,4020],"get_term_by":[952],"get_terms":[1331],"term_exists":[1499],"wp_insert_term":[2069,2120],"wp_update_term":[2384,2417],"wp_insert_user":[1316],"dynamic_sidebar":[858,860],"is_active_sidebar":[985]}},"get_category_by_slug":{"doc":"\/**\n * Retrieve category object by category slug.\n *\n * @since 2.3.0\n *\n * @param string $slug The category slug.\n * @return object Category data object\n *\/","file":"category.php","line":155,"missingDoc":false,"filters":[],"uses":{"get_term_by":[156],"_make_cat_compat":[158]},"used_by":[]},"get_cat_ID":{"doc":"\/**\n * Retrieve the ID of a category from its name.\n *\n * @since 1.0.0\n *\n * @param string $cat_name Category name.\n * @return int 0, if failure and ID of category on success.\n *\/","file":"category.php","line":171,"missingDoc":false,"filters":[],"uses":{"get_term_by":[172]},"used_by":{"wp_xmlrpc_server::mw_newPost":[4253],"wp_xmlrpc_server::mw_editPost":[4506]}},"get_cat_name":{"doc":"\/**\n * Retrieve the name of a category from its ID.\n *\n * @since 1.0.0\n *\n * @param int $cat_id Category ID\n * @return string Category name, or an empty string if category doesn't exist.\n *\/","file":"category.php","line":186,"missingDoc":false,"filters":[],"uses":{"get_category":[188],"is_wp_error":[189]},"used_by":{"wp_xmlrpc_server::_prepare_page":[801],"wp_xmlrpc_server::mw_getPost":[4650],"wp_xmlrpc_server::mw_getRecentPosts":[4780],"wp_xmlrpc_server::mt_getPostCategories":[5122],"get_catname":[1280]}},"cat_is_ancestor_of":{"doc":"\/**\n * Check if a category is an ancestor of another category.\n *\n * You can use either an id or the category object for both parameters. If you\n * use an integer the category will be retrieved.\n *\n * @since 2.1.0\n *\n * @param int|object $cat1 ID or object to check if this is the parent category.\n * @param int|object $cat2 The child category.\n * @return bool Whether $cat2 is child of $cat1\n *\/","file":"category.php","line":206,"missingDoc":false,"filters":[],"uses":{"term_is_ancestor_of":[207]},"used_by":[]},"term_is_ancestor_of":{"doc":"\/**\n * Check if a term is an ancestor of another term.\n *\n * You can use either an id or the term object for both parameters.\n *\n * @since 3.4.0\n *\n * @param int|object $term1 ID or object to check if this is the parent term.\n * @param int|object $term2 The child term.\n * @param string $taxonomy Taxonomy name that $term1 and $term2 belong to.\n * @return bool Whether $term2 is child of $term1\n *\/","file":"taxonomy.php","line":1542,"missingDoc":false,"filters":[],"uses":{"get_term":[1544,1546,1553],"term_is_ancestor_of":[1553]},"used_by":{"cat_is_ancestor_of":[207],"term_is_ancestor_of":[1553]}},"sanitize_category":{"doc":"\/**\n * Sanitizes category data based on context.\n *\n * @since 2.3.0\n * @uses sanitize_term() See this function for what context are supported.\n *\n * @param object|array $category Category data\n * @param string $context Optional. Default is 'display'.\n * @return object|array Same type as $category with sanitized data for safe use.\n *\/","file":"category.php","line":220,"missingDoc":false,"filters":[],"uses":{"sanitize_term":[221]},"used_by":[]},"sanitize_term":{"doc":"\/**\n * Sanitize Term all fields.\n *\n * Relies on sanitize_term_field() to sanitize the term. The difference is that\n * this function will sanitize <strong>all<\/strong> fields. The context is based\n * on sanitize_term_field().\n *\n * The $term is expected to be either an array or an object.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term_field Used to sanitize all fields in a term\n *\n * @param array|object $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param string $context Default is 'display'.\n * @return array|object Term with all fields sanitized\n *\/","file":"taxonomy.php","line":1576,"missingDoc":false,"filters":[],"uses":{"is_object":[1584],"sanitize_term_field":[1592,1595]},"used_by":{"sanitize_category":[221],"get_term":[902],"get_term_by":[974],"get_term_to_edit":[1087],"wp_insert_term":[2061],"wp_update_term":[2371]}},"sanitize_category_field":{"doc":"\/**\n * Sanitizes data in single category key field.\n *\n * @since 2.3.0\n * @uses sanitize_term_field() See function for more details.\n *\n * @param string $field Category key to sanitize\n * @param mixed $value Category value to sanitize\n * @param int $cat_id Category ID\n * @param string $context What filter to use, 'raw', 'display', etc.\n * @return mixed Same type as $value after $value has been sanitized.\n *\/","file":"category.php","line":236,"missingDoc":false,"filters":[],"uses":{"sanitize_term_field":[237]},"used_by":[]},"sanitize_term_field":{"doc":"\/**\n * Cleanse the field value in the term based on the context.\n *\n * Passing a term field value through the function should be assumed to have\n * cleansed the value for whatever context the term field is going to be used.\n *\n * If no context or an unsupported context is given, then default filters will\n * be applied.\n *\n * There are enough filters for each context to support a custom filtering\n * without creating your own filter function. Simply create a function that\n * hooks into the filter you need.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n *\n * @param string $field Term field to sanitize\n * @param string $value Search for this term value\n * @param int $term_id Term ID\n * @param string $taxonomy Taxonomy Name\n * @param string $context Either edit, db, display, attribute, or js.\n * @return mixed sanitized field\n *\/","file":"taxonomy.php","line":1633,"missingDoc":false,"filters":["\"edit_term_{$field}\"","\"edit_{$taxonomy}_{$field}\"","\"pre_term_{$field}\"","\"pre_{$taxonomy}_{$field}\"","'pre_category_nicename'","\"term_{$field}_rss\"","\"{$taxonomy}_{$field}_rss\"","\"term_{$field}\"","\"{$taxonomy}_{$field}\""],"uses":{"esc_html":[1647],"esc_attr":[1649,1667],"esc_js":[1669]},"used_by":{"sanitize_category_field":[237],"get_the_category_rss":[314,318],"WP_Query::parse_tax_query":[1792,1798,1802],"get_term_field":[1059],"sanitize_term":[1592,1595]}},"get_tags":{"doc":"\/**\n * Retrieves all post tags.\n *\n * @since 2.3.0\n * @see get_terms() For list of arguments to pass.\n * @uses apply_filters() Calls 'get_tags' hook on array of tags and with $args.\n *\n * @param string|array $args Tag arguments to use when retrieving tags.\n * @return array List of tags.\n *\/","file":"category.php","line":252,"missingDoc":false,"filters":["'get_tags'"],"uses":{"get_terms":[253]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2558]}},"get_tag":{"doc":"\/**\n * Retrieve post tag by tag ID or tag object.\n *\n * If you pass the $tag parameter an object, which is assumed to be the tag row\n * object retrieved the database. It will cache the tag data.\n *\n * If you pass $tag an integer of the tag ID, then that tag will\n * be retrieved from the database, if it isn't already cached, and pass it back.\n *\n * If you look at get_term(), then both types will be passed through several\n * filters and finally sanitized based on the $filter parameter value.\n *\n * @since 2.3.0\n *\n * @param int|object $tag\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional. Default is raw or no WordPress defined filter will applied.\n * @return object|array Return type based on $output value.\n *\/","file":"category.php","line":283,"missingDoc":false,"filters":[],"uses":{"get_term":[284]},"used_by":[]},"clean_category_cache":{"doc":"\/**\n * Remove the category cache data based on ID.\n *\n * @since 2.1.0\n * @uses clean_term_cache() Clears the cache for the category based on ID\n *\n * @param int $id Category ID\n *\/","file":"category.php","line":297,"missingDoc":false,"filters":[],"uses":{"clean_term_cache":[298]},"used_by":[]},"clean_term_cache":{"doc":"\/**\n * Will remove all of the term ids from the cache.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $ids Single or list of Term IDs\n * @param string $taxonomy Can be empty and will assume tt_ids, else will use for context.\n * @param bool $clean_taxonomy Whether to clean taxonomy wide caches (true), or just individual term object caches (false). Default is true.\n *\/","file":"taxonomy.php","line":2590,"missingDoc":false,"filters":["'clean_term_cache'"],"uses":{"is_array":[2594],"array_map":[2600],"implode":[2601],"get_results":[2602],"wp_cache_delete":[2607,2614,2625,2626],"array_unique":[2609],"delete_option":[2627],"_get_term_hierarchy":[2629],"wp_cache_set":[2635],"time":[2635]},"used_by":{"clean_category_cache":[298],"global_terms":[1576],"wp_delete_term":[1836],"wp_insert_term":[2139],"wp_update_term":[2432],"wp_update_term_count_now":[2538]}},"WP_Feed_Cache::create":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @static\n * @access public\n *\/","file":"class-feed.php","line":13,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Feed_Cache_Transient::__construct":{"doc":"","file":"class-feed.php","line":23,"missingDoc":true,"filters":["'wp_feed_cache_transient_lifetime'"],"uses":[],"used_by":[]},"WP_Feed_Cache_Transient::save":{"doc":"","file":"class-feed.php","line":29,"missingDoc":true,"filters":[],"uses":{"is_a":[30],"set_transient":[33,34],"time":[34]},"used_by":[]},"set_transient":{"doc":"\/**\n * Set\/update the value of a transient.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is set.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the\n * \ttransient value to be stored.\n * @uses do_action() Calls 'set_transient_$transient' and 'setted_transient' hooks on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @param mixed $value Transient value. Expected to not be SQL-escaped.\n * @param int $expiration Time until expiration in seconds, default 0\n * @return bool False if value was not set and true if value was set.\n *\/","file":"option.php","line":491,"missingDoc":false,"filters":["'pre_set_transient_' . $transient","'set_transient_' . $transient","'setted_transient'"],"uses":{"wp_cache_set":[497],"add_option":[505,507],"time":[505,510],"update_option":[510,511],"get_option":[501]},"used_by":{"WP_Feed_Cache_Transient::save":[33,34],"WP_Feed_Cache_Transient::touch":[47],"spawn_cron":[230,245],"get_dirsize":[1421],"wp_rand":[1532],"RSSCache::set":[728]}},"WP_Feed_Cache_Transient::load":{"doc":"","file":"class-feed.php","line":38,"missingDoc":true,"filters":[],"uses":{"get_transient":[39]},"used_by":[]},"get_transient":{"doc":"\/**\n * Get the value of a transient.\n *\n * If the transient does not exist or does not have a value, then the return value\n * will be false.\n *\n * @uses apply_filters() Calls 'pre_transient_$transient' hook before checking the transient.\n * \tAny value other than false will \"short-circuit\" the retrieval of the transient\n *\tand return the returned value.\n * @uses apply_filters() Calls 'transient_$option' hook, after checking the transient, with\n * \tthe transient value.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped\n * @return mixed Value of transient\n *\/","file":"option.php","line":442,"missingDoc":false,"filters":["'pre_transient_' . $transient","'transient_' . $transient"],"uses":{"wp_cache_get":[450],"wp_load_alloptions":[455],"delete_option":[459,460],"get_option":[458,466],"time":[458],"defined":[453]},"used_by":{"WP_Feed_Cache_Transient::load":[39],"WP_Feed_Cache_Transient::mtime":[43],"spawn_cron":[207],"get_dirsize":[1412],"wp_rand":[1526],"RSSCache::get":[743],"RSSCache::check_cache":[764]}},"WP_Feed_Cache_Transient::mtime":{"doc":"","file":"class-feed.php","line":42,"missingDoc":true,"filters":[],"uses":{"get_transient":[43]},"used_by":[]},"WP_Feed_Cache_Transient::touch":{"doc":"","file":"class-feed.php","line":46,"missingDoc":true,"filters":[],"uses":{"set_transient":[47],"time":[47]},"used_by":[]},"WP_Feed_Cache_Transient::unlink":{"doc":"","file":"class-feed.php","line":50,"missingDoc":true,"filters":[],"uses":{"delete_transient":[51,52]},"used_by":[]},"delete_transient":{"doc":"\/**\n * Delete a transient.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses do_action() Calls 'delete_transient_$transient' hook before transient is deleted.\n * @uses do_action() Calls 'deleted_transient' hook on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return bool true if successful, false otherwise\n *\/","file":"option.php","line":403,"missingDoc":false,"filters":["'delete_transient_' . $transient","'deleted_transient'"],"uses":{"wp_cache_delete":[409],"delete_option":[413,415]},"used_by":{"WP_Feed_Cache_Transient::unlink":[51,52],"wp_delete_attachment":[4102]}},"WP_SimplePie_File::__construct":{"doc":"","file":"class-feed.php","line":59,"missingDoc":true,"filters":[],"uses":{"wp_remote_request":[77],"get_error_message":[80],"wp_remote_retrieve_headers":[83],"wp_remote_retrieve_body":[84],"wp_remote_retrieve_response_code":[85],"is_wp_error":[79],"file_exists":[88],"file_get_contents":[88],"preg_match":[68]},"used_by":[]},"wp_remote_request":{"doc":"\/**\n * Retrieve the raw response from the HTTP request.\n *\n * The array structure is a little complex.\n *\n * <code>\n * $res = array( 'headers' => array(), 'response' => array('code' => int, 'message' => string) );\n * <\/code>\n *\n * All of the headers in $res['headers'] are with the name as the key and the\n * value as the value. So to get the User-Agent, you would do the following.\n *\n * <code>\n * $user_agent = $res['headers']['user-agent'];\n * <\/code>\n *\n * The body is the raw response content and can be retrieved from $res['body'].\n *\n * This function is called first to make the request and there are other API\n * functions to abstract out the above convoluted setup.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":58,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[59],"request":[60]},"used_by":{"WP_SimplePie_File::__construct":[77],"wp_get_http":[505],"_fetch_remote_file":[539]}},"wp_remote_retrieve_headers":{"doc":"\/**\n * Retrieve only the headers from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return array The headers of the response. Empty array if incorrect parameter given.\n *\/","file":"http.php","line":119,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[120],"is_array":[120]},"used_by":{"WP_SimplePie_File::__construct":[83],"wp_get_http":[510],"wp_get_http_headers":[551],"_fetch_remote_file":[553]}},"wp_remote_retrieve_body":{"doc":"\/**\n * Retrieve only the body from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string The body of the response. Empty string if no body or incorrect parameter given.\n *\/","file":"http.php","line":187,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[188]},"used_by":{"WP_SimplePie_File::__construct":[84],"WP_oEmbed::discover":[111],"WP_oEmbed::_fetch_with_format":[196],"WP_HTTP_IXR_Client::query":[73,76],"discover_pingback_server_uri":[1682],"wp_get_http":[526],"wp_remote_fopen":[767],"_fetch_remote_file":[566],"wp_version_check":[94],"wp_update_plugins":[210],"wp_update_themes":[319]}},"wp_remote_retrieve_response_code":{"doc":"\/**\n * Retrieve only the response code from the raw response.\n *\n * Will return an empty array if incorrect parameter value is given.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string the response code. Empty string on incorrect parameter given.\n *\/","file":"http.php","line":155,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[156],"is_array":[156]},"used_by":{"WP_SimplePie_File::__construct":[85],"WP_oEmbed::_fetch_with_format":[194],"WP_HTTP_IXR_Client::query":[68,67],"wp_get_http":[511],"_fetch_remote_file":[563,564],"wp_version_check":[91],"wp_update_plugins":[207],"wp_update_themes":[312]}},"WP_SimplePie_Sanitize_KSES::sanitize":{"doc":"","file":"class-feed.php","line":106,"missingDoc":true,"filters":[],"uses":{"trim":[107],"preg_match":[109],"base64_decode":[117],"wp_kses_post":[120],"call":[122]},"used_by":[]},"wp_kses_post":{"doc":"\/**\n * Sanitize content for allowed HTML tags for post content.\n *\n * Post content refers to the page contents of the 'post' type and not $_POST\n * data from forms.\n *\n * @since 2.9.0\n *\n * @param string $data Post content to filter\n * @return string Filtered post content with allowed HTML tags and attributes intact.\n *\/","file":"kses.php","line":1299,"missingDoc":false,"filters":[],"uses":{"wp_kses":[1300]},"used_by":{"WP_SimplePie_Sanitize_KSES::sanitize":[120],"sanitize_option":[2809]}},"WP_Http::request":{"doc":"\/**\n * Send a HTTP request to a URI.\n *\n * The body and headers are part of the arguments. The 'body' argument is for the body and will\n * accept either a string or an array. The 'headers' argument should be an array, but a string\n * is acceptable. If the 'body' argument is an array, then it will automatically be escaped\n * using http_build_query().\n *\n * The only URI that are supported in the HTTP Transport implementation are the HTTP and HTTPS\n * protocols. HTTP and HTTPS are assumed so the server might not know how to handle the send\n * headers. Other protocols are unsupported and most likely will fail.\n *\n * The defaults are 'method', 'timeout', 'redirection', 'httpversion', 'blocking' and\n * 'user-agent'.\n *\n * Accepted 'method' values are 'GET', 'POST', and 'HEAD', some transports technically allow\n * others, but should not be assumed. The 'timeout' is used to sent how long the connection\n * should stay open before failing when no response. 'redirection' is used to track how many\n * redirects were taken and used to sent the amount for other transports, but not all transports\n * accept setting that value.\n *\n * The 'httpversion' option is used to sent the HTTP version and accepted values are '1.0', and\n * '1.1' and should be a string. Version 1.1 is not supported, because of chunk response. The\n * 'user-agent' option is the user-agent and is used to replace the default user-agent, which is\n * 'WordPress\/WP_Version', where WP_Version is the value from $wp_version.\n *\n * 'blocking' is the default, which is used to tell the transport, whether it should halt PHP\n * while it performs the request or continue regardless. Actually, that isn't entirely correct.\n * Blocking mode really just means whether the fread should just pull what it can whenever it\n * gets bytes or if it should wait until it has enough in the buffer to read or finishes reading\n * the entire content. It doesn't actually always mean that PHP will continue going after making\n * the request.\n *\n * @access public\n * @since 2.7.0\n * @todo Refactor this code. The code in this method extends the scope of its original purpose\n *\t\tand should be refactored to allow for cleaner abstraction and reduce duplication of the\n *\t\tcode. One suggestion is to create a class specifically for the arguments, however\n *\t\tpreliminary refactoring to this affect has affect more than just the scope of the\n *\t\targuments. Something to ponder at least.\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":81,"missingDoc":false,"filters":["'http_request_timeout'","'http_request_redirection_count'","'http_request_version'","'http_headers_useragent'","'http_request_args'","'pre_http_request'"],"uses":{"get_bloginfo":[89,132],"wp_parse_args":[102,108],"parse_url":[119,132],"__":[122,125,145],"block_request":[124],"get_temp_dir":[139],"basename":[139],"wp_is_writable":[144],"dirname":[144],"is_null":[148,172],"is_array":[151,173],"http_build_query":[174],"get_option":[177],"is_object":[173],"strlen":[184],"_dispatch_request":[187]},"used_by":[]},"get_temp_dir":{"doc":"\/**\n * Determines a writable directory for temporary files.\n * Function's preference is the return value of <code>sys_get_temp_dir()<\/code>,\n * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR,\n * before finally defaulting to \/tmp\/\n *\n * In the event that this function does not find a writable location,\n * It may be overridden by the <code>WP_TEMP_DIR<\/code> constant in\n * your <code>wp-config.php<\/code> file.\n *\n * @since 2.5.0\n *\n * @return string Writable temporary directory\n *\/","file":"functions.php","line":1411,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[1414,1417,1422,1427],"defined":[1413],"rtrim":[1417,1422,1427],"sys_get_temp_dir":[1420],"is_dir":[1421,1426,1430],"wp_is_writable":[1421,1426,1430],"function_exists":[1419],"ini_get":[1425]},"used_by":{"WP_Http::request":[139]}},"wp_is_writable":{"doc":"\/**\n * Determine if a directory is writable.\n *\n * This function is used to work around certain ACL issues \n * in PHP primarily affecting Windows Servers.\n *\n * @see win_is_writable()\n *\n * @since 3.6.0\n *\n * @param string $path\n * @return bool\n *\/","file":"functions.php","line":1450,"missingDoc":false,"filters":[],"uses":{"win_is_writable":[1452],"is_writable":[1454],"strtoupper":[1451],"substr":[1451]},"used_by":{"WP_Http::request":[144],"get_temp_dir":[1421,1426,1430]}},"WP_Http::_get_first_available_transport":{"doc":"\/**\n * Tests which transports are capable of supporting the request.\n *\n * @since 3.2.0\n * @access private\n *\n * @param array $args Request arguments\n * @param string $url URL to Request\n *\n * @return string|bool Class name for the first transport that claims to support the request. False if no transport claims to support the request.\n *\/","file":"class-http.php","line":201,"missingDoc":false,"filters":[],"uses":{"call_user_func":[209]},"used_by":[]},"WP_Http::_dispatch_request":{"doc":"\/**\n * Dispatches a HTTP request to a supporting transport.\n *\n * Tests each transport in order to find a transport which matches the request arguments.\n * Also caches the transport instance to be used later.\n *\n * The order for blocking requests is cURL, Streams, and finally Fsockopen.\n * The order for non-blocking requests is cURL, Streams and Fsockopen().\n *\n * There are currently issues with \"localhost\" not resolving correctly with DNS. This may cause\n * an error \"failed to open stream: A connection attempt failed because the connected party did\n * not properly respond after a period of time, or established connection failed because [the]\n * connected host has failed to respond.\"\n *\n * @since 3.2.0\n * @access private\n *\n * @param string $url URL to Request\n * @param array $args Request arguments\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":239,"missingDoc":false,"filters":["'http_api_debug'","'http_response'"],"uses":{"_get_first_available_transport":[242],"__":[244],"request":[250],"is_wp_error":[254]},"used_by":[]},"WP_Http::post":{"doc":"\/**\n * Uses the POST HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":272,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[274],"request":[275]},"used_by":[]},"WP_Http::get":{"doc":"\/**\n * Uses the GET HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":290,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[292],"request":[293]},"used_by":[]},"WP_Http::head":{"doc":"\/**\n * Uses the HEAD HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":308,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[310],"request":[311]},"used_by":[]},"WP_Http::processResponse":{"doc":"\/**\n * Parses the responses and splits the parts into headers and body.\n *\n * @access public\n * @static\n * @since 2.7.0\n *\n * @param string $strResponse The full response string\n * @return array Array with 'headers' and 'body' keys.\n *\/","file":"class-http.php","line":324,"missingDoc":false,"filters":[],"uses":{"explode":[325]},"used_by":[]},"WP_Http::processHeaders":{"doc":"\/**\n * Transform header string into an array.\n *\n * If an array is given then it is assumed to be raw header data with numeric keys with the\n * headers as the values. No headers must be passed that were already processed.\n *\n * @access public\n * @static\n * @since 2.7.0\n *\n * @param string|array $headers\n * @return array Processed string headers. If duplicate headers are encountered,\n * \t\t\t\t\tThen a numbered array is returned as the value of that header-key.\n *\/","file":"class-http.php","line":344,"missingDoc":false,"filters":[],"uses":{"str_replace":[348],"preg_replace":[350],"explode":[352,373,379],"is_string":[346],"count":[359],"array_splice":[361],"strpos":[360,372],"strtolower":[381],"trim":[382],"is_array":[385]},"used_by":[]},"WP_Http::buildCookieHeader":{"doc":"\/**\n * Takes the arguments for a ::request() and checks for the cookie array.\n *\n * If it's found, then it's assumed to contain WP_Http_Cookie objects, which are each parsed\n * into strings and added to the Cookie: header (within the arguments array). Edits the array by\n * reference.\n *\n * @access public\n * @version 2.8.0\n * @static\n *\n * @param array $r Full array of args passed into ::request()\n *\/","file":"class-http.php","line":411,"missingDoc":false,"filters":[],"uses":{"getHeaderValue":[415],"substr":[417]},"used_by":[]},"WP_Http::chunkTransferDecode":{"doc":"\/**\n * Decodes chunk transfer-encoding, based off the HTTP 1.1 specification.\n *\n * Based off the HTTP http_encoding_dechunk function. Does not support UTF-8. Does not support\n * returning footer headers. Shouldn't be too difficult to support it though.\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc2616#section-19.4.6 Process for chunked decoding.\n *\n * @todo Add support for footer chunked headers.\n * @access public\n * @since 2.7.0\n * @static\n *\n * @param string $body Body content\n * @return string Chunked decoded body on success or raw body on failure.\n *\/","file":"class-http.php","line":438,"missingDoc":false,"filters":[],"uses":{"str_replace":[439,460],"preg_match":[441,448],"trim":[441,462],"hexdec":[454],"strlen":[455],"substr":[457],"ltrim":[460]},"used_by":[]},"WP_Http::block_request":{"doc":"\/**\n * Block requests through the proxy.\n *\n * Those who are behind a proxy and want to prevent access to certain hosts may do so. This will\n * prevent plugins from working and core functionality, if you don't include api.wordpress.org.\n *\n * You block external URL requests by defining WP_HTTP_BLOCK_EXTERNAL as true in your wp-config.php\n * file and this will only allow localhost and your blog to make requests. The constant\n * WP_ACCESSIBLE_HOSTS will allow additional hosts to go through for requests. The format of the\n * WP_ACCESSIBLE_HOSTS constant is a comma separated list of hostnames to allow, wildcard domains\n * are supported, eg *.wordpress.org will allow for all subdomains of wordpress.org to be contacted.\n *\n * @since 2.8.0\n * @link http:\/\/core.trac.wordpress.org\/ticket\/8927 Allow preventing external requests.\n * @link http:\/\/core.trac.wordpress.org\/ticket\/14636 Allow wildcard domains in WP_ACCESSIBLE_HOSTS\n *\n * @param string $uri URI of url.\n * @return bool True to block, false to allow.\n *\/","file":"class-http.php","line":489,"missingDoc":false,"filters":["'block_local_requests'"],"uses":{"defined":[491,514],"parse_url":[496,508],"get_option":[508],"preg_split":[520],"str_replace":[525],"preg_quote":[525],"implode":[526],"strpos":[522],"preg_match":[531],"in_array":[533]},"used_by":[]},"WP_Http::make_absolute_url":{"doc":"","file":"class-http.php","line":537,"missingDoc":true,"filters":[],"uses":{"strpos":[542,571],"parse_url":[545,548],"substr":[565],"strrpos":[565],"preg_replace":[572,576],"ltrim":[583]},"used_by":[]},"WP_Http_Fsockopen::request":{"doc":"\/**\n * Send a HTTP request to a URI using fsockopen().\n *\n * Does not support non-blocking mode.\n *\n * @see WP_Http::request For default options descriptions.\n *\n * @since 2.7\n * @access public\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":611,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[619],"parse_url":[635],"extension_loaded":[642],"strtolower":[653],"error_reporting":[659,773],"time":[661,677],"fsockopen":[667,669,672,674],"host":[667,672],"port":[667,672],"is_enabled":[666,671,692,702],"send_through_proxy":[666,671,692,702],"add_option":[683],"floor":[688],"stream_set_timeout":[690],"strtoupper":[700],"is_array":[710],"authentication_header":[718],"use_authentication":[717],"is_null":[722],"fwrite":[725,747,753],"fclose":[728,760,770],"fopen":[738,740],"sprintf":[742],"__":[742,782],"feof":[744,763],"fread":[745,764],"strpos":[750],"request":[780]},"used_by":[]},"add_option":{"doc":"\/**\n * Add a new option.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * You can create options without values and then update the values later.\n * Existing options will not be updated and checks are performed to ensure that you\n * aren't adding a protected WordPress option. Care should be taken to not name\n * options the same as the ones which are protected.\n *\n * @package WordPress\n * @subpackage Option\n * @since 1.0.0\n *\n * @uses do_action() Calls 'add_option' hook before adding the option.\n * @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success.\n *\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @param mixed $deprecated Optional. Description. Not used anymore.\n * @param bool $autoload Optional. Default is enabled. Whether to load the option when WordPress starts up.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"option.php","line":293,"missingDoc":false,"filters":["'add_option'","\"add_option_{$option}\"","'added_option'"],"uses":{"_deprecated_argument":[297],"trim":[299],"wp_protect_special_option":[303],"is_object":[305],"sanitize_option":[308],"wp_cache_get":[311,331],"get_option":[313],"is_array":[312,332],"maybe_serialize":[317],"wp_load_alloptions":[322],"wp_cache_set":[324,326,334],"defined":[320],"query":[337],"prepare":[337]},"used_by":{"WP_Http_Fsockopen::request":[683],"add_blog_option":[422,425],"wpmu_create_blog":[989],"update_option":[236],"set_transient":[505,507],"add_site_option":[816],"switch_theme":[696]}},"WP_Http_Fsockopen::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @since 2.7.0\n * @static\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":803,"missingDoc":false,"filters":["'use_fsockopen_transport'"],"uses":{"function_exists":[804],"get_option":[807],"time":[807],"extension_loaded":[812]},"used_by":[]},"WP_Http_Streams::request":{"doc":"\/**\n * Send a HTTP request to a URI using streams with fopen().\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":842,"missingDoc":false,"filters":["'https_local_ssl_verify'","'https_ssl_verify'"],"uses":{"wp_parse_args":[850],"parse_url":[863],"sprintf":[866,924,943],"__":[866,924,943,966],"preg_replace":[869],"preg_quote":[869],"is_string":[876],"is_array":[873],"strtoupper":[888],"host":[905],"port":[905],"authentication_header":[910],"use_authentication":[909],"is_enabled":[904],"send_through_proxy":[904],"is_null":[913],"stream_context_create":[916],"fopen":[919,921,938,940],"floor":[926],"stream_set_timeout":[928],"stream_set_blocking":[931],"fclose":[932,947,955],"stream_copy_to_stream":[945],"stream_get_contents":[950],"stream_get_meta_data":[953]},"used_by":[]},"WP_Http_Streams::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @static\n * @access public\n * @since 2.7.0\n *\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":986,"missingDoc":false,"filters":["'use_streams_transport'"],"uses":{"function_exists":[987,990],"ini_get":[990],"extension_loaded":[995]},"used_by":[]},"WP_Http_Curl::request":{"doc":"\/**\n * Send a HTTP request to a URI using cURL extension.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":1032,"missingDoc":false,"filters":["'https_local_ssl_verify'","'https_ssl_verify'","'http_api_curl'"],"uses":{"wp_parse_args":[1040],"curl_init":[1053],"curl_setopt":[1060,1061,1062,1065,1066,1080,1081,1083,1084,1085,1086,1087,1090,1094,1097,1098,1101,1102,1105,1107,1112,1114,1124,1133,1137,1139],"host":[1061],"port":[1062],"authentication":[1066],"use_authentication":[1064],"is_enabled":[1058],"send_through_proxy":[1058],"ceil":[1079],"is_null":[1106],"fopen":[1119,1121],"sprintf":[1123],"__":[1123,1164,1183],"curl_exec":[1147,1152],"curl_close":[1148,1173],"strlen":[1156,1160],"is_bool":[1156],"curl_error":[1161],"in_array":[1163],"curl_getinfo":[1163,1170],"get_status_header_desc":[1171],"fclose":[1176],"request":[1181]},"used_by":[]},"get_status_header_desc":{"doc":"\/**\n * Retrieve the description for the HTTP status.\n *\n * @since 2.3.0\n *\n * @param int $code HTTP status code.\n * @return string Empty string if not found, or description if found.\n *\/","file":"functions.php","line":793,"missingDoc":false,"filters":[],"uses":{"absint":[796]},"used_by":{"WP_Http_Curl::request":[1171],"status_header":[876]}},"WP_Http_Curl::stream_headers":{"doc":"\/**\n * Grab the headers of the cURL request\n *\n * Each header is sent individually to this callback, so we append to the $header property for temporary storage\n *\n * @since 3.2.0\n * @access private\n * @return int\n *\/","file":"class-http.php","line":1202,"missingDoc":false,"filters":[],"uses":{"strlen":[1204]},"used_by":[]},"WP_Http_Curl::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @static\n * @since 2.7.0\n *\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":1215,"missingDoc":false,"filters":["'use_curl_transport'"],"uses":{"function_exists":[1216,1216],"curl_version":[1222]},"used_by":[]},"WP_HTTP_Proxy::is_enabled":{"doc":"\/**\n * Whether proxy connection should be used.\n *\n * @since 2.8\n * @use WP_PROXY_HOST\n * @use WP_PROXY_PORT\n *\n * @return bool\n *\/","file":"class-http.php","line":1274,"missingDoc":false,"filters":[],"uses":{"defined":[1275,1275]},"used_by":[]},"WP_HTTP_Proxy::use_authentication":{"doc":"\/**\n * Whether authentication should be used.\n *\n * @since 2.8\n * @use WP_PROXY_USERNAME\n * @use WP_PROXY_PASSWORD\n *\n * @return bool\n *\/","file":"class-http.php","line":1287,"missingDoc":false,"filters":[],"uses":{"defined":[1288,1288]},"used_by":[]},"WP_HTTP_Proxy::host":{"doc":"\/**\n * Retrieve the host for the proxy server.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1298,"missingDoc":false,"filters":[],"uses":{"defined":[1299]},"used_by":[]},"WP_HTTP_Proxy::port":{"doc":"\/**\n * Retrieve the port for the proxy server.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1312,"missingDoc":false,"filters":[],"uses":{"defined":[1313]},"used_by":[]},"WP_HTTP_Proxy::username":{"doc":"\/**\n * Retrieve the username for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1326,"missingDoc":false,"filters":[],"uses":{"defined":[1327]},"used_by":[]},"WP_HTTP_Proxy::password":{"doc":"\/**\n * Retrieve the password for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1340,"missingDoc":false,"filters":[],"uses":{"defined":[1341]},"used_by":[]},"WP_HTTP_Proxy::authentication":{"doc":"\/**\n * Retrieve authentication string for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1354,"missingDoc":false,"filters":[],"uses":{"username":[1355],"password":[1355]},"used_by":[]},"WP_HTTP_Proxy::authentication_header":{"doc":"\/**\n * Retrieve header string for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1365,"missingDoc":false,"filters":[],"uses":{"base64_encode":[1366],"authentication":[1366]},"used_by":[]},"WP_HTTP_Proxy::send_through_proxy":{"doc":"\/**\n * Whether URL should be sent through the proxy server.\n *\n * We want to keep localhost and the blog URL from being sent through the proxy server, because\n * some proxies can not handle this. We also have the constant available for defining other\n * hosts that won't be sent through the proxy.\n *\n * @uses WP_PROXY_BYPASS_HOSTS\n * @since 2.8.0\n *\n * @param string $uri URI to check.\n * @return bool True, to send through the proxy and false if, the proxy should not be used.\n *\/","file":"class-http.php","line":1382,"missingDoc":false,"filters":["'pre_http_send_through_proxy'"],"uses":{"parse_url":[1385,1391],"get_option":[1391],"is_null":[1394],"defined":[1400],"preg_split":[1406],"str_replace":[1411],"preg_quote":[1411],"implode":[1412],"strpos":[1408],"preg_match":[1417],"in_array":[1419]},"used_by":[]},"WP_Http_Cookie::__construct":{"doc":"\/**\n * Sets up this cookie object.\n *\n * The parameter $data should be either an associative array containing the indices names below\n * or a header string detailing it.\n *\n * If it's an array, it should include the following elements:\n * <ol>\n * <li>Name<\/li>\n * <li>Value - should NOT be urlencoded already.<\/li>\n * <li>Expires - (optional) String or int (UNIX timestamp).<\/li>\n * <li>Path (optional)<\/li>\n * <li>Domain (optional)<\/li>\n * <\/ol>\n *\n * @access public\n * @since 2.8.0\n *\n * @param string|array $data Raw cookie data.\n *\/","file":"class-http.php","line":1497,"missingDoc":false,"filters":[],"uses":{"explode":[1500,1515],"trim":[1503,1516],"substr":[1503,1504],"strpos":[1503,1504,1515],"urldecode":[1506],"array_shift":[1507],"rtrim":[1511],"strtolower":[1516],"strtotime":[1518,1532],"is_int":[1532],"is_string":[1498]},"used_by":[]},"WP_Http_Cookie::test":{"doc":"\/**\n * Confirms that it's OK to send this cookie to the URL checked against.\n *\n * Decision is based on RFC 2109\/2965, so look there for details on validity.\n *\n * @access public\n * @since 2.8.0\n *\n * @param string $url URL you intend to send this cookie to\n * @return boolean true if allowed, false otherwise.\n *\/","file":"class-http.php","line":1549,"missingDoc":false,"filters":[],"uses":{"time":[1551],"parse_url":[1555],"strtolower":[1562,1562],"stripos":[1563],"substr":[1567,1567,1568,1576],"strlen":[1568,1576],"in_array":[1572],"explode":[1572]},"used_by":[]},"stripos":{"doc":"","file":"class-pop3.php","line":649,"missingDoc":true,"filters":[],"uses":{"strpos":[650],"stristr":[650]},"used_by":{"WP_Http_Cookie::test":[1563],"WP_Http_Encoding::should_decode":[1771],"WP_oEmbed::discover":[121,126],"POP3::is_ok":[605],"_WP_Editors::editor_js":[519],"WP::send_headers":[393],"trackback_rdf":[746],"add_query_arg":[661,658],"nocache_headers":[937],"get_calendar":[1205,1205],"__main":[30,53,54,61,76],"wp_mail":[250,285,283,433]}},"WP_Http_Cookie::getHeaderValue":{"doc":"\/**\n * Convert cookie name and value back to header string.\n *\n * @access public\n * @since 2.8.0\n *\n * @return string Header encoded cookie name and value.\n *\/","file":"class-http.php","line":1590,"missingDoc":false,"filters":["'wp_http_cookie_value'"],"uses":[],"used_by":[]},"WP_Http_Cookie::getFullHeader":{"doc":"\/**\n * Retrieve cookie header for usage in the rest of the WordPress HTTP API.\n *\n * @access public\n * @since 2.8.0\n *\n * @return string\n *\/","file":"class-http.php","line":1605,"missingDoc":false,"filters":[],"uses":{"getHeaderValue":[1606]},"used_by":[]},"WP_Http_Encoding::compress":{"doc":"\/**\n * Compress raw string using the deflate format.\n *\n * Supports the RFC 1951 standard.\n *\n * @since 2.8\n *\n * @param string $raw String to compress.\n * @param int $level Optional, default is 9. Compression level, 9 is highest.\n * @param string $supports Optional, not used. When implemented it will choose the right compression based on what the server supports.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1633,"missingDoc":false,"filters":[],"uses":{"gzdeflate":[1634]},"used_by":[]},"WP_Http_Encoding::decompress":{"doc":"\/**\n * Decompression of deflated string.\n *\n * Will attempt to decompress using the RFC 1950 standard, and if that fails\n * then the RFC 1951 standard deflate will be attempted. Finally, the RFC\n * 1952 standard gzip decode will be attempted. If all fail, then the\n * original compressed string will be returned.\n *\n * @since 2.8\n *\n * @param string $compressed String to decompress.\n * @param int $length The optional length of the compressed data.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1651,"missingDoc":false,"filters":[],"uses":{"gzinflate":[1656],"gzuncompress":[1662],"gzdecode":[1666],"function_exists":[1665]},"used_by":[]},"WP_Http_Encoding::compatible_gzinflate":{"doc":"\/**\n * Decompression of deflated string while staying compatible with the majority of servers.\n *\n * Certain Servers will return deflated data with headers which PHP's gzinflate()\n * function cannot handle out of the box. The following function has been created from\n * various snippets on the gzinflate() PHP documentation.\n *\n * Warning: Magic numbers within. Due to the potential different formats that the compressed\n * data may be returned in, some \"magic offsets\" are needed to ensure proper decompression\n * takes place. For a simple progmatic way to determine the magic offset in use, see:\n * http:\/\/core.trac.wordpress.org\/ticket\/18273\n *\n * @since 2.8.1\n * @link http:\/\/core.trac.wordpress.org\/ticket\/18273\n * @link http:\/\/au2.php.net\/manual\/en\/function.gzinflate.php#70875\n * @link http:\/\/au2.php.net\/manual\/en\/function.gzinflate.php#77336\n *\n * @param string $gzData String to decompress.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1695,"missingDoc":false,"filters":[],"uses":{"ord":[1700],"substr":[1700,1703,1713,1698,1719],"unpack":[1703],"strpos":[1707,1709],"gzinflate":[1713,1719]},"used_by":[]},"WP_Http_Encoding::accept_encoding":{"doc":"\/**\n * What encoding types to accept and their priority values.\n *\n * @since 2.8\n *\n * @return string Types of encoding to accept.\n *\/","file":"class-http.php","line":1733,"missingDoc":false,"filters":[],"uses":{"function_exists":[1735,1738,1741],"implode":[1744]},"used_by":[]},"WP_Http_Encoding::content_encoding":{"doc":"\/**\n * What encoding the content used when it was compressed to send in the headers.\n *\n * @since 2.8\n *\n * @return string Content-Encoding string to send in the header.\n *\/","file":"class-http.php","line":1754,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Http_Encoding::should_decode":{"doc":"\/**\n * Whether the content be decoded based on the headers.\n *\n * @since 2.8\n *\n * @param array|string $headers All of the available headers.\n * @return bool\n *\/","file":"class-http.php","line":1766,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[1768],"stripos":[1771],"is_string":[1770],"is_array":[1767]},"used_by":[]},"WP_Http_Encoding::is_available":{"doc":"\/**\n * Whether decompression and compression are supported by the PHP version.\n *\n * Each function is tested instead of checking for the zlib extension, to\n * ensure that the functions all exist in the PHP version and aren't\n * disabled.\n *\n * @since 2.8\n *\n * @return bool\n *\/","file":"class-http.php","line":1788,"missingDoc":false,"filters":[],"uses":{"function_exists":[1789,1789,1789]},"used_by":[]},"IXR_Value::IXR_Value":{"doc":"","file":"class-IXR.php","line":52,"missingDoc":true,"filters":[],"uses":{"calculateType":[56],"count":[66]},"used_by":[]},"IXR_Value::calculateType":{"doc":"","file":"class-IXR.php","line":72,"missingDoc":true,"filters":[],"uses":{"is_integer":[77],"is_double":[80],"is_object":[85,88,93],"is_a":[85,88],"get_object_vars":[94],"is_array":[97],"isStruct":[102]},"used_by":[]},"IXR_Value::getXml":{"doc":"","file":"class-IXR.php","line":109,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[123,136],"getXml":[128,138,145]},"used_by":[]},"IXR_Value::isStruct":{"doc":"\/**\n * Checks whether or not the supplied array is a struct or not\n *\n * @param unknown_type $array\n * @return boolean\n *\/","file":"class-IXR.php","line":157,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"IXR_Message::IXR_Message":{"doc":"","file":"class-IXR.php","line":197,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::parse":{"doc":"","file":"class-IXR.php","line":202,"missingDoc":true,"filters":[],"uses":{"preg_replace":[206],"substr":[206,224,225],"substr_replace":[207],"trim":[208],"xml_parser_create":[211],"xml_parser_set_option":[213],"xml_set_object":[215],"xml_set_element_handler":[216],"xml_set_character_data_handler":[217],"strlen":[221],"xml_parse":[226],"xml_parser_free":[233]},"used_by":[]},"IXR_Message::tag_open":{"doc":"","file":"class-IXR.php","line":243,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::cdata":{"doc":"","file":"class-IXR.php","line":265,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::tag_close":{"doc":"","file":"class-IXR.php","line":270,"missingDoc":true,"filters":[],"uses":{"trim":[276,280,284,288,293,299,317,320],"base64_decode":[303],"array_pop":[309,310,314],"count":[329,329,332,327,325]},"used_by":[]},"IXR_Server::IXR_Server":{"doc":"","file":"class-IXR.php","line":356,"missingDoc":true,"filters":[],"uses":{"setCapabilities":[358],"setCallbacks":[362],"serve":[364]},"used_by":[]},"IXR_Server::serve":{"doc":"","file":"class-IXR.php","line":368,"missingDoc":true,"filters":[],"uses":{"header":[372],"file_get_contents":[379],"error":[386,389,395],"parse":[385],"call":[391],"is_a":[394],"getXml":[400],"output":[416]},"used_by":[]},"error":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":77,"missingDoc":true,"filters":[],"uses":{"func_get_args":[78],"getLogger":[80],"error":[81],"implode":[81]},"used_by":{"IXR_Server::serve":[386,389,395],"SimplePie::init":[1315],"fetch_feed":[546,545],"error":[81],"MagpieRSS::MagpieRSS":[87],"RSSCache::debug":[816],"SimplePie_Misc::debug":[2201,2199]}},"IXR_Server::call":{"doc":"","file":"class-IXR.php","line":419,"missingDoc":true,"filters":[],"uses":{"hasMethod":[421],"count":[427],"substr":[435,433],"method_exists":[436],"is_callable":[445],"function_exists":[448],"is_array":[444],"call_user_func":[453],"is_string":[433]},"used_by":[]},"IXR_Server::error":{"doc":"","file":"class-IXR.php","line":458,"missingDoc":true,"filters":[],"uses":{"is_object":[461],"output":[464],"getXml":[464]},"used_by":[]},"IXR_Server::output":{"doc":"","file":"class-IXR.php","line":467,"missingDoc":true,"filters":[],"uses":{"function_exists":[469],"get_option":[469],"strlen":[474],"header":[475,476,478,480,481],"date":[481]},"used_by":[]},"IXR_Server::hasMethod":{"doc":"","file":"class-IXR.php","line":486,"missingDoc":true,"filters":[],"uses":{"in_array":[488],"array_keys":[488]},"used_by":[]},"IXR_Server::setCapabilities":{"doc":"","file":"class-IXR.php","line":491,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::getCapabilities":{"doc":"","file":"class-IXR.php","line":510,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::setCallbacks":{"doc":"","file":"class-IXR.php","line":515,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::listMethods":{"doc":"","file":"class-IXR.php","line":522,"missingDoc":true,"filters":[],"uses":{"array_reverse":[526],"array_keys":[526]},"used_by":[]},"IXR_Server::multiCall":{"doc":"","file":"class-IXR.php","line":529,"missingDoc":true,"filters":[],"uses":{"call":[539],"is_a":[541]},"used_by":[]},"IXR_Request::IXR_Request":{"doc":"","file":"class-IXR.php","line":566,"missingDoc":true,"filters":[],"uses":{"getXml":[580]},"used_by":[]},"IXR_Request::getLength":{"doc":"","file":"class-IXR.php","line":586,"missingDoc":true,"filters":[],"uses":{"strlen":[588]},"used_by":[]},"IXR_Request::getXml":{"doc":"","file":"class-IXR.php","line":591,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::IXR_Client":{"doc":"","file":"class-IXR.php","line":619,"missingDoc":true,"filters":[],"uses":{"parse_url":[623]},"used_by":[]},"IXR_Client::query":{"doc":"","file":"class-IXR.php","line":641,"missingDoc":true,"filters":[],"uses":{"func_get_args":[643],"array_shift":[644],"getLength":[646],"getXml":[647],"htmlspecialchars":[666,705],"fsockopen":[670,672],"fputs":[678],"feof":[683],"fgets":[684],"strstr":[687],"trim":[693],"parse":[710]},"used_by":[]},"IXR_Client::getResponse":{"doc":"","file":"class-IXR.php","line":726,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::isError":{"doc":"","file":"class-IXR.php","line":732,"missingDoc":true,"filters":[],"uses":{"is_object":[734]},"used_by":[]},"IXR_Client::getErrorCode":{"doc":"","file":"class-IXR.php","line":737,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::getErrorMessage":{"doc":"","file":"class-IXR.php","line":742,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Error::IXR_Error":{"doc":"","file":"class-IXR.php","line":760,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[763]},"used_by":[]},"IXR_Error::getXml":{"doc":"","file":"class-IXR.php","line":766,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Date::IXR_Date":{"doc":"","file":"class-IXR.php","line":806,"missingDoc":true,"filters":[],"uses":{"parseTimestamp":[810],"parseIso":[812],"is_numeric":[809]},"used_by":[]},"IXR_Date::parseTimestamp":{"doc":"","file":"class-IXR.php","line":816,"missingDoc":true,"filters":[],"uses":{"date":[818,819,820,821,822,823]},"used_by":[]},"IXR_Date::parseIso":{"doc":"","file":"class-IXR.php","line":827,"missingDoc":true,"filters":[],"uses":{"substr":[829,830,831,832,833,834,835]},"used_by":[]},"IXR_Date::getIso":{"doc":"","file":"class-IXR.php","line":838,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Date::getXml":{"doc":"","file":"class-IXR.php","line":843,"missingDoc":true,"filters":[],"uses":{"getIso":[845]},"used_by":[]},"IXR_Date::getTimestamp":{"doc":"","file":"class-IXR.php","line":848,"missingDoc":true,"filters":[],"uses":{"mktime":[850]},"used_by":[]},"IXR_Base64::IXR_Base64":{"doc":"","file":"class-IXR.php","line":864,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Base64::getXml":{"doc":"","file":"class-IXR.php","line":869,"missingDoc":true,"filters":[],"uses":{"base64_encode":[871]},"used_by":[]},"IXR_IntrospectionServer::IXR_IntrospectionServer":{"doc":"","file":"class-IXR.php","line":886,"missingDoc":true,"filters":[],"uses":{"setCallbacks":[888],"setCapabilities":[889],"addCallback":[894,900,906,912]},"used_by":[]},"IXR_IntrospectionServer::addCallback":{"doc":"","file":"class-IXR.php","line":920,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_IntrospectionServer::call":{"doc":"","file":"class-IXR.php","line":927,"missingDoc":true,"filters":[],"uses":{"is_array":[930,956],"hasMethod":[935],"array_shift":[940,951,952],"count":[943,943,950],"is_int":[956],"is_string":[962],"is_float":[973],"is_a":[979]},"used_by":[]},"IXR_IntrospectionServer::methodSignature":{"doc":"","file":"class-IXR.php","line":992,"missingDoc":true,"filters":[],"uses":{"hasMethod":[994],"time":[1013]},"used_by":[]},"IXR_IntrospectionServer::methodHelp":{"doc":"","file":"class-IXR.php","line":1032,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_ClientMulticall::IXR_ClientMulticall":{"doc":"","file":"class-IXR.php","line":1048,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_ClientMulticall::addCall":{"doc":"","file":"class-IXR.php","line":1054,"missingDoc":true,"filters":[],"uses":{"func_get_args":[1056],"array_shift":[1057]},"used_by":[]},"IXR_ClientMulticall::query":{"doc":"","file":"class-IXR.php","line":1065,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Services_JSON::Services_JSON":{"doc":"\/**\n * constructs a new JSON instance\n *\n * @param int $use object behavior flags; combine with boolean-OR\n *\n *\t\t\t\t\t\tpossible values:\n *\t\t\t\t\t\t- SERVICES_JSON_LOOSE_TYPE: loose typing.\n *\t\t\t\t\t\t\t\t\"{...}\" syntax creates associative arrays\n *\t\t\t\t\t\t\t\tinstead of objects in decode().\n *\t\t\t\t\t\t- SERVICES_JSON_SUPPRESS_ERRORS: error suppression.\n *\t\t\t\t\t\t\t\tValues which can't be encoded (e.g. resources)\n *\t\t\t\t\t\t\t\tappear as NULL instead of throwing errors.\n *\t\t\t\t\t\t\t\tBy default, a deeply-nested resource will\n *\t\t\t\t\t\t\t\tbubble up with an error, so all return values\n *\t\t\t\t\t\t\t\tfrom encode() should be checked with isError()\n *\/","file":"class-json.php","line":133,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Services_JSON::utf162utf8":{"doc":"\/**\n * convert a string from one UTF-16 char to one UTF-8 char\n *\n * Normally should be handled by mb_convert_encoding, but\n * provides a slower PHP-only method for installations\n * that lack the multibye string extension.\n *\n * @param\tstring $utf16 UTF-16 character\n * @return string UTF-8 character\n * @access private\n *\/","file":"class-json.php","line":149,"missingDoc":false,"filters":[],"uses":{"mb_convert_encoding":[153],"function_exists":[152],"ord":[156,156],"chr":[162,167,168,173,174,175]},"used_by":[]},"Services_JSON::utf82utf16":{"doc":"\/**\n * convert a string from one UTF-8 char to one UTF-16 char\n *\n * Normally should be handled by mb_convert_encoding, but\n * provides a slower PHP-only method for installations\n * that lack the multibye string extension.\n *\n * @param\tstring $utf8 UTF-8 character\n * @return string UTF-16 character\n * @access private\n *\/","file":"class-json.php","line":193,"missingDoc":false,"filters":[],"uses":{"mb_convert_encoding":[197],"function_exists":[196],"strlen":[200],"chr":[209,210,216,218],"ord":[209,210,211,216,217,218,219]},"used_by":[]},"Services_JSON::encode":{"doc":"\/**\n * encodes an arbitrary variable into JSON format (and sends JSON Header)\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":237,"missingDoc":false,"filters":[],"uses":{"header":[239],"_encode":[240]},"used_by":[]},"Services_JSON::encodeUnsafe":{"doc":"\/**\n * encodes an arbitrary variable into JSON format without JSON Header - warning - may allow CSS!!!!)\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":253,"missingDoc":false,"filters":[],"uses":{"_encode":[255]},"used_by":[]},"Services_JSON::_encode":{"doc":"\/**\n * PRIVATE CODE that does the work of encodes an arbitrary variable into JSON format\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":268,"missingDoc":false,"filters":[],"uses":{"gettype":[271,478],"strlen":[288],"ord":[296,336,351,352,367,368,369,384,385,386,387,402,403,404,405,406],"pack":[336,350,366,383,401],"utf82utf16":[338,354,371,389,408],"sprintf":[339,355,372,390,409],"bin2hex":[339,355,372,390,409],"array_map":[436,450,463],"array_keys":[437,435,464],"array_values":[438,465],"join":[446,458,473],"is_array":[435],"count":[435],"range":[435],"sizeof":[435],"get_object_vars":[461]},"used_by":[]},"Services_JSON::name_value":{"doc":"\/**\n * array-walking function for use in generating JSON-formatted name-value pairs\n *\n * @param\tstring $name name of key to use\n * @param\tmixed $value reference to an array element to be encoded\n *\n * @return string JSON-formatted name-value pair, like '\"name\":value'\n * @access private\n *\/","file":"class-json.php","line":491,"missingDoc":false,"filters":[],"uses":{"_encode":[493,499],"strval":[499]},"used_by":[]},"Services_JSON::reduce_string":{"doc":"\/**\n * reduce a string by removing leading and trailing comments and whitespace\n *\n * @param\t$str\tstring\tstring value to strip of comments and whitespace\n *\n * @return string string value stripped of comments and whitespace\n * @access private\n *\/","file":"class-json.php","line":510,"missingDoc":false,"filters":[],"uses":{"preg_replace":[512],"trim":[526]},"used_by":[]},"Services_JSON::decode":{"doc":"\/**\n * decodes a JSON string into appropriate variable\n *\n * @param\tstring $str\tJSON-formatted string\n *\n * @return mixed number, boolean, string, array, or object\n *\t\t\t\tcorresponding to given JSON input string.\n *\t\t\t\tSee argument 1 to Services_JSON() above for object-output behavior.\n *\t\t\t\tNote that decode() always returns strings\n *\t\t\t\tin ASCII or UTF-8 format!\n * @access public\n *\/","file":"class-json.php","line":541,"missingDoc":false,"filters":[],"uses":{"reduce_string":[543,688],"strtolower":[545],"preg_match":[570,614,667,667,737,727],"substr":[572,573,579,614,616,617,629,636,643,650,657,687,707,712,758,758],"strlen":[575,702,758,758],"ord":[580],"chr":[584,588,592,596,600,616,617],"hexdec":[616,617],"utf162utf8":[618],"array_push":[683,713,718,753,768,779,790],"reset":[691,720,716,811,808],"end":[706],"decode":[718,729,730,740],"rtrim":[758],"array_pop":[762,773,784,796],"in_array":[766,777,788],"substr_replace":[800],"is_numeric":[558]},"used_by":[]},"Services_JSON::isError":{"doc":"\/**\n * @todo Ultimately, this should just call PEAR::isError()\n *\/","file":"class-json.php","line":823,"missingDoc":false,"filters":[],"uses":{"is_object":[827],"get_class":[827],"is_subclass_of":[828],"class_exists":[825]},"used_by":[]},"Services_JSON_Error::Services_JSON_Error":{"doc":"","file":"class-json.php","line":854,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_oEmbed::__construct":{"doc":"\/**\n * Constructor\n *\n * @uses apply_filters() Filters a list of pre-defined oEmbed providers.\n *\/","file":"class-oembed.php","line":28,"missingDoc":false,"filters":["'oembed_providers'"],"uses":{"add_filter":[57]},"used_by":[]},"add_filter":{"doc":"\/**\n * Hooks a function or method to a specific filter action.\n *\n * Filters are the hooks that WordPress launches to modify text of various types\n * before adding it to the database or sending it to the browser screen. Plugins\n * can specify that one or more of its PHP functions is executed to\n * modify specific types of text at these times, using the Filter API.\n *\n * To use the API, the following code should be used to bind a callback to the\n * filter.\n *\n * <code>\n * function example_hook($example) { echo $example; }\n * add_filter('example_filter', 'example_hook');\n * <\/code>\n *\n * In WordPress 1.5.1+, hooked functions can take extra arguments that are set\n * when the matching do_action() or apply_filters() call is run. The\n * $accepted_args allow for calling functions only when the number of args\n * match. Hooked functions can take extra arguments that are set when the\n * matching do_action() or apply_filters() call is run. For example, the action\n * comment_id_not_found will pass any functions that hook onto it the ID of the\n * requested comment.\n *\n * <strong>Note:<\/strong> the function will return true no matter if the\n * function was hooked fails or not. There are no checks for whether the\n * function exists beforehand and no checks to whether the <tt>$function_to_add\n * is even a string. It is up to you to take care and this is done for\n * optimization purposes, so everything is as quick as possible.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 0.71\n * @global array $wp_filter Stores all of the filters added in the form of\n *\twp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)']']\n * @global array $merged_filters Tracks the tags that need to be merged for later. If the hook is added, it doesn't need to run through that process.\n *\n * @param string $tag The name of the filter to hook the $function_to_add to.\n * @param callback $function_to_add The name of the function to be called when the filter is applied.\n * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.\n * @param int $accepted_args optional. The number of arguments the function accept (default 1).\n * @return boolean true\n *\/","file":"plugin.php","line":65,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[68]},"used_by":{"WP_oEmbed::__construct":[57],"WP_Customize_Manager::__construct":[35],"WP_Customize_Manager::start_previewing_theme":[171,172,173,176,177,180,181],"WP_Customize_Manager::customize_preview_init":[337],"WP_Customize_Setting::__construct":[56,59],"WP_Customize_Setting::preview":[72,76,78,79],"_WP_Editors::editor":[108,110],"WP_Embed::__construct":[20,26],"__main":[17,18,19,26,27,29,34,40,42,47,48,49,54,56,62,63,64,70,71,73,78,83,87,88,92,97,98,99,104,105,109,110,115,116,117,118,123,127,128,131,132,133,135,136,137,138,139,140,142,143,144,145,146,147,149,150,151,152,153,154,156,158,160,163,164,165,166,167,168,169,170,171,172,173,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,194,279,286,289,17,24,33,36,44,45,46,47,54,56,58,59,66,1836,1865,494,5449,5468,5482,5506,5522,871,872,875,335,29,71],"kses_init_filters":[1329,1333,1335,1338,1339,1340],"_wp_post_thumbnail_class_filter_add":[597],"register_meta":[895,905],"ms_upload_constants":[22],"add_action":[334],"_show_post_preview":[5253],"register_taxonomy":[390],"preview_theme":[568,574,578],"wp_signon":[51]}},"WP_oEmbed::get_html":{"doc":"\/**\n * The do-it-all function that takes a URL and attempts to return the HTML.\n *\n * @see WP_oEmbed::discover()\n * @see WP_oEmbed::fetch()\n * @see WP_oEmbed::data2html()\n *\n * @param string $url The URL to the content that should be attempted to be embedded.\n * @param array $args Optional arguments. Usually passed from a shortcode.\n * @return bool|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed.\n *\/","file":"class-oembed.php","line":71,"missingDoc":false,"filters":["'oembed_result'"],"uses":{"str_replace":[82,82,87],"preg_quote":[82],"preg_replace":[83],"preg_match":[86],"discover":[93],"fetch":[95],"data2html":[98]},"used_by":[]},"WP_oEmbed::discover":{"doc":"\/**\n * Attempts to find oEmbed provider discovery <link> tags at the given URL.\n *\n * @param string $url The URL that should be inspected for discovery <link> tags.\n * @return bool|string False on failure, otherwise the oEmbed provider URL.\n *\/","file":"class-oembed.php","line":107,"missingDoc":false,"filters":["'oembed_linktypes'"],"uses":{"substr":[121],"stripos":[121,126],"shortcode_parse_atts":[134],"preg_match_all":[132],"wp_remote_retrieve_body":[111],"wp_remote_get":[111]},"used_by":[]},"shortcode_parse_atts":{"doc":"\/**\n * Retrieve all attributes from the shortcodes tag.\n *\n * The attributes list has the attribute name as the key and the value of the\n * attribute as the value in the key\/value pair. This allows for easier\n * retrieval of the attributes, since all attributes have to be known.\n *\n * @since 2.5\n *\n * @param string $text\n * @return array List of attributes and their value.\n *\/","file":"shortcodes.php","line":255,"missingDoc":false,"filters":[],"uses":{"preg_replace":[258],"strtolower":[262,264,266],"stripcslashes":[262,264,266,268,270],"strlen":[267],"ltrim":[273],"preg_match_all":[259]},"used_by":{"WP_oEmbed::discover":[134],"do_shortcode_tag":[232]}},"wp_remote_get":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the GET method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":74,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[75],"get":[76]},"used_by":{"WP_oEmbed::discover":[111],"WP_oEmbed::_fetch_with_format":[193],"discover_pingback_server_uri":[1677],"wp_remote_fopen":[762],"wp_version_check":[89]}},"WP_oEmbed::fetch":{"doc":"\/**\n * Connects to a oEmbed provider and returns the result.\n *\n * @param string $provider The URL to the oEmbed provider.\n * @param string $url The URL to the content that is desired to be embedded.\n * @param array $args Optional arguments. Usually passed from a shortcode.\n * @return bool|object False on failure, otherwise the result in the form of an object.\n *\/","file":"class-oembed.php","line":164,"missingDoc":false,"filters":["'oembed_fetch_url'"],"uses":{"wp_parse_args":[165],"wp_embed_defaults":[165],"add_query_arg":[167,168,169],"urlencode":[169],"_fetch_with_format":[174],"is_wp_error":[175,177],"get_error_code":[175]},"used_by":[]},"wp_embed_defaults":{"doc":"\/**\n * Create default array of embed parameters.\n *\n * The width defaults to the content width as specified by the theme. If the\n * theme does not specify a content width, then 500px is used.\n *\n * The default height is 1.5 times the width, or 1000px, whichever is smaller.\n *\n * The 'embed_defaults' filter can be used to adjust either of these values.\n *\n * @since 2.9.0\n *\n * @return array Default embed parameters.\n *\/","file":"media.php","line":972,"missingDoc":false,"filters":["'embed_defaults'"],"uses":{"min":[979],"ceil":[979],"compact":[981]},"used_by":{"WP_oEmbed::fetch":[165],"WP_Embed::shortcode":[144]}},"WP_oEmbed::_fetch_with_format":{"doc":"\/**\n * Fetches result from an oEmbed provider for a specific format and complete provider URL\n *\n * @since 3.0.0\n * @access private\n * @param string $provider_url_with_args URL to the provider with full arguments list (url, maxheight, etc.)\n * @param string $format Format to use\n * @return bool|object False on failure, otherwise the result in the form of an object.\n *\/","file":"class-oembed.php","line":191,"missingDoc":false,"filters":[],"uses":{"add_query_arg":[192],"wp_remote_get":[193],"wp_remote_retrieve_response_code":[194],"wp_remote_retrieve_body":[196]},"used_by":[]},"WP_oEmbed::_parse_json":{"doc":"\/**\n * Parses a json response body.\n *\n * @since 3.0.0\n * @access private\n *\/","file":"class-oembed.php","line":208,"missingDoc":false,"filters":[],"uses":{"json_decode":[209],"trim":[209],"is_object":[209]},"used_by":[]},"json_decode":{"doc":"","file":"compat.php","line":78,"missingDoc":true,"filters":[],"uses":{"is_a":[81],"decode":[86],"_json_decode_object_helper":[88]},"used_by":{"WP_oEmbed::_parse_json":[209],"WP_Customize_Manager::post_value":[313]}},"WP_oEmbed::_parse_xml":{"doc":"\/**\n * Parses an XML response body.\n *\n * @since 3.0.0\n * @access private\n *\/","file":"class-oembed.php","line":218,"missingDoc":false,"filters":[],"uses":{"function_exists":[219,228],"class_exists":[223],"libxml_use_internal_errors":[226,238],"libxml_disable_entity_loader":[229,236],"loadXML":[233],"is_null":[235],"simplexml_import_dom":[244],"is_object":[245]},"used_by":[]},"WP_oEmbed::data2html":{"doc":"\/**\n * Converts a data object from {@link WP_oEmbed::fetch()} and returns the HTML.\n *\n * @param object $data A data object result from an oEmbed provider.\n * @param string $url The URL to the content that is desired to be embedded.\n * @return bool|string False on error, otherwise the HTML needed to embed.\n *\/","file":"class-oembed.php","line":261,"missingDoc":false,"filters":["'oembed_dataparse'"],"uses":{"is_object":[262],"is_string":[271,274,280,285],"is_numeric":[271,271],"esc_url":[275,275,286],"esc_attr":[275,275,275],"esc_html":[286]},"used_by":[]},"WP_oEmbed::_strip_newlines":{"doc":"\/**\n * Strip any new lines from the HTML.\n *\n * @access private\n * @param string $html Existing HTML.\n * @param object $data Data object from WP_oEmbed::data2html()\n * @param string $url The original URL passed to oEmbed.\n * @return string Possibly modified $html\n *\/","file":"class-oembed.php","line":306,"missingDoc":false,"filters":[],"uses":{"str_replace":[308],"strpos":[307]},"used_by":[]},"_wp_oembed_get_object":{"doc":"\/**\n * Returns the initialized {@link WP_oEmbed} object\n *\n * @since 2.9.0\n * @access private\n *\n * @see WP_oEmbed\n * @uses WP_oEmbed\n *\n * @return WP_oEmbed object.\n *\/","file":"class-oembed.php","line":325,"missingDoc":false,"filters":[],"uses":{"is_null":[328]},"used_by":{"wp_oembed_get":[1020],"wp_oembed_add_provider":[1038],"wp_oembed_remove_provider":[1055]}},"PasswordHash::PasswordHash":{"doc":"","file":"class-phpass.php","line":42,"missingDoc":true,"filters":[],"uses":{"microtime":[52],"uniqid":[52],"rand":[52]},"used_by":[]},"PasswordHash::get_random_bytes":{"doc":"","file":"class-phpass.php","line":55,"missingDoc":true,"filters":[],"uses":{"fread":[60],"fclose":[61],"is_readable":[58],"fopen":[59],"md5":[68,70],"microtime":[68],"pack":[70],"substr":[72],"strlen":[64]},"used_by":[]},"PasswordHash::encode64":{"doc":"","file":"class-phpass.php","line":78,"missingDoc":true,"filters":[],"uses":{"ord":[83,86,91]},"used_by":[]},"PasswordHash::gensalt_private":{"doc":"","file":"class-phpass.php","line":101,"missingDoc":true,"filters":[],"uses":{"min":[104],"encode64":[106]},"used_by":[]},"PasswordHash::crypt_private":{"doc":"","file":"class-phpass.php","line":111,"missingDoc":true,"filters":[],"uses":{"substr":[114,117,128,150],"strpos":[122],"strlen":[129],"md5":[139,141,144,146],"pack":[144,146],"encode64":[151]},"used_by":[]},"PasswordHash::gensalt_extended":{"doc":"","file":"class-phpass.php","line":156,"missingDoc":true,"filters":[],"uses":{"min":[158],"encode64":[169]},"used_by":[]},"PasswordHash::gensalt_blowfish":{"doc":"","file":"class-phpass.php","line":174,"missingDoc":true,"filters":[],"uses":{"chr":[187,188],"ord":[187,188,193,201,206]},"used_by":[]},"PasswordHash::HashPassword":{"doc":"","file":"class-phpass.php","line":215,"missingDoc":true,"filters":[],"uses":{"get_random_bytes":[220,229,237],"crypt":[222,231],"gensalt_blowfish":[222],"strlen":[223,228,232,236,241],"gensalt_extended":[231],"crypt_private":[239],"gensalt_private":[240]},"used_by":[]},"PasswordHash::CheckPassword":{"doc":"","file":"class-phpass.php","line":250,"missingDoc":true,"filters":[],"uses":{"crypt_private":[252],"crypt":[254]},"used_by":[]},"PHPMailer::__construct":{"doc":"\/**\n * Constructor\n * @param boolean $exceptions Should we throw external exceptions?\n *\/","file":"class-phpmailer.php","line":372,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsHTML":{"doc":"\/**\n * Sets message type to HTML.\n * @param bool $ishtml\n * @return void\n *\/","file":"class-phpmailer.php","line":381,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsSMTP":{"doc":"\/**\n * Sets Mailer to send message using SMTP.\n * @return void\n *\/","file":"class-phpmailer.php","line":393,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsMail":{"doc":"\/**\n * Sets Mailer to send message using PHP mail() function.\n * @return void\n *\/","file":"class-phpmailer.php","line":401,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsSendmail":{"doc":"\/**\n * Sets Mailer to send message using the $Sendmail program.\n * @return void\n *\/","file":"class-phpmailer.php","line":409,"missingDoc":false,"filters":[],"uses":{"stristr":[410],"ini_get":[410]},"used_by":[]},"PHPMailer::IsQmail":{"doc":"\/**\n * Sets Mailer to send message using the qmail MTA.\n * @return void\n *\/","file":"class-phpmailer.php","line":420,"missingDoc":false,"filters":[],"uses":{"stristr":[421],"ini_get":[421]},"used_by":[]},"PHPMailer::AddAddress":{"doc":"\/**\n * Adds a \"To\" address.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":437,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[438]},"used_by":[]},"PHPMailer::AddCC":{"doc":"\/**\n * Adds a \"Cc\" address.\n * Note: this function works with the SMTP mailer on win32, not with the \"mail\" mailer.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":448,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[449]},"used_by":[]},"PHPMailer::AddBCC":{"doc":"\/**\n * Adds a \"Bcc\" address.\n * Note: this function works with the SMTP mailer on win32, not with the \"mail\" mailer.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":459,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[460]},"used_by":[]},"PHPMailer::AddReplyTo":{"doc":"\/**\n * Adds a \"Reply-to\" address.\n * @param string $address\n * @param string $name\n * @return boolean\n *\/","file":"class-phpmailer.php","line":469,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[470]},"used_by":[]},"PHPMailer::AddAnAddress":{"doc":"\/**\n * Adds an address to one of the recipient arrays\n * Addresses that have been added already return false, but do not throw exceptions\n * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo'\n * @param string $address The email address to send to\n * @param string $name\n * @return boolean true on success, false if address already used or invalid in some way\n * @access protected\n *\/","file":"class-phpmailer.php","line":482,"missingDoc":false,"filters":[],"uses":{"SetError":[484,496],"Lang":[484,489,496,498,501],"preg_match":[483],"trim":[493,494],"preg_replace":[494],"array_push":[507],"strtolower":[508,506,513,512],"array_key_exists":[512]},"used_by":[]},"PHPMailer::SetFrom":{"doc":"\/**\n * Set the From and FromName properties\n * @param string $address\n * @param string $name\n * @return boolean\n *\/","file":"class-phpmailer.php","line":526,"missingDoc":false,"filters":[],"uses":{"trim":[527,528],"preg_replace":[528],"SetError":[530],"Lang":[530,532,535],"AddAnAddress":[543]},"used_by":[]},"PHPMailer::ValidateAddress":{"doc":"\/**\n * Check that a string looks roughly like an email address should\n * Static so it can be used without instantiation\n * Tries to use PHP built-in validator in the filter extension (from PHP 5.2), falls back to a reasonably competent regex validator\n * Conforms approximately to RFC2822\n * @link http:\/\/www.hexillion.com\/samples\/#Regex Original pattern found here\n * @param string $address The email address to check\n * @return boolean\n * @static\n * @access public\n *\/","file":"class-phpmailer.php","line":563,"missingDoc":false,"filters":[],"uses":{"filter_var":[565],"preg_match":[571],"function_exists":[564]},"used_by":[]},"PHPMailer::Send":{"doc":"\/**\n * Creates message and assigns Mailer. If the message is\n * not sent successfully then it returns false. Use the ErrorInfo\n * variable to view description of the error.\n * @return bool\n *\/","file":"class-phpmailer.php","line":585,"missingDoc":false,"filters":[],"uses":{"PreSend":[587],"PostSend":[588],"SetError":[591],"getMessage":[591]},"used_by":[]},"PHPMailer::PreSend":{"doc":"","file":"class-phpmailer.php","line":599,"missingDoc":true,"filters":[],"uses":{"Lang":[603,615],"count":[602,602,602,624],"SetMessageType":[612],"CreateHeader":[618],"CreateBody":[619],"AddrAppend":[625],"HeaderLine":[627,629],"EncodeHeader":[629,637],"SecureHeader":[629,637],"trim":[629],"DKIM_Add":[637],"str_replace":[638],"sprintf":[641],"SetError":[645],"getMessage":[645]},"used_by":[]},"PHPMailer::PostSend":{"doc":"","file":"class-phpmailer.php","line":653,"missingDoc":true,"filters":[],"uses":{"SendmailSend":[658],"SmtpSend":[660],"MailSend":[662,664],"SetError":[668],"getMessage":[668,673]},"used_by":[]},"PHPMailer::SendmailSend":{"doc":"\/**\n * Sends mail using the $Sendmail program.\n * @param string $header The message headers\n * @param string $body The message body\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":686,"missingDoc":false,"filters":[],"uses":{"sprintf":[688,690],"escapeshellcmd":[688,690],"escapeshellarg":[688],"Lang":[695,705,710,719],"popen":[694,709],"fputs":[697,698,699,712,713],"pclose":[700,714],"doCallback":[703,717]},"used_by":[]},"PHPMailer::MailSend":{"doc":"\/**\n * Sends mail using the PHP mail() function.\n * @param string $header The message headers\n * @param string $body The message body\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":732,"missingDoc":false,"filters":[],"uses":{"AddrFormat":[735],"implode":[737],"sprintf":[742],"ini_get":[745,744],"ini_set":[746,776],"mail":[749,755,763,769],"EncodeHeader":[749,755,763,769],"SecureHeader":[749,755,763,769],"doCallback":[752,758,766,772],"count":[747,761],"Lang":[779]},"used_by":[]},"PHPMailer::SmtpSend":{"doc":"\/**\n * Sends mail via SMTP using PhpSMTP\n * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.\n * @param string $header The message headers\n * @param string $body The message body\n * @uses SMTP\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":793,"missingDoc":false,"filters":[],"uses":{"Lang":[798,802,846,849],"SmtpConnect":[797],"Mail":[801],"doCallback":[811,815,823,827,835,839],"Recipient":[807,819,831],"implode":[845],"count":[844],"Data":[848],"Reset":[852]},"used_by":[]},"PHPMailer::SmtpConnect":{"doc":"\/**\n * Initiates a connection to an SMTP server.\n * Returns false if the operation failed.\n * @uses SMTP\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":864,"missingDoc":false,"filters":[],"uses":{"is_null":[865],"explode":[870],"Connected":[872],"count":[876],"preg_match":[878],"ServerHostname":[891],"Hello":[892,900],"Lang":[896,906,912],"StartTLS":[895],"Authenticate":[905],"Connect":[889],"Reset":[916]},"used_by":[]},"PHPMailer::SmtpClose":{"doc":"\/**\n * Closes the active SMTP session if one exists.\n * @return void\n *\/","file":"class-phpmailer.php","line":928,"missingDoc":false,"filters":[],"uses":{"Quit":[931],"Close":[932],"Connected":[930],"is_null":[929]},"used_by":[]},"PHPMailer::SetLanguage":{"doc":"\/**\n * Sets the language for all class error messages.\n * Returns false if it cannot load the language file. The default language is English.\n * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: \"br\")\n * @param string $lang_path Path to the language file directory\n * @access public\n *\/","file":"class-phpmailer.php","line":944,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::GetTranslations":{"doc":"\/**\n * Return the current array of language strings\n * @return array\n *\/","file":"class-phpmailer.php","line":978,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AddrAppend":{"doc":"\/**\n * Creates recipient headers.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":991,"missingDoc":false,"filters":[],"uses":{"AddrFormat":[995],"implode":[997]},"used_by":[]},"PHPMailer::AddrFormat":{"doc":"\/**\n * Formats an address correctly.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1008,"missingDoc":false,"filters":[],"uses":{"SecureHeader":[1010,1012,1012],"EncodeHeader":[1012]},"used_by":[]},"PHPMailer::WrapText":{"doc":"\/**\n * Wraps message for use with mailers that do not\n * automatically perform wrapping and for quoted-printable.\n * Original written by philippe.\n * @param string $message The message to wrap\n * @param integer $length The line length to wrap to\n * @param boolean $qp_mode Whether to run in Quoted-Printable mode\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1026,"missingDoc":false,"filters":[],"uses":{"sprintf":[1027,1059,1078],"strtolower":[1030],"FixEOL":[1032],"substr":[1034,1033,1051,1053,1056,1057,1069,1071,1074,1075],"explode":[1037,1040],"count":[1039,1042],"strlen":[1045,1065,1077,1087,1044],"UTF8CharBoundary":[1050,1068]},"used_by":[]},"PHPMailer::UTF8CharBoundary":{"doc":"\/**\n * Finds last character boundary prior to maxLength in a utf-8\n * quoted (printable) encoded string.\n * Original written by Colin Brown.\n * @access public\n * @param string $encodedText utf-8 QP text\n * @param int $maxLength find last character boundary prior to this length\n * @return int\n *\/","file":"class-phpmailer.php","line":1108,"missingDoc":false,"filters":[],"uses":{"substr":[1112,1117],"strpos":[1113],"hexdec":[1118]},"used_by":[]},"PHPMailer::SetWordWrap":{"doc":"\/**\n * Set the body wrapping.\n * @access public\n * @return void\n *\/","file":"class-phpmailer.php","line":1146,"missingDoc":false,"filters":[],"uses":{"WrapText":[1156,1159]},"used_by":[]},"PHPMailer::CreateHeader":{"doc":"\/**\n * Assembles message header.\n * @access public\n * @return string The assembled header\n *\/","file":"class-phpmailer.php","line":1169,"missingDoc":false,"filters":[],"uses":{"md5":[1173],"uniqid":[1173],"time":[1173],"HeaderLine":[1178,1180,1182,1195,1221,1225,1229,1231,1233,1237,1242,1245],"trim":[1180,1182,1201,1237,1242,1242],"AddrFormat":[1189],"AddrAppend":[1193,1203,1207,1212,1216],"count":[1194,1192,1206,1211,1215,1241],"EncodeHeader":[1221,1242],"SecureHeader":[1221],"sprintf":[1227],"ServerHostname":[1227],"GetMailMIME":[1246]},"used_by":[]},"PHPMailer::GetMailMIME":{"doc":"\/**\n * Returns the message MIME.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1257,"missingDoc":false,"filters":[],"uses":{"HeaderLine":[1261,1265,1272,1277],"TextLine":[1262,1266,1273,1278]},"used_by":[]},"PHPMailer::GetSentMIMEMessage":{"doc":"\/**\n * Returns the MIME message (headers and body). Only really valid post PreSend().\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1294,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::CreateBody":{"doc":"\/**\n * Assembles the message body. Returns an empty string on failure.\n * @access public\n * @return string The assembled message body\n *\/","file":"class-phpmailer.php","line":1304,"missingDoc":false,"filters":[],"uses":{"GetMailMIME":[1308],"SetWordWrap":[1311],"EncodeString":[1315,1319,1325,1335,1343,1346,1352,1359,1371,1374,1386,1393],"GetBoundary":[1318,1324,1334,1342,1345,1351,1358,1370,1373,1385,1392],"AttachAll":[1321,1327,1337,1339,1361,1378,1395,1399],"TextLine":[1330,1332,1354,1356,1366,1368,1381,1383,1388,1390],"HeaderLine":[1331,1355,1367,1382,1389],"EndBoundary":[1348,1363,1376,1397],"tempnam":[1407,1409],"file_put_contents":[1408],"unlink":[1411,1413,1415,1416],"file_get_contents":[1412],"Lang":[1417],"openssl_error_string":[1417],"openssl_pkcs7_sign":[1410],"IsError":[1403]},"used_by":[]},"unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Base.php","line":113,"missingDoc":false,"filters":[],"uses":[],"used_by":{"PHPMailer::CreateBody":[1411,1413,1415,1416],"SimplePie::fetch_data":[1470,1492,1540],"Snoopy::_httpsrequest":[1081],"win_is_writable":[1487],"PSpellShell::checkWords":[32],"PSpellShell::getSuggestions":[76],"Moxiecode_Logger::_logMsg":[247],"wp_delete_attachment":[4130,4137,4144,4151],"SimplePie_Cache_File::unlink":[169],"Text_Diff_Engine_shell::diff":[51,52]}},"PHPMailer::GetBoundary":{"doc":"\/**\n * Returns the start of a message boundary.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1435,"missingDoc":false,"filters":[],"uses":{"TextLine":[1446],"sprintf":[1447],"HeaderLine":[1449]},"used_by":[]},"PHPMailer::EndBoundary":{"doc":"\/**\n * Returns the end of a message boundary.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1460,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::SetMessageType":{"doc":"\/**\n * Sets the message type.\n * @access protected\n * @return void\n *\/","file":"class-phpmailer.php","line":1469,"missingDoc":false,"filters":[],"uses":{"AlternativeExists":[1471],"InlineImageExists":[1472],"AttachmentExists":[1473],"implode":[1474]},"used_by":[]},"PHPMailer::HeaderLine":{"doc":"\/**\n * Returns a formatted header line.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1483,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::TextLine":{"doc":"\/**\n * Returns a formatted mail line.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1492,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AddAttachment":{"doc":"\/**\n * Adds an attachment from a path on the filesystem.\n * Returns false if the file could not be found\n * or accessed.\n * @param string $path Path to the attachment.\n * @param string $name Overrides the attachment name.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return bool\n *\/","file":"class-phpmailer.php","line":1510,"missingDoc":false,"filters":[],"uses":{"Lang":[1513],"is_file":[1512],"basename":[1515],"SetError":[1532],"getMessage":[1532,1537],"getCode":[1539]},"used_by":[]},"PHPMailer::GetAttachments":{"doc":"\/**\n * Return the current array of attachments\n * @return array\n *\/","file":"class-phpmailer.php","line":1550,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AttachAll":{"doc":"\/**\n * Attaches all fs, string, and binary attachments to the message.\n * Returns an empty string on failure.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1560,"missingDoc":false,"filters":[],"uses":{"md5":[1578],"serialize":[1578],"in_array":[1579],"sprintf":[1590,1591,1592,1595,1598,1617],"EncodeHeader":[1591,1598],"SecureHeader":[1591,1598],"EncodeString":[1602],"IsError":[1603,1609],"EncodeFile":[1608],"implode":[1619]},"used_by":[]},"PHPMailer::EncodeFile":{"doc":"\/**\n * Encodes attachment in requested format.\n * Returns an empty string on failure.\n * @param string $path The full path to the file\n * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n * @see EncodeFile()\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1631,"missingDoc":false,"filters":[],"uses":{"Lang":[1634],"is_readable":[1633],"function_exists":[1636],"get_magic_quotes_runtime":[1641],"set_magic_quotes_runtime":[1644,1653],"ini_set":[1646,1655],"version_compare":[1643,1652],"file_get_contents":[1649],"EncodeString":[1650],"SetError":[1660],"getMessage":[1660]},"used_by":[]},"PHPMailer::EncodeFile::get_magic_quotes":{"doc":"","file":"class-phpmailer.php","line":1637,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PHPMailer::EncodeString":{"doc":"\/**\n * Encodes string to requested format.\n * Returns an empty string on failure.\n * @param string $str The text to encode\n * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1673,"missingDoc":false,"filters":[],"uses":{"strtolower":[1675],"chunk_split":[1677],"base64_encode":[1677],"FixEOL":[1681],"substr":[1683],"strlen":[1683],"EncodeQP":[1690],"SetError":[1693],"Lang":[1693]},"used_by":[]},"PHPMailer::EncodeHeader":{"doc":"\/**\n * Encode a header string to best (shortest) of Q, B, quoted or none.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1704,"missingDoc":false,"filters":[],"uses":{"strtolower":[1707],"addcslashes":[1711],"preg_match":[1712,1709],"preg_match_all":[1718,1721,1725],"strlen":[1733,1735],"Base64EncodeWrapMB":[1740],"base64_encode":[1742],"trim":[1744,1750,1754],"chunk_split":[1744],"function_exists":[1737],"HasMultiBytes":[1737],"EncodeQ":[1748],"WrapText":[1749],"str_replace":[1750,1754],"preg_replace":[1753]},"used_by":[]},"PHPMailer::HasMultiBytes":{"doc":"\/**\n * Checks if a string contains multibyte characters.\n * @access public\n * @param string $str multi-byte text to wrap encode\n * @return bool\n *\/","file":"class-phpmailer.php","line":1765,"missingDoc":false,"filters":[],"uses":{"strlen":[1767],"mb_strlen":[1767],"function_exists":[1766]},"used_by":[]},"PHPMailer::Base64EncodeWrapMB":{"doc":"\/**\n * Correctly encodes and wraps long multibyte strings for mail headers\n * without breaking lines within a character.\n * Adapted from a function by paravoid at http:\/\/uk.php.net\/manual\/en\/function.mb-encode-mimeheader.php\n * @access public\n * @param string $str multi-byte text to wrap encode\n * @return string\n *\/","file":"class-phpmailer.php","line":1781,"missingDoc":false,"filters":[],"uses":{"mb_strlen":[1786],"strlen":[1788,1788,1790,1803,1809],"floor":[1792],"mb_substr":[1799],"base64_encode":[1800],"substr":[1809]},"used_by":[]},"mb_substr":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":123,"missingDoc":true,"filters":[],"uses":{"_mb_substr":[18],"strlen":[124],"substr":[141,157]},"used_by":{"PHPMailer::Base64EncodeWrapMB":[1799],"wp_html_excerpt":[3095],"GoogleSpell::checkWords":[24],"POMO_Reader::substr":[64]}},"PHPMailer::EncodeQPphp":{"doc":"\/**\n * Encode string to quoted-printable.\n * Only uses standard PHP, slow, but will always work\n * @access public\n * @param string $string the text to encode\n * @param integer $line_max Number of chars allowed on a line before wrapping\n * @return string\n *\/","file":"class-phpmailer.php","line":1821,"missingDoc":false,"filters":[],"uses":{"preg_split":[1823],"each":[1827],"strlen":[1828,1847,1847],"substr":[1831],"ord":[1832],"floor":[1843,1844]},"used_by":[]},"PHPMailer::EncodeQP":{"doc":"\/**\n * Encode string to RFC2045 (6.7) quoted-printable format\n * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version\n * Also results in same content as you started with after decoding\n * @see EncodeQPphp()\n * @access public\n * @param string $string the text to encode\n * @param integer $line_max Number of chars allowed on a line before wrapping\n * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function\n * @return string\n * @author Marcus Bointon\n *\/","file":"class-phpmailer.php","line":1874,"missingDoc":false,"filters":[],"uses":{"quoted_printable_encode":[1876],"function_exists":[1875],"stream_get_filters":[1878],"EncodeQPphp":[1880],"in_array":[1879],"fopen":[1882],"preg_replace":[1883,1890],"stream_filter_append":[1885],"fputs":[1886],"rewind":[1887],"stream_get_contents":[1888],"stream_filter_remove":[1889],"fclose":[1891]},"used_by":[]},"PHPMailer::EncodeQ":{"doc":"\/**\n * Encode string to q encoding.\n * @link http:\/\/tools.ietf.org\/html\/rfc2047\n * @param string $str the text to encode\n * @param string $position Where the text is going to be used, see the RFC for what that means\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1903,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1905,1909,1912,1917],"strtolower":[1907],"str_replace":[1923]},"used_by":[]},"PHPMailer::AddStringAttachment":{"doc":"\/**\n * Adds a string or binary attachment (non-filesystem) to the list.\n * This method can be used to attach ascii or binary data,\n * such as a BLOB record from a database.\n * @param string $string String attachment data.\n * @param string $filename Name of the attachment.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return void\n *\/","file":"class-phpmailer.php","line":1938,"missingDoc":false,"filters":[],"uses":{"basename":[1943]},"used_by":[]},"PHPMailer::AddEmbeddedImage":{"doc":"\/**\n * Adds an embedded attachment. This can include images, sounds, and\n * just about any other document. Make sure to set the $type to an\n * image type. For JPEG images use \"image\/jpeg\" and for GIF images\n * use \"image\/gif\".\n * @param string $path Path to the attachment.\n * @param string $cid Content ID of the attachment. Use this to identify\n * the Id for accessing the image in an HTML form.\n * @param string $name Overrides the attachment name.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return bool\n *\/","file":"class-phpmailer.php","line":1965,"missingDoc":false,"filters":[],"uses":{"SetError":[1968],"Lang":[1968],"is_file":[1967],"basename":[1972]},"used_by":[]},"PHPMailer::AddStringEmbeddedImage":{"doc":"","file":"class-phpmailer.php","line":1992,"missingDoc":true,"filters":[],"uses":{"basename":[1997]},"used_by":[]},"PHPMailer::InlineImageExists":{"doc":"\/**\n * Returns true if an inline attachment is present.\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":2011,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AttachmentExists":{"doc":"","file":"class-phpmailer.php","line":2020,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AlternativeExists":{"doc":"","file":"class-phpmailer.php","line":2029,"missingDoc":true,"filters":[],"uses":{"strlen":[2030]},"used_by":[]},"PHPMailer::ClearAddresses":{"doc":"\/**\n * Clears all recipients assigned in the TO array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2041,"missingDoc":false,"filters":[],"uses":{"strtolower":[2043]},"used_by":[]},"PHPMailer::ClearCCs":{"doc":"\/**\n * Clears all recipients assigned in the CC array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2052,"missingDoc":false,"filters":[],"uses":{"strtolower":[2054]},"used_by":[]},"PHPMailer::ClearBCCs":{"doc":"\/**\n * Clears all recipients assigned in the BCC array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2063,"missingDoc":false,"filters":[],"uses":{"strtolower":[2065]},"used_by":[]},"PHPMailer::ClearReplyTos":{"doc":"\/**\n * Clears all recipients assigned in the ReplyTo array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2074,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearAllRecipients":{"doc":"\/**\n * Clears all recipients assigned in the TO, CC and BCC\n * array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2083,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearAttachments":{"doc":"\/**\n * Clears all previously set filesystem, string, and binary\n * attachments. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2095,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearCustomHeaders":{"doc":"\/**\n * Clears all custom headers. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2103,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::SetError":{"doc":"\/**\n * Adds the error message to the error container.\n * @access protected\n * @return void\n *\/","file":"class-phpmailer.php","line":2116,"missingDoc":false,"filters":[],"uses":{"getError":[2119],"Lang":[2121],"array_key_exists":[2120],"is_null":[2118]},"used_by":[]},"PHPMailer::RFCDate":{"doc":"\/**\n * Returns the proper RFC 822 formatted date.\n * @access public\n * @return string\n * @static\n *\/","file":"class-phpmailer.php","line":2133,"missingDoc":false,"filters":[],"uses":{"date":[2134,2138],"abs":[2136],"sprintf":[2138]},"used_by":[]},"PHPMailer::ServerHostname":{"doc":"\/**\n * Returns the server hostname or 'localhost.localdomain' if unknown.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":2148,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::Lang":{"doc":"\/**\n * Returns a message in the appropriate language.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":2165,"missingDoc":false,"filters":[],"uses":{"SetLanguage":[2167],"count":[2166]},"used_by":[]},"PHPMailer::IsError":{"doc":"\/**\n * Returns true if an error occurred.\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":2182,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::FixEOL":{"doc":"\/**\n * Changes every end of line from CR or LF to CRLF.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":2191,"missingDoc":false,"filters":[],"uses":{"str_replace":[2192,2193,2194]},"used_by":[]},"PHPMailer::AddCustomHeader":{"doc":"\/**\n * Adds a custom header.\n * @access public\n * @return void\n *\/","file":"class-phpmailer.php","line":2203,"missingDoc":false,"filters":[],"uses":{"explode":[2204]},"used_by":[]},"PHPMailer::MsgHTML":{"doc":"\/**\n * Evaluates the message and returns modifications for inline images and backgrounds\n * @access public\n * @return $message\n *\/","file":"class-phpmailer.php","line":2212,"missingDoc":false,"filters":[],"uses":{"preg_match_all":[2213],"basename":[2218],"dirname":[2219],"md5":[2221,2226],"pathinfo":[2222],"strlen":[2224,2225],"substr":[2224,2225],"preg_replace":[2227,2235],"preg_quote":[2227],"AddEmbeddedImage":[2226],"preg_match":[2217],"IsHTML":[2232],"trim":[2235],"strip_tags":[2235],"html_entity_decode":[2237]},"used_by":[]},"PHPMailer::_mime_types":{"doc":"\/**\n * Gets the MIME type of the embedded or inline image\n * @param string File extension\n * @access public\n * @return string MIME type of ext\n * @static\n *\/","file":"class-phpmailer.php","line":2253,"missingDoc":false,"filters":[],"uses":{"strtolower":[2343,2343]},"used_by":[]},"PHPMailer::set":{"doc":"\/**\n * Set (or reset) Class Objects (variables)\n *\n * Usage Example:\n * $page->set('X-Priority', '3');\n *\n * @access public\n * @param string $name Parameter Name\n * @param mixed $value Parameter Value\n * NOTE: will not work with arrays, there are no arrays to set\/reset\n * @todo Should this not be using __set() magic function?\n *\/","file":"class-phpmailer.php","line":2358,"missingDoc":false,"filters":[],"uses":{"Lang":[2363],"SetError":[2366],"getMessage":[2366],"getCode":[2367]},"used_by":[]},"PHPMailer::SecureHeader":{"doc":"\/**\n * Strips newlines to prevent header injection.\n * @access public\n * @param string $str String\n * @return string\n *\/","file":"class-phpmailer.php","line":2380,"missingDoc":false,"filters":[],"uses":{"str_replace":[2381,2382],"trim":[2383]},"used_by":[]},"PHPMailer::Sign":{"doc":"\/**\n * Set the private key file and password to sign the message.\n *\n * @access public\n * @param string $key_filename Parameter File Name\n * @param string $key_pass Password for private key\n *\/","file":"class-phpmailer.php","line":2393,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::DKIM_QP":{"doc":"\/**\n * Set the private key file and password to sign the message.\n *\n * @access public\n * @param string $key_filename Parameter File Name\n * @param string $key_pass Password for private key\n *\/","file":"class-phpmailer.php","line":2406,"missingDoc":false,"filters":[],"uses":{"strlen":[2409],"ord":[2410],"sprintf":[2414]},"used_by":[]},"PHPMailer::DKIM_Sign":{"doc":"\/**\n * Generate DKIM signature\n *\n * @access public\n * @param string $s Header\n *\/","file":"class-phpmailer.php","line":2426,"missingDoc":false,"filters":[],"uses":{"file_get_contents":[2427],"openssl_pkey_get_private":[2429],"base64_encode":[2434],"openssl_sign":[2433]},"used_by":[]},"PHPMailer::DKIM_HeaderC":{"doc":"\/**\n * Generate DKIM Canonicalization Header\n *\n * @access public\n * @param string $s Header\n *\/","file":"class-phpmailer.php","line":2444,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2445,2450],"explode":[2446,2448],"strtolower":[2449],"trim":[2451],"implode":[2453]},"used_by":[]},"PHPMailer::DKIM_BodyC":{"doc":"\/**\n * Generate DKIM Canonicalization Body\n *\n * @access public\n * @param string $body Message Body\n *\/","file":"class-phpmailer.php","line":2463,"missingDoc":false,"filters":[],"uses":{"str_replace":[2466,2467],"substr":[2469,2470],"strlen":[2469,2470]},"used_by":[]},"PHPMailer::DKIM_Add":{"doc":"\/**\n * Create the DKIM header, body, as new header\n *\n * @access public\n * @param string $headers_line Header lines\n * @param string $subject Subject\n * @param string $body Body\n *\/","file":"class-phpmailer.php","line":2483,"missingDoc":false,"filters":[],"uses":{"time":[2487],"explode":[2489],"strpos":[2493,2491],"str_replace":[2497,2498,2499],"DKIM_QP":[2497,2498,2499],"DKIM_BodyC":[2500],"strlen":[2501],"base64_encode":[2502],"pack":[2502],"sha1":[2502],"DKIM_HeaderC":[2513],"DKIM_Sign":[2514]},"used_by":[]},"PHPMailer::doCallback":{"doc":"","file":"class-phpmailer.php","line":2518,"missingDoc":true,"filters":[],"uses":{"call_user_func_array":[2521],"function_exists":[2519]},"used_by":[]},"phpmailerException::errorMessage":{"doc":"","file":"class-phpmailer.php","line":2527,"missingDoc":true,"filters":[],"uses":{"getMessage":[2528]},"used_by":[]},"POP3::POP3":{"doc":"","file":"class-pop3.php","line":47,"missingDoc":true,"filters":[],"uses":{"settype":[48,57],"set_time_limit":[60],"ini_get":[59]},"used_by":[]},"POP3::update_timer":{"doc":"","file":"class-pop3.php","line":65,"missingDoc":true,"filters":[],"uses":{"set_time_limit":[67],"ini_get":[66]},"used_by":[]},"POP3::connect":{"doc":"","file":"class-pop3.php","line":71,"missingDoc":true,"filters":[],"uses":{"_":[82,90,102],"fsockopen":[87],"socket_set_blocking":[95],"update_timer":[96],"fgets":[97],"strip_clf":[98],"error_log":[100],"is_ok":[101],"parse_banner":[107]},"used_by":[]},"_":{"doc":"","file":"compat.php","line":11,"missingDoc":true,"filters":[],"uses":[],"used_by":{"POP3::connect":[82,90,102],"POP3::user":[115,118,123],"POP3::pass":[135,138,143],"POP3::apop":[162,168,171,176,176,186,186],"POP3::login":[205],"POP3::top":[230,246],"POP3::pop_list":[272,300,311,323],"POP3::get":[346,359],"POP3::last":[386,393],"POP3::reset":[416,426],"POP3::send_cmd":[450,456],"POP3::quit":[476],"POP3::uidl":[513,525,548],"POP3::delete":[578,583,589]}},"POP3::user":{"doc":"","file":"class-pop3.php","line":111,"missingDoc":true,"filters":[],"uses":{"_":[115,118,123],"send_cmd":[121],"is_ok":[122]},"used_by":[]},"POP3::pass":{"doc":"","file":"class-pop3.php","line":130,"missingDoc":true,"filters":[],"uses":{"_":[135,138,143],"send_cmd":[141],"quit":[144],"last":[148],"is_ok":[142]},"used_by":[]},"POP3::apop":{"doc":"","file":"class-pop3.php","line":155,"missingDoc":true,"filters":[],"uses":{"_":[162,168,171,176,176,186,186],"login":[165,177,187],"md5":[182],"send_cmd":[184],"last":[191],"is_ok":[185]},"used_by":[]},"POP3::login":{"doc":"","file":"class-pop3.php","line":199,"missingDoc":true,"filters":[],"uses":{"_":[205],"pass":[213],"user":[209]},"used_by":[]},"POP3::top":{"doc":"","file":"class-pop3.php","line":223,"missingDoc":true,"filters":[],"uses":{"_":[230,246],"update_timer":[233],"fwrite":[238],"fgets":[239,253,258],"strip_clf":[240],"error_log":[242],"is_ok":[244],"preg_match":[254]},"used_by":[]},"POP3::pop_list":{"doc":"","file":"class-pop3.php","line":265,"missingDoc":true,"filters":[],"uses":{"_":[272,300,311,323],"update_timer":[287],"fwrite":[292],"fgets":[293,319],"strip_clf":[294,310,320],"error_log":[296],"is_ok":[298,308],"preg_split":[303,326],"send_cmd":[307],"strpos":[321],"settype":[327]},"used_by":[]},"POP3::get":{"doc":"","file":"class-pop3.php","line":340,"missingDoc":true,"filters":[],"uses":{"_":[346,359],"update_timer":[350],"send_cmd":[355],"is_ok":[357],"fgets":[366,372],"preg_match":[367],"substr":[369]},"used_by":[]},"POP3::last":{"doc":"","file":"class-pop3.php","line":378,"missingDoc":true,"filters":[],"uses":{"_":[386,393],"send_cmd":[390],"is_ok":[391],"preg_split":[397],"settype":[400,401]},"used_by":[]},"POP3::reset":{"doc":"","file":"class-pop3.php","line":409,"missingDoc":true,"filters":[],"uses":{"_":[416,426],"send_cmd":[419],"error_log":[427],"is_ok":[420],"quit":[429]},"used_by":[]},"POP3::send_cmd":{"doc":"","file":"class-pop3.php","line":433,"missingDoc":true,"filters":[],"uses":{"_":[450,456],"update_timer":[462],"fwrite":[463],"fgets":[464],"strip_clf":[465],"error_log":[466]},"used_by":[]},"POP3::quit":{"doc":"","file":"class-pop3.php","line":470,"missingDoc":true,"filters":[],"uses":{"_":[476],"fwrite":[481],"fgets":[482],"strip_clf":[483],"error_log":[484],"fclose":[485]},"used_by":[]},"POP3::popstat":{"doc":"","file":"class-pop3.php","line":490,"missingDoc":true,"filters":[],"uses":{"last":[494]},"used_by":[]},"POP3::uidl":{"doc":"","file":"class-pop3.php","line":505,"missingDoc":true,"filters":[],"uses":{"_":[513,525,548],"send_cmd":[522],"is_ok":[523,546],"preg_split":[528,556],"update_timer":[531],"fwrite":[542],"fgets":[543,554,566],"strip_clf":[544,557],"error_log":[545],"preg_match":[555]},"used_by":[]},"POP3::delete":{"doc":"","file":"class-pop3.php","line":572,"missingDoc":true,"filters":[],"uses":{"_":[578,583,589],"send_cmd":[586],"is_ok":[587]},"used_by":[]},"POP3::is_ok":{"doc":"","file":"class-pop3.php","line":599,"missingDoc":true,"filters":[],"uses":{"stripos":[605]},"used_by":[]},"POP3::strip_clf":{"doc":"","file":"class-pop3.php","line":608,"missingDoc":true,"filters":[],"uses":{"str_replace":[614]},"used_by":[]},"POP3::parse_banner":{"doc":"","file":"class-pop3.php","line":619,"missingDoc":true,"filters":[],"uses":{"strlen":[622],"substr":[625],"strip_clf":[641]},"used_by":[]},"wp_simplepie_autoload":{"doc":"\/**\n * WordPress autoloader for SimplePie.\n *\n * @since 3.5.0\n *\/","file":"class-simplepie.php","line":24,"missingDoc":false,"filters":[],"uses":{"strpos":[25],"str_replace":[28]},"used_by":[]},"SimplePie::__construct":{"doc":"\/**\n * The SimplePie class contains feed level data and options\n *\n * To use SimplePie, create the SimplePie object with no parameters. You can\n * then set configuration options using the provided methods. After setting\n * them, you must initialise the feed using $feed->init(). At that point the\n * object's methods and properties will be available to you.\n *\n * Previously, it was possible to pass in the feed URL along with cache\n * options directly into the constructor. This has been removed as of 1.3 as\n * it caused a lot of confusion.\n *\n * @since 1.0 Preview Release\n *\/","file":"class-simplepie.php","line":685,"missingDoc":false,"filters":[],"uses":{"trigger_error":[689,700],"version_compare":[687],"defined":[699],"func_get_args":[702],"count":[703],"set_cache_duration":[705],"set_cache_location":[707],"set_feed_url":[709],"init":[710],"func_num_args":[697]},"used_by":[]},"SimplePie::__toString":{"doc":"\/**\n * Used for converting object to a string\n *\/","file":"class-simplepie.php","line":718,"missingDoc":false,"filters":[],"uses":{"md5":[720],"serialize":[720]},"used_by":[]},"SimplePie::__destruct":{"doc":"\/**\n * Remove items that link back to this before destroying this object\n *\/","file":"class-simplepie.php","line":726,"missingDoc":false,"filters":[],"uses":{"__destruct":[734,742],"version_compare":[728],"gc_enabled":[728],"ini_get":[728]},"used_by":[]},"SimplePie::force_feed":{"doc":"\/**\n * Force the given data\/URL to be treated as a feed\n *\n * This tells SimplePie to ignore the content-type provided by the server.\n * Be careful when using this option, as it will also disable autodiscovery.\n *\n * @since 1.1\n * @param bool $enable Force the given data\/URL to be treated as a feed\n *\/","file":"class-simplepie.php","line":758,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_feed_url":{"doc":"\/**\n * Set the URL of the feed you want to parse\n *\n * This allows you to enter the URL of the feed you want to parse, or the\n * website you want to try to use auto-discovery on. This takes priority\n * over any set raw data.\n *\n * You can set multiple feeds to mash together by passing an array instead\n * of a string for the $url. Remember that with each additional feed comes\n * additional processing and resources.\n *\n * @since 1.0 Preview Release\n * @see set_raw_data()\n * @param string|array $url This is the URL (or array of URLs) that you want to parse.\n *\/","file":"class-simplepie.php","line":778,"missingDoc":false,"filters":[],"uses":{"call":[785,790],"is_array":[781]},"used_by":[]},"SimplePie::set_file":{"doc":"\/**\n * Set an instance of {@see SimplePie_File} to use as a feed\n *\n * @param SimplePie_File &$file\n * @return bool True on success, false on failure\n *\/","file":"class-simplepie.php","line":800,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_raw_data":{"doc":"\/**\n * Set the raw XML data to parse\n *\n * Allows you to use a string of RSS\/Atom data instead of a remote feed.\n *\n * If you have a feed available as a string in PHP, you can tell SimplePie\n * to parse that data string instead of a remote feed. Any set feed URL\n * takes precedence.\n *\n * @since 1.0 Beta 3\n * @param string $data RSS or Atom data as a string.\n * @see set_feed_url()\n *\/","file":"class-simplepie.php","line":824,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_timeout":{"doc":"\/**\n * Set the the default timeout for fetching remote feeds\n *\n * This allows you to change the maximum time the feed's server to respond\n * and send the feed back.\n *\n * @since 1.0 Beta 3\n * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.\n *\/","file":"class-simplepie.php","line":838,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::force_fsockopen":{"doc":"\/**\n * Force SimplePie to use fsockopen() instead of cURL\n *\n * @since 1.0 Beta 3\n * @param bool $enable Force fsockopen() to be used\n *\/","file":"class-simplepie.php","line":849,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::enable_cache":{"doc":"\/**\n * Enable\/disable caching in SimplePie.\n *\n * This option allows you to disable caching all-together in SimplePie.\n * However, disabling the cache can lead to longer load times.\n *\n * @since 1.0 Preview Release\n * @param bool $enable Enable caching\n *\/","file":"class-simplepie.php","line":863,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_duration":{"doc":"\/**\n * Set the length of time (in seconds) that the contents of a feed will be\n * cached\n *\n * @param int $seconds The feed content cache duration\n *\/","file":"class-simplepie.php","line":874,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_autodiscovery_cache_duration":{"doc":"\/**\n * Set the length of time (in seconds) that the autodiscovered feed URL will\n * be cached\n *\n * @param int $seconds The autodiscovered feed URL cache duration.\n *\/","file":"class-simplepie.php","line":885,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_location":{"doc":"\/**\n * Set the file system location where the cached files should be stored\n *\n * @param string $location The file system location.\n *\/","file":"class-simplepie.php","line":895,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::enable_order_by_date":{"doc":"\/**\n * Set whether feed items should be sorted into reverse chronological order\n *\n * @param bool $enable Sort as reverse chronological order.\n *\/","file":"class-simplepie.php","line":905,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_input_encoding":{"doc":"\/**\n * Set the character encoding used to parse the feed\n *\n * This overrides the encoding reported by the feed, however it will fall\n * back to the normal encoding detection if the override fails\n *\n * @param string $encoding Character encoding\n *\/","file":"class-simplepie.php","line":918,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_autodiscovery_level":{"doc":"\/**\n * Set how much feed autodiscovery to do\n *\n * @see SIMPLEPIE_LOCATOR_NONE\n * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY\n * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION\n * @see SIMPLEPIE_LOCATOR_LOCAL_BODY\n * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION\n * @see SIMPLEPIE_LOCATOR_REMOTE_BODY\n * @see SIMPLEPIE_LOCATOR_ALL\n * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)\n *\/","file":"class-simplepie.php","line":942,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_registry":{"doc":"\/**\n * Get the class registry\n *\n * Use this to override SimplePie's default classes\n * @see SimplePie_Registry\n * @return SimplePie_Registry\n *\/","file":"class-simplepie.php","line":954,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_class":{"doc":"\/**\n * Set which class SimplePie uses for caching\n *\/","file":"class-simplepie.php","line":970,"missingDoc":false,"filters":[],"uses":{"register":[972]},"used_by":[]},"SimplePie::set_locator_class":{"doc":"\/**\n * Set which class SimplePie uses for auto-discovery\n *\/","file":"class-simplepie.php","line":978,"missingDoc":false,"filters":[],"uses":{"register":[980]},"used_by":[]},"SimplePie::set_parser_class":{"doc":"\/**\n * Set which class SimplePie uses for XML parsing\n *\/","file":"class-simplepie.php","line":986,"missingDoc":false,"filters":[],"uses":{"register":[988]},"used_by":[]},"SimplePie::set_file_class":{"doc":"\/**\n * Set which class SimplePie uses for remote file fetching\n *\/","file":"class-simplepie.php","line":994,"missingDoc":false,"filters":[],"uses":{"register":[996]},"used_by":[]},"SimplePie::set_sanitize_class":{"doc":"\/**\n * Set which class SimplePie uses for data sanitization\n *\/","file":"class-simplepie.php","line":1002,"missingDoc":false,"filters":[],"uses":{"register":[1004]},"used_by":[]},"SimplePie::set_item_class":{"doc":"\/**\n * Set which class SimplePie uses for handling feed items\n *\/","file":"class-simplepie.php","line":1010,"missingDoc":false,"filters":[],"uses":{"register":[1012]},"used_by":[]},"SimplePie::set_author_class":{"doc":"\/**\n * Set which class SimplePie uses for handling author data\n *\/","file":"class-simplepie.php","line":1018,"missingDoc":false,"filters":[],"uses":{"register":[1020]},"used_by":[]},"SimplePie::set_category_class":{"doc":"\/**\n * Set which class SimplePie uses for handling category data\n *\/","file":"class-simplepie.php","line":1026,"missingDoc":false,"filters":[],"uses":{"register":[1028]},"used_by":[]},"SimplePie::set_enclosure_class":{"doc":"\/**\n * Set which class SimplePie uses for feed enclosures\n *\/","file":"class-simplepie.php","line":1034,"missingDoc":false,"filters":[],"uses":{"register":[1036]},"used_by":[]},"SimplePie::set_caption_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:text>` captions\n *\/","file":"class-simplepie.php","line":1042,"missingDoc":false,"filters":[],"uses":{"register":[1044]},"used_by":[]},"SimplePie::set_copyright_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:copyright>`\n *\/","file":"class-simplepie.php","line":1050,"missingDoc":false,"filters":[],"uses":{"register":[1052]},"used_by":[]},"SimplePie::set_credit_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:credit>`\n *\/","file":"class-simplepie.php","line":1058,"missingDoc":false,"filters":[],"uses":{"register":[1060]},"used_by":[]},"SimplePie::set_rating_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:rating>`\n *\/","file":"class-simplepie.php","line":1066,"missingDoc":false,"filters":[],"uses":{"register":[1068]},"used_by":[]},"SimplePie::set_restriction_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:restriction>`\n *\/","file":"class-simplepie.php","line":1074,"missingDoc":false,"filters":[],"uses":{"register":[1076]},"used_by":[]},"SimplePie::set_content_type_sniffer_class":{"doc":"\/**\n * Set which class SimplePie uses for content-type sniffing\n *\/","file":"class-simplepie.php","line":1082,"missingDoc":false,"filters":[],"uses":{"register":[1084]},"used_by":[]},"SimplePie::set_source_class":{"doc":"\/**\n * Set which class SimplePie uses item sources\n *\/","file":"class-simplepie.php","line":1090,"missingDoc":false,"filters":[],"uses":{"register":[1092]},"used_by":[]},"SimplePie::set_useragent":{"doc":"\/**\n * Set the user agent string\n *\n * @param string $ua New user agent string.\n *\/","file":"class-simplepie.php","line":1101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_name_function":{"doc":"\/**\n * Set callback function to create cache filename with\n *\n * @param mixed $function Callback function\n *\/","file":"class-simplepie.php","line":1111,"missingDoc":false,"filters":[],"uses":{"is_callable":[1113]},"used_by":[]},"SimplePie::set_stupidly_fast":{"doc":"\/**\n * Set options to make SP as fast as possible\n *\n * Forgoes a substantial amount of data sanitization in favor of speed. This\n * turns SimplePie into a dumb parser of feeds.\n *\n * @param bool $set Whether to set them or not\n *\/","file":"class-simplepie.php","line":1127,"missingDoc":false,"filters":[],"uses":{"enable_order_by_date":[1131],"remove_div":[1132],"strip_comments":[1133],"strip_htmltags":[1134],"strip_attributes":[1135],"set_image_handler":[1136]},"used_by":[]},"SimplePie::set_max_checked_feeds":{"doc":"\/**\n * Set maximum number of feeds to check with autodiscovery\n *\n * @param int $max Maximum number of feeds to check\n *\/","file":"class-simplepie.php","line":1145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::remove_div":{"doc":"","file":"class-simplepie.php","line":1150,"missingDoc":true,"filters":[],"uses":{"remove_div":[1152]},"used_by":[]},"SimplePie::strip_htmltags":{"doc":"","file":"class-simplepie.php","line":1155,"missingDoc":true,"filters":[],"uses":{"strip_htmltags":[1161],"encode_instead_of_strip":[1164]},"used_by":[]},"SimplePie::encode_instead_of_strip":{"doc":"","file":"class-simplepie.php","line":1168,"missingDoc":true,"filters":[],"uses":{"encode_instead_of_strip":[1170]},"used_by":[]},"SimplePie::strip_attributes":{"doc":"","file":"class-simplepie.php","line":1173,"missingDoc":true,"filters":[],"uses":{"strip_attributes":[1179]},"used_by":[]},"SimplePie::set_output_encoding":{"doc":"\/**\n * Set the output encoding\n *\n * Allows you to override SimplePie's output to match that of your webpage.\n * This is useful for times when your webpages are not being served as\n * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and\n * is similar to {@see set_input_encoding()}.\n *\n * It should be noted, however, that not all character encodings can support\n * all characters. If your page is being served as ISO-8859-1 and you try\n * to display a Japanese feed, you'll likely see garbled characters.\n * Because of this, it is highly recommended to ensure that your webpages\n * are served as UTF-8.\n *\n * The number of supported character encodings depends on whether your web\n * host supports {@link http:\/\/php.net\/mbstring mbstring},\n * {@link http:\/\/php.net\/iconv iconv}, or both. See\n * {@link http:\/\/simplepie.org\/wiki\/faq\/Supported_Character_Encodings} for\n * more information.\n *\n * @param string $encoding\n *\/","file":"class-simplepie.php","line":1204,"missingDoc":false,"filters":[],"uses":{"set_output_encoding":[1206]},"used_by":[]},"SimplePie::strip_comments":{"doc":"","file":"class-simplepie.php","line":1209,"missingDoc":true,"filters":[],"uses":{"strip_comments":[1211]},"used_by":[]},"SimplePie::set_url_replacements":{"doc":"\/**\n * Set element\/attribute key\/value pairs of HTML attributes\n * containing URLs that need to be resolved relative to the feed\n *\n * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,\n * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,\n * |q|@cite\n *\n * @since 1.0\n * @param array|null $element_attribute Element\/attribute key\/value pairs, null for default\n *\/","file":"class-simplepie.php","line":1225,"missingDoc":false,"filters":[],"uses":{"set_url_replacements":[1227]},"used_by":[]},"SimplePie::set_image_handler":{"doc":"\/**\n * Set the handler to enable the display of cached images.\n *\n * @param str $page Web-accessible path to the handler_image.php file.\n * @param str $qs The query string that the value should be passed to.\n *\/","file":"class-simplepie.php","line":1236,"missingDoc":false,"filters":[],"uses":{"set_image_handler":[1240]},"used_by":[]},"SimplePie::set_item_limit":{"doc":"\/**\n * Set the limit for items returned per-feed with multifeeds\n *\n * @param integer $limit The maximum number of items to return.\n *\/","file":"class-simplepie.php","line":1253,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::init":{"doc":"\/**\n * Initialize the feed object\n *\n * This is what makes everything happen. Period. This is where all of the\n * configuration options get processed, feeds are fetched, cached, and\n * parsed, and all of that other good stuff.\n *\n * @return boolean True if successful, false otherwise\n *\/","file":"class-simplepie.php","line":1267,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[1275,1270,1270],"xml_parser_create":[1280],"xml_parse_into_struct":[1281],"xml_parser_free":[1282],"set_registry":[1293],"method_exists":[1291],"pass_cache_data":[1298],"get_class":[1298,1299],"pass_file_data":[1299],"set_feed_url":[1310],"init":[1311],"error":[1315],"call":[1333,1338,1374,1393,1416,1404,1446],"call_user_func":[1338],"fetch_data":[1342],"strtoupper":[1372],"preg_match":[1370,1379],"array_merge":[1374,1393],"in_array":[1377,1368],"substr":[1377,1377,1386,1368,1368],"array_unique":[1398],"create":[1407],"get_data":[1412],"get_type":[1413],"trigger_error":[1429],"save":[1427],"parse":[1410],"sprintf":[1439],"get_error_string":[1439],"get_current_line":[1439],"get_current_column":[1439]},"used_by":[]},"save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/Base.php","line":85,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::init":[1427],"SimplePie::fetch_data":[1594],"WP_Customize_Manager::save":[512],"image_resize":[3277],"image_make_intermediate_size":[396],"SimplePie_Sanitize::sanitize":[323]}},"SimplePie::fetch_data":{"doc":"\/**\n * Fetch the data via SimplePie_File\n *\n * If the data is already cached, attempt to fetch it from there instead\n * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache\n * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type\n *\/","file":"class-simplepie.php","line":1458,"missingDoc":false,"filters":[],"uses":{"load":[1464],"unlink":[1470,1492,1540],"set_feed_url":[1488],"init":[1489],"mtime":[1483,1497],"time":[1483,1497],"create":[1514,1556,1569,1608],"touch":[1520],"call":[1580,1588,1598],"find":[1577],"getMessage":[1587],"getFile":[1588],"getLine":[1588],"trigger_error":[1596],"save":[1594],"call_user_func":[1598],"is_feed":[1571],"get_type":[1609]},"used_by":[]},"load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/Base.php","line":92,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1464],"wp_get_image_editor":[1179],"SimplePie_Sanitize::sanitize":[312]}},"mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/Base.php","line":99,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1483,1497]}},"touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Base.php","line":106,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1520],"SimplePie_Cache_File::touch":[155]}},"SimplePie::error":{"doc":"\/**\n * Get the error message for the occured error\n *\n * @return string|array Error message, or array of messages for multifeeds\n *\/","file":"class-simplepie.php","line":1619,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_raw_data":{"doc":"\/**\n * Get the raw XML\n *\n * This is the same as the old `$feed->enable_xml_dump(true)`, but returns\n * the data instead of printing it.\n *\n * @return string|boolean Raw XML data, false if the cache is used\n *\/","file":"class-simplepie.php","line":1632,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_encoding":{"doc":"\/**\n * Get the character encoding used for output\n *\n * @since Preview Release\n * @return string\n *\/","file":"class-simplepie.php","line":1643,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::handle_content_type":{"doc":"\/**\n * Send the content-type header with correct encoding\n *\n * This method ensures that the SimplePie-enabled page is being served with\n * the correct {@link http:\/\/www.iana.org\/assignments\/media-types\/ mime-type}\n * and character encoding HTTP headers (character encoding determined by the\n * {@see set_output_encoding} config option).\n *\n * This won't work properly if any content or whitespace has already been\n * sent to the browser, because it relies on PHP's\n * {@link http:\/\/php.net\/header header()} function, and these are the\n * circumstances under which the function works.\n *\n * Because it's setting these settings for the entire page (as is the nature\n * of HTTP headers), this should only be used once per page (again, at the\n * top).\n *\n * @param string $mime MIME type to serve the page as\n *\/","file":"class-simplepie.php","line":1667,"missingDoc":false,"filters":[],"uses":{"get_encoding":[1674,1672],"header":[1680],"headers_sent":[1669]},"used_by":[]},"SimplePie::get_type":{"doc":"\/**\n * Get the type of the feed\n *\n * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against\n * using {@link http:\/\/php.net\/language.operators.bitwise bitwise operators}\n *\n * @since 0.8 (usage changed to using constants in 1.0)\n * @see SIMPLEPIE_TYPE_NONE Unknown.\n * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90.\n * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).\n * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland).\n * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91.\n * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92.\n * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93.\n * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94.\n * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0.\n * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x.\n * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS.\n * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).\n * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS.\n * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3.\n * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0.\n * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom.\n * @see SIMPLEPIE_TYPE_ALL Any known\/supported feed type.\n * @return int SIMPLEPIE_TYPE_* constant\n *\/","file":"class-simplepie.php","line":1710,"missingDoc":false,"filters":[],"uses":{"trim":[1745,1751]},"used_by":[]},"SimplePie::subscribe_url":{"doc":"\/**\n * Get the URL for the feed\n *\n * May or may not be different from the URL passed to {@see set_feed_url()},\n * depending on whether auto-discovery was used.\n *\n * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)\n * @todo If we have a perm redirect we should return the new URL\n * @todo When we make the above change, let's support <itunes:new-feed-url> as well\n * @todo Also, |atom:link|@rel=self\n * @return string|null\n *\/","file":"class-simplepie.php","line":1802,"missingDoc":false,"filters":[],"uses":{"sanitize":[1806]},"used_by":[]},"SimplePie::get_feed_tags":{"doc":"\/**\n * Get data for an feed-level element\n *\n * This method allows you to get access to ANY element\/attribute that is a\n * sub-element of the opening feed tag.\n *\n * The return value is an indexed array of elements matching the given\n * namespace and tag name. Each element has `attribs`, `data` and `child`\n * subkeys. For `attribs` and `child`, these contain namespace subkeys.\n * `attribs` then has one level of associative name => value data (where\n * `value` is a string) after the namespace. `child` has tag-indexed keys\n * after the namespace, each member of which is an indexed array matching\n * this same format.\n *\n * For example:\n * <pre>\n * \/\/ This is probably a bad example because we already support\n * \/\/ <media:content> natively, but it shows you how to parse through\n * \/\/ the nodes.\n * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group');\n * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'];\n * $file = $content[0]['attribs']['']['url'];\n * echo $file;\n * <\/pre>\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1845,"missingDoc":false,"filters":[],"uses":{"get_type":[1847]},"used_by":[]},"SimplePie::get_channel_tags":{"doc":"\/**\n * Get data for an channel-level element\n *\n * This method allows you to get access to ANY element\/attribute in the\n * channel\/header section of the feed.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1893,"missingDoc":false,"filters":[],"uses":{"get_type":[1895],"get_feed_tags":[1898,1905,1915,1925]},"used_by":[]},"SimplePie::get_image_tags":{"doc":"\/**\n * Get data for an channel-level element\n *\n * This method allows you to get access to ANY element\/attribute in the\n * image\/logo section of the feed.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1950,"missingDoc":false,"filters":[],"uses":{"get_type":[1952],"get_feed_tags":[1955,1965],"get_channel_tags":[1975]},"used_by":[]},"SimplePie::get_base":{"doc":"\/**\n * Get the base URL value from the feed\n *\n * Uses `<xml:base>` if available, otherwise uses the first link in the\n * feed, or failing that, the URL of the feed itself.\n *\n * @see get_link\n * @see subscribe_url\n *\n * @param array $element\n * @return string\n *\/","file":"class-simplepie.php","line":1998,"missingDoc":false,"filters":[],"uses":{"get_link":[2004,2006],"subscribe_url":[2010],"get_type":[2000]},"used_by":[]},"get_link":{"doc":"\/**\n * Retrieve bookmark data based on ID.\n *\n * @since 2.0.0\n * @deprecated 2.1.0\n * @deprecated Use get_bookmark()\n * @see get_bookmark()\n *\n * @param int $bookmark_id ID of link\n * @param string $output OBJECT, ARRAY_N, or ARRAY_A\n * @return object|array\n *\/","file":"deprecated.php","line":2049,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2050],"get_bookmark":[2051]},"used_by":{"SimplePie::get_base":[2004,2006],"SimplePie::get_permalink":[2376],"SimplePie::get_favicon":[3008],"WP_Customize_Control::link":[225],"WP_Customize_Control::render_content":[299],"wp_widget_rss_output":[855],"SimplePie_Enclosure::embed":[1129,1133,1144,1148,1161,1165,1170,1180,1184,1189],"SimplePie_Item::get_permalink":[929,937],"SimplePie_Source::get_permalink":[382]}},"SimplePie::sanitize":{"doc":"\/**\n * Sanitize feed data\n *\n * @access private\n * @see SimplePie_Sanitize::sanitize()\n * @param string $data Data to sanitize\n * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants\n * @param string $base Base URL to resolve URLs against\n * @return string Sanitized data\n *\/","file":"class-simplepie.php","line":2024,"missingDoc":false,"filters":[],"uses":{"sanitize":[2026]},"used_by":[]},"SimplePie::get_title":{"doc":"\/**\n * Get the title of the feed\n *\n * Uses `<atom:title>`, `<title>` or `<dc:title>`\n *\n * @since 1.0 (previously called `get_feed_title` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2037,"missingDoc":false,"filters":[],"uses":{"sanitize":[2041,2045,2049,2053,2057,2061,2065],"call":[2041,2045],"get_base":[2041,2045,2049,2053,2057],"get_channel_tags":[2043,2047,2051,2055,2059,2063,2039]},"used_by":[]},"SimplePie::get_category":{"doc":"\/**\n * Get a category for the feed\n *\n * @since Unknown\n * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Category|null\n *\/","file":"class-simplepie.php","line":2080,"missingDoc":false,"filters":[],"uses":{"get_categories":[2082]},"used_by":[]},"SimplePie::get_categories":{"doc":"\/**\n * Get all categories for the feed\n *\n * Uses `<atom:category>`, `<category>` or `<dc:subject>`\n *\n * @since Unknown\n * @return array|null List of {@see SimplePie_Category} objects\n *\/","file":"class-simplepie.php","line":2101,"missingDoc":false,"filters":[],"uses":{"sanitize":[2112,2116,2120,2128,2131,2141,2145],"create":[2122,2137,2141,2145],"get_channel_tags":[2105,2124,2139,2143],"array_unique":[2150]},"used_by":[]},"SimplePie::get_author":{"doc":"\/**\n * Get an author for the feed\n *\n * @since 1.1\n * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"class-simplepie.php","line":2165,"missingDoc":false,"filters":[],"uses":{"get_authors":[2167]},"used_by":[]},"SimplePie::get_authors":{"doc":"\/**\n * Get all authors for the feed\n *\n * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"class-simplepie.php","line":2186,"missingDoc":false,"filters":[],"uses":{"sanitize":[2196,2200,2204,2218,2222,2226,2235,2239,2243],"get_base":[2200,2222],"create":[2208,2230,2235,2239,2243],"get_channel_tags":[2189,2211,2233,2237,2241],"array_unique":[2248]},"used_by":[]},"SimplePie::get_contributor":{"doc":"\/**\n * Get a contributor for the feed\n *\n * @since 1.1\n * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"class-simplepie.php","line":2263,"missingDoc":false,"filters":[],"uses":{"get_contributors":[2265]},"used_by":[]},"SimplePie::get_contributors":{"doc":"\/**\n * Get all contributors for the feed\n *\n * Uses `<atom:contributor>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"class-simplepie.php","line":2284,"missingDoc":false,"filters":[],"uses":{"sanitize":[2294,2298,2302,2316,2320,2324],"get_base":[2298,2320],"create":[2306,2328],"get_channel_tags":[2287,2309],"array_unique":[2334]},"used_by":[]},"SimplePie::get_link":{"doc":"\/**\n * Get a single link for the feed\n *\n * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)\n * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1\n * @param string $rel The relationship of the link to return\n * @return string|null Link URL\n *\/","file":"class-simplepie.php","line":2350,"missingDoc":false,"filters":[],"uses":{"get_links":[2352]},"used_by":[]},"get_links":{"doc":"\/**\n * Gets the links associated with category by id.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $before the html to output before the link\n * @param string $after the html to output after the link\n * @param string $between the html to output between the link\/image and its description.\n *\t\tNot used if no image or show_images == true\n * @param bool $show_images whether to show images (if defined).\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the order\n *\t\twhich will return links in a random order.\n * @param bool $show_description whether to show the description if show_images=false\/not defined.\n * @param bool $show_rating show rating stars\/chars\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated whether to show last updated timestamp\n * @param bool $echo whether to echo the results, or return them instead\n * @return null|string\n *\/","file":"deprecated.php","line":948,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[950],"substr":[955,953,986],"get_bookmarks":[961],"get_option":[973,987,987,1004,1012],"esc_url":[976],"esc_attr":[981,982],"sanitize_bookmark_field":[981,982],"__":[987],"date":[987],"strpos":[1001],"get_linkrating":[1018]},"used_by":{"SimplePie::get_link":[2352],"get_linksbyname":[417],"get_links_withrating":[592],"get_links_list":[1067],"SimplePie_Item::get_link":[955],"SimplePie_Locator::find":[120],"SimplePie_Source::get_link":[366]}},"SimplePie::get_permalink":{"doc":"\/**\n * Get the permalink for the item\n *\n * Returns the first link available with a relationship of \"alternate\".\n * Identical to {@see get_link()} with key 0\n *\n * @see get_link\n * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)\n * @internal Added for parity between the parent-level and the item\/entry-level.\n * @return string|null Link URL\n *\/","file":"class-simplepie.php","line":2374,"missingDoc":false,"filters":[],"uses":{"get_link":[2376]},"used_by":[]},"SimplePie::get_links":{"doc":"\/**\n * Get all links for the feed\n *\n * Uses `<atom:link>` or `<link>`\n *\n * @since Beta 2\n * @param string $rel The relationship of links to return\n * @return array|null Links found for the feed (strings)\n *\/","file":"class-simplepie.php","line":2388,"missingDoc":false,"filters":[],"uses":{"sanitize":[2400,2411,2418,2422,2426],"get_base":[2400,2411,2418,2422,2426],"get_channel_tags":[2393,2404,2416,2420,2424],"array_keys":[2429],"array_merge":[2436],"substr":[2444,2446],"call":[2432],"array_unique":[2448]},"used_by":[]},"SimplePie::get_all_discovered_feeds":{"doc":"","file":"class-simplepie.php","line":2462,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_description":{"doc":"\/**\n * Get the content for the item\n *\n * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,\n * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`\n *\n * @since 1.0 (previously called `get_feed_description()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2476,"missingDoc":false,"filters":[],"uses":{"sanitize":[2480,2484,2488,2492,2496,2500,2504,2508,2512],"call":[2480,2484],"get_base":[2480,2484,2488,2492,2496,2508,2512],"get_channel_tags":[2482,2486,2490,2494,2498,2502,2506,2510,2478]},"used_by":[]},"SimplePie::get_copyright":{"doc":"\/**\n * Get the copyright info for the feed\n *\n * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`\n *\n * @since 1.0 (previously called `get_feed_copyright()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2528,"missingDoc":false,"filters":[],"uses":{"sanitize":[2532,2536,2540,2544,2548],"call":[2532,2536],"get_base":[2532,2536],"get_channel_tags":[2534,2538,2542,2546,2530]},"used_by":[]},"SimplePie::get_language":{"doc":"\/**\n * Get the language for the feed\n *\n * Uses `<language>`, `<dc:language>`, or @xml_lang\n *\n * @since 1.0 (previously called `get_feed_language()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2564,"missingDoc":false,"filters":[],"uses":{"sanitize":[2568,2572,2576,2580,2584,2588,2592],"get_channel_tags":[2570,2574,2566]},"used_by":[]},"SimplePie::get_latitude":{"doc":"\/**\n * Get the latitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:lat>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"class-simplepie.php","line":2612,"missingDoc":false,"filters":[],"uses":{"get_channel_tags":[2619,2615],"preg_match":[2619],"trim":[2619]},"used_by":[]},"SimplePie::get_longitude":{"doc":"\/**\n * Get the longitude coordinates for the feed\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"class-simplepie.php","line":2641,"missingDoc":false,"filters":[],"uses":{"get_channel_tags":[2647,2651,2643],"preg_match":[2651],"trim":[2651]},"used_by":[]},"SimplePie::get_image_title":{"doc":"\/**\n * Get the feed logo's title\n *\n * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a \"feed logo\" title.\n *\n * Uses `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2670,"missingDoc":false,"filters":[],"uses":{"sanitize":[2674,2678,2682,2686,2690],"get_image_tags":[2676,2680,2684,2688,2672]},"used_by":[]},"SimplePie::get_image_url":{"doc":"\/**\n * Get the feed logo's URL\n *\n * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to\n * have a \"feed logo\" URL. This points directly to the image itself.\n *\n * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,\n * `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2709,"missingDoc":false,"filters":[],"uses":{"sanitize":[2713,2717,2721,2725,2729,2733],"get_channel_tags":[2715,2719,2711],"get_base":[2717,2721,2725,2729,2733],"get_image_tags":[2723,2727,2731]},"used_by":[]},"SimplePie::get_image_link":{"doc":"\/**\n * Get the feed logo's link\n *\n * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a \"feed logo\" link. This\n * points to a human-readable page that the image should link to.\n *\n * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,\n * `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2753,"missingDoc":false,"filters":[],"uses":{"sanitize":[2757,2761,2765],"get_base":[2757,2761,2765],"get_image_tags":[2759,2763,2755]},"used_by":[]},"SimplePie::get_image_width":{"doc":"\/**\n * Get the feed logo's link\n *\n * RSS 2.0 feeds are allowed to have a \"feed logo\" width.\n *\n * Uses `<image><width>` or defaults to 88.0 if no width is specified and\n * the feed is an RSS 2.0 feed.\n *\n * @return int|float|null\n *\/","file":"class-simplepie.php","line":2783,"missingDoc":false,"filters":[],"uses":{"round":[2787],"get_type":[2789],"get_image_tags":[2789,2785]},"used_by":[]},"SimplePie::get_image_height":{"doc":"\/**\n * Get the feed logo's height\n *\n * RSS 2.0 feeds are allowed to have a \"feed logo\" height.\n *\n * Uses `<image><height>` or defaults to 31.0 if no height is specified and\n * the feed is an RSS 2.0 feed.\n *\n * @return int|float|null\n *\/","file":"class-simplepie.php","line":2809,"missingDoc":false,"filters":[],"uses":{"round":[2813],"get_type":[2815],"get_image_tags":[2815,2811]},"used_by":[]},"SimplePie::get_item_quantity":{"doc":"\/**\n * Get the number of items in the feed\n *\n * This is well-suited for {@link http:\/\/php.net\/for for()} loops with\n * {@see get_item()}\n *\n * @param int $max Maximum value to return. 0 for no limit\n * @return int Number of items in the feed\n *\/","file":"class-simplepie.php","line":2834,"missingDoc":false,"filters":[],"uses":{"count":[2837],"get_items":[2837]},"used_by":[]},"SimplePie::get_item":{"doc":"\/**\n * Get a single item from the feed\n *\n * This is better suited for {@link http:\/\/php.net\/for for()} loops, whereas\n * {@see get_items()} is better suited for\n * {@link http:\/\/php.net\/foreach foreach()} loops.\n *\n * @see get_item_quantity()\n * @since Beta 2\n * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Item|null\n *\/","file":"class-simplepie.php","line":2860,"missingDoc":false,"filters":[],"uses":{"get_items":[2862]},"used_by":[]},"SimplePie::get_items":{"doc":"\/**\n * Get all items from the feed\n *\n * This is better suited for {@link http:\/\/php.net\/for for()} loops, whereas\n * {@see get_items()} is better suited for\n * {@link http:\/\/php.net\/foreach foreach()} loops.\n *\n * @see get_item_quantity\n * @since Beta 2\n * @param int $start Index to start at\n * @param int $end Number of items to return. 0 for all items after `$start`\n * @return array|null List of {@see SimplePie_Item} objects\n *\/","file":"class-simplepie.php","line":2886,"missingDoc":false,"filters":[],"uses":{"array_keys":[2899,2907,2915,2923,2931],"create":[2902,2910,2918,2926,2934],"get_feed_tags":[2897,2905,2913,2921],"get_channel_tags":[2929],"get_date":[2950],"usort":[2960],"get_class":[2960],"array_slice":[2973,2977]},"used_by":[]},"SimplePie::set_favicon_handler":{"doc":"\/**\n * Set the favicon handler\n *\n * @deprecated Use your own favicon handling instead\n *\/","file":"class-simplepie.php","line":2991,"missingDoc":false,"filters":[],"uses":{"defined":[2993],"trigger_error":[2994]},"used_by":[]},"SimplePie::get_favicon":{"doc":"\/**\n * Get the favicon for the current feed\n *\n * @deprecated Use your own favicon handling instead\n *\/","file":"class-simplepie.php","line":3003,"missingDoc":false,"filters":[],"uses":{"defined":[3005],"trigger_error":[3006],"urlencode":[3010],"get_link":[3008]},"used_by":[]},"SimplePie::__call":{"doc":"\/**\n * Magic method handler\n *\n * @param string $method Method name\n * @param array $args Arguments to the method\n * @return mixed\n *\/","file":"class-simplepie.php","line":3023,"missingDoc":false,"filters":[],"uses":{"defined":[3027,3033],"trigger_error":[3028,3034,3042],"strpos":[3025],"get_class":[3038],"debug_backtrace":[3039]},"used_by":[]},"SimplePie::sort_items":{"doc":"\/**\n * Sorting callback for items\n *\n * @access private\n * @param SimplePie $a\n * @param SimplePie $b\n * @return boolean\n *\/","file":"class-simplepie.php","line":3053,"missingDoc":false,"filters":[],"uses":{"get_date":[3055,3055]},"used_by":[]},"SimplePie::merge_items":{"doc":"\/**\n * Merge items from several feeds into one\n *\n * If you're merging multiple feeds together, they need to all have dates\n * for the items or else SimplePie will refuse to sort them.\n *\n * @link http:\/\/simplepie.org\/wiki\/tutorial\/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings\n * @param array $urls List of SimplePie feed objects to merge\n * @param int $start Starting item\n * @param int $end Number of items to return\n * @param int $limit Maximum number of items per feed\n * @return array\n *\/","file":"class-simplepie.php","line":3071,"missingDoc":false,"filters":[],"uses":{"array_merge":[3080],"get_items":[3080],"trigger_error":[3084,3114],"get_date":[3091],"usort":[3100],"get_class":[3100],"array_slice":[3105,3109],"is_array":[3073],"sizeof":[3073]},"used_by":[]},"SMTP::__construct":{"doc":"\/**\n * Initialize the class so that the data is in a known state.\n * @access public\n * @return void\n *\/","file":"class-smtp.php","line":90,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::Connect":{"doc":"\/**\n * Connect to the server specified on the port specified.\n * If the port is not specified use the default SMTP_PORT.\n * If tval is specified then a connection will try and be\n * established with the server for that number of seconds.\n * If tval is not specified the default is 30 seconds to\n * try on the connection.\n *\n * SMTP CODE SUCCESS: 220\n * SMTP CODE FAILURE: 421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":115,"missingDoc":false,"filters":[],"uses":{"connected":[120],"fsockopen":[131],"socket_set_timeout":[150],"substr":[149],"get_lines":[153]},"used_by":[]},"SMTP::StartTLS":{"doc":"\/**\n * Initiate a TLS communication with the server.\n *\n * SMTP CODE 220 Ready to start TLS\n * SMTP CODE 501 Syntax error (no parameters allowed)\n * SMTP CODE 454 TLS not available due to temporary reason\n * @access public\n * @return bool success\n *\/","file":"class-smtp.php","line":171,"missingDoc":false,"filters":[],"uses":{"connected":[174],"fputs":[179],"get_lines":[181],"substr":[182,192],"stream_socket_enable_crypto":[200]},"used_by":[]},"SMTP::Authenticate":{"doc":"\/**\n * Performs SMTP authentication. Must be run after running the\n * Hello() method. Returns true if successfully authenticated.\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":213,"missingDoc":false,"filters":[],"uses":{"fputs":[215,232,249],"get_lines":[217,234,251],"substr":[218,224,235,241,252,258],"base64_encode":[232,249]},"used_by":[]},"SMTP::Connected":{"doc":"\/**\n * Returns true if connected to a server otherwise false\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":273,"missingDoc":false,"filters":[],"uses":{"socket_get_status":[275],"Close":[281]},"used_by":[]},"SMTP::Close":{"doc":"\/**\n * Closes the socket and cleans up the state of the class.\n * It is not considered good to use this function without\n * first trying to use QUIT.\n * @access public\n * @return void\n *\/","file":"class-smtp.php","line":296,"missingDoc":false,"filters":[],"uses":{"fclose":[301]},"used_by":[]},"SMTP::Data":{"doc":"\/**\n * Issues a data command and sends the msg_data to the server\n * finializing the mail transaction. $msg_data is the message\n * that is to be send with the headers. Each header needs to be\n * on a single line followed by a <CRLF> with the message headers\n * and the message body being seperated by and additional <CRLF>.\n *\n * Implements rfc 821: DATA <CRLF>\n *\n * SMTP CODE INTERMEDIATE: 354\n * [data]\n * <CRLF>.<CRLF>\n * SMTP CODE SUCCESS: 250\n * SMTP CODE FAILURE: 552,554,451,452\n * SMTP CODE FAILURE: 451,554\n * SMTP CODE ERROR : 500,501,503,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":329,"missingDoc":false,"filters":[],"uses":{"connected":[332],"fputs":[338,427,432],"get_lines":[340,434],"substr":[341,351,383,398,403,404,406,407,423,435,445],"str_replace":[370,371],"explode":[372],"strpos":[383],"strstr":[385],"each":[391,420],"strlen":[397,421],"strrpos":[398]},"used_by":[]},"SMTP::Hello":{"doc":"\/**\n * Sends the HELO command to the smtp server.\n * This makes sure that we and the server are in\n * the same known state.\n *\n * Implements from rfc 821: HELO <SP> <domain> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE ERROR : 500, 501, 504, 421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":466,"missingDoc":false,"filters":[],"uses":{"connected":[469],"SendHello":[483,482]},"used_by":[]},"SMTP::SendHello":{"doc":"\/**\n * Sends a HELO\/EHLO command.\n * @access private\n * @return bool\n *\/","file":"class-smtp.php","line":496,"missingDoc":false,"filters":[],"uses":{"fputs":[497],"get_lines":[499],"substr":[500,510]},"used_by":[]},"SMTP::Mail":{"doc":"\/**\n * Starts a mail transaction from the email address specified in\n * $from. Returns true if successful or false otherwise. If True\n * the mail transaction is started and then one or more Recipient\n * commands may be called followed by a Data command.\n *\n * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE SUCCESS: 552,451,452\n * SMTP CODE SUCCESS: 500,501,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":536,"missingDoc":false,"filters":[],"uses":{"connected":[539],"fputs":[546],"get_lines":[548],"substr":[549,559]},"used_by":[]},"SMTP::Quit":{"doc":"\/**\n * Sends the quit command to the server and then closes the socket\n * if there is no error or the $close_on_error argument is true.\n *\n * Implements from rfc 821: QUIT <CRLF>\n *\n * SMTP CODE SUCCESS: 221\n * SMTP CODE ERROR : 500\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":579,"missingDoc":false,"filters":[],"uses":{"connected":[582],"fputs":[589],"get_lines":[592],"substr":[601,606],"Close":[614]},"used_by":[]},"SMTP::Recipient":{"doc":"\/**\n * Sends the command RCPT to the SMTP server with the TO: argument of $to.\n * Returns true if the recipient was accepted false if it was rejected.\n *\n * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250,251\n * SMTP CODE FAILURE: 550,551,552,553,450,451,452\n * SMTP CODE ERROR : 500,501,503,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":632,"missingDoc":false,"filters":[],"uses":{"connected":[635],"fputs":[641],"get_lines":[643],"substr":[644,654]},"used_by":[]},"SMTP::Reset":{"doc":"\/**\n * Sends the RSET command to abort and transaction that is\n * currently in progress. Returns true if successful false\n * otherwise.\n *\n * Implements rfc 821: RSET <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE ERROR : 500,501,504,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":675,"missingDoc":false,"filters":[],"uses":{"connected":[678],"fputs":[684],"get_lines":[686],"substr":[687,697]},"used_by":[]},"SMTP::SendAndMail":{"doc":"\/**\n * Starts a mail transaction from the email address specified in\n * $from. Returns true if successful or false otherwise. If True\n * the mail transaction is started and then one or more Recipient\n * commands may be called followed by a Data command. This command\n * will send the message to the users terminal if they are logged\n * in and send them an email.\n *\n * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE SUCCESS: 552,451,452\n * SMTP CODE SUCCESS: 500,501,502,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":723,"missingDoc":false,"filters":[],"uses":{"connected":[726],"fputs":[732],"get_lines":[734],"substr":[735,745]},"used_by":[]},"SMTP::Turn":{"doc":"\/**\n * This is an optional command for SMTP that this class does not\n * support. This method is here to make the RFC821 Definition\n * complete for this class and __may__ be implimented in the future\n *\n * Implements from rfc 821: TURN <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE FAILURE: 502\n * SMTP CODE ERROR : 500, 503\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":767,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::getError":{"doc":"\/**\n * Get the current error\n * @access public\n * @return array\n *\/","file":"class-smtp.php","line":781,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::get_lines":{"doc":"\/**\n * Read in as many lines as possible\n * either before eof or socket timeout occurs on the operation.\n * With SMTP we can tell if we have more lines to read if the\n * 4th character is '-' symbol. If it is a space then we don't\n * need to read anything else.\n * @access private\n * @return string\n *\/","file":"class-smtp.php","line":798,"missingDoc":false,"filters":[],"uses":{"feof":[800],"fgets":[801],"substr":[811]},"used_by":[]},"_deprecated_file":{"doc":"\/**\n * Marks a file as deprecated and informs when it has been used.\n *\n * There is a hook deprecated_file_included that will be called that can be used\n * to get the backtrace up to what file and function included the deprecated\n * file.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * This function is to be used in every file that is deprecated.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 2.5.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead,\n * the version in which the file was deprecated, and any message regarding the change.\n * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $file The file that was included\n * @param string $version The version of WordPress that deprecated the file\n * @param string $replacement Optional. The file that should have been included based on ABSPATH\n * @param string $message Optional. A message regarding the change\n *\/","file":"functions.php","line":2893,"missingDoc":false,"filters":["'deprecated_file_included'","'deprecated_file_trigger_error'"],"uses":{"trigger_error":[2901,2903],"sprintf":[2901,2903],"__":[2901,2903],"is_null":[2900]},"used_by":{"__main":[6,7,7,8,18,10,10,10,10,10],"wp_get_active_and_valid_plugins":[485]}},"Snoopy::fetch":{"doc":"","file":"class-snoopy.php","line":129,"missingDoc":true,"filters":[],"uses":{"parse_url":[133],"strtolower":[143],"_httprequest":[154,160],"_disconnect":[163],"fetch":[176,190,236,250],"preg_match":[171,231],"preg_quote":[171,231],"each":[186,246],"count":[181,241],"_connect":[149],"is_executable":[208],"function_exists":[207],"_httpsrequest":[216,222]},"used_by":[]},"Snoopy::submit":{"doc":"","file":"class-snoopy.php","line":279,"missingDoc":true,"filters":[],"uses":{"_prepare_post_body":[283],"parse_url":[285],"strtolower":[295],"_httprequest":[306,312],"_disconnect":[315],"_expandlinks":[323,390],"preg_match":[322,326,389,393],"fetch":[332,348,399,415],"submit":[334,401],"strpos":[331,398],"preg_quote":[326,393],"each":[344,411],"count":[339,406],"_connect":[301],"is_executable":[367],"function_exists":[366],"_httpsrequest":[375,381]},"used_by":[]},"Snoopy::fetchlinks":{"doc":"","file":"class-snoopy.php","line":441,"missingDoc":true,"filters":[],"uses":{"count":[449],"_striplinks":[450,453],"is_array":[447],"_expandlinks":[456],"fetch":[443]},"used_by":[]},"Snoopy::fetchform":{"doc":"","file":"class-snoopy.php","line":470,"missingDoc":true,"filters":[],"uses":{"count":[478],"_stripform":[479,482],"is_array":[476],"fetch":[473]},"used_by":[]},"Snoopy::fetchtext":{"doc":"","file":"class-snoopy.php","line":498,"missingDoc":true,"filters":[],"uses":{"count":[504],"_striptext":[505,508],"is_array":[502],"fetch":[500]},"used_by":[]},"Snoopy::submitlinks":{"doc":"","file":"class-snoopy.php","line":522,"missingDoc":true,"filters":[],"uses":{"count":[530],"_striplinks":[532,539],"_expandlinks":[534,541],"is_array":[528],"submit":[524]},"used_by":[]},"Snoopy::submittext":{"doc":"","file":"class-snoopy.php","line":556,"missingDoc":true,"filters":[],"uses":{"count":[564],"_striptext":[566,573],"_expandlinks":[568,575],"is_array":[562],"submit":[558]},"used_by":[]},"Snoopy::set_submit_multipart":{"doc":"","file":"class-snoopy.php","line":590,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Snoopy::set_submit_normal":{"doc":"","file":"class-snoopy.php","line":601,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Snoopy::_striplinks":{"doc":"","file":"class-snoopy.php","line":621,"missingDoc":true,"filters":[],"uses":{"preg_match_all":[623],"each":[632,638]},"used_by":[]},"Snoopy::_stripform":{"doc":"","file":"class-snoopy.php","line":655,"missingDoc":true,"filters":[],"uses":{"preg_match_all":[657],"implode":[660]},"used_by":[]},"Snoopy::_striptext":{"doc":"","file":"class-snoopy.php","line":675,"missingDoc":true,"filters":[],"uses":{"chr":[714,715,716,717,718,719,720,721,722,723,724,725,726,727,728],"preg_replace":[731]},"used_by":[]},"Snoopy::_expandlinks":{"doc":"","file":"class-snoopy.php","line":744,"missingDoc":true,"filters":[],"uses":{"preg_match":[747],"preg_replace":[749,750,769],"parse_url":[751],"preg_quote":[755]},"used_by":[]},"Snoopy::_httprequest":{"doc":"","file":"class-snoopy.php","line":784,"missingDoc":true,"filters":[],"uses":{"setcookies":[788],"parse_url":[790],"is_array":[808,822,929],"reset":[811],"urlencode":[815],"substr":[817],"count":[812,925],"each":[824],"strlen":[834,850,901],"base64_encode":[836,840],"socket_set_timeout":[847],"fwrite":[850],"fgets":[855],"_check_timeout":[857,907],"preg_match":[870,877,872,867,888,886,915],"chop":[870],"fread":[900],"_expandlinks":[918,926],"preg_match_all":[922]},"used_by":[]},"Snoopy::_httpsrequest":{"doc":"","file":"class-snoopy.php","line":947,"missingDoc":true,"filters":[],"uses":{"setcookies":[950],"parse_url":[954],"is_array":[972,986,1075],"reset":[975],"urlencode":[979],"substr":[981],"count":[976,1002,1031,1071],"each":[988],"strlen":[998],"base64_encode":[1000],"strtr":[1003],"tempnam":[1013],"exec":[1015],"escapeshellcmd":[1015],"implode":[1024],"file":[1026],"preg_match":[1038,1045,1040,1035,1054,1062],"chop":[1038],"_expandlinks":[1064,1072],"preg_match_all":[1068],"unlink":[1081]},"used_by":[]},"Snoopy::setcookies":{"doc":"","file":"class-snoopy.php","line":1091,"missingDoc":true,"filters":[],"uses":{"count":[1093],"urldecode":[1096],"preg_match":[1095]},"used_by":[]},"Snoopy::_check_timeout":{"doc":"","file":"class-snoopy.php","line":1107,"missingDoc":true,"filters":[],"uses":{"socket_get_status":[1110]},"used_by":[]},"Snoopy::_connect":{"doc":"","file":"class-snoopy.php","line":1125,"missingDoc":true,"filters":[],"uses":{"fsockopen":[1142]},"used_by":[]},"Snoopy::_disconnect":{"doc":"","file":"class-snoopy.php","line":1178,"missingDoc":true,"filters":[],"uses":{"fclose":[1180]},"used_by":[]},"Snoopy::_prepare_post_body":{"doc":"","file":"class-snoopy.php","line":1192,"missingDoc":true,"filters":[],"uses":{"settype":[1194,1195,1234],"count":[1198,1198],"reset":[1203,1217,1232],"each":[1204,1206,1218,1220,1233,1235],"urlencode":[1207,1207,1210,1210],"is_array":[1205,1219],"is_object":[1205,1219],"md5":[1215],"uniqid":[1215],"microtime":[1215],"is_readable":[1236],"fopen":[1238],"fread":[1239],"filesize":[1239],"fclose":[1240],"basename":[1241]},"used_by":[]},"WP_Admin_Bar::__get":{"doc":"","file":"class-wp-admin-bar.php","line":15,"missingDoc":true,"filters":[],"uses":{"is_ssl":[18],"_deprecated_argument":[21]},"used_by":[]},"WP_Admin_Bar::initialize":{"doc":"","file":"class-wp-admin-bar.php","line":27,"missingDoc":true,"filters":["'admin_bar_init'"],"uses":{"get_blogs_of_user":[32],"get_current_user_id":[32,34],"get_active_blog_for_user":[34],"user_admin_url":[35],"trailingslashit":[35,39],"get_home_url":[35],"get_current_blog_id":[38],"home_url":[39],"is_multisite":[33],"is_user_logged_in":[30],"add_action":[44,46,56],"get_theme_support":[49],"current_theme_supports":[48],"wp_enqueue_script":[58],"wp_enqueue_style":[59]},"used_by":[]},"get_blogs_of_user":{"doc":"\/**\n * Get the blogs a user belongs to.\n *\n * @since 3.0.0\n *\n * @param int $user_id User ID\n * @param bool $all Whether to retrieve all blogs, or only blogs that are not marked as deleted, archived, or spam.\n * @return array A list of the user's blogs. An empty array if the user doesn't exist or belongs to no blogs.\n *\/","file":"user.php","line":681,"missingDoc":false,"filters":["'get_blogs_of_user'"],"uses":{"get_user_meta":[690],"get_current_blog_id":[695],"get_option":[698,702],"is_multisite":[694],"get_blog_details":[712,741],"defined":[711],"array_keys":[729],"substr":[732],"strpos":[734],"str_replace":[736],"is_numeric":[737]},"used_by":{"WP_Admin_Bar::initialize":[32],"wp_xmlrpc_server::wp_getUsersBlogs":[475],"get_dashboard_url":[2263],"get_active_blog_for_user":[72,96],"remove_user_from_blog":[230,252],"get_most_recent_post_of_user":[1367],"wp_user_settings":[544],"wp_set_all_user_settings":[706],"is_user_member_of_blog":[780]}},"get_active_blog_for_user":{"doc":"\/**\n * Get one of a user's active blogs\n *\n * Returns the user's primary blog, if she has one and\n * it is active. If it's inactive, function returns another\n * active blog of the user. If none are found, the user\n * is added as a Subscriber to the Dashboard Blog and that blog\n * is returned.\n *\n * @since MU 1.0\n * @uses get_blogs_of_user()\n * @uses add_user_to_blog()\n * @uses get_blog_details()\n *\n * @param int $user_id The unique ID of the user\n * @return object The blog object\n *\/","file":"ms-functions.php","line":70,"missingDoc":false,"filters":[],"uses":{"get_blogs_of_user":[72,96],"is_multisite":[76],"get_user_meta":[79,105,107],"current":[80],"update_user_meta":[83,91,106,108],"get_blog_details":[84,86,102],"add_user_to_blog":[90],"is_object":[103,95],"is_array":[98],"count":[98]},"used_by":{"WP_Admin_Bar::initialize":[34],"get_dashboard_url":[2273]}},"user_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the current user.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2188,"missingDoc":false,"filters":["'user_admin_url'"],"uses":{"network_site_url":[2189],"ltrim":[2192],"is_string":[2191],"strpos":[2191]},"used_by":{"WP_Admin_Bar::initialize":[35],"self_admin_url":[2211],"get_dashboard_url":[2265,2277],"get_edit_profile_url":[2297]}},"get_theme_support":{"doc":"\/**\n * Gets the theme support arguments passed when registering that support\n *\n * @since 3.1\n * @param string $feature the feature to check\n * @return array The array of extra arguments\n *\/","file":"theme.php","line":1429,"missingDoc":false,"filters":[],"uses":{"func_num_args":[1434],"array_slice":[1437],"func_get_args":[1437]},"used_by":{"WP_Admin_Bar::initialize":[49],"WP_Customize_Manager::register_controls":[752,775,797,817,877],"wp_xmlrpc_server::wp_getPostFormats":[3374],"get_header_textcolor":[854],"display_header_text":[877],"get_header_image":[889],"is_random_header_image":[968],"get_custom_header":[1040,1058,1059],"get_background_image":[1109],"get_background_color":[1129],"_custom_header_background_just_in_time":[1397,1411],"_remove_theme_support":[1494,1504]}},"wp_enqueue_script":{"doc":"\/**\n * Enqueues script.\n *\n * Registers the script if src provided (does NOT overwrite) and enqueues.\n *\n * @since r16\n * @see wp_register_script() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":125,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[129],"sprintf":[129],"__":[129],"did_action":[128],"is_a":[127],"explode":[135],"add":[136],"add_data":[138],"enqueue":[140]},"used_by":{"WP_Admin_Bar::initialize":[58],"WP_Customize_Color_Control::enqueue":[354],"WP_Customize_Upload_Control::enqueue":[413],"WP_Customize_Manager::customize_preview_init":[332],"_WP_Editors::enqueue_scripts":[479,482,485,488,489,494,498],"add_thickbox":[2117],"wp_enqueue_media":[1542],"__main":[36]}},"wp_enqueue_style":{"doc":"\/**\n * Enqueue a CSS style file.\n *\n * Registers the style if src provided (does NOT overwrite) and enqueues.\n *\n * @since r79\n * @see WP_Styles::add(), WP_Styles::enqueue()\n * @global object $wp_styles The WP_Styles object for printing styles.\n * @link http:\/\/www.w3.org\/TR\/CSS2\/media.html#media-types List of CSS media types.\n *\n * @param string $handle Name of the stylesheet.\n * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '\/css\/mystyle.css'.\n * @param array $deps Array of handles (names) of any stylesheet that this stylesheet depends on.\n * (Stylesheets that must be loaded before this stylesheet.) Pass an empty array if there are no dependencies.\n * @param string|bool $ver String specifying the stylesheet version number, if it has one. This parameter\n * is used to ensure that the correct version is sent to the client regardless of caching, and so should be included\n * if a version number is available and makes sense for the stylesheet.\n * @param string $media The media for which this stylesheet has been defined.\n *\/","file":"functions.wp-styles.php","line":133,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[137],"sprintf":[137],"__":[137],"did_action":[136],"is_a":[135],"explode":[143],"add":[144],"enqueue":[146]},"used_by":{"WP_Admin_Bar::initialize":[59],"WP_Customize_Color_Control::enqueue":[355],"_WP_Editors::enqueue_scripts":[490],"wp_admin_css":[2098],"add_thickbox":[2118],"wp_enqueue_media":[1543]}},"WP_Admin_Bar::add_menu":{"doc":"","file":"class-wp-admin-bar.php","line":64,"missingDoc":true,"filters":[],"uses":{"add_node":[65]},"used_by":[]},"WP_Admin_Bar::remove_menu":{"doc":"","file":"class-wp-admin-bar.php","line":68,"missingDoc":true,"filters":[],"uses":{"remove_node":[69]},"used_by":[]},"WP_Admin_Bar::add_node":{"doc":"\/**\n * Add a node to the menu.\n *\n * @param array $args - The arguments for each node.\n * - id - string - The ID of the item.\n * - title - string - The title of the node.\n * - parent - string - The ID of the parent node. Optional.\n * - href - string - The link for the item. Optional.\n * - group - boolean - If the node is a group. Optional. Default false.\n * - meta - array - Meta data including the following keys: html, class, onclick, target, title, tabindex.\n *\/","file":"class-wp-admin-bar.php","line":83,"missingDoc":false,"filters":[],"uses":{"array_merge":[86],"func_get_arg":[86,86,85],"func_num_args":[85],"is_string":[85],"get_object_vars":[89,112],"is_object":[88],"_doing_it_wrong":[96],"__":[96],"esc_attr":[98],"sanitize_title":[98],"trim":[98],"get_node":[111],"wp_parse_args":[116,118],"_deprecated_argument":[127],"sprintf":[127],"_set_node":[131]},"used_by":[]},"_doing_it_wrong":{"doc":"\/**\n * Marks something as being incorrectly called.\n *\n * There is a hook doing_it_wrong_run that will be called that can be used\n * to get the backtrace up to what file and function called the deprecated\n * function.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 3.1.0\n * @access private\n *\n * @uses do_action() Calls 'doing_it_wrong_run' and passes the function arguments.\n * @uses apply_filters() Calls 'doing_it_wrong_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called.\n * @param string $message A message explaining what has been done incorrectly.\n * @param string $version The version of WordPress where the message was added.\n *\/","file":"functions.php","line":2973,"missingDoc":false,"filters":["'doing_it_wrong_run'","'doing_it_wrong_trigger_error'"],"uses":{"is_null":[2979],"sprintf":[2979,2981],"__":[2979,2980,2981],"trigger_error":[2981]},"used_by":{"WP_Admin_Bar::add_node":[96],"wp_print_scripts":[29],"wp_register_script":[56],"wp_localize_script":[90],"wp_deregister_script":[109],"wp_enqueue_script":[129],"wp_dequeue_script":[153],"wp_script_is":[179],"wp_print_styles":[30],"wp_add_inline_style":[57],"wp_register_style":[85],"wp_deregister_style":[106],"wp_enqueue_style":[137],"wp_dequeue_style":[159],"wp_style_is":[186],"check_admin_referer":[808],"register_uninstall_hook":[679],"is_archive":[143],"is_post_type_archive":[164],"is_attachment":[184],"is_author":[208],"is_category":[232],"is_tag":[256],"is_tax":[285],"is_comments_popup":[305],"is_date":[325],"is_day":[345],"is_feed":[366],"is_comment_feed":[386],"is_front_page":[416],"is_home":[445],"is_month":[465],"is_page":[492],"is_paged":[512],"is_preview":[532],"is_robots":[552],"is_search":[572],"is_single":[601],"is_singular":[628],"is_time":[648],"is_trackback":[668],"is_year":[688],"is_404":[708]}},"WP_Admin_Bar::_set_node":{"doc":"","file":"class-wp-admin-bar.php","line":134,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::get_node":{"doc":"\/**\n * Gets a node.\n *\n * @return object Node.\n *\/","file":"class-wp-admin-bar.php","line":143,"missingDoc":false,"filters":[],"uses":{"_get_node":[144]},"used_by":[]},"WP_Admin_Bar::_get_node":{"doc":"","file":"class-wp-admin-bar.php","line":148,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::get_nodes":{"doc":"","file":"class-wp-admin-bar.php","line":159,"missingDoc":true,"filters":[],"uses":{"_get_nodes":[160]},"used_by":[]},"WP_Admin_Bar::_get_nodes":{"doc":"","file":"class-wp-admin-bar.php","line":169,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::add_group":{"doc":"\/**\n * Add a group to a menu node.\n *\n * @since 3.3.0\n *\n * @param array $args - The arguments for each node.\n * - id - string - The ID of the item.\n * - parent - string - The ID of the parent node. Optional. Default root.\n * - meta - array - Meta data including the following keys: class, onclick, target, title.\n *\/","file":"class-wp-admin-bar.php","line":186,"missingDoc":false,"filters":[],"uses":{"add_node":[189]},"used_by":[]},"WP_Admin_Bar::remove_node":{"doc":"\/**\n * Remove a node.\n *\n * @param string The ID of the item.\n *\/","file":"class-wp-admin-bar.php","line":197,"missingDoc":false,"filters":[],"uses":{"_unset_node":[198]},"used_by":[]},"WP_Admin_Bar::_unset_node":{"doc":"","file":"class-wp-admin-bar.php","line":201,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::render":{"doc":"","file":"class-wp-admin-bar.php","line":205,"missingDoc":true,"filters":[],"uses":{"_bind":[206],"_render":[208]},"used_by":[]},"WP_Admin_Bar::_bind":{"doc":"","file":"class-wp-admin-bar.php","line":211,"missingDoc":true,"filters":[],"uses":{"remove_node":[217],"add_node":[218],"_get_nodes":[224,234],"_get_node":[239,256,274,283,299,302,327],"_set_node":[263,289],"array_search":[307],"array_splice":[311]},"used_by":[]},"WP_Admin_Bar::_render":{"doc":"","file":"class-wp-admin-bar.php","line":332,"missingDoc":true,"filters":[],"uses":{"strpos":[341,343,339],"wp_is_mobile":[345],"_e":[351,357],"esc_attr_e":[352],"_render_group":[354],"esc_url":[357],"wp_logout_url":[357]},"used_by":[]},"wp_is_mobile":{"doc":"\/**\n * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)\n *\n * @return bool true|false\n *\/","file":"vars.php","line":106,"missingDoc":false,"filters":[],"uses":{"strpos":[114,115,116,117,118,119,120]},"used_by":{"WP_Admin_Bar::_render":[345],"_device_can_upload":[3846],"user_can_richedit":[1759,1760],"wp_plupload_default_settings":[1271,1287],"_wp_customize_loader_settings":[1653,1654]}},"_e":{"doc":"\/**\n * Displays the returned translated text from translate().\n *\n * @see translate() Echoes returned translate() string\n * @since 1.2.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":141,"missingDoc":false,"filters":[],"uses":{"translate":[142]},"used_by":{"WP_Admin_Bar::_render":[351,357],"WP_Customize_Upload_Control::render_content":[444,445],"WP_Customize_Image_Control::render_content":[558],"WP_Customize_Image_Control::tab_upload_new":[597,602,605],"_WP_Editors::wp_fullscreen_html":[669,673,718,718,737],"_WP_Editors::wp_link_dialog":[815,817,820,823,827,831,843,856],"Walker_Comment::start_el":[1357],"WP_Widget_Pages::form":[66,68,70,71,72,76,78],"WP_Widget_Links::form":[148,159,161,162,163,169,171,173,175,178],"WP_Widget_Search::form":[215],"WP_Widget_Archives::form":[281,283,285],"WP_Widget_Meta::widget":[316,317,320],"WP_Widget_Meta::form":[339],"WP_Widget_Calendar::form":[379],"WP_Widget_Text::form":[425,430],"WP_Widget_Categories::form":[511,515,518,521],"WP_Widget_Recent_Posts::form":[615,618,622],"WP_Widget_Recent_Comments::form":[722,725],"wp_widget_rss_form":[943,946,949,958,961,964],"WP_Widget_Tag_Cloud::form":[1067,1069],"WP_Nav_Menu_Widget::form":[1140,1144],"dead_db":[2771,2775],"__main":[16,162,163,164,165,171,172,173,174,175,179,180,181,182,183,184,185,186,187,191,192,195,195,195,195,196,196,197,197,198,198,200,200,201,201,202,202,203,203,204,204,207,209,209,209,209,210,210,211,211,212,212,213,213,214,214,215,215,216,216,217,217,220,222,223,224,229,231,233,234,33,35,62,66,75,80,85,90,103,108,114,17,49,72,77,77,80,80,83,21,57,69,73,74],"wp_maintenance":[174,178],"wp_print_media_templates":[40,51,53,58,59,110,111,125,148,152,176,203,204,209,222,226,231,236,245,248,255,259,284,310,340,343,360,372,379,391,397,402,420],"wp_list_post_revisions":[1443,1444],"wp_rss":[895]}},"esc_attr_e":{"doc":"\/**\n * Displays translated text that has been escaped for safe use in an attribute.\n *\n * @see translate() Echoes returned translate() string\n * @see esc_attr()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":155,"missingDoc":false,"filters":[],"uses":{"esc_attr":[156],"translate":[156]},"used_by":{"WP_Admin_Bar::_render":[352],"WP_Customize_Color_Control::render_content":[387],"_WP_Editors::wp_link_dialog":[853],"WP_Widget_Meta::widget":[318],"__main":[162,163,164,165,237,245,245,98,72,91,73,74,75],"wp_print_media_templates":[32,160,164,166,168,267,270,273,276,292,295,298,301,351,354,405,408,411,414,423,426,429],"wp_list_post_revisions":[1424]}},"WP_Admin_Bar::_render_container":{"doc":"","file":"class-wp-admin-bar.php","line":363,"missingDoc":true,"filters":[],"uses":{"esc_attr":[367],"_render_group":[369]},"used_by":[]},"WP_Admin_Bar::_render_group":{"doc":"","file":"class-wp-admin-bar.php","line":374,"missingDoc":true,"filters":[],"uses":{"_render_container":[376],"esc_attr":[382,386],"trim":[382],"_render_item":[388]},"used_by":[]},"WP_Admin_Bar::_render_item":{"doc":"","file":"class-wp-admin-bar.php","line":393,"missingDoc":true,"filters":[],"uses":{"esc_attr":[414,418,425,428,434],"trim":[414],"esc_url":[420],"esc_js":[422],"_render_group":[450]},"used_by":[]},"WP_Admin_Bar::recursive_render":{"doc":"","file":"class-wp-admin-bar.php","line":462,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[463],"_render_item":[464]},"used_by":[]},"WP_Admin_Bar::add_menus":{"doc":"","file":"class-wp-admin-bar.php","line":467,"missingDoc":true,"filters":["'add_admin_bar_menus'"],"uses":{"add_action":[469,470,471,474,475,476,477,481,482,484,486],"is_network_admin":[480],"is_user_admin":[480]},"used_by":[]},"WP_Ajax_Response::__construct":{"doc":"\/**\n * Constructor - Passes args to {@link WP_Ajax_Response::add()}.\n *\n * @since 2.1.0\n * @see WP_Ajax_Response::add()\n *\n * @param string|array $args Optional. Will be passed to add() method.\n * @return WP_Ajax_Response\n *\/","file":"class-wp-ajax-response.php","line":27,"missingDoc":false,"filters":[],"uses":{"add":[29]},"used_by":[]},"WP_Ajax_Response::add":{"doc":"\/**\n * Append to XML response based on given arguments.\n *\n * The arguments that can be passed in the $args parameter are below. It is\n * also possible to pass a WP_Error object in either the 'id' or 'data'\n * argument. The parameter isn't actually optional, content should be given\n * in order to send the correct response.\n *\n * 'what' argument is a string that is the XMLRPC response type.\n * 'action' argument is a boolean or string that acts like a nonce.\n * 'id' argument can be WP_Error or an integer.\n * 'old_id' argument is false by default or an integer of the previous ID.\n * 'position' argument is an integer or a string with -1 = top, 1 = bottom,\n * html ID = after, -html ID = before.\n * 'data' argument is a string with the content or message.\n * 'supplemental' argument is an array of strings that will be children of\n * the supplemental element.\n *\n * @since 2.1.0\n *\n * @param string|array $args Override defaults.\n * @return string XML response.\n *\/","file":"class-wp-ajax-response.php","line":55,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[63],"extract":[64],"preg_replace":[65],"is_wp_error":[67,73],"get_error_message":[75],"get_error_data":[76],"get_class":[80],"get_object_vars":[81],"is_object":[79],"is_array":[88,100],"is_scalar":[86],"get_error_codes":[74]},"used_by":[]},"WP_Ajax_Response::send":{"doc":"\/**\n * Display XML formatted responses.\n *\n * Sets the content type header to text\/xml.\n *\n * @since 2.1.0\n *\/","file":"class-wp-ajax-response.php","line":128,"missingDoc":false,"filters":[],"uses":{"header":[129],"get_option":[129,130],"wp_die":[135],"defined":[134]},"used_by":[]},"wp_die":{"doc":"\/**\n * Kill WordPress execution and display HTML message with error message.\n *\n * This function complements the die() PHP function. The difference is that\n * HTML will be displayed to the user. It is recommended to use this function\n * only, when the execution should not continue any further. It is not\n * recommended to call this function very often and try to handle as many errors\n * as possible silently.\n *\n * @since 2.0.4\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2047,"missingDoc":false,"filters":["'wp_die_ajax_handler'","'wp_die_xmlrpc_handler'","'wp_die_handler'"],"uses":{"defined":[2050,2048],"call_user_func":[2055]},"used_by":{"WP_Ajax_Response::send":[135],"WP_Customize_Manager::wp_die":[80,85],"WP_Customize_Manager::setup_theme":[115,120,131,135,138],"wp_allow_comment":[681],"check_comment_flood_db":[740],"do_feed":[1010],"wp_nonce_ays":[2029],"wp_send_json":[2323],"dead_db":[2758],"wp_set_wpdb_vars":[370],"wp_not_installed":[428],"signup_nonce_check":[1641],"maybe_add_existing_user_to_blog":[1686,1688],"ms_site_check":[89,96,103],"wpmu_current_site":[219,221],"ms_not_installed":[257],"__main":[35,122],"wp_protect_special_option":[109],"check_ajax_referer":[841],"_show_post_preview":[5251],"wpdb::print_error":[1045],"wpdb::bail":[1636]}},"WP_Customize_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":88,"missingDoc":false,"filters":[],"uses":{"array_keys":[89],"get_object_vars":[89],"get_setting":[106,109],"is_array":[104]},"used_by":[]},"WP_Customize_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":120,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Control::value":{"doc":"\/**\n * Fetch a setting's value.\n * Grabs the main setting by default.\n *\n * @since 3.4.0\n *\n * @param string $setting_key\n * @return mixed The requested setting's value, if the setting exists.\n *\/","file":"class-wp-customize-control.php","line":132,"missingDoc":false,"filters":[],"uses":{"value":[134]},"used_by":[]},"WP_Customize_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":142,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Control::check_capabilities":{"doc":"\/**\n * Check if the theme supports the control and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true.\n *\/","file":"class-wp-customize-control.php","line":158,"missingDoc":false,"filters":[],"uses":{"check_capabilities":[160,165],"get_section":[164]},"used_by":[]},"WP_Customize_Control::maybe_render":{"doc":"\/**\n * Check capabilities and render the control.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::render()\n *\/","file":"class-wp-customize-control.php","line":177,"missingDoc":false,"filters":["'customize_render_control'","'customize_render_control_' . $this->id"],"uses":{"check_capabilities":[178],"render":[184]},"used_by":[]},"WP_Customize_Control::render":{"doc":"\/**\n * Render the control. Renders the control wrapper, then calls $this->render_content().\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":192,"missingDoc":false,"filters":[],"uses":{"str_replace":[193,193],"esc_attr":[196,196],"render_content":[197]},"used_by":[]},"WP_Customize_Control::get_link":{"doc":"\/**\n * Get the data link parameter for a setting.\n *\n * @since 3.4.0\n *\n * @param string $setting_key\n * @return string Data link parameter, if $setting_key is a valid setting, empty string otherwise.\n *\/","file":"class-wp-customize-control.php","line":209,"missingDoc":false,"filters":[],"uses":{"esc_attr":[213]},"used_by":[]},"WP_Customize_Control::link":{"doc":"\/**\n * Render the data link parameter for a setting\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::get_link()\n *\n * @param string $setting_key\n *\/","file":"class-wp-customize-control.php","line":224,"missingDoc":false,"filters":[],"uses":{"get_link":[225]},"used_by":[]},"WP_Customize_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * Allows the content to be overriden without having to rewrite the wrapper.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":235,"missingDoc":false,"filters":[],"uses":{"esc_html":[240,249,260,266,277],"esc_attr":[241,248,265,265,281],"value":[241,248,248,265,281,294],"link":[241,248,265,278],"checked":[248,265],"selected":[281],"wp_dropdown_pages":[288],"__":[292],"str_replace":[299],"get_link":[299],"printf":[301]},"used_by":[]},"checked":{"doc":"\/**\n * Outputs the html checked attribute.\n *\n * Compares the first two arguments and if identical marks as checked\n *\n * @since 1.0.0\n *\n * @param mixed $checked One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2226,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2227]},"used_by":{"WP_Customize_Control::render_content":[248,265],"WP_Widget_Links::form":[168,170,172,174],"WP_Widget_Text::form":[430],"WP_Widget_Categories::form":[514,517,520],"WP_Widget_Recent_Posts::form":[621]}},"selected":{"doc":"\/**\n * Outputs the html selected attribute.\n *\n * Compares the first two arguments and if identical marks as selected\n *\n * @since 1.0.0\n *\n * @param mixed $selected One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2242,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2243]},"used_by":{"WP_Customize_Control::render_content":[281],"WP_Widget_Pages::form":[70,71,72],"WP_Widget_Links::form":[154,161,162,163,164],"wp_widget_rss_form":[953],"WP_Widget_Tag_Cloud::form":[1076],"WP_Nav_Menu_Widget::form":[1149],"wp_print_media_templates":[329,364],"wp_dropdown_users":[1052,1059,1068]}},"wp_dropdown_pages":{"doc":"\/**\n * Retrieve or display list of pages as a dropdown (select list).\n *\n * @since 2.1.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return string HTML content, if not displaying.\n *\/","file":"post-template.php","line":769,"missingDoc":false,"filters":["'wp_dropdown_pages'"],"uses":{"wp_parse_args":[778],"extract":[779],"get_pages":[781],"esc_attr":[788,788,792],"walk_page_dropdown_tree":[793]},"used_by":{"WP_Customize_Control::render_content":[288]}},"WP_Customize_Color_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":343,"missingDoc":false,"filters":[],"uses":{"__":[344]},"used_by":[]},"WP_Customize_Color_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":353,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[354],"wp_enqueue_style":[355]},"used_by":[]},"WP_Customize_Color_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":364,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Color_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":374,"missingDoc":false,"filters":[],"uses":{"strpos":[378],"esc_attr":[380],"esc_html":[385],"esc_attr_e":[387]},"used_by":[]},"WP_Customize_Upload_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":412,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[413]},"used_by":[]},"WP_Customize_Upload_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":422,"missingDoc":false,"filters":[],"uses":{"implode":[431]},"used_by":[]},"WP_Customize_Upload_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":439,"missingDoc":false,"filters":[],"uses":{"esc_html":[442],"_e":[444,445]},"used_by":[]},"WP_Customize_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n * @uses WP_Customize_Upload_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":479,"missingDoc":false,"filters":[],"uses":{"__":[480,484,485],"add_tab":[484,485],"add_action":[488]},"used_by":[]},"WP_Customize_Image_Control::prepare_control":{"doc":"\/**\n * Prepares the control.\n *\n * If no tabs exist, removes the control from the manager.\n *\n * @since 3.4.2\n *\/","file":"class-wp-customize-control.php","line":498,"missingDoc":false,"filters":[],"uses":{"remove_control":[500]},"used_by":[]},"WP_Customize_Image_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Upload_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":509,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":519,"missingDoc":false,"filters":[],"uses":{"value":[520],"call_user_func":[522,552],"esc_html":[526,546],"esc_url":[534],"set_url_scheme":[534],"esc_attr":[545,551],"_e":[558]},"used_by":[]},"set_url_scheme":{"doc":"\/**\n * Set the scheme for a URL\n *\n * @since 3.4.0\n *\n * @param string $url Absolute url that includes a scheme\n * @param string $scheme Optional. Scheme to give $url. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'.\n * @return string $url URL with chosen scheme.\n *\/","file":"link-template.php","line":2225,"missingDoc":false,"filters":["'set_url_scheme'"],"uses":{"force_ssl_admin":[2230,2232,2228],"is_ssl":[2235],"force_ssl_login":[2228],"in_array":[2227],"preg_replace":[2239,2241]},"used_by":{"WP_Customize_Image_Control::render_content":[534],"WP_Customize_Image_Control::print_tab_image":[627,628],"WP_Customize_Header_Image_Control::print_header_image":[783,784],"_WP_Editors::editor_settings":[240],"wp_xmlrpc_server::_multisite_getUsersBlogs":[3665],"self_link":[491],"url_is_accessable_via_ssl":[2808],"get_home_url":[1920],"get_site_url":[1972],"content_url":[2042],"plugins_url":[2075],"network_site_url":[2112],"network_home_url":[2148],"filter_SSL":[1902],"_wp_menu_item_classes_by_context":[367],"auth_redirect":[752,771,785],"get_header_image":[897],"_custom_background_cb":[1149]}},"WP_Customize_Image_Control::add_tab":{"doc":"\/**\n * Add a tab to the control.\n *\n * @since 3.4.0\n *\n * @param string $id\n * @param string $label\n * @param mixed $callback\n *\/","file":"class-wp-customize-control.php","line":573,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::remove_tab":{"doc":"\/**\n * Remove a tab from the control.\n *\n * @since 3.4.0\n *\n * @param string $id\n *\/","file":"class-wp-customize-control.php","line":587,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::tab_upload_new":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":594,"missingDoc":false,"filters":[],"uses":{"_e":[597,602,605],"_device_can_upload":[595]},"used_by":[]},"_device_can_upload":{"doc":"\/**\n * Test if the current device has the capability to upload files.\n *\n * @since 3.4.0\n * @access private\n *\n * @return bool true|false\n *\/","file":"functions.php","line":3845,"missingDoc":false,"filters":[],"uses":{"wp_is_mobile":[3846],"preg_match":[3854],"version_compare":[3854],"strpos":[3851,3852,3853]},"used_by":{"WP_Customize_Image_Control::tab_upload_new":[595],"wp_print_media_templates":[50],"wp_plupload_default_settings":[1288]}},"WP_Customize_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":614,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::print_tab_image":{"doc":"\/**\n * @since 3.4.0\n *\n * @param string $url\n * @param string $thumbnail_url\n *\/","file":"class-wp-customize-control.php","line":626,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[627,628],"esc_url":[630,631]},"used_by":[]},"WP_Customize_Background_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n *\/","file":"class-wp-customize-control.php","line":654,"missingDoc":false,"filters":[],"uses":{"__":[656,663],"add_tab":[663]},"used_by":[]},"WP_Customize_Background_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":669,"missingDoc":false,"filters":[],"uses":{"get_posts":[670],"get_stylesheet":[673],"print_tab_image":[684],"esc_url_raw":[684]},"used_by":[]},"get_posts":{"doc":"\/**\n * Retrieve list of latest posts or posts matching criteria.\n *\n * The defaults are as follows:\n * 'numberposts' - Default is 5. Total number of posts to retrieve.\n * 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n * 'category' - What category to pull the posts from.\n * 'orderby' - Default is 'post_date'. How to order the posts.\n * 'order' - Default is 'DESC'. The order to retrieve the posts.\n * 'include' - See {@link WP_Query::query()} for more.\n * 'exclude' - See {@link WP_Query::query()} for more.\n * 'meta_key' - See {@link WP_Query::query()} for more.\n * 'meta_value' - See {@link WP_Query::query()} for more.\n * 'post_type' - Default is 'post'. Can be 'page', or 'attachment' to name a few.\n * 'post_parent' - The parent of the post or post type.\n * 'post_status' - Default is 'publish'. Post status to retrieve.\n *\n * @since 1.2.0\n * @uses $wpdb\n * @uses WP_Query::query() See for more default arguments and information.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/get_posts\n *\n * @param array $args Optional. Overrides defaults.\n * @return array List of posts.\n *\/","file":"post.php","line":1699,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1709],"wp_parse_id_list":[1717,1721],"count":[1718],"query":[1727]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[670],"wp_xmlrpc_server::wp_getPages":[2310],"wp_xmlrpc_server::wp_getMediaLibrary":[3332],"get_boundary_post":[1333],"gallery_shortcode":[714],"wp_get_nav_menu_items":[493,516],"get_children":[311],"wp_get_recent_posts":[2649],"WP_Query::get_posts":[2757],"WP_Query::query":[2972],"get_uploaded_header_images":[1003]}},"get_stylesheet":{"doc":"\/**\n * Retrieve name of the current stylesheet.\n *\n * The theme name that the administrator has currently set the front end theme\n * as.\n *\n * For all extensive purposes, the template name and the stylesheet name are\n * going to be the same for most cases.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet' filter on stylesheet name.\n *\n * @return string Stylesheet name.\n *\/","file":"theme.php","line":146,"missingDoc":false,"filters":["'stylesheet'"],"uses":{"get_option":[147]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[673],"WP_Customize_Manager::setup_theme":[122],"WP_Customize_Manager::is_theme_active":[269],"WP_Customize_Manager::customize_preview_init":[328],"WP_Customize_Manager::customize_preview_settings":[386,387],"WP_Customize_Manager::get_stylesheet":[452],"WP_Customize_Manager::get_stylesheet_root":[474],"WP_Customize_Manager::save":[498,505],"WP_Theme::__get":[330],"WP_Theme::offsetGet":[404],"WP_Theme::markup_header":[644],"WP_Theme::is_allowed":[1053,1059],"get_themes":[2938],"wp_get_themes":[38],"wp_get_theme":[96],"get_stylesheet_directory":[159],"get_stylesheet_directory_uri":[174],"switch_theme":[699],"validate_current_theme":[726],"wp_update_themes":[251,253,260]}},"esc_url_raw":{"doc":"\/**\n * Performs esc_url() for database usage.\n *\n * @since 2.8.0\n * @uses esc_url()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols An array of acceptable protocols.\n * @return string The cleaned URL.\n *\/","file":"formatting.php","line":2622,"missingDoc":false,"filters":[],"uses":{"esc_url":[2623]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[684],"WP_Theme::sanitize_header":[619],"wp_widget_rss_process":[997],"sanitize_url":[2068],"sanitize_option":[2848,2858,2910],"get_pagenum_link":[1472],"wp_update_nav_menu_item":[382],"get_header_image":[897],"get_uploaded_header_images":[1009]}},"WP_Customize_Background_Image_Control::tab_default_background":{"doc":"\/**\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::print_tab_image()\n *\/","file":"class-wp-customize-control.php","line":691,"missingDoc":false,"filters":[],"uses":{"print_tab_image":[692]},"used_by":[]},"WP_Customize_Header_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::__construct()\n * @uses WP_Customize_Image_Control::add_tab()\n *\n * @param WP_Customize_Manager $manager\n *\/","file":"class-wp-customize-control.php","line":727,"missingDoc":false,"filters":[],"uses":{"__":[729,739,740,741,742],"remove_tab":[747]},"used_by":[]},"WP_Customize_Header_Image_Control::prepare_control":{"doc":"\/**\n * Prepares the control.\n *\n * If no tabs exist, removes the control from the manager.\n *\n * @since 3.4.2\n *\/","file":"class-wp-customize-control.php","line":757,"missingDoc":false,"filters":[],"uses":{"process_default_headers":[763],"get_uploaded_header_images":[765],"add_tab":[768],"__":[768],"remove_tab":[771]},"used_by":[]},"get_uploaded_header_images":{"doc":"\/**\n * Get the header images uploaded for the current theme.\n *\n * @since 3.2.0\n *\n * @return array\n *\/","file":"theme.php","line":999,"missingDoc":false,"filters":[],"uses":{"get_posts":[1003],"get_option":[1003],"esc_url_raw":[1009],"wp_get_attachment_metadata":[1010],"basename":[1011]},"used_by":{"WP_Customize_Header_Image_Control::prepare_control":[765],"_get_random_header_data":[919]}},"WP_Customize_Header_Image_Control::print_header_image":{"doc":"\/**\n * @since 3.4.0\n *\n * @param mixed $choice Which header image to select. (@see Custom_Image_Header::get_header_image() )\n * @param array $header\n *\/","file":"class-wp-customize-control.php","line":782,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[783,784],"esc_url":[795,797],"esc_attr":[796],"json_encode":[796]},"used_by":[]},"json_encode":{"doc":"","file":"compat.php","line":65,"missingDoc":true,"filters":[],"uses":{"is_a":[68],"encodeUnsafe":[73]},"used_by":{"WP_Customize_Header_Image_Control::print_header_image":[796],"WP_Customize_Manager::customize_preview_settings":[397],"WP_Scripts::localize":[148],"wp_send_json":[2321],"wp_mce_translation":[554,555,556,557,558,559],"wp_plupload_default_settings":[1293],"_wp_customize_loader_settings":[1663]}},"WP_Customize_Header_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":805,"missingDoc":false,"filters":[],"uses":{"print_header_image":[809]},"used_by":[]},"WP_Customize_Header_Image_Control::tab_default_headers":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":815,"missingDoc":false,"filters":[],"uses":{"print_header_image":[817]},"used_by":[]},"WP_Customize_Manager::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":30,"missingDoc":false,"filters":[],"uses":{"add_filter":[35],"add_action":[37,38,41,51,53,54,55],"remove_action":[44,47,48,49]},"used_by":[]},"remove_action":{"doc":"\/**\n * Removes a function from a specified action hook.\n *\n * This function removes a function attached to a specified action hook. This\n * method can be used to remove default functions attached to a specific filter\n * hook and possibly replace them with a substitute.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The action hook to which the function to be removed is hooked.\n * @param callback $function_to_remove The name of the function which should be removed.\n * @param int $priority optional The priority of the function (default: 10).\n * @return boolean Whether the function is removed.\n *\/","file":"plugin.php","line":529,"missingDoc":false,"filters":[],"uses":{"remove_filter":[530]},"used_by":{"WP_Customize_Manager::__construct":[44,47,48,49],"WP_Customize_Manager::remove_preview_signature":[417],"automatic_feed_links":[2456],"wp_print_media_templates":[69],"wp_get_post_autosave":[4999],"add_feed":[92],"_remove_theme_support":[1496,1497,1505,1506]}},"WP_Customize_Manager::doing_ajax":{"doc":"\/**\n * Return true if it's an AJAX request.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"class-wp-customize-manager.php","line":65,"missingDoc":false,"filters":[],"uses":{"defined":[66]},"used_by":[]},"WP_Customize_Manager::wp_die":{"doc":"\/**\n * Custom wp_die wrapper. Returns either the standard message for UI\n * or the AJAX message.\n *\n * @since 3.4.0\n *\n * @param mixed $ajax_message AJAX return\n * @param mixed $message UI message\n *\/","file":"class-wp-customize-manager.php","line":78,"missingDoc":false,"filters":[],"uses":{"wp_die":[80,85],"doing_ajax":[79],"__":[83]},"used_by":[]},"WP_Customize_Manager::wp_die_handler":{"doc":"\/**\n * Return the AJAX wp_die() handler if it's a customized request.\n *\n * @since 3.4.0\n *\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":95,"missingDoc":false,"filters":[],"uses":{"doing_ajax":[96]},"used_by":[]},"WP_Customize_Manager::setup_theme":{"doc":"\/**\n * Start preview and customize theme.\n *\n * Check if customize query variable exist. Init filters to filter the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":109,"missingDoc":false,"filters":[],"uses":{"send_origin_headers":[110],"auth_redirect":[113],"doing_ajax":[114,112],"is_user_logged_in":[114],"wp_die":[115,120,131,135,138],"is_admin":[112],"show_admin_bar":[117],"current_user_can":[119,130],"get_stylesheet":[122],"wp_get_theme":[124],"add_action":[128],"errors":[134],"theme":[134,137],"is_allowed":[137],"is_theme_active":[126],"start_previewing_theme":[141]},"used_by":[]},"send_origin_headers":{"doc":"\/**\n * Send Access-Control-Allow-Origin and related headers if the current request\n * is from an allowed origin.\n *\n * If the request is an OPTIONS request, the script exits with either access\n * control headers sent, or a 403 response if the origin is not allowed. For\n * other request methods, you will receive a return value.\n *\n * @since 3.4.0\n *\n * @return bool|string Returns the origin URL if headers are sent. Returns false\n * if headers are not sent.\n *\/","file":"http.php","line":296,"missingDoc":false,"filters":[],"uses":{"get_http_origin":[297],"header":[300,301],"is_allowed_http_origin":[299],"status_header":[308]},"used_by":{"WP_Customize_Manager::setup_theme":[110]}},"auth_redirect":{"doc":"\/**\n * Checks if a user is logged in, if not it redirects them to the login page.\n *\n * @since 1.5\n *\/","file":"pluggable.php","line":742,"missingDoc":false,"filters":["'secure_auth_redirect'","'auth_redirect_scheme'","'auth_redirect'"],"uses":{"is_ssl":[745,750],"force_ssl_admin":[745],"wp_redirect":[752,755,771,774,789],"set_url_scheme":[752,771,785],"strpos":[751,750,770,769,785],"is_user_admin":[760],"get_user_option":[769],"wp_validate_auth_cookie":[765],"nocache_headers":[783],"wp_get_referer":[785,785],"wp_login_url":[787]},"used_by":{"WP_Customize_Manager::setup_theme":[113]}},"wp_get_theme":{"doc":"\/**\n * Gets a WP_Theme object for a theme.\n *\n * @since 3.4.0\n *\n * @param string $stylesheet Directory name for the theme. Optional. Defaults to current theme.\n * @param string $theme_root Absolute path of the theme root to look in. Optional. If not specified, get_raw_theme_root()\n * \tis used to calculate the theme root for the $stylesheet provided (or current theme).\n * @return WP_Theme Theme object. Be sure to check the object's exists() method if you need to confirm the theme's existence.\n *\/","file":"theme.php","line":92,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[96],"get_raw_theme_root":[99],"in_array":[102]},"used_by":{"WP_Customize_Manager::setup_theme":[124],"get_current_theme":[2982],"wp_insert_post":[2932],"switch_theme":[669,670],"get_theme_mods":[751],"remove_theme_mods":[842],"check_theme_switched":[1610]}},"WP_Customize_Manager::after_setup_theme":{"doc":"\/**\n * Callback to validate a theme once it is loaded\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":149,"missingDoc":false,"filters":[],"uses":{"wp_redirect":[151],"doing_ajax":[150],"validate_current_theme":[150]},"used_by":[]},"validate_current_theme":{"doc":"\/**\n * Checks that current theme files 'index.php' and 'style.css' exists.\n *\n * Does not check the default theme, which is the fallback and should always exist.\n * Will switch theme to the fallback theme if current theme does not validate.\n * You can use the 'validate_current_theme' filter to return false to\n * disable this functionality.\n *\n * @since 1.5.0\n * @see WP_DEFAULT_THEME\n *\n * @return bool\n *\/","file":"theme.php","line":716,"missingDoc":false,"filters":["'validate_current_theme'"],"uses":{"defined":[718],"switch_theme":[722,727,732],"get_template":[721],"file_exists":[721,726,731],"get_template_directory":[721,726],"get_stylesheet":[726],"is_child_theme":[731],"get_stylesheet_directory":[731]},"used_by":{"WP_Customize_Manager::after_setup_theme":[150]}},"WP_Customize_Manager::start_previewing_theme":{"doc":"\/**\n * Start previewing the selected theme.\n *\n * Adds filters to change the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":163,"missingDoc":false,"filters":["'start_previewing_theme'"],"uses":{"is_preview":[165],"add_filter":[171,172,173,176,177,180,181],"is_theme_active":[170]},"used_by":[]},"WP_Customize_Manager::stop_previewing_theme":{"doc":"\/**\n * Stop previewing the selected theme.\n *\n * Removes filters to change the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":194,"missingDoc":false,"filters":["'stop_previewing_theme'"],"uses":{"is_preview":[195],"remove_filter":[201,202,203,206,207,210,211],"is_theme_active":[200]},"used_by":[]},"remove_filter":{"doc":"\/**\n * Removes a function from a specified filter hook.\n *\n * This function removes a function attached to a specified filter hook. This\n * method can be used to remove default functions attached to a specific filter\n * hook and possibly replace them with a substitute.\n *\n * To remove a hook, the $function_to_remove and $priority arguments must match\n * when the hook was added. This goes for both filters and actions. No warning\n * will be given on removal failure.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The filter hook to which the function to be removed is hooked.\n * @param callback $function_to_remove The name of the function which should be removed.\n * @param int $priority optional. The priority of the function (default: 10).\n * @param int $accepted_args optional. The number of arguments the function accepts (default: 1).\n * @return boolean Whether the function existed before it was removed.\n *\/","file":"plugin.php","line":260,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[261]},"used_by":{"WP_Customize_Manager::stop_previewing_theme":[201,202,203,206,207,210,211],"kses_remove_filters":[1357,1360,1361,1364,1365,1366],"_wp_post_thumbnail_class_filter_remove":[606],"__main":[62,63,33],"welcome_user_msg_filter":[1848],"remove_action":[530]}},"WP_Customize_Manager::theme":{"doc":"\/**\n * Get the theme being customized.\n *\n * @since 3.4.0\n *\n * @return WP_Theme\n *\/","file":"class-wp-customize-manager.php","line":224,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::settings":{"doc":"\/**\n * Get the registered settings.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":235,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::controls":{"doc":"\/**\n * Get the registered controls.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":246,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::sections":{"doc":"\/**\n * Get the registered sections.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":257,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::is_theme_active":{"doc":"\/**\n * Checks if the current theme is active.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"class-wp-customize-manager.php","line":268,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[269]},"used_by":[]},"WP_Customize_Manager::wp_loaded":{"doc":"\/**\n * Register styles\/scripts and initialize the preview of each setting\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":277,"missingDoc":false,"filters":["'customize_register'"],"uses":{"customize_preview_init":[281],"is_preview":[280],"is_admin":[280]},"used_by":[]},"WP_Customize_Manager::wp_redirect_status":{"doc":"\/**\n * Prevents AJAX requests from following redirects when previewing a theme\n * by issuing a 200 response instead of a 30x.\n *\n * Instead, the JS will sniff out the location header.\n *\n * @since 3.4.0\n *\n * @param $status\n * @return int\n *\/","file":"class-wp-customize-manager.php","line":295,"missingDoc":false,"filters":[],"uses":{"is_preview":[296],"is_admin":[296]},"used_by":[]},"WP_Customize_Manager::post_value":{"doc":"\/**\n * Decode the $_POST attribute used to override the WP_Customize_Setting values.\n *\n * @since 3.4.0\n *\n * @param mixed $setting A WP_Customize_Setting derived object\n * @return string Sanitized attribute\n *\/","file":"class-wp-customize-manager.php","line":310,"missingDoc":false,"filters":[],"uses":{"json_decode":[313],"stripslashes":[313],"sanitize":[319]},"used_by":[]},"WP_Customize_Manager::customize_preview_init":{"doc":"\/**\n * Print javascript settings.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":327,"missingDoc":false,"filters":["'customize_preview_init'"],"uses":{"check_ajax_referer":[328],"get_stylesheet":[328],"prepare_controls":[330],"wp_enqueue_script":[332],"add_action":[333,334,335,336],"add_filter":[337],"preview":[340]},"used_by":[]},"check_ajax_referer":{"doc":"\/**\n * Verifies the AJAX request to prevent processing requests external of the blog.\n *\n * @since 2.0.3\n *\n * @param string $action Action nonce\n * @param string $query_arg where to look for nonce in $_REQUEST (since 2.5)\n *\/","file":"pluggable.php","line":831,"missingDoc":false,"filters":["'check_ajax_referer'"],"uses":{"wp_verify_nonce":[837],"wp_die":[841],"defined":[840]},"used_by":{"WP_Customize_Manager::customize_preview_init":[328],"WP_Customize_Manager::save":[498]}},"WP_Customize_Manager::customize_preview_base":{"doc":"\/**\n * Print base element for preview frame.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":351,"missingDoc":false,"filters":[],"uses":{"home_url":[352]},"used_by":[]},"WP_Customize_Manager::customize_preview_html5":{"doc":"\/**\n * Print a workaround to handle HTML5 tags in IE < 9\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":360,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::customize_preview_settings":{"doc":"\/**\n * Print javascript settings for preview frame.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":378,"missingDoc":false,"filters":[],"uses":{"esc_js":[381],"wp_create_nonce":[386,387],"get_stylesheet":[386,387],"js_value":[392],"json_encode":[397]},"used_by":[]},"wp_create_nonce":{"doc":"\/**\n * Creates a random, one time use token.\n *\n * @since 2.0.3\n *\n * @param string|int $action Scalar value to add context to the nonce.\n * @return string The one use form token\n *\/","file":"pluggable.php","line":1284,"missingDoc":false,"filters":["'nonce_user_logged_out'"],"uses":{"wp_get_current_user":[1285],"wp_nonce_tick":[1290],"substr":[1292],"wp_hash":[1292]},"used_by":{"WP_Customize_Manager::customize_preview_settings":[386,387],"wp_nonce_url":[1177],"wp_nonce_field":[1210],"wp_plupload_default_settings":[1281],"wp_prepare_attachment_for_js":[1355,1360],"wp_enqueue_media":[1464,1477],"signup_nonce_check":[1640]}},"WP_Customize_Manager::customize_preview_signature":{"doc":"\/**\n * Prints a signature so we can ensure the customizer was properly executed.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":407,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_preview_signature":{"doc":"\/**\n * Removes the signature in case we experience a case where the customizer was not properly executed.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":416,"missingDoc":false,"filters":[],"uses":{"remove_action":[417]},"used_by":[]},"WP_Customize_Manager::is_preview":{"doc":"\/**\n * Is it a theme preview?\n *\n * @since 3.4.0\n *\n * @return bool True if it's a preview, false if not.\n *\/","file":"class-wp-customize-manager.php","line":429,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::get_template":{"doc":"\/**\n * Retrieve the template name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Template name.\n *\/","file":"class-wp-customize-manager.php","line":440,"missingDoc":false,"filters":[],"uses":{"get_template":[441],"theme":[441]},"used_by":[]},"get_template":{"doc":"\/**\n * Retrieve name of the current theme.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template' filter on template option.\n *\n * @return string Template name.\n *\/","file":"theme.php","line":239,"missingDoc":false,"filters":["'template'"],"uses":{"get_option":[240]},"used_by":{"WP_Customize_Manager::get_template":[441],"WP_Customize_Manager::get_template_root":[463],"WP_Theme::__get":[328],"WP_Theme::offsetGet":[402],"get_template_directory":[252],"get_template_directory_uri":[268],"switch_theme":[676],"validate_current_theme":[721],"wp_update_themes":[259]}},"WP_Customize_Manager::get_stylesheet":{"doc":"\/**\n * Retrieve the stylesheet name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Stylesheet name.\n *\/","file":"class-wp-customize-manager.php","line":451,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[452],"theme":[452]},"used_by":[]},"WP_Customize_Manager::get_template_root":{"doc":"\/**\n * Retrieve the template root of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Theme root.\n *\/","file":"class-wp-customize-manager.php","line":462,"missingDoc":false,"filters":[],"uses":{"get_raw_theme_root":[463],"get_template":[463]},"used_by":[]},"get_raw_theme_root":{"doc":"\/**\n * Get the raw theme root relative to the content directory with no filters applied.\n *\n * @since 3.1.0\n *\n * @param string $stylesheet_or_template The stylesheet or template name of the theme\n * @param bool $skip_cache Optional. Whether to skip the cache. Defaults to false, meaning the cache is used.\n * @return string Theme root\n *\/","file":"theme.php","line":507,"missingDoc":false,"filters":[],"uses":{"count":[510],"get_option":[518,519,520,517],"get_theme_roots":[524]},"used_by":{"WP_Customize_Manager::get_template_root":[463],"WP_Customize_Manager::get_stylesheet_root":[474],"wp_get_themes":[40],"wp_get_theme":[99],"get_theme_root":[446],"get_theme_root_uri":[475],"switch_theme":[683,684]}},"WP_Customize_Manager::get_stylesheet_root":{"doc":"\/**\n * Retrieve the stylesheet root of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Theme root.\n *\/","file":"class-wp-customize-manager.php","line":473,"missingDoc":false,"filters":[],"uses":{"get_raw_theme_root":[474],"get_stylesheet":[474]},"used_by":[]},"WP_Customize_Manager::current_theme":{"doc":"\/**\n * Filter the current theme and return the name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @param $current_theme {@internal Parameter is not used}\n * @return string Theme name.\n *\/","file":"class-wp-customize-manager.php","line":485,"missingDoc":false,"filters":[],"uses":{"display":[486],"theme":[486]},"used_by":[]},"WP_Customize_Manager::save":{"doc":"\/**\n * Switch the theme and trigger the save action of each setting.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":494,"missingDoc":false,"filters":["'customize_save'"],"uses":{"is_preview":[495],"check_ajax_referer":[498],"get_stylesheet":[498,505],"stop_previewing_theme":[504],"switch_theme":[505],"start_previewing_theme":[506],"is_theme_active":[501],"save":[512]},"used_by":[]},"switch_theme":{"doc":"\/**\n * Switches the theme.\n *\n * Accepts one argument: $stylesheet of the theme. It also accepts an additional function signature\n * of two arguments: $template then $stylesheet. This is for backwards compatibility.\n *\n * @since 2.5.0\n * @uses do_action() Calls 'switch_theme' action, passing the new theme.\n *\n * @param string $stylesheet Stylesheet name\n *\/","file":"theme.php","line":663,"missingDoc":false,"filters":["'switch_theme'"],"uses":{"set_theme_mod":[667],"time":[667],"is_array":[666],"wp_get_theme":[669,670],"func_get_arg":[674],"get_template":[676],"func_num_args":[672],"update_option":[679,680,683,684,692,699],"get_raw_theme_root":[683,684],"delete_option":[686,687],"count":[682],"get":[690],"get_option":[695,694],"add_option":[696],"is_admin":[694],"get_stylesheet":[699]},"used_by":{"WP_Customize_Manager::save":[505],"validate_current_theme":[722,727,732]}},"WP_Customize_Manager::add_setting":{"doc":"\/**\n * Add a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting. Can be a\n * theme mod or option name.\n * @param array $args Setting arguments.\n *\/","file":"class-wp-customize-manager.php","line":527,"missingDoc":false,"filters":[],"uses":{"is_a":[528]},"used_by":[]},"WP_Customize_Manager::get_setting":{"doc":"\/**\n * Retrieve a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting.\n * @return object The settings object.\n *\/","file":"class-wp-customize-manager.php","line":544,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_setting":{"doc":"\/**\n * Remove a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting.\n *\/","file":"class-wp-customize-manager.php","line":556,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::add_section":{"doc":"\/**\n * Add a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n * @param array $args Section arguments.\n *\/","file":"class-wp-customize-manager.php","line":568,"missingDoc":false,"filters":[],"uses":{"is_a":[569]},"used_by":[]},"WP_Customize_Manager::get_section":{"doc":"\/**\n * Retrieve a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n * @return object The section object.\n *\/","file":"class-wp-customize-manager.php","line":585,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_section":{"doc":"\/**\n * Remove a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n *\/","file":"class-wp-customize-manager.php","line":597,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::add_control":{"doc":"\/**\n * Add a customize control.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n * @param array $args Setting arguments.\n *\/","file":"class-wp-customize-manager.php","line":609,"missingDoc":false,"filters":[],"uses":{"is_a":[610]},"used_by":[]},"WP_Customize_Manager::get_control":{"doc":"\/**\n * Retrieve a customize control.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n * @return object The settings object.\n *\/","file":"class-wp-customize-manager.php","line":626,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_control":{"doc":"\/**\n * Remove a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n *\/","file":"class-wp-customize-manager.php","line":638,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::_cmp_priority":{"doc":"\/**\n * Helper function to compare two objects by priority.\n *\n * @since 3.4.0\n *\n * @param object $a Object A.\n * @param object $b Object B.\n * @return int\n *\/","file":"class-wp-customize-manager.php","line":651,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::prepare_controls":{"doc":"\/**\n * Prepare settings and sections.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":665,"missingDoc":false,"filters":[],"uses":{"array_reverse":[669,682],"check_capabilities":[673,687],"uasort":[683],"usort":[690]},"used_by":[]},"WP_Customize_Manager::enqueue_control_scripts":{"doc":"\/**\n * Enqueue scripts for customize controls.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":701,"missingDoc":false,"filters":[],"uses":{"enqueue":[703]},"used_by":[]},"WP_Customize_Manager::register_controls":{"doc":"\/**\n * Register some default controls.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":712,"missingDoc":false,"filters":[],"uses":{"add_section":[716,745,790,810,890,925],"__":[717,728,739,746,762,768,783,791,811,833,837,838,839,840,850,854,855,856,866,870,871,891,894,898,926,929,940,944,945,956,968],"add_setting":[721,732,750,774,796,801,816,821,827,844,860,908,932,949,961],"get_option":[722,733,933],"add_control":[727,738,760,767,782,806,825,832,849,865,913,939,955,967],"get_theme_support":[752,775,797,817,877],"get_setting":[879],"get_registered_nav_menus":[885],"wp_get_nav_menus":[886],"get_nav_menu_locations":[887],"count":[888],"array_keys":[888],"sprintf":[894],"_n":[894],"number_format_i18n":[894],"wp_html_excerpt":[900],"trim":[901]},"used_by":[]},"get_registered_nav_menus":{"doc":"\/**\n * Returns an array of all registered navigation menus in a theme\n *\n * @since 3.0.0\n * @return array\n *\/","file":"nav-menu.php","line":115,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Customize_Manager::register_controls":[885]}},"wp_get_nav_menus":{"doc":"\/**\n * Returns all navigation menu objects.\n *\n * @since 3.0.0\n *\n * @param array $args Array of arguments passed on to get_terms().\n * @return array menu objects\n *\/","file":"nav-menu.php","line":409,"missingDoc":false,"filters":["'wp_get_nav_menus'"],"uses":{"wp_parse_args":[411],"get_terms":[412]},"used_by":{"WP_Customize_Manager::register_controls":[886],"wp_nav_menu":[156]}},"get_nav_menu_locations":{"doc":"\/**\n * Returns an array with the registered navigation menu locations and the menu assigned to it\n *\n * @since 3.0.0\n * @return array\n *\/","file":"nav-menu.php","line":129,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[130]},"used_by":{"WP_Customize_Manager::register_controls":[887],"wp_nav_menu":[151],"has_nav_menu":[141]}},"WP_Customize_Manager::_sanitize_header_textcolor":{"doc":"\/**\n * Callback for validating the header_textcolor value.\n *\n * Accepts 'blank', and otherwise uses sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":984,"missingDoc":false,"filters":[],"uses":{"sanitize_hex_color_no_hash":[985]},"used_by":[]},"sanitize_hex_color_no_hash":{"doc":"\/**\n * Sanitizes a hex color without a hash. Use sanitize_hex_color() when possible.\n *\n * Saving hex colors without a hash puts the burden of adding the hash on the\n * UI, which makes it difficult to use or upgrade to other color types such as\n * rgba, hsl, rgb, and html color names.\n *\n * Returns either '', a 3 or 6 digit hex color (without a #), or null.\n *\n * @since 3.4.0\n * @uses sanitize_hex_color()\n *\n * @param string $color\n * @return string|null\n *\/","file":"class-wp-customize-manager.php","line":1026,"missingDoc":false,"filters":[],"uses":{"ltrim":[1027],"sanitize_hex_color":[1032]},"used_by":{"WP_Customize_Manager::_sanitize_header_textcolor":[985],"maybe_hash_hex_color":[1047]}},"sanitize_hex_color":{"doc":"\/**\n * Validates a hex color.\n *\n * Returns either '', a 3 or 6 digit hex color (with #), or null.\n * For validating values without a #, see sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string|null\n *\/","file":"class-wp-customize-manager.php","line":1000,"missingDoc":false,"filters":[],"uses":{"preg_match":[1005]},"used_by":{"sanitize_hex_color_no_hash":[1032]}},"maybe_hash_hex_color":{"doc":"\/**\n * Ensures that any hex color is properly hashed.\n * Otherwise, returns value untouched.\n *\n * This method should only be necessary if using sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":1046,"missingDoc":false,"filters":[],"uses":{"sanitize_hex_color_no_hash":[1047]},"used_by":[]},"WP_Customize_Section::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id An specific ID of the section.\n * @param array $args Section arguments.\n *\/","file":"class-wp-customize-section.php","line":28,"missingDoc":false,"filters":[],"uses":{"array_keys":[29],"get_class_vars":[29]},"used_by":[]},"WP_Customize_Section::check_capabilities":{"doc":"\/**\n * Check if the theme supports the section and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the section or user doesn't have the capability.\n *\/","file":"class-wp-customize-section.php","line":50,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[51,54]},"used_by":[]},"WP_Customize_Section::maybe_render":{"doc":"\/**\n * Check capabilities and render the section.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-section.php","line":65,"missingDoc":false,"filters":["'customize_render_section'","'customize_render_section_' . $this->id"],"uses":{"check_capabilities":[66],"render":[72]},"used_by":[]},"WP_Customize_Section::render":{"doc":"\/**\n * Render the section.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-section.php","line":80,"missingDoc":false,"filters":[],"uses":{"esc_attr":[82,83],"esc_html":[83],"maybe_render":[87]},"used_by":[]},"WP_Customize_Setting::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id An specific ID of the setting. Can be a\n * theme mod or option name.\n * @param array $args Setting arguments.\n * @return WP_Customize_Setting\n *\/","file":"class-wp-customize-setting.php","line":36,"missingDoc":false,"filters":[],"uses":{"array_keys":[37],"get_class_vars":[37],"preg_split":[47],"str_replace":[47],"array_shift":[48],"implode":[53],"add_filter":[56,59]},"used_by":[]},"WP_Customize_Setting::preview":{"doc":"\/**\n * Handle previewing the setting.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-setting.php","line":69,"missingDoc":false,"filters":["'customize_preview_' . $this->id"],"uses":{"add_filter":[72,76,78,79]},"used_by":[]},"WP_Customize_Setting::_preview_filter":{"doc":"\/**\n * Callback function to filter the theme mods and options.\n *\n * @since 3.4.0\n * @uses WP_Customize_Setting::multidimensional_replace()\n *\n * @param mixed $original Old value.\n * @return mixed New or old value.\n *\/","file":"class-wp-customize-setting.php","line":96,"missingDoc":false,"filters":[],"uses":{"multidimensional_replace":[97],"post_value":[97]},"used_by":[]},"WP_Customize_Setting::save":{"doc":"\/**\n * Set the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @return bool False if cap check fails or value isn't set.\n *\/","file":"class-wp-customize-setting.php","line":107,"missingDoc":false,"filters":["'customize_save_' . $this->id_data['base']"],"uses":{"post_value":[108],"check_capabilities":[110],"update":[115]},"used_by":[]},"WP_Customize_Setting::post_value":{"doc":"\/**\n * Fetches, validates, and sanitizes the $_POST value.\n *\n * @since 3.4.0\n *\n * @param mixed $default A default value which is used as a fallback. Default is null.\n * @return mixed The default value on failure, otherwise the sanitized value.\n *\/","file":"class-wp-customize-setting.php","line":126,"missingDoc":false,"filters":[],"uses":{"post_value":[130]},"used_by":[]},"WP_Customize_Setting::sanitize":{"doc":"\/**\n * Sanitize an input.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to sanitize.\n * @return mixed Null if an input isn't valid, otherwise the sanitized value.\n *\/","file":"class-wp-customize-setting.php","line":146,"missingDoc":false,"filters":["\"customize_sanitize_{$this->id}\""],"uses":{"stripslashes_deep":[147]},"used_by":[]},"stripslashes_deep":{"doc":"\/**\n * Navigates through an array and removes slashes from the values.\n *\n * If an array is passed, the array_map() function causes a callback to pass the\n * value back to the function. The slashes from this value will removed.\n *\n * @since 2.0.0\n *\n * @param mixed $value The value to be stripped.\n * @return mixed Stripped value.\n *\/","file":"formatting.php","line":1415,"missingDoc":false,"filters":[],"uses":{"array_map":[1417],"is_object":[1418],"get_object_vars":[1419],"stripslashes_deep":[1421],"is_string":[1423],"stripslashes":[1424],"is_array":[1416]},"used_by":{"WP_Customize_Setting::sanitize":[147],"wp_xmlrpc_server::set_custom_fields":[286],"wp_insert_comment":[1263],"wp_update_comment":[1508],"stripslashes_deep":[1421],"wp_parse_str":[2935],"wp_magic_quotes":[534,535,536],"add_metadata":[47],"update_metadata":[119],"delete_metadata":[200],"wp_insert_post":[2865],"wp_insert_attachment":[4002],"wp_insert_user":[1393],"WP_Widget::update_callback":[227]}},"WP_Customize_Setting::update":{"doc":"\/**\n * Set the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":159,"missingDoc":false,"filters":["'customize_update_' . $this->type"],"uses":{"_update_theme_mod":[162],"_update_option":[165]},"used_by":[]},"WP_Customize_Setting::_update_theme_mod":{"doc":"\/**\n * Update the theme mod from the value of the parameter.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":180,"missingDoc":false,"filters":[],"uses":{"set_theme_mod":[183,189],"get_theme_mod":[186],"multidimensional_replace":[187]},"used_by":[]},"set_theme_mod":{"doc":"\/**\n * Update theme modification value for the current theme.\n *\n * @since 2.1.0\n *\n * @param string $name Theme modification name.\n * @param string $value theme modification value.\n *\/","file":"theme.php","line":796,"missingDoc":false,"filters":[],"uses":{"get_theme_mods":[797],"get_option":[801],"update_option":[802]},"used_by":{"WP_Customize_Setting::_update_theme_mod":[183,189],"switch_theme":[667]}},"get_theme_mod":{"doc":"\/**\n * Retrieve theme modification value for the current theme.\n *\n * If the modification name does not exist, then the $default will be passed\n * through {@link http:\/\/php.net\/sprintf sprintf()} PHP function with the first\n * string the template directory URI and the second string the stylesheet\n * directory URI.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'theme_mod_$name' filter on the value.\n *\n * @param string $name Theme modification name.\n * @param bool|string $default\n * @return string\n *\/","file":"theme.php","line":776,"missingDoc":false,"filters":["\"theme_mod_{$name}\"","\"theme_mod_{$name}\""],"uses":{"get_theme_mods":[777],"sprintf":[783],"get_template_directory_uri":[783],"get_stylesheet_directory_uri":[783],"is_string":[782]},"used_by":{"WP_Customize_Setting::_update_theme_mod":[186],"get_nav_menu_locations":[130],"get_body_class":[518],"get_header_textcolor":[854],"display_header_text":[877],"get_header_image":[889],"_get_random_header_data":[915],"is_random_header_image":[968],"get_custom_header":[1036],"get_background_image":[1109],"get_background_color":[1129],"_custom_background_cb":[1153,1163,1168,1173],"retrieve_widgets":[1180]}},"WP_Customize_Setting::_update_option":{"doc":"\/**\n * Update the theme mod from the value of the parameter.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":200,"missingDoc":false,"filters":[],"uses":{"update_option":[203,209],"get_option":[206],"multidimensional_replace":[207]},"used_by":[]},"WP_Customize_Setting::value":{"doc":"\/**\n * Fetch the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @return mixed The requested value.\n *\/","file":"class-wp-customize-setting.php","line":219,"missingDoc":false,"filters":["'customize_value_' . $this->id_data['base']"],"uses":{"multidimensional_get":[237]},"used_by":[]},"WP_Customize_Setting::js_value":{"doc":"\/**\n * Escape the parameter's value for use in JavaScript.\n *\n * @since 3.4.0\n *\n * @return mixed The requested escaped value.\n *\/","file":"class-wp-customize-setting.php","line":247,"missingDoc":false,"filters":["\"customize_sanitize_js_{$this->id}\""],"uses":{"value":[248],"html_entity_decode":[251],"is_string":[250]},"used_by":[]},"WP_Customize_Setting::check_capabilities":{"doc":"\/**\n * Check if the theme supports the setting and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true.\n *\/","file":"class-wp-customize-setting.php","line":263,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[264,267]},"used_by":[]},"WP_Customize_Setting::multidimensional":{"doc":"\/**\n * Multidimensional helper function.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param bool $create Default is false.\n * @return null|array Keys are 'root', 'node', and 'key'.\n *\/","file":"class-wp-customize-setting.php","line":283,"missingDoc":false,"filters":[],"uses":{"array_pop":[290],"is_array":[297]},"used_by":[]},"WP_Customize_Setting::multidimensional_replace":{"doc":"\/**\n * Will attempt to replace a specific value in a multidimensional array.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param mixed $value The value to update.\n * @return\n *\/","file":"class-wp-customize-setting.php","line":326,"missingDoc":false,"filters":[],"uses":{"multidimensional":[332]},"used_by":[]},"WP_Customize_Setting::multidimensional_get":{"doc":"\/**\n * Will attempt to fetch a specific value from a multidimensional array.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param $default A default value which is used as a fallback. Default is null.\n * @return mixed The requested value or the default value.\n *\/","file":"class-wp-customize-setting.php","line":350,"missingDoc":false,"filters":[],"uses":{"multidimensional":[354]},"used_by":[]},"WP_Customize_Setting::multidimensional_isset":{"doc":"\/**\n * Will attempt to check if a specific value in a multidimensional array is set.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @return bool True if value is set, false if not.\n *\/","file":"class-wp-customize-setting.php","line":367,"missingDoc":false,"filters":[],"uses":{"multidimensional_get":[368]},"used_by":[]},"WP_Customize_Filter_Setting::update":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-setting.php","line":387,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Header_Image_Setting::update":{"doc":"\/**\n * @since 3.4.0\n *\n * @param $value\n *\/","file":"class-wp-customize-setting.php","line":407,"missingDoc":false,"filters":[],"uses":{"post_value":[413],"get_setting":[413],"set_header_image":[416,418],"is_array":[415]},"used_by":[]},"WP_Customize_Background_Image_Setting::update":{"doc":"\/**\n * @since 3.4.0\n * @uses remove_theme_mod()\n *\n * @param $value\n *\/","file":"class-wp-customize-setting.php","line":436,"missingDoc":false,"filters":[],"uses":{"remove_theme_mod":[437]},"used_by":[]},"remove_theme_mod":{"doc":"\/**\n * Remove theme modification name from current theme list.\n *\n * If removing the name also removes all elements, then the entire option will\n * be removed.\n *\n * @since 2.1.0\n *\n * @param string $name Theme modification name.\n * @return null\n *\/","file":"theme.php","line":816,"missingDoc":false,"filters":[],"uses":{"get_theme_mods":[817],"remove_theme_mods":[825],"get_option":[827],"update_option":[828]},"used_by":{"WP_Customize_Background_Image_Setting::update":[437],"_delete_attachment_theme_mod":[1595,1598],"retrieve_widgets":[1184]}},"_WP_Editors::__construct":{"doc":"","file":"class-wp-editor.php","line":28,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"_WP_Editors::parse_settings":{"doc":"","file":"class-wp-editor.php","line":30,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[31],"user_can_richedit":[46],"get_user_setting":[60],"parse_str":[64]},"used_by":[]},"user_can_richedit":{"doc":"\/**\n * Whether the user should have a WYSIWIG editor.\n *\n * Checks that the user requires a WYSIWIG editor and that the editor is\n * supported in the users browser.\n *\n * @since 2.0.0\n *\n * @return bool\n *\/","file":"general-template.php","line":1751,"missingDoc":false,"filters":["'user_can_richedit'"],"uses":{"wp_is_mobile":[1759,1760],"preg_match":[1759],"intval":[1759],"get_user_option":[1757],"is_user_logged_in":[1757]},"used_by":{"_WP_Editors::parse_settings":[46],"wp_default_editor":[1780],"sanitize_post_field":[2025]}},"get_user_setting":{"doc":"\/**\n * Retrieve user interface setting value based on setting name.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @param string $name The name of the setting.\n * @param string $default Optional default value to return when $name is not set.\n * @return mixed the last saved user setting or the default value\/false if it doesn't exist.\n *\/","file":"option.php","line":584,"missingDoc":false,"filters":[],"uses":{"get_all_user_settings":[586]},"used_by":{"_WP_Editors::parse_settings":[60],"_WP_Editors::wp_fullscreen_html":[663],"_WP_Editors::wp_link_dialog":[826],"wp_default_editor":[1782]}},"_WP_Editors::editor":{"doc":"\/**\n * Outputs the HTML for a single instance of the editor.\n *\n * @param string $content The initial content of the editor.\n * @param string $editor_id ID for the textarea and TinyMCE and Quicktags instances (can contain only ASCII letters and numbers).\n * @param array $settings See the _parse_settings() method for description.\n *\/","file":"class-wp-editor.php","line":87,"missingDoc":false,"filters":["'media_buttons'","'the_editor'","'the_editor_content'"],"uses":{"trim":[90],"current_user_can":[100],"add_filter":[108,110],"wp_default_editor":[107],"_x":[114],"__":[115],"wp_print_styles":[121],"function_exists":[135],"printf":[148]},"used_by":[]},"wp_default_editor":{"doc":"\/**\n * Find out which editor should be displayed by default.\n *\n * Works out which of the two editors to display as the current editor for a\n * user. The 'html' setting is for the \"Text\" editor tab.\n *\n * @since 2.5.0\n *\n * @return string Either 'tinymce', or 'html', or 'test'\n *\/","file":"general-template.php","line":1779,"missingDoc":false,"filters":["'wp_default_editor'"],"uses":{"user_can_richedit":[1780],"get_user_setting":[1782],"in_array":[1783],"wp_get_current_user":[1781]},"used_by":{"_WP_Editors::editor":[107],"_WP_Editors::editor_js":[585]}},"wp_print_styles":{"doc":"\/**\n * Display styles that are in the queue or part of $handles.\n *\n * @since r79\n * @uses do_action() Calls 'wp_print_styles' hook.\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param array|bool $handles Styles to be printed. An empty array prints the queue,\n * an array with one string prints that style, and an array of strings prints those styles.\n * @return bool True on success, false on failure.\n *\/","file":"functions.wp-styles.php","line":20,"missingDoc":false,"filters":["'wp_print_styles'"],"uses":{"_doing_it_wrong":[30],"sprintf":[30],"__":[30],"did_action":[29],"is_a":[28],"do_items":[39]},"used_by":{"_WP_Editors::editor":[121],"wp_admin_css":[2096]}},"_WP_Editors::editor_settings":{"doc":"","file":"class-wp-editor.php","line":154,"missingDoc":true,"filters":["'quicktags_settings'","'disable_captions'","'teeny_mce_plugins'","'mce_external_plugins'","'mce_external_languages'","'tiny_mce_plugins'","'mce_spellchecker_languages'","'mce_css'","'teeny_mce_buttons'","'mce_buttons'","'mce_buttons_2'","'mce_buttons_3'","'mce_buttons_4'","'teeny_mce_before_init'","'tiny_mce_before_init'"],"uses":{"add_action":[160,161,163,164],"is_admin":[159],"array_merge":[176,187,436,439],"is_array":[175,355,438],"explode":[187],"includes_url":[193],"get_locale":[194,194],"strtolower":[194],"substr":[194],"is_file":[230,253,256,260,265],"is_readable":[230],"set_url_scheme":[240],"dirname":[244],"str_replace":[247],"content_url":[247],"trailingslashit":[251],"realpath":[251],"function_exists":[250],"file_get_contents":[254,257,261,266],"preg_replace":[262,267],"in_array":[246],"array_unique":[280,357],"__":[295],"implode":[351,376,424,425,426,427],"get_stylesheet_directory_uri":[358],"get_stylesheet_directory":[359],"get_template_directory_uri":[362],"get_template_directory":[363],"file_exists":[366,372],"is_child_theme":[361],"trim":[381],"get_post":[399],"array_search":[411,413,415,409]},"used_by":[]},"includes_url":{"doc":"\/**\n * Retrieve the url to the includes directory.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the includes url.\n * @return string Includes url link with optional path appended.\n*\/","file":"link-template.php","line":2023,"missingDoc":false,"filters":["'includes_url'"],"uses":{"site_url":[2024],"ltrim":[2027],"is_string":[2026],"strpos":[2026]},"used_by":{"_WP_Editors::editor_settings":[193],"WP_Widget_RSS::widget":[781],"translate_smiley":[1741],"wp_plupload_default_settings":[1262,1263],"get_avatar":[1648],"wp_mime_type_icon":[4350],"wp_default_scripts":[192,193]}},"get_locale":{"doc":"\/**\n * Gets the current locale.\n *\n * If the locale is set, then it will filter the locale in the 'locale' filter\n * hook and return the value.\n *\n * If the locale is not set already, then the WPLANG constant is used if it is\n * defined. Then it is filtered through the 'locale' filter hook and the value\n * for the locale global set and the locale is returned.\n *\n * The process to get the locale should only be done once, but the locale will\n * always be filtered using the 'locale' hook.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'locale' hook on locale value.\n * @uses $locale Gets the locale stored in the global.\n *\n * @return string The locale of the blog or from the 'locale' hook.\n *\/","file":"l10n.php","line":28,"missingDoc":false,"filters":["'locale'","'locale'"],"uses":{"defined":[35,41],"get_site_option":[42],"get_option":[41],"is_multisite":[39]},"used_by":{"_WP_Editors::editor_settings":[194,194],"WP_Theme::sort_by_name":[1169],"wp_timezone_choice":[3339],"get_bloginfo":[466],"load_default_textdomain":[386],"load_plugin_textdomain":[417],"load_muplugin_textdomain":[442],"load_theme_textdomain":[460],"get_locale_stylesheet_uri":[221],"wp_version_check":[43]}},"content_url":{"doc":"\/**\n * Retrieve the url to the content directory.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the content url.\n * @return string Content url link with optional path appended.\n*\/","file":"link-template.php","line":2041,"missingDoc":false,"filters":["'content_url'"],"uses":{"set_url_scheme":[2042],"ltrim":[2045],"is_string":[2044],"strpos":[2044]},"used_by":{"_WP_Editors::editor_settings":[247],"get_theme_root_uri":[481,489,492]}},"get_stylesheet_directory_uri":{"doc":"\/**\n * Retrieve stylesheet directory URI.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"theme.php","line":173,"missingDoc":false,"filters":["'stylesheet_directory_uri'"],"uses":{"get_stylesheet":[174],"get_theme_root_uri":[175]},"used_by":{"_WP_Editors::editor_settings":[358],"WP_Theme::get_screenshot":[875,885],"get_bloginfo":[445],"get_stylesheet_uri":[193],"get_locale_stylesheet_uri":[219],"get_theme_mod":[783],"_get_random_header_data":[934,935],"get_custom_header":[1038]}},"get_stylesheet_directory":{"doc":"\/**\n * Retrieve stylesheet directory path for current theme.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet_directory' filter on stylesheet directory and theme name.\n *\n * @return string Path to current theme directory.\n *\/","file":"theme.php","line":158,"missingDoc":false,"filters":["'stylesheet_directory'"],"uses":{"get_stylesheet":[159],"get_theme_root":[160]},"used_by":{"_WP_Editors::editor_settings":[359],"WP_Theme::__get":[326],"WP_Theme::offsetGet":[412],"WP_Theme::get_screenshot":[881],"WP_Theme::get_files":[906],"WP_Theme::load_textdomain":[1026],"wp_templating_constants":[298],"load_child_theme_textdomain":[489],"get_locale_stylesheet_uri":[220],"validate_current_theme":[731]}},"get_template_directory_uri":{"doc":"\/**\n * Retrieve theme directory URI.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template_directory_uri' filter on template directory URI path and template name.\n *\n * @return string Template directory URI.\n *\/","file":"theme.php","line":267,"missingDoc":false,"filters":["'template_directory_uri'"],"uses":{"get_template":[268],"get_theme_root_uri":[269]},"used_by":{"_WP_Editors::editor_settings":[362],"get_bloginfo":[449],"get_theme_mod":[783],"_get_random_header_data":[934,935],"get_custom_header":[1038]}},"get_template_directory":{"doc":"\/**\n * Retrieve current theme directory.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template_directory' filter on template directory path and template name.\n *\n * @return string Template directory path.\n *\/","file":"theme.php","line":251,"missingDoc":false,"filters":["'template_directory'"],"uses":{"get_template":[252],"get_theme_root":[253]},"used_by":{"_WP_Editors::editor_settings":[363],"WP_Theme::__get":[324],"WP_Theme::offsetGet":[410],"WP_Theme::get_files":[909],"wp_templating_constants":[292],"get_attachment_icon_src":[1943],"load_theme_textdomain":[463],"validate_current_theme":[721,726]}},"is_child_theme":{"doc":"\/**\n * Whether a child theme is in use.\n *\n * @since 3.0.0\n *\n * @return bool true if a child theme is in use, false otherwise.\n **\/","file":"theme.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":{"_WP_Editors::editor_settings":[361],"validate_current_theme":[731]}},"_WP_Editors::_parse_init":{"doc":"","file":"class-wp-editor.php","line":460,"missingDoc":true,"filters":[],"uses":{"is_string":[468],"strlen":[468,468],"preg_match":[468],"is_bool":[464],"trim":[475]},"used_by":[]},"_WP_Editors::enqueue_scripts":{"doc":"","file":"class-wp-editor.php","line":478,"missingDoc":true,"filters":[],"uses":{"wp_enqueue_script":[479,482,485,488,489,494,498],"wp_enqueue_style":[490],"in_array":[487,487,493,493],"add_thickbox":[497]},"used_by":[]},"add_thickbox":{"doc":"\/**\n * Enqueues the default ThickBox js and css.\n *\n * If any of the settings need to be changed, this can be done with another js\n * file similar to media-upload.js. That file should\n * require array('thickbox') to ensure it is loaded after.\n *\n * @since 2.5.0\n *\/","file":"general-template.php","line":2116,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[2117],"wp_enqueue_style":[2118],"add_action":[2121],"is_network_admin":[2120]},"used_by":{"_WP_Editors::enqueue_scripts":[497]}},"_WP_Editors::editor_js":{"doc":"","file":"class-wp-editor.php","line":502,"missingDoc":true,"filters":["'before_wp_tiny_mce'","'after_wp_tiny_mce'"],"uses":{"script_concat_settings":[516],"stripos":[519],"trim":[530,540],"implode":[546],"defined":[551],"wp_default_editor":[585],"admin_url":[642],"is_admin":[641],"in_array":[648,648,651,651]},"used_by":[]},"script_concat_settings":{"doc":"\/**\n * Determine the concatenation and compression settings for scripts and styles.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":846,"missingDoc":false,"filters":[],"uses":{"ini_get":[849,849],"defined":[852,853,858,864],"is_admin":[853],"get_site_option":[859,865]},"used_by":{"_WP_Editors::editor_js":[516],"print_head_scripts":[652],"print_footer_scripts":[674],"print_admin_styles":[778]}},"_WP_Editors::wp_fullscreen_html":{"doc":"","file":"class-wp-editor.php","line":657,"missingDoc":true,"filters":["'wp_fullscreen_buttons'","'enter_title_here'"],"uses":{"get_post":[659],"get_user_setting":[663],"__":[664,664,682,683,685,686,688,689,691,692,694,727,736],"is_rtl":[666],"_e":[669,673,718,718,737],"_ex":[674],"post_type_supports":[726],"printf":[736]},"used_by":[]},"is_rtl":{"doc":"\/**\n * Checks if current locale is RTL.\n *\n * @since 3.0.0\n * @return bool Whether locale is RTL.\n *\/","file":"locale.php","line":338,"missingDoc":false,"filters":[],"uses":{"is_rtl":[340]},"used_by":{"_WP_Editors::wp_fullscreen_html":[666],"_default_wp_die_handler":[2117],"_mce_set_direction":[2418],"dead_db":[2768],"get_bloginfo":[472],"language_attributes":[1861],"wp_admin_css":[2103],"__main":[140],"wp_maintenance":[171],"is_rtl":[340],"gallery_shortcode":[740],"get_body_class":[405],"wp_default_styles":[500],"add_editor_style":[1217]}},"_ex":{"doc":"\/**\n * Displays translated string with gettext context\n *\n * @see _x\n * @since 3.0.0\n *\n * @param string $text Text to translate\n * @param string $context Context information for the translators\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"l10n.php","line":204,"missingDoc":false,"filters":[],"uses":{"_x":[205]},"used_by":{"_WP_Editors::wp_fullscreen_html":[674],"WP_Widget_Links::form":[150,164],"wp_list_post_revisions":[1440,1441,1442]}},"post_type_supports":{"doc":"\/**\n * Checks a post type's support for a given feature\n *\n * @since 3.0.0\n * @param string $post_type The post type being checked\n * @param string $feature the feature being checked\n * @return boolean\n *\/","file":"post.php","line":1633,"missingDoc":false,"filters":[],"uses":{"func_num_args":[1640]},"used_by":{"_WP_Editors::wp_fullscreen_html":[726],"wp_xmlrpc_server::wp_getRevisions":[3538],"wp_xmlrpc_server::wp_restoreRevision":[3605],"wp_enqueue_media":[1480],"get_post_class":[331],"get_body_class":[437],"get_post_format":[768],"wp_insert_post":[2727,2728,2728],"wp_save_post_revision":[4940]}},"_WP_Editors::wp_link_query":{"doc":"\/**\n * Performs post queries for internal linking.\n *\n * @since 3.1.0\n *\n * @param array $args Optional. Accepts 'pagenum' and 's' (search) arguments.\n * @return array Results.\n *\/","file":"class-wp-editor.php","line":755,"missingDoc":false,"filters":[],"uses":{"get_post_types":[756],"array_keys":[757],"absint":[770],"query":[779],"mysql2date":[788],"__":[788],"trim":[794],"esc_html":[794],"strip_tags":[794],"get_the_title":[794],"get_permalink":[795]},"used_by":[]},"mysql2date":{"doc":"\/**\n * Converts given date string into a different format.\n *\n * $format should be either a PHP date format string, e.g. 'U' for a Unix\n * timestamp, or 'G' for a Unix timestamp assuming that $date is GMT.\n *\n * If $translate is true then the given date and format string will\n * be passed to date_i18n() for translation.\n *\n * @since 0.71\n *\n * @param string $format Format of the date to return.\n * @param string $date Date string to convert.\n * @param bool $translate Whether the return date should be translated. Default is true.\n * @return string|int Formatted date string, or Unix timestamp.\n *\/","file":"functions.php","line":26,"missingDoc":false,"filters":[],"uses":{"strtotime":[31,33],"date_i18n":[39],"date":[41]},"used_by":{"_WP_Editors::wp_link_query":[788],"wp_xmlrpc_server::_convert_date":[589],"wp_xmlrpc_server::_convert_date_gmt":[603],"wp_xmlrpc_server::wp_editPost":[1262],"WP::send_headers":[350,352],"get_comment_date":[375,377],"get_comment_time":[633,635],"check_comment_flood_db":[731,732],"get_boundary_post_rel_link":[2734],"get_parent_post_rel_link":[2809],"__main":[27,66,67,22,25,42,17,31,51,28,38],"wp_get_archives":[980],"the_date_xml":[1321],"get_the_date":[1380,1382],"get_post_time":[1475],"get_post_modified_time":[1524],"the_weekday":[1538],"the_weekday_date":[1559],"get_adjacent_post_rel_link":[1225],"adjacent_post_link":[1392],"wp_prepare_attachment_for_js":[1346],"wpmu_validate_user_signup":[492,507],"wpmu_validate_blog_signup":[612],"Walker_Page::start_el":[1059],"wp_insert_post":[2819,2819,2823,2823],"setup_postdata":[3632,3633]}},"get_the_title":{"doc":"\/**\n * Retrieve post title.\n *\n * If the post is protected and the visitor is not an admin, then \"Protected\"\n * will be displayed before the post title. If the post is private, then\n * \"Private\" will be located before the post title.\n *\n * @since 0.71\n *\n * @param mixed $post Optional. Post ID or object.\n * @return string\n *\/","file":"post-template.php","line":102,"missingDoc":false,"filters":["'protected_title_format'","'private_title_format'","'the_title'"],"uses":{"get_post":[103],"__":[110,113],"sprintf":[111,114],"is_admin":[108]},"used_by":{"_WP_Editors::wp_link_query":[794],"wp_xmlrpc_server::_prepare_comment":[872],"trackback_rdf":[758],"WP_Widget_Recent_Posts::widget":[574,574,574],"WP_Widget_Recent_Comments::widget":[694],"__main":[50,42,27],"get_the_title_rss":[116],"feed_links_extra":[1645],"the_title":[43],"the_title_attribute":[72]}},"_WP_Editors::wp_link_dialog":{"doc":"\/**\n * Dialog for internal linking.\n *\n * @since 3.1.0\n *\/","file":"class-wp-editor.php","line":808,"missingDoc":false,"filters":[],"uses":{"wp_nonce_field":[812],"_e":[815,817,820,823,827,831,843,856],"get_user_setting":[826],"esc_attr_e":[853]},"used_by":[]},"wp_nonce_field":{"doc":"\/**\n * Retrieve or display nonce hidden field for forms.\n *\n * The nonce field is used to validate that the contents of the form came from\n * the location on the current site and not somewhere else. The nonce does not\n * offer absolute protection, but should protect against most cases. It is very\n * important to use nonce field in forms.\n *\n * The $action and $name are optional, but if you want to have better security,\n * it is strongly suggested to set those two parameters. It is easier to just\n * call the function without any parameters, because validation of the nonce\n * doesn't require any parameters, but since crackers know what the default is\n * it won't be difficult for them to find a way around your nonce and cause\n * damage.\n *\n * The input name will be whatever $name value you gave. The input value will be\n * the nonce creation value.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $action Optional. Action name.\n * @param string $name Optional. Nonce name.\n * @param bool $referer Optional, default true. Whether to set the referer field for validation.\n * @param bool $echo Optional, default true. Whether to display or return hidden form field.\n * @return string Nonce field.\n *\/","file":"functions.php","line":1208,"missingDoc":false,"filters":[],"uses":{"esc_attr":[1209],"wp_create_nonce":[1210],"wp_referer_field":[1213]},"used_by":{"_WP_Editors::wp_link_dialog":[812],"wp_comment_form_unfiltered_html_nonce":[817],"signup_nonce_fields":[1624]}},"WP_Embed::__construct":{"doc":"\/**\n * Constructor\n *\/","file":"class-wp-embed.php","line":18,"missingDoc":false,"filters":[],"uses":{"add_filter":[20,26],"add_shortcode":[23],"add_action":[29,32]},"used_by":[]},"add_shortcode":{"doc":"\/**\n * Add hook for shortcode tag.\n *\n * There can only be one hook for each shortcode. Which means that if another\n * plugin has a similar shortcode, it will override yours or yours will override\n * theirs depending on which order the plugins are included and\/or ran.\n *\n * Simplest example of a shortcode tag using the API:\n *\n * <code>\n * \/\/ [footag foo=\"bar\"]\n * function footag_func($atts) {\n * \treturn \"foo = {$atts[foo]}\";\n * }\n * add_shortcode('footag', 'footag_func');\n * <\/code>\n *\n * Example with nice attribute defaults:\n *\n * <code>\n * \/\/ [bartag foo=\"bar\"]\n * function bartag_func($atts) {\n * \textract(shortcode_atts(array(\n * \t\t'foo' => 'no foo',\n * \t\t'baz' => 'default baz',\n * \t), $atts));\n *\n * \treturn \"foo = {$foo}\";\n * }\n * add_shortcode('bartag', 'bartag_func');\n * <\/code>\n *\n * Example with enclosed content:\n *\n * <code>\n * \/\/ [baztag]content[\/baztag]\n * function baztag_func($atts, $content='') {\n * \treturn \"content = $content\";\n * }\n * add_shortcode('baztag', 'baztag_func');\n * <\/code>\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $tag Shortcode tag to be searched in post content.\n * @param callable $func Hook to run when shortcode is found.\n *\/","file":"shortcodes.php","line":93,"missingDoc":false,"filters":[],"uses":{"is_callable":[96]},"used_by":{"WP_Embed::__construct":[23],"WP_Embed::run_shortcode":[57],"__main":[609,610,658]}},"WP_Embed::run_shortcode":{"doc":"\/**\n * Process the [embed] shortcode.\n *\n * Since the [embed] shortcode needs to be run earlier than other shortcodes,\n * this function removes all existing shortcodes, registers the [embed] shortcode,\n * calls {@link do_shortcode()}, and then re-registers the old shortcodes.\n *\n * @uses $shortcode_tags\n * @uses remove_all_shortcodes()\n * @uses add_shortcode()\n * @uses do_shortcode()\n *\n * @param string $content Content to parse\n * @return string Content with shortcode parsed\n *\/","file":"class-wp-embed.php","line":50,"missingDoc":false,"filters":[],"uses":{"remove_all_shortcodes":[55],"add_shortcode":[57],"do_shortcode":[60]},"used_by":[]},"remove_all_shortcodes":{"doc":"\/**\n * Clear all shortcodes.\n *\n * This function is simple, it clears all of the shortcode tags by replacing the\n * shortcodes global by a empty array. This is actually a very efficient method\n * for removing all shortcodes.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\/","file":"shortcodes.php","line":124,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Embed::run_shortcode":[55]}},"do_shortcode":{"doc":"\/**\n * Search content for shortcodes and filter shortcodes through their hooks.\n *\n * If there are no shortcode tags defined, then the content will be returned\n * without any filtering. This might cause issues when plugins are disabled but\n * the shortcode will still show up in the post or content.\n *\n * @since 2.5\n * @uses $shortcode_tags\n * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.\n *\n * @param string $content Content to search for shortcodes\n * @return string Content with shortcodes filtered out.\n *\/","file":"shortcodes.php","line":144,"missingDoc":false,"filters":[],"uses":{"is_array":[147],"get_shortcode_regex":[150],"preg_replace_callback":[151]},"used_by":{"WP_Embed::run_shortcode":[60],"img_caption_shortcode":[655]}},"WP_Embed::maybe_run_ajax_cache":{"doc":"\/**\n * If a post\/page was saved, then output JavaScript to make\n * an AJAX request that will call WP_Embed::cache_oembed().\n *\/","file":"class-wp-embed.php","line":72,"missingDoc":false,"filters":[],"uses":{"get_post":[73],"admin_url":[82]},"used_by":[]},"WP_Embed::register_handler":{"doc":"\/**\n * Register an embed handler. Do not use this function directly, use {@link wp_embed_register_handler()} instead.\n * This function should probably also only be used for sites that do not support oEmbed.\n *\n * @param string $id An internal ID\/name for the handler. Needs to be unique.\n * @param string $regex The regex that will be used to see if this handler should be used for a URL.\n * @param callback $callback The callback function that will be called if the regex is matched.\n * @param int $priority Optional. Used to specify the order in which the registered handlers will be tested (default: 10). Lower numbers correspond with earlier testing, and handlers with the same priority are tested in the order in which they were added to the action.\n *\/","file":"class-wp-embed.php","line":98,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Embed::unregister_handler":{"doc":"\/**\n * Unregister a previously registered embed handler. Do not use this function directly, use {@link wp_embed_unregister_handler()} instead.\n *\n * @param string $id The handler ID that should be removed.\n * @param int $priority Optional. The priority of the handler to be removed (default: 10).\n *\/","file":"class-wp-embed.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Embed::shortcode":{"doc":"\/**\n * The {@link do_shortcode()} callback function.\n *\n * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of the registered embed handlers.\n * If none of the regex matches and it's enabled, then the URL will be given to the {@link WP_oEmbed} class.\n *\n * @uses wp_oembed_get()\n * @uses wp_parse_args()\n * @uses wp_embed_defaults()\n * @uses WP_Embed::maybe_make_link()\n * @uses get_option()\n * @uses author_can()\n * @uses wp_cache_get()\n * @uses wp_cache_set()\n * @uses get_post_meta()\n * @uses update_post_meta()\n *\n * @param array $attr Shortcode attributes.\n * @param string $url The URL attempting to be embedded.\n * @return string The embed HTML on success, otherwise the original URL.\n *\/","file":"class-wp-embed.php","line":137,"missingDoc":false,"filters":["'embed_handler_html'","'embed_oembed_html'","'embed_oembed_discover'","'embed_oembed_html'"],"uses":{"get_post":[138],"wp_parse_args":[144],"wp_embed_defaults":[144],"str_replace":[148],"ksort":[151],"call_user_func":[155],"preg_match":[154],"is_callable":[154],"md5":[169],"serialize":[169],"get_post_meta":[171],"maybe_make_link":[175,195],"author_can":[182],"wp_oembed_get":[183],"update_post_meta":[187]},"used_by":[]},"wp_oembed_get":{"doc":"\/**\n * Attempts to fetch the embed HTML for a provided URL using oEmbed.\n *\n * @since 2.9.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n * @uses WP_oEmbed::get_html()\n *\n * @param string $url The URL that should be embedded.\n * @param array $args Additional arguments and parameters.\n * @return bool|string False on failure or the embed HTML on success.\n *\/","file":"media.php","line":1018,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1020],"get_html":[1021]},"used_by":{"WP_Embed::shortcode":[183]}},"update_post_meta":{"doc":"\/**\n * Update post meta field based on post ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and post ID.\n *\n * If the meta field for the post does not exist, it will be added.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"post.php","line":1817,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1819],"update_metadata":[1822]},"used_by":{"WP_Embed::shortcode":[187],"wp_update_nav_menu_item":[372,373,374,375,376,380,381,382,385],"update_attached_file":[214],"wp_insert_post":[2939],"wp_update_attachment_metadata":[4195],"set_post_thumbnail":[5381]}},"WP_Embed::delete_oembed_caches":{"doc":"\/**\n * Delete all oEmbed caches.\n *\n * @param int $post_ID Post ID to delete the caches for.\n *\/","file":"class-wp-embed.php","line":203,"missingDoc":false,"filters":[],"uses":{"get_post_custom_keys":[204],"delete_post_meta":[210],"substr":[209]},"used_by":[]},"get_post_custom_keys":{"doc":"\/**\n * Retrieve meta field names for a post.\n *\n * If there are no meta fields, then nothing (null) will be returned.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom_keys\n *\n * @param int $post_id post ID\n * @return array|null Either array of the keys, or null if keys could not be retrieved.\n *\/","file":"post.php","line":1869,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[1870],"is_array":[1872],"array_keys":[1875]},"used_by":{"WP_Embed::delete_oembed_caches":[204],"the_meta":[743]}},"delete_post_meta":{"doc":"\/**\n * Remove metadata matching criteria from a post.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_post_meta\n *\n * @param int $post_id post ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"post.php","line":1774,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1776],"delete_metadata":[1779]},"used_by":{"WP_Embed::delete_oembed_caches":[210],"wp_scheduled_delete":[3486,3487],"wp_update_nav_menu_item":[387],"update_attached_file":[216],"wp_delete_post":[2319,2320],"wp_untrash_post":[2445,2446],"wp_untrash_post_comments":[2539],"wp_delete_attachment":[4088,4089],"wp_update_attachment_metadata":[4197],"wp_check_for_changed_slugs":[4438],"set_post_thumbnail":[5383],"delete_post_thumbnail":[5399]}},"WP_Embed::cache_oembed":{"doc":"\/**\n * Triggers a caching of all oEmbed results.\n *\n * @param int $post_ID Post ID to do the caching for.\n *\/","file":"class-wp-embed.php","line":219,"missingDoc":false,"filters":["'embed_cache_oembed_types'"],"uses":{"get_post":[220],"in_array":[222],"run_shortcode":[230],"autoembed":[231]},"used_by":[]},"WP_Embed::autoembed":{"doc":"\/**\n * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.\n *\n * @uses WP_Embed::autoembed_callback()\n *\n * @param string $content The content to be searched.\n * @return string Potentially modified $content.\n *\/","file":"class-wp-embed.php","line":245,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[246]},"used_by":[]},"WP_Embed::autoembed_callback":{"doc":"\/**\n * Callback function for {@link WP_Embed::autoembed()}.\n *\n * @uses WP_Embed::shortcode()\n *\n * @param array $match A regex match array.\n * @return string The embed HTML on success, otherwise the original URL.\n *\/","file":"class-wp-embed.php","line":257,"missingDoc":false,"filters":[],"uses":{"shortcode":[260]},"used_by":[]},"WP_Embed::maybe_make_link":{"doc":"\/**\n * Conditionally makes a hyperlink based on an internal class variable.\n *\n * @param string $url URL to potentially be linked.\n * @return string Linked URL or the original URL.\n *\/","file":"class-wp-embed.php","line":272,"missingDoc":false,"filters":["'embed_maybe_make_link'"],"uses":{"esc_attr":[273],"esc_html":[273]},"used_by":[]},"WP_Error::__construct":{"doc":"\/**\n * Constructor - Sets up error message.\n *\n * If code parameter is empty then nothing will be done. It is possible to\n * add multiple messages to the same code, but with other methods in the\n * class.\n *\n * All parameters are optional, but if the code parameter is set, then the\n * data parameter is optional.\n *\n * @since 2.1.0\n *\n * @param string|int $code Error code\n * @param string $message Error message\n * @param mixed $data Optional. Error data.\n * @return WP_Error\n *\/","file":"class-wp-error.php","line":57,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Error::get_error_codes":{"doc":"\/**\n * Retrieve all error codes.\n *\n * @since 2.1.0\n * @access public\n *\n * @return array List of error codes, if available.\n *\/","file":"class-wp-error.php","line":75,"missingDoc":false,"filters":[],"uses":{"array_keys":[79]},"used_by":[]},"WP_Error::get_error_code":{"doc":"\/**\n * Retrieve first error code available.\n *\n * @since 2.1.0\n * @access public\n *\n * @return string|int Empty string, if no error codes.\n *\/","file":"class-wp-error.php","line":90,"missingDoc":false,"filters":[],"uses":{"get_error_codes":[91]},"used_by":[]},"WP_Error::get_error_messages":{"doc":"\/**\n * Retrieve all error messages or error messages matching code.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Retrieve messages matching code, if exists.\n * @return array Error strings on success, or empty array on failure (if using code parameter).\n *\/","file":"class-wp-error.php","line":107,"missingDoc":false,"filters":[],"uses":{"array_merge":[112]},"used_by":[]},"WP_Error::get_error_message":{"doc":"\/**\n * Get single error message.\n *\n * This will get the first message available for the code. If no code is\n * given then the first code available will be used.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Error code to retrieve message.\n * @return string\n *\/","file":"class-wp-error.php","line":134,"missingDoc":false,"filters":[],"uses":{"get_error_code":[136],"get_error_messages":[137]},"used_by":[]},"WP_Error::get_error_data":{"doc":"\/**\n * Retrieve error data for error code.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Error code.\n * @return mixed Null, if no errors.\n *\/","file":"class-wp-error.php","line":151,"missingDoc":false,"filters":[],"uses":{"get_error_code":[153]},"used_by":[]},"WP_Error::add":{"doc":"\/**\n * Append more error messages to list of error messages.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string|int $code Error code.\n * @param string $message Error message.\n * @param mixed $data Optional. Error data.\n *\/","file":"class-wp-error.php","line":170,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Error::add_data":{"doc":"\/**\n * Add data for error code.\n *\n * The error code can only contain one error data.\n *\n * @since 2.1.0\n *\n * @param mixed $data Error data.\n * @param string|int $code Error code.\n *\/","file":"class-wp-error.php","line":186,"missingDoc":false,"filters":[],"uses":{"get_error_code":[188]},"used_by":[]},"WP_HTTP_IXR_Client::__construct":{"doc":"","file":"class-wp-http-ixr-client.php","line":11,"missingDoc":true,"filters":[],"uses":{"parse_url":[14]},"used_by":[]},"WP_HTTP_IXR_Client::query":{"doc":"","file":"class-wp-http-ixr-client.php","line":33,"missingDoc":true,"filters":[],"uses":{"func_get_args":[34],"array_shift":[35],"getXml":[37],"htmlspecialchars":[56,73],"wp_remote_post":[58],"get_error_code":[61],"get_error_message":[62],"is_wp_error":[60],"wp_remote_retrieve_response_code":[68,67],"wp_remote_retrieve_body":[73,76],"parse":[77]},"used_by":[]},"wp_remote_post":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the POST method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":90,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[91],"post":[92]},"used_by":{"WP_HTTP_IXR_Client::query":[58],"trackback":[1918],"spawn_cron":[253],"wp_update_plugins":[205],"wp_update_themes":[310]}},"WP_Image_Editor_GD::__destruct":{"doc":"","file":"class-wp-image-editor-gd.php","line":21,"missingDoc":true,"filters":[],"uses":{"imagedestroy":[24]},"used_by":[]},"WP_Image_Editor_GD::test":{"doc":"\/**\n * Checks to see if current environment supports GD.\n *\n * @since 3.5.0\n * @access public\n *\n * @return boolean\n *\/","file":"class-wp-image-editor-gd.php","line":36,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[37],"function_exists":[37,43],"in_array":[42]},"used_by":[]},"WP_Image_Editor_GD::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor-gd.php","line":60,"missingDoc":false,"filters":[],"uses":{"imagetypes":[61]},"used_by":[]},"WP_Image_Editor_GD::load":{"doc":"\/**\n * Loads image from $this->file into new GD Resource.\n *\n * @since 3.5.0\n * @access protected\n *\n * @return boolean|\\WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":82,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"__":[87,94,98],"is_file":[86],"preg_match":[86],"ini_set":[90],"imagecreatefromstring":[91],"file_get_contents":[91],"is_resource":[93],"getimagesize":[96],"update_size":[100]},"used_by":[]},"WP_Image_Editor_GD::update_size":{"doc":"\/**\n * Sets or updates current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor-gd.php","line":115,"missingDoc":false,"filters":[],"uses":{"imagesx":[117],"imagesy":[120]},"used_by":[]},"WP_Image_Editor_GD::resize":{"doc":"\/**\n * Resizes current image.\n * Wraps _resize, since _resize returns a GD Resource.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":137,"missingDoc":false,"filters":[],"uses":{"_resize":[141],"imagedestroy":[144],"is_wp_error":[148],"is_resource":[143],"__":[151]},"used_by":[]},"WP_Image_Editor_GD::_resize":{"doc":"","file":"class-wp-image-editor-gd.php","line":154,"missingDoc":true,"filters":[],"uses":{"image_resize_dimensions":[155],"__":[157,169],"wp_imagecreatetruecolor":[161],"imagecopyresampled":[162],"update_size":[165],"is_resource":[164]},"used_by":[]},"image_resize_dimensions":{"doc":"\/**\n * Retrieve calculated resized dimensions for use in WP_Image_Editor.\n *\n * Calculate dimensions and coordinates for a resized image that fits within a\n * specified width and height. If $crop is true, the largest matching central\n * portion of the image will be cropped out and resized to the required size.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'image_resize_dimensions' on $orig_w, $orig_h, $dest_w, $dest_h and\n *\t\t$crop to provide custom resize dimensions.\n *\n * @param int $orig_w Original width.\n * @param int $orig_h Original height.\n * @param int $dest_w New width.\n * @param int $dest_h New height.\n * @param bool $crop Optional, default is false. Whether to crop image or resize.\n * @return bool|array False on failure. Returned array matches parameters for imagecopyresampled() PHP function.\n *\/","file":"media.php","line":319,"missingDoc":false,"filters":["'image_resize_dimensions'"],"uses":{"min":[335,336],"intval":[339,343],"max":[346],"round":[348,349],"floor":[351,352],"wp_constrain_dimensions":[361]},"used_by":{"WP_Image_Editor_GD::_resize":[155],"WP_Image_Editor_Imagick::resize":[221],"image_get_intermediate_size":[456]}},"wp_imagecreatetruecolor":{"doc":"\/**\n * Create new GD image resource with transparency support\n * @TODO: Deprecate if possible.\n *\n * @since 2.9.0\n *\n * @param int $width Image width\n * @param int $height Image height\n * @return image resource\n *\/","file":"media.php","line":927,"missingDoc":false,"filters":[],"uses":{"imagecreatetruecolor":[928],"imagealphablending":[930],"imagesavealpha":[931],"is_resource":[929],"function_exists":[929,929]},"used_by":{"WP_Image_Editor_GD::_resize":[161],"WP_Image_Editor_GD::crop":[230],"WP_Image_Editor_GD::flip":[289]}},"WP_Image_Editor_GD::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor-gd.php","line":182,"missingDoc":false,"filters":[],"uses":{"_resize":[187],"_save":[190],"imagedestroy":[192],"is_wp_error":[194,189]},"used_by":[]},"WP_Image_Editor_GD::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":222,"missingDoc":false,"filters":[],"uses":{"wp_imagecreatetruecolor":[230],"imageantialias":[238],"function_exists":[237],"imagecopyresampled":[240],"imagedestroy":[243],"update_size":[245],"is_resource":[242],"__":[249]},"used_by":[]},"WP_Image_Editor_GD::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n * Ported from image-edit.php\n *\n * @since 3.5.0\n * @access public\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":262,"missingDoc":false,"filters":[],"uses":{"imagerotate":[264],"imagedestroy":[267],"update_size":[269],"is_resource":[266],"function_exists":[263],"__":[273]},"used_by":[]},"WP_Image_Editor_GD::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @returns boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":286,"missingDoc":false,"filters":[],"uses":{"wp_imagecreatetruecolor":[289],"imagedestroy":[298],"imagecopyresampled":[297],"is_resource":[291],"__":[303]},"used_by":[]},"WP_Image_Editor_GD::save":{"doc":"\/**\n * Saves current in-memory image to file.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor-gd.php","line":316,"missingDoc":false,"filters":[],"uses":{"_save":[317],"is_wp_error":[319]},"used_by":[]},"WP_Image_Editor_GD::_save":{"doc":"","file":"class-wp-image-editor-gd.php","line":327,"missingDoc":true,"filters":["'jpeg_quality'","'image_make_intermediate_size'"],"uses":{"get_output_format":[328],"generate_filename":[331],"__":[335,343,347,350],"make_image":[334,342,346],"imagetruecolortopalette":[340],"imagecolorstotal":[340],"function_exists":[339],"imageistruecolor":[339],"stat":[354],"dirname":[354],"chmod":[356],"wp_basename":[360]},"used_by":[]},"wp_basename":{"doc":"\/**\n * i18n friendly version of basename()\n *\n * @since 3.1.0\n *\n * @param string $path A path.\n * @param string $suffix If the filename ends in suffix this will also be cut off.\n * @return string\n *\/","file":"formatting.php","line":3254,"missingDoc":false,"filters":[],"uses":{"urldecode":[3255],"basename":[3255],"str_replace":[3255],"urlencode":[3255]},"used_by":{"WP_Image_Editor_GD::_save":[360],"WP_Image_Editor_Imagick::_save":[432],"WP_Image_Editor::get_output_format":[265],"WP_Image_Editor::generate_filename":[291],"image_downsize":[145,161],"wp_get_attachment_image_src":[518],"wp_prepare_attachment_for_js":[1388],"WP_Query::parse_tax_query":[1713],"WP_Query::get_posts":[2133,2145]}},"WP_Image_Editor_GD::stream":{"doc":"\/**\n * Returns stream of current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n *\/","file":"class-wp-image-editor-gd.php","line":375,"missingDoc":false,"filters":[],"uses":{"get_output_format":[376],"header":[380,383,386],"imagepng":[381],"imagegif":[384],"imagejpeg":[387]},"used_by":[]},"WP_Image_Editor_Imagick::__destruct":{"doc":"","file":"class-wp-image-editor-imagick.php","line":21,"missingDoc":true,"filters":[],"uses":{"clear":[24],"destroy":[25]},"used_by":[]},"WP_Image_Editor_Imagick::test":{"doc":"\/**\n * Checks to see if current environment supports Imagick.\n *\n * We require Imagick 2.2.0 or greater, based on whether the queryFormats()\n * method can be called statically.\n *\n * @since 3.5.0\n * @access public\n *\n * @return boolean\n *\/","file":"class-wp-image-editor-imagick.php","line":40,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[43],"class_exists":[43,43],"version_compare":[46],"phpversion":[46],"defined":[70],"array_diff":[73],"get_class_methods":[73]},"used_by":[]},"WP_Image_Editor_Imagick::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor-imagick.php","line":88,"missingDoc":false,"filters":[],"uses":{"strtoupper":[89],"method_exists":[96]},"used_by":[]},"WP_Image_Editor_Imagick::load":{"doc":"\/**\n * Loads image from $this->file into new Imagick Object.\n *\n * @since 3.5.0\n * @access protected\n *\n * @return boolean|WP_Error True if loaded; WP_Error on failure.\n *\/","file":"class-wp-image-editor-imagick.php","line":115,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"__":[120,129],"is_file":[119],"preg_match":[119],"ini_set":[123],"valid":[128],"setIteratorIndex":[133],"is_callable":[132],"get_mime_type":[135],"getImageFormat":[135],"getMessage":[138],"update_size":[141],"is_wp_error":[142],"set_quality":[145]},"used_by":[]},"WP_Image_Editor_Imagick::set_quality":{"doc":"\/**\n * Sets Image Compression quality on a 1-100% scale.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $quality Compression Quality. Range: [1,100]\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":157,"missingDoc":false,"filters":["'jpeg_quality'"],"uses":{"setImageCompressionQuality":[163,167],"setImageCompression":[164],"getMessage":[171]},"used_by":[]},"WP_Image_Editor_Imagick::update_size":{"doc":"\/**\n * Sets or updates current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor-imagick.php","line":186,"missingDoc":false,"filters":[],"uses":{"getImageGeometry":[190],"__":[193]},"used_by":[]},"WP_Image_Editor_Imagick::resize":{"doc":"\/**\n * Resizes current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":217,"missingDoc":false,"filters":[],"uses":{"image_resize_dimensions":[221],"__":[223],"crop":[227],"scaleImage":[235],"getMessage":[238],"update_size":[241]},"used_by":[]},"WP_Image_Editor_Imagick::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor-imagick.php","line":254,"missingDoc":false,"filters":[],"uses":{"getImage":[257,261],"resize":[263],"_save":[266],"clear":[268],"destroy":[269],"is_wp_error":[272,265]},"used_by":[]},"WP_Image_Editor_Imagick::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":302,"missingDoc":false,"filters":[],"uses":{"cropImage":[309],"setImagePage":[310],"scaleImage":[320],"update_size":[321,327],"getMessage":[325]},"used_by":[]},"WP_Image_Editor_Imagick::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n *\n * @since 3.5.0\n * @access public\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":339,"missingDoc":false,"filters":[],"uses":{"rotateImage":[345],"getMessage":[348],"update_size":[350]},"used_by":[]},"WP_Image_Editor_Imagick::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @returns boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":363,"missingDoc":false,"filters":[],"uses":{"flipImage":[366],"flopImage":[369],"getMessage":[372]},"used_by":[]},"WP_Image_Editor_Imagick::save":{"doc":"\/**\n * Saves current image to file.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor-imagick.php","line":387,"missingDoc":false,"filters":[],"uses":{"_save":[388],"setImageFormat":[395],"strtoupper":[395],"get_extension":[395],"getMessage":[398],"is_wp_error":[390]},"used_by":[]},"WP_Image_Editor_Imagick::_save":{"doc":"","file":"class-wp-image-editor-imagick.php","line":405,"missingDoc":true,"filters":["'image_make_intermediate_size'"],"uses":{"get_output_format":[406],"generate_filename":[409],"getImageFormat":[413],"setImageFormat":[415,419],"strtoupper":[415],"get_extension":[415],"make_image":[416],"getMessage":[422],"stat":[426],"dirname":[426],"chmod":[428],"wp_basename":[432]},"used_by":[]},"WP_Image_Editor_Imagick::stream":{"doc":"\/**\n * Streams current image to browser.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":448,"missingDoc":false,"filters":[],"uses":{"get_output_format":[449],"setImageFormat":[453,460],"strtoupper":[453],"header":[456],"getImageBlob":[457],"get_extension":[460],"getMessage":[463]},"used_by":[]},"WP_Image_Editor::__construct":{"doc":"\/**\n * Each instance handles a single file.\n *\/","file":"class-wp-image-editor.php","line":24,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::test":{"doc":"\/**\n * Checks to see if current environment supports the editor chosen.\n * Must be overridden in a sub-class.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param array $args\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":39,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n * Must be overridden in a sub-class.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":54,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::load":{"doc":"\/**\n * Loads image from $this->file into editor.\n *\n * @since 3.5.0\n * @access protected\n * @abstract\n *\n * @return boolean|WP_Error True if loaded; WP_Error on failure.\n *\/","file":"class-wp-image-editor.php","line":67,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::save":{"doc":"\/**\n * Saves current image to file.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor.php","line":80,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::resize":{"doc":"\/**\n * Resizes current image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":94,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor.php","line":107,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":126,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":138,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":151,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::stream":{"doc":"\/**\n * Streams current image to browser.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $mime_type\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":163,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::get_size":{"doc":"\/**\n * Gets dimensions of image.\n *\n * @since 3.5.0\n * @access public\n *\n * @return array {'width'=>int, 'height'=>int}\n *\/","file":"class-wp-image-editor.php","line":173,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::update_size":{"doc":"\/**\n * Sets current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor.php","line":186,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::set_quality":{"doc":"\/**\n * Sets Image Compression quality on a 1-100% scale.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $quality Compression Quality. Range: [1,100]\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":203,"missingDoc":false,"filters":["'wp_editor_set_quality'"],"uses":[],"used_by":[]},"WP_Image_Editor::get_output_format":{"doc":"\/**\n * Returns preferred mime-type and extension based on provided\n * file's extension and mime, or current file's extension and mime.\n *\n * Will default to $this->default_mime_type if requested is not supported.\n *\n * Provides corrected filename only if filename is provided.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $filename\n * @param string $mime_type\n * @return array { filename|null, extension, mime-type }\n *\/","file":"class-wp-image-editor.php","line":224,"missingDoc":false,"filters":["'image_editor_default_mime_type'"],"uses":{"get_extension":[230,254],"strtolower":[234,239],"pathinfo":[234,239,259],"get_mime_type":[235],"supports_mime_type":[252],"trailingslashit":[265],"wp_basename":[265]},"used_by":[]},"WP_Image_Editor::generate_filename":{"doc":"\/**\n * Builds an output filename based on current file, and adding proper suffix\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $suffix\n * @param string $dest_path\n * @param string $extension\n * @return string filename\n *\/","file":"class-wp-image-editor.php","line":282,"missingDoc":false,"filters":[],"uses":{"get_suffix":[285],"pathinfo":[287],"wp_basename":[291],"strtolower":[292],"is_null":[294],"realpath":[294],"trailingslashit":[297]},"used_by":[]},"WP_Image_Editor::get_suffix":{"doc":"\/**\n * Builds and returns proper suffix for file based on height and width.\n *\n * @since 3.5.0\n * @access public\n *\n * @return string suffix\n *\/","file":"class-wp-image-editor.php","line":308,"missingDoc":false,"filters":[],"uses":{"get_size":[309]},"used_by":[]},"WP_Image_Editor::make_image":{"doc":"\/**\n * Either calls editor's save function or handles file as a stream.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string|stream $filename\n * @param callable $function\n * @param array $arguments\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":326,"missingDoc":false,"filters":[],"uses":{"ob_start":[331],"wp_is_stream":[329],"call_user_func_array":[334],"ob_get_contents":[337],"fopen":[339],"fwrite":[344],"fclose":[345],"ob_end_clean":[349]},"used_by":[]},"wp_is_stream":{"doc":"\/**\n * Test if a given path is a stream URL\n *\n * @param string $path The resource path or URL\n * @return bool True if the path is a stream URL\n *\/","file":"functions.php","line":3866,"missingDoc":false,"filters":[],"uses":{"stream_get_wrappers":[3867],"join":[3868],"preg_match":[3870]},"used_by":{"WP_Image_Editor::make_image":[329],"wp_mkdir_p":[1318]}},"WP_Image_Editor::get_mime_type":{"doc":"\/**\n * Returns first matched mime-type from extension,\n * as mapped from wp_get_mime_types()\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $extension\n * @return string|boolean\n *\/","file":"class-wp-image-editor.php","line":365,"missingDoc":false,"filters":[],"uses":{"wp_get_mime_types":[369],"array_keys":[370],"preg_match":[373]},"used_by":[]},"wp_get_mime_types":{"doc":"\/**\n * Retrieve list of mime types and file extensions.\n *\n * @since 3.5.0\n *\n * @uses apply_filters() Calls 'mime_types' on returned array. This filter should\n * be used to add types, not remove them. To remove types use the upload_mimes filter.\n *\n * @return array Array of mime types keyed by the file extension regex corresponding to those types.\n *\/","file":"functions.php","line":1904,"missingDoc":false,"filters":["'mime_types'"],"uses":[],"used_by":{"WP_Image_Editor::get_mime_type":[369],"WP_Image_Editor::get_extension":[392],"do_enclose":[461],"get_allowed_mime_types":[2003]}},"WP_Image_Editor::get_extension":{"doc":"\/**\n * Returns first matched extension from Mime-type,\n * as mapped from wp_get_mime_types()\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $mime_type\n * @return string|boolean\n *\/","file":"class-wp-image-editor.php","line":391,"missingDoc":false,"filters":[],"uses":{"explode":[392],"array_search":[392],"wp_get_mime_types":[392]},"used_by":[]},"WP_Theme::__construct":{"doc":"\/**\n * Constructor for WP_Theme.\n *\n * @param string $theme_dir Directory of the theme within the theme_root.\n * @param string $theme_root Theme root.\n * @param WP_Error|null $_child If this theme is a parent theme, the child may be passed for validation purposes.\n *\/","file":"class-wp-theme.php","line":167,"missingDoc":false,"filters":["'wp_cache_themes_persistently'"],"uses":{"wp_cache_add_global_groups":[174],"is_int":[175],"wp_cache_add_non_persistent_groups":[178],"basename":[187,227],"dirname":[188,186,246],"in_array":[186,186],"md5":[191],"cache_get":[194],"file_exists":[205,207,213,235,247,243],"__":[208,210,214,218,236,255,267,271],"cache_add":[212,220,237,256,268,272,286],"add":[214],"is_readable":[216],"get_file_data":[223],"array_search":[226],"is_array":[196,243,281],"search_theme_directories":[249],"sprintf":[255,267,271],"is_a":[265]},"used_by":[]},"get_file_data":{"doc":"\/**\n * Retrieve metadata from a file.\n *\n * Searches for metadata in the first 8kiB of a file, such as a plugin or theme.\n * Each piece of metadata must be on its own line. Fields can not span multiple\n * lines, the value will get cut at the end of the first line.\n *\n * If the file data is not within that first 8kiB, then the author should correct\n * their plugin file and move the data headers to the top.\n *\n * @see http:\/\/codex.wordpress.org\/File_Header\n *\n * @since 2.9.0\n * @param string $file Path to the file\n * @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name')\n * @param string $context If specified adds filter hook \"extra_{$context}_headers\"\n *\/","file":"functions.php","line":3528,"missingDoc":false,"filters":["\"extra_{$context}_headers\""],"uses":{"fopen":[3530],"fread":[3533],"fclose":[3536],"str_replace":[3539],"array_combine":[3542],"array_merge":[3543],"_cleanup_header_comment":[3550],"preg_match":[3549],"preg_quote":[3549]},"used_by":{"WP_Theme::__construct":[223]}},"search_theme_directories":{"doc":"\/**\n * Search all registered theme directories for complete and valid themes.\n *\n * @since 2.9.0\n *\n * @param bool $force Optional. Whether to force a new directory scan. Defaults to false.\n * @return array Valid themes found\n *\/","file":"theme.php","line":328,"missingDoc":false,"filters":["'wp_cache_themes_persistently'"],"uses":{"str_replace":[346],"strpos":[345],"get_site_transient":[352,426],"is_array":[353],"is_int":[365],"scandir":[375,392],"is_dir":[379,396],"file_exists":[398,381],"asort":[417],"array_flip":[420],"set_site_transient":[427]},"used_by":{"WP_Theme::__construct":[249],"wp_get_themes":[33],"wp_clean_themes_cache":[116],"get_theme_roots":[290]}},"WP_Theme::__toString":{"doc":"\/**\n * When converting the object to a string, the theme name is returned.\n *\n * @return string Theme name, ready for display (translated)\n *\/","file":"class-wp-theme.php","line":295,"missingDoc":false,"filters":[],"uses":{"display":[296]},"used_by":[]},"WP_Theme::__isset":{"doc":"\/**\n * __isset() magic method for properties formerly returned by current_theme_info()\n *\/","file":"class-wp-theme.php","line":302,"missingDoc":false,"filters":[],"uses":{"in_array":[308]},"used_by":[]},"WP_Theme::__get":{"doc":"\/**\n * __get() magic method for properties formerly returned by current_theme_info()\n *\/","file":"class-wp-theme.php","line":314,"missingDoc":false,"filters":[],"uses":{"get":[318,320,322,339],"parent":[322,322],"get_template_directory":[324],"get_stylesheet_directory":[326],"get_template":[328],"get_stylesheet":[330],"get_screenshot":[332],"display":[335,337],"get_theme_root":[341],"get_theme_root_uri":[343],"offsetGet":[346]},"used_by":[]},"get_theme_root":{"doc":"\/**\n * Retrieve path to themes directory.\n *\n * Does not have trailing slash.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'theme_root' filter on path.\n *\n * @param string $stylesheet_or_template The stylesheet or template name of the theme\n * @return string Theme path.\n *\/","file":"theme.php","line":443,"missingDoc":false,"filters":["'theme_root'"],"uses":{"in_array":[449],"get_raw_theme_root":[446]},"used_by":{"WP_Theme::__get":[341],"WP_Theme::offsetGet":[418],"get_stylesheet_directory":[160],"get_template_directory":[253]}},"get_theme_root_uri":{"doc":"\/**\n * Retrieve URI for themes directory.\n *\n * Does not have trailing slash.\n *\n * @since 1.5.0\n *\n * @param string $stylesheet_or_template Optional. The stylesheet or template name of the theme.\n * \tDefault is to leverage the main theme root.\n * @param string $theme_root Optional. The theme root for which calculations will be based, preventing\n * \tthe need for a get_raw_theme_root() call.\n * @return string Themes URI.\n *\/","file":"theme.php","line":471,"missingDoc":false,"filters":["'theme_root_uri'"],"uses":{"get_raw_theme_root":[475],"content_url":[481,489,492],"str_replace":[481,483],"strpos":[482,484,484,480],"site_url":[483],"plugins_url":[485],"basename":[485],"in_array":[478],"get_option":[495]},"used_by":{"WP_Theme::__get":[343],"WP_Theme::offsetGet":[420],"WP_Theme::get_stylesheet_directory_uri":[799],"WP_Theme::get_template_directory_uri":[815,817],"WP_Theme::get_theme_root_uri":[852],"get_stylesheet_directory_uri":[175],"get_template_directory_uri":[269]}},"WP_Theme::offsetSet":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":353,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::offsetUnset":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":358,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::offsetExists":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":363,"missingDoc":false,"filters":[],"uses":{"in_array":[370]},"used_by":[]},"WP_Theme::offsetGet":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes().\n *\n * Author, Author Name, Author URI, and Description did not previously return\n * translated data. We are doing so now as it is safe to do. However, as\n * Name and Title could have been used as the key for get_themes(), both remain\n * untranslated for back compatibility. This means that ['Name'] is not ideal,\n * and care should be taken to use $theme->display('Name') to get a properly\n * translated header.\n *\/","file":"class-wp-theme.php","line":383,"missingDoc":false,"filters":[],"uses":{"get":[389,400,416,422],"display":[391,393,395,397],"get_template":[402],"get_stylesheet":[404],"get_files":[406,408],"get_template_directory":[410],"get_stylesheet_directory":[412],"get_screenshot":[414],"get_theme_root":[418],"get_theme_root_uri":[420],"parent":[422,422]},"used_by":[]},"WP_Theme::errors":{"doc":"\/**\n * Returns errors property.\n *\n * @since 3.4.0\n * @access public\n *\n * @return WP_Error|bool WP_Error if there are errors, or false.\n *\/","file":"class-wp-theme.php","line":436,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[437]},"used_by":[]},"WP_Theme::exists":{"doc":"\/**\n * Whether the theme exists.\n *\n * A theme with errors exists. A theme with the error of 'theme_not_found',\n * meaning that the theme's directory was not found, does not exist.\n *\n * @since 3.4.0\n * @access public\n *\n * @return bool Whether the theme exists.\n *\/","file":"class-wp-theme.php","line":451,"missingDoc":false,"filters":[],"uses":{"errors":[452,452],"in_array":[452],"get_error_codes":[452]},"used_by":[]},"WP_Theme::parent":{"doc":"\/**\n * Returns reference to the parent theme.\n *\n * @since 3.4.0\n * @access public\n *\n * @return WP_Theme|bool Parent theme, or false if the current theme is not a child theme.\n *\/","file":"class-wp-theme.php","line":463,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::cache_add":{"doc":"\/**\n * Adds theme data to cache.\n *\n * Cache entries keyed by the theme and the type of data.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $key Type of data to store (theme, screenshot, headers, page_templates)\n * @param string $data Data to store\n * @return bool Return value from wp_cache_add()\n *\/","file":"class-wp-theme.php","line":479,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[480]},"used_by":[]},"WP_Theme::cache_get":{"doc":"\/**\n * Gets theme data from cache.\n *\n * Cache entries are keyed by the theme and the type of data.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $key Type of data to retrieve (theme, screenshot, headers, page_templates)\n * @return mixed Retrieved data\n *\/","file":"class-wp-theme.php","line":494,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[495]},"used_by":[]},"WP_Theme::cache_delete":{"doc":"\/**\n * Clears the cache for the theme.\n *\n * @access public\n * @since 3.4.0\n *\/","file":"class-wp-theme.php","line":504,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[506],"__construct":[509]},"used_by":[]},"__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/Base.php","line":77,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::cache_delete":[509],"WP_Meta_Query::parse_query_vars":[688],"SimplePie_File::__construct":[143,225]}},"WP_Theme::get":{"doc":"\/**\n * Get a raw, unformatted theme header.\n *\n * The header is sanitized, but is not translated, and is not marked up for display.\n * To get a theme header for display, use the display() method.\n *\n * Use the get_template() method, not the 'Template' header, for finding the template.\n * The 'Template' header is only good for what was written in the style.css, while\n * get_template() takes into account where WordPress actually located the theme and\n * whether it is actually valid.\n *\n * @access public\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @return string String on success, false on failure.\n *\/","file":"class-wp-theme.php","line":529,"missingDoc":false,"filters":[],"uses":{"cache_get":[534],"is_array":[535],"sanitize_header":[545,548],"array_keys":[544],"cache_add":[546]},"used_by":[]},"WP_Theme::display":{"doc":"\/**\n * Gets a theme header, formatted and translated for display.\n *\n * @access public\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param bool $markup Optional. Whether to mark up the header. Defaults to true.\n * @param bool $translate Optional. Whether to translate the header. Defaults to true.\n * @return string Processed header, false on failure.\n *\/","file":"class-wp-theme.php","line":565,"missingDoc":false,"filters":[],"uses":{"get":[566],"load_textdomain":[568],"translate_header":[572],"markup_header":[575]},"used_by":[]},"load_textdomain":{"doc":"\/**\n * Loads a MO file into the domain $domain.\n *\n * If the domain already exists, the translations will be merged. If both\n * sets have the same string, the translation from the original value will be taken.\n *\n * On success, the .mo file will be placed in the $l10n global by $domain\n * and will be a MO object.\n *\n * @since 1.5.0\n * @uses $l10n Gets list of domain translated string objects\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $mofile Path to the .mo file\n * @return bool True on success, false on failure\n *\/","file":"l10n.php","line":326,"missingDoc":false,"filters":["'override_load_textdomain'","'load_textdomain'","'load_textdomain_mofile'"],"uses":{"is_readable":[339],"import_from_file":[342],"merge_with":[345]},"used_by":{"WP_Theme::display":[568],"WP_Theme::get_page_templates":[943],"wp_timezone_choice":[3341],"load_default_textdomain":[388,391,396,399],"load_plugin_textdomain":[429],"load_muplugin_textdomain":[444],"load_theme_textdomain":[467,472],"wp_load_translations_early":[749,751]}},"WP_Theme::sanitize_header":{"doc":"\/**\n * Sanitize a theme header.\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to sanitize.\n *\/","file":"class-wp-theme.php","line":586,"missingDoc":false,"filters":[],"uses":{"wp_kses":[602,615],"esc_url_raw":[619],"array_filter":[622],"array_map":[622],"explode":[622],"strip_tags":[622]},"used_by":[]},"wp_kses":{"doc":"\/**\n * Filters content and keeps only allowable HTML elements.\n *\n * This function makes sure that only the allowed HTML element names, attribute\n * names and attribute values plus only sane HTML entities will occur in\n * $string. You have to remove any slashes from PHP's magic quotes before you\n * call this function.\n *\n * The default allowed protocols are 'http', 'https', 'ftp', 'mailto', 'news',\n * 'irc', 'gopher', 'nntp', 'feed', 'telnet, 'mms', 'rtsp' and 'svn'. This\n * covers all common link protocols, except for 'javascript' which should not\n * be allowed for untrusted users.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter through kses\n * @param array $allowed_html List of allowed HTML elements\n * @param array $allowed_protocols Optional. Allowed protocol in links.\n * @return string Filtered content with only allowed HTML elements\n *\/","file":"kses.php","line":476,"missingDoc":false,"filters":[],"uses":{"wp_allowed_protocols":[478],"wp_kses_no_null":[479],"wp_kses_js_entities":[480],"wp_kses_normalize_entities":[481],"wp_kses_hook":[482],"wp_kses_split":[483]},"used_by":{"WP_Theme::sanitize_header":[602,615],"wp_kses_split2":[612],"wp_filter_kses":[1257],"wp_kses_data":[1270],"wp_filter_post_kses":[1285],"wp_kses_post":[1300],"wp_filter_nohtml_kses":[1312]}},"WP_Theme::markup_header":{"doc":"\/**\n * Mark up a theme header.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to mark up.\n * @param string $translate Whether the header has been translated.\n * @return string Value, marked up.\n *\/","file":"class-wp-theme.php","line":640,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[644],"wptexturize":[647],"esc_attr__":[653],"sprintf":[654],"display":[654],"__":[656,663],"get":[650],"implode":[665],"esc_url":[669]},"used_by":[]},"wptexturize":{"doc":"\/**\n * Replaces common plain text characters into formatted entities\n *\n * As an example,\n * <code>\n * 'cause today's effort makes it worth tomorrow's \"holiday\"...\n * <\/code>\n * Becomes:\n * <code>\n * ’cause today’s effort makes it worth tomorrow’s “holiday”…\n * <\/code>\n * Code within certain html blocks are skipped.\n *\n * @since 0.71\n * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases\n *\n * @param string $text The text to be formatted\n * @return string The string replaced with html entities\n *\/","file":"formatting.php","line":29,"missingDoc":false,"filters":["'no_texturize_tags'","'no_texturize_shortcodes'"],"uses":{"_x":[37,39,42,45,47,50,52,55,57],"array_keys":[64,98],"array_values":[65,99],"array_merge":[73,74],"implode":[104,105,130],"preg_split":[110],"_wptexturize_pushpop_element":[119,121],"str_replace":[124],"preg_replace":[126,128]},"used_by":{"WP_Theme::markup_header":[647],"trackback_rdf":[758],"get_archives_link":[826],"gallery_shortcode":[781]}},"esc_attr__":{"doc":"\/**\n * Retrieves the translation of $text and escapes it for safe use in an attribute.\n * If there is no translation, or the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @see esc_attr()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":112,"missingDoc":false,"filters":[],"uses":{"esc_attr":[113],"translate":[113]},"used_by":{"WP_Theme::markup_header":[653],"WP_Widget_RSS::widget":[783],"wp_timezone_choice":[3421,3429],"get_search_form":[164],"__main":[232],"edit_comment_link":[1009],"edit_bookmark_link":[1050],"get_the_password_form":[1227]}},"WP_Theme::translate_header":{"doc":"\/**\n * Translate a theme header.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to translate.\n * @return string Translated value.\n *\/","file":"class-wp-theme.php","line":686,"missingDoc":false,"filters":[],"uses":{"translate":[692,714],"get":[692,714],"function_exists":[695],"get_theme_feature_list":[701]},"used_by":[]},"translate":{"doc":"\/**\n * Retrieves the translation of $text. If there is no translation, or\n * the domain isn't loaded, the original text is returned.\n *\n * @see __() Don't use translate() directly, use __()\n * @since 2.2.0\n * @uses apply_filters() Calls 'gettext' on domain translated text\n *\t\twith the untranslated text as second parameter.\n *\n * @param string $text Text to translate.\n * @param string $domain Domain to retrieve the translated text.\n * @return string Translated text\n *\/","file":"l10n.php","line":67,"missingDoc":false,"filters":["'gettext'"],"uses":{"get_translations_for_domain":[68],"translate":[69]},"used_by":{"WP_Theme::translate_header":[692,714],"_c":[1795],"translate_with_context":[1814],"wp_timezone_choice":[3366,3367,3368],"translate":[69],"translate_with_gettext_context":[82],"__":[97],"esc_attr__":[113],"esc_html__":[129],"_e":[142],"esc_attr_e":[156],"esc_html_e":[170]}},"WP_Theme::get_stylesheet":{"doc":"\/**\n * The directory name of the theme's \"stylesheet\" files, inside the theme root.\n *\n * In the case of a child theme, this is directory name of the the child theme.\n * Otherwise, get_stylesheet() is the same as get_template().\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Stylesheet\n *\/","file":"class-wp-theme.php","line":730,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_template":{"doc":"\/**\n * The directory name of the theme's \"template\" files, inside the theme root.\n *\n * In the case of a child theme, this is the directory name of the parent theme.\n * Otherwise, the get_template() is the same as get_stylesheet().\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Template\n *\/","file":"class-wp-theme.php","line":745,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_stylesheet_directory":{"doc":"\/**\n * Returns the absolute path to the directory of a theme's \"stylesheet\" files.\n *\n * In the case of a child theme, this is the absolute path to the directory\n * of the child theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Absolute path of the stylesheet directory.\n *\/","file":"class-wp-theme.php","line":760,"missingDoc":false,"filters":[],"uses":{"errors":[761,761],"in_array":[761],"get_error_codes":[761]},"used_by":[]},"WP_Theme::get_template_directory":{"doc":"\/**\n * Returns the absolute path to the directory of a theme's \"template\" files.\n *\n * In the case of a child theme, this is the absolute path to the directory\n * of the parent theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Absolute path of the template directory.\n *\/","file":"class-wp-theme.php","line":778,"missingDoc":false,"filters":[],"uses":{"parent":[780,779]},"used_by":[]},"WP_Theme::get_stylesheet_directory_uri":{"doc":"\/**\n * Returns the URL to the directory of a theme's \"stylesheet\" files.\n *\n * In the case of a child theme, this is the URL to the directory of the\n * child theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string URL to the stylesheet directory.\n *\/","file":"class-wp-theme.php","line":798,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[799],"str_replace":[799],"rawurlencode":[799]},"used_by":[]},"WP_Theme::get_template_directory_uri":{"doc":"\/**\n * Returns the URL to the directory of a theme's \"template\" files.\n *\n * In the case of a child theme, this is the URL to the directory of the\n * parent theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string URL to the template directory.\n *\/","file":"class-wp-theme.php","line":813,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[815,817],"parent":[815,814],"str_replace":[819],"rawurlencode":[819]},"used_by":[]},"WP_Theme::get_theme_root":{"doc":"\/**\n * The absolute path to the directory of the theme root.\n *\n * This is typically the absolute path to wp-content\/themes.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Theme root.\n *\/","file":"class-wp-theme.php","line":832,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_theme_root_uri":{"doc":"\/**\n * Returns the URL to the directory of the theme root.\n *\n * This is typically the absolute URL to wp-content\/themes. This forms the basis\n * for all other URLs returned by WP_Theme, so we pass it to the public function\n * get_theme_root_uri() and allow it to run the theme_root_uri filter.\n *\n * @uses get_theme_root_uri()\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Theme root URI.\n *\/","file":"class-wp-theme.php","line":850,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[852]},"used_by":[]},"WP_Theme::get_screenshot":{"doc":"\/**\n * Returns the main screenshot file for the theme.\n *\n * The main screenshot is called screenshot.png. gif and jpg extensions are also allowed.\n *\n * Screenshots for a theme must be in the stylesheet directory. (In the case of child\n * themes, parent theme screenshots are not inherited.)\n *\n * @since 3.4.0\n * @access public\n *\n * @param string $uri Type of URL to return, either 'relative' or an absolute URI. Defaults to absolute URI.\n * @return mixed Screenshot file. False if the theme does not have a screenshot.\n *\/","file":"class-wp-theme.php","line":870,"missingDoc":false,"filters":[],"uses":{"cache_get":[871],"get_stylesheet_directory_uri":[875,885],"cache_add":[882,889],"file_exists":[881],"get_stylesheet_directory":[881]},"used_by":[]},"WP_Theme::get_files":{"doc":"\/**\n * Return files in the theme's directory.\n *\n * @since 3.4.0\n * @access public\n *\n * @param mixed $type Optional. Array of extensions to return. Defaults to all files (null).\n * @param int $depth Optional. How deep to search for files. Defaults to a flat scan (0 depth). -1 depth is infinite.\n * @param bool $search_parent Optional. Whether to return parent files. Defaults to false.\n * @return array Array of files, keyed by the path to the file relative to the theme's directory, with the values\n * \tbeing absolute paths.\n *\/","file":"class-wp-theme.php","line":905,"missingDoc":false,"filters":[],"uses":{"get_stylesheet_directory":[906],"get_template_directory":[909],"parent":[908]},"used_by":[]},"WP_Theme::get_page_templates":{"doc":"\/**\n * Returns the theme's page templates.\n *\n * @since 3.4.0\n * @access public\n *\n * @return array Array of page templates, keyed by filename, with the value of the translated header name.\n *\/","file":"class-wp-theme.php","line":922,"missingDoc":false,"filters":[],"uses":{"errors":[924,924],"get_error_codes":[924],"cache_get":[927],"get_files":[932],"preg_match":[935],"file_get_contents":[935],"_cleanup_header_comment":[937],"cache_add":[940],"is_array":[929],"translate_header":[945],"load_textdomain":[943],"get_page_templates":[950],"parent":[950,949]},"used_by":[]},"_cleanup_header_comment":{"doc":"\/**\n * Strip close comment and close php tags from file headers used by WP.\n * See http:\/\/core.trac.wordpress.org\/ticket\/8497\n *\n * @since 2.8.0\n *\n * @param string $str\n * @return string\n *\/","file":"functions.php","line":3462,"missingDoc":false,"filters":[],"uses":{"trim":[3463],"preg_replace":[3463]},"used_by":{"WP_Theme::get_page_templates":[937],"get_file_data":[3550]}},"WP_Theme::scandir":{"doc":"\/**\n * Scans a directory for files of a certain extension.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $path Absolute path to search.\n * @param mixed Array of extensions to find, string of a single extension, or null for all extensions.\n * @param int $depth How deep to search for files. Optional, defaults to a flat scan (0 depth). -1 depth is infinite.\n * @param string $relative_path The basename of the absolute path. Used to control the returned path\n * \tfor the found files, particularly when this function recurses to lower depths.\n *\/","file":"class-wp-theme.php","line":967,"missingDoc":false,"filters":[],"uses":{"is_dir":[968,986],"implode":[973],"trailingslashit":[976],"scandir":[980],"array_merge_recursive":[990],"preg_match":[991]},"used_by":[]},"WP_Theme::load_textdomain":{"doc":"\/**\n * Loads the theme's textdomain.\n *\n * Translation files are not inherited from the parent theme. Todo: if this fails for the\n * child theme, it should probably try to load the parent theme's translations.\n *\n * @since 3.4.0\n * @access public\n *\n * @return True if the textdomain was successfully loaded or has already been loaded. False if\n * \tno textdomain was specified in the file headers, or if the domain could not be loaded.\n *\/","file":"class-wp-theme.php","line":1011,"missingDoc":false,"filters":[],"uses":{"get":[1015,1027],"is_textdomain_loaded":[1021],"get_stylesheet_directory":[1026],"load_theme_textdomain":[1032]},"used_by":[]},"is_textdomain_loaded":{"doc":"\/**\n * Whether there are translations for the domain\n *\n * @since 3.0.0\n * @param string $domain\n * @return bool Whether there are translations\n *\/","file":"l10n.php","line":515,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::load_textdomain":[1021]}},"load_theme_textdomain":{"doc":"\/**\n * Loads the theme's translated strings.\n *\n * If the current locale exists as a .mo file in the theme's root directory, it\n * will be included in the translated strings by the $domain.\n *\n * The .mo files must be named based on the locale exactly.\n *\n * @since 1.5.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n *\/","file":"l10n.php","line":459,"missingDoc":false,"filters":["'theme_locale'"],"uses":{"get_locale":[460],"get_template_directory":[463],"load_textdomain":[467,472]},"used_by":{"WP_Theme::load_textdomain":[1032],"load_child_theme_textdomain":[490]}},"WP_Theme::is_allowed":{"doc":"\/**\n * Whether the theme is allowed (multisite only).\n *\n * @since 3.4.0\n * @access public\n *\n * @param string $check Optional. Whether to check only the 'network'-wide settings, the 'site'\n * \tsettings, or 'both'. Defaults to 'both'.\n * @param int $blog_id Optional. Ignored if only network-wide settings are checked. Defaults to current blog.\n * @return bool Whether the theme is allowed for the network. Returns true in single-site.\n *\/","file":"class-wp-theme.php","line":1047,"missingDoc":false,"filters":[],"uses":{"is_multisite":[1048],"get_stylesheet":[1053,1059]},"used_by":[]},"WP_Theme::get_allowed":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the site or network.\n *\n * @since 3.4.0\n * @access public\n *\n * @param int $blog_id Optional. Defaults to current blog.\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1075,"missingDoc":false,"filters":["'allowed_themes'"],"uses":[],"used_by":[]},"WP_Theme::get_allowed_on_network":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the network.\n *\n * @since 3.4.0\n * @access public\n *\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1088,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1091]},"used_by":[]},"WP_Theme::get_allowed_on_site":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the site.\n *\n * @since 3.4.0\n * @access public\n *\n * @param int $blog_id Optional. Defaults to current blog.\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1104,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[1108,1113],"is_multisite":[1107],"get_option":[1116,1119,1127,1130],"switch_to_blog":[1118,1129,1151],"restore_current_blog":[1120,1131,1154],"wp_get_themes":[1138],"get":[1140],"is_array":[1134],"update_option":[1148,1152],"delete_option":[1149,1153],"is_admin":[1146]},"used_by":[]},"wp_get_themes":{"doc":"\/**\n * Returns an array of WP_Theme objects based on the arguments.\n *\n * Despite advances over get_themes(), this function is quite expensive, and grows\n * linearly with additional themes. Stick to wp_get_theme() if possible.\n *\n * @since 3.4.0\n *\n * @param array $args The search arguments. Optional.\n * - errors mixed True to return themes with errors, false to return themes without errors, null\n * to return all themes. Defaults to false.\n * - allowed mixed (Multisite) True to return only allowed themes for a site. False to return only\n * disallowed themes for a site. 'site' to return only site-allowed themes. 'network'\n * to return only network-allowed themes. Null to return all themes. Defaults to null.\n * - blog_id int (Multisite) The blog ID used to calculate which themes are allowed. Defaults to 0,\n * synonymous for the current blog.\n * @return Array of WP_Theme objects.\n *\/","file":"theme.php","line":27,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[31],"search_theme_directories":[33],"get_stylesheet":[38],"get_raw_theme_root":[40],"in_array":[41],"count":[35],"array_intersect_key":[53,55,57],"array_diff_key":[59],"is_multisite":[50],"errors":[74]},"used_by":{"WP_Theme::get_allowed_on_site":[1138],"get_themes":[2932],"wp_clean_themes_cache":[117],"wp_update_themes":[239]}},"delete_option":{"doc":"\/**\n * Removes option by name. Prevents removal of protected WordPress options.\n *\n * @package WordPress\n * @subpackage Option\n * @since 1.2.0\n *\n * @uses do_action() Calls 'delete_option' hook before option is deleted.\n * @uses do_action() Calls 'deleted_option' and 'delete_option_$option' hooks on success.\n *\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if option is successfully deleted. False on failure.\n *\/","file":"option.php","line":360,"missingDoc":false,"filters":["'delete_option'","\"delete_option_{$option}\"","'deleted_option'"],"uses":{"wp_protect_special_option":[363],"get_row":[366],"prepare":[366],"is_null":[367],"delete":[370],"wp_load_alloptions":[373],"wp_cache_set":[376],"is_array":[374],"wp_cache_delete":[379],"defined":[371]},"used_by":{"WP_Theme::get_allowed_on_site":[1149,1153],"WP_Widget_Recent_Posts::update":[601],"WP_Widget_Recent_Comments::update":[713],"delete_blog_option":[447,450],"maybe_add_existing_user_to_blog":[1683],"delete_transient":[413,415],"get_transient":[459,460],"delete_site_option":[863],"wp_delete_post":[2340,2343],"WP_Rewrite::flush_rules":[1886],"clean_term_cache":[2627],"switch_theme":[686,687],"get_theme_mods":[755],"remove_theme_mods":[837,843]}},"WP_Theme::sort_by_name":{"doc":"\/**\n * Sort themes by name.\n *\n * @since 3.4.0\n * @access public\n *\/","file":"class-wp-theme.php","line":1168,"missingDoc":false,"filters":[],"uses":{"uasort":[1170,1172],"strpos":[1169],"get_locale":[1169]},"used_by":[]},"WP_Theme::_name_sort":{"doc":"\/**\n * Callback function for usort() to naturally sort themes by name.\n *\n * Accesses the Name header directly from the class for maximum speed.\n * Would choke on HTML but we don't care enough to slow it down with strip_tags().\n *\n * @since 3.4.0\n * @access private\n *\/","file":"class-wp-theme.php","line":1185,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[1186]},"used_by":[]},"WP_Theme::_name_sort_i18n":{"doc":"\/**\n * Name sort (with translation).\n *\n * @since 3.4.0\n * @access private\n *\/","file":"class-wp-theme.php","line":1195,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[1197],"display":[1197,1197]},"used_by":[]},"Walker::start_lvl":{"doc":"\/**\n * Starts the list before the elements are added.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. This\n * method is called at the start of the output list.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":55,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::end_lvl":{"doc":"\/**\n * Ends the list of after the elements are added.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. This\n * method finishes the list at the end of output of the elements.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":69,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::start_el":{"doc":"\/**\n * Start the element output.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. Includes\n * the element output also.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":83,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::end_el":{"doc":"\/**\n * Ends the element output, if needed.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":96,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::display_element":{"doc":"\/**\n * Traverse elements to create list from elements.\n *\n * Display one element if the element doesn't have any children otherwise,\n * display the element and its children. Will only traverse up to the max\n * depth and no ignore elements under that depth. It is possible to set the\n * max depth to include all depths, see walk() method.\n *\n * This method shouldn't be called directly, use the walk() method instead.\n *\n * @since 2.5.0\n *\n * @param object $element Data object\n * @param array $children_elements List of elements to continue traversing.\n * @param int $max_depth Max depth to traverse.\n * @param int $depth Depth of current element.\n * @param array $args\n * @param string $output Passed by reference. Used to append additional content.\n * @return null Null on failure with no changes to parameters.\n *\/","file":"class-wp-walker.php","line":118,"missingDoc":false,"filters":[],"uses":{"is_array":[126],"array_merge":[128,141,151,156],"call_user_func_array":[129,142,152,157],"display_element":[144]},"used_by":[]},"Walker::walk":{"doc":"\/**\n * Display array of elements hierarchically.\n *\n * It is a generic function which does not assume any existing order of\n * elements. max_depth = -1 means flatly display every element. max_depth =\n * 0 means display all levels. max_depth > 0 specifies the number of\n * display levels.\n *\n * @since 2.1.0\n *\n * @param array $elements\n * @param int $max_depth\n * @return string\n *\/","file":"class-wp-walker.php","line":174,"missingDoc":false,"filters":[],"uses":{"array_slice":[176,217],"func_get_args":[176],"display_element":[192,231,241],"count":[237]},"used_by":[]},"Walker::paged_walk":{"doc":"\/**\n * paged_walk() - produce a page of nested elements\n *\n * Given an array of hierarchical elements, the maximum depth, a specific page number,\n * and number of elements per page, this function first determines all top level root elements\n * belonging to that page, then lists them and all of their children in hierarchical order.\n *\n * @package WordPress\n * @since 2.7\n * @param int $max_depth = 0 means display all levels; $max_depth > 0 specifies the number of display levels.\n * @param int $page_num the specific page number, beginning with 1.\n * @return XHTML of the specified page of elements\n *\/","file":"class-wp-walker.php","line":260,"missingDoc":false,"filters":[],"uses":{"array_slice":[266],"func_get_args":[266],"count":[274,325,358],"ceil":[287,327],"array_reverse":[293,332,339],"display_element":[306,355,362],"unset_children":[347]},"used_by":[]},"Walker::get_number_of_root_elements":{"doc":"","file":"class-wp-walker.php","line":368,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Walker::unset_children":{"doc":"","file":"class-wp-walker.php","line":381,"missingDoc":true,"filters":[],"uses":{"unset_children":[391],"is_array":[389]},"used_by":[]},"wp_xmlrpc_server::__construct":{"doc":"\/**\n * Register all of the XMLRPC methods that XMLRPC server understands.\n *\n * Sets up server and method property. Passes XMLRPC\n * methods through the 'xmlrpc_methods' filter to allow plugins to extend\n * or replace XMLRPC methods.\n *\n * @since 1.5.0\n *\n * @return wp_xmlrpc_server\n *\/","file":"class-wp-xmlrpc-server.php","line":35,"missingDoc":false,"filters":["'xmlrpc_methods'"],"uses":{"initialise_blog_option_info":[128]},"used_by":[]},"wp_xmlrpc_server::serve_request":{"doc":"","file":"class-wp-xmlrpc-server.php","line":132,"missingDoc":true,"filters":[],"uses":{"IXR_Server":[133]},"used_by":[]},"wp_xmlrpc_server::sayHello":{"doc":"\/**\n * Test XMLRPC API by saying, \"Hello!\" to client.\n *\n * @since 1.5.0\n *\n * @param array $args Method Parameters.\n * @return string\n *\/","file":"class-wp-xmlrpc-server.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::addTwoNumbers":{"doc":"\/**\n * Test XMLRPC API by adding two numbers for client.\n *\n * @since 1.5.0\n *\n * @param array $args Method Parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":156,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::login":{"doc":"\/**\n * Log user in.\n *\n * @since 2.8.0\n *\n * @param string $username User's username.\n * @param string $password User's password.\n * @return mixed WP_User object if authentication passed, false otherwise\n *\/","file":"class-wp-xmlrpc-server.php","line":171,"missingDoc":false,"filters":["'pre_option_enable_xmlrpc'","'option_enable_xmlrpc'","'xmlrpc_enabled'","'xmlrpc_login_error'"],"uses":{"sprintf":[181],"__":[181,188],"wp_authenticate":[185],"is_wp_error":[187],"wp_set_current_user":[193]},"used_by":[]},"wp_authenticate":{"doc":"\/**\n * Checks a user's login information and logs them in if it checks out.\n *\n * @since 2.5.0\n *\n * @param string $username User's username\n * @param string $password User's password\n * @return WP_Error|WP_User WP_User object if login successful, otherwise WP_Error object.\n *\/","file":"pluggable.php","line":470,"missingDoc":false,"filters":["'authenticate'","'wp_login_failed'"],"uses":{"sanitize_user":[471],"trim":[472],"__":[479],"is_wp_error":[484],"in_array":[484],"get_error_code":[484]},"used_by":{"wp_xmlrpc_server::login":[185],"user_pass_ok":[3318],"wp_login":[160],"wp_signon":[53]}},"wp_set_current_user":{"doc":"\/**\n * Changes the current user by ID or name.\n *\n * Set $id to null and specify a name if you do not know a user's ID.\n *\n * Some WordPress functionality is based on the current user and not based on\n * the signed in user. Therefore, it opens the ability to edit and perform\n * actions on users who aren't signed in.\n *\n * @since 2.0.3\n * @global object $current_user The current user object which holds the user data.\n * @uses do_action() Calls 'set_current_user' hook after setting the current user.\n *\n * @param int $id User ID\n * @param string $name User's username\n * @return WP_User Current user User object\n *\/","file":"pluggable.php","line":27,"missingDoc":false,"filters":["'set_current_user'"],"uses":{"setup_userdata":[35]},"used_by":{"wp_xmlrpc_server::login":[193],"set_current_user":[35],"get_currentuserinfo":[85,91,96,102,107]}},"wp_xmlrpc_server::login_pass_ok":{"doc":"\/**\n * Check user's credentials. Deprecated.\n *\n * @since 1.5.0\n * @deprecated 2.8.0\n * @deprecated use wp_xmlrpc_server::login\n * @see wp_xmlrpc_server::login\n *\n * @param string $username User's username.\n * @param string $password User's password.\n * @return bool Whether authentication passed.\n *\/","file":"class-wp-xmlrpc-server.php","line":209,"missingDoc":false,"filters":[],"uses":{"login":[210]},"used_by":[]},"wp_xmlrpc_server::escape":{"doc":"\/**\n * Sanitize string or array of strings for database.\n *\n * @since 1.5.2\n *\n * @param string|array $array Sanitize single string or array of strings.\n * @return string|array Type matches $array and sanitized for the database.\n *\/","file":"class-wp-xmlrpc-server.php","line":221,"missingDoc":false,"filters":[],"uses":{"escape":[225,229,233],"is_object":[230],"is_array":[228,224]},"used_by":[]},"wp_xmlrpc_server::get_custom_fields":{"doc":"\/**\n * Retrieve custom fields for post.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @return array Custom fields, if exist.\n *\/","file":"class-wp-xmlrpc-server.php","line":247,"missingDoc":false,"filters":[],"uses":{"current_user_can":[254],"has_meta":[252]},"used_by":[]},"wp_xmlrpc_server::set_custom_fields":{"doc":"\/**\n * Set custom fields for post.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @param array $fields Custom fields.\n *\/","file":"class-wp-xmlrpc-server.php","line":275,"missingDoc":false,"filters":[],"uses":{"get_metadata_by_mid":[281],"stripslashes":[283,292],"stripslashes_deep":[286],"update_metadata_by_mid":[288],"current_user_can":[287,289,292],"delete_metadata_by_mid":[290],"add_post_meta":[293]},"used_by":[]},"get_metadata_by_mid":{"doc":"\/**\n * Get meta data by meta ID\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @return object Meta object or false.\n *\/","file":"meta.php","line":348,"missingDoc":false,"filters":[],"uses":{"absint":[354],"_get_meta_table":[357],"get_row":[362],"prepare":[362],"maybe_unserialize":[368]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[281],"update_metadata_by_mid":[404],"delete_metadata_by_mid":[485]}},"update_metadata_by_mid":{"doc":"\/**\n * Update meta data by meta ID\n *\n * @since 3.3.0\n *\n * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value\n *\t\tand object_id of the given meta_id.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @param string $meta_value Metadata value\n * @param string $meta_key Optional, you can provide a meta key to update it\n * @return bool True on successful update, false on failure.\n *\/","file":"meta.php","line":387,"missingDoc":false,"filters":["\"update_{$meta_type}_meta\"","'update_postmeta'","\"updated_{$meta_type}_meta\"","'updated_postmeta'"],"uses":{"absint":[394],"_get_meta_table":[397],"esc_sql":[400],"is_string":[413],"sanitize_meta":[419],"maybe_serialize":[420],"update":[438],"wp_cache_delete":[441],"get_metadata_by_mid":[404]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[288]}},"delete_metadata_by_mid":{"doc":"\/**\n * Delete meta data by meta ID\n *\n * @since 3.3.0\n *\n * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value\n *\t\tand object_id of the given meta_id.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @return bool True on successful delete, false on failure.\n *\/","file":"meta.php","line":467,"missingDoc":false,"filters":["\"delete_{$meta_type}_meta\"","\"delete_{$meta_type}meta\"","\"deleted_{$meta_type}_meta\"","\"deleted_{$meta_type}meta\""],"uses":{"absint":[474],"_get_meta_table":[477],"esc_sql":[481],"delete":[495],"wp_cache_delete":[498],"get_metadata_by_mid":[485]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[290],"wp_delete_comment":[1017],"do_all_pings":[1715,1721],"do_enclose":[431],"wp_delete_post":[2364],"wp_delete_attachment":[4117]}},"add_post_meta":{"doc":"\/**\n * Add meta data field to a post.\n *\n * Post meta data is called \"Custom Fields\" on the Administration Screen.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"post.php","line":1750,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1752],"add_metadata":[1755]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[293],"wp_xmlrpc_server::add_enclosure_if_new":[4319],"do_enclose":[471],"wp_trash_post":[2409,2410],"wp_trash_post_comments":[2486],"wp_insert_attachment":[4047],"wp_check_for_changed_slugs":[4434],"_publish_post_hook":[4852,4853]}},"wp_xmlrpc_server::initialise_blog_option_info":{"doc":"\/**\n * Set up blog options property.\n *\n * Passes property through 'xmlrpc_blog_options' filter.\n *\n * @since 2.6.0\n *\/","file":"class-wp-xmlrpc-server.php","line":305,"missingDoc":false,"filters":["'xmlrpc_blog_options'"],"uses":{"__":[311,316,321,326,331,336,341,346,351,356,363,368,373,378,383,388,393,398,403,408,413,418,423,428,433],"current_theme_supports":[358]},"used_by":[]},"wp_xmlrpc_server::wp_getUsersBlogs":{"doc":"\/**\n * Retrieve the blogs of the user.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters. Contains:\n * - username\n * - password\n * @return array. Contains:\n * - 'isAdmin'\n * - 'url'\n * - 'blogid'\n * - 'blogName'\n * - 'xmlrpc' - url of xmlrpc endpoint\n *\/","file":"class-wp-xmlrpc-server.php","line":457,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"array_unshift":[461],"blogger_getUsersBlogs":[462],"is_multisite":[460],"escape":[465],"login":[470],"get_blogs_of_user":[475],"switch_to_blog":[485],"current_user_can":[487],"home_url":[491],"get_option":[493],"site_url":[494],"restore_current_blog":[497]},"used_by":[]},"wp_xmlrpc_server::minimum_args":{"doc":"\/**\n * Checks if the method received at least the minimum number of arguments.\n *\n * @since 3.4.0\n *\n * @param string|array $args Sanitize single string or array of strings.\n * @param int $count Minimum number of arguments.\n * @return boolean if $args contains at least $count arguments.\n *\/","file":"class-wp-xmlrpc-server.php","line":512,"missingDoc":false,"filters":[],"uses":{"__":[514],"count":[513]},"used_by":[]},"wp_xmlrpc_server::_prepare_taxonomy":{"doc":"\/**\n * Prepares taxonomy data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $taxonomy The unprepared taxonomy data\n * @param array $fields The subset of taxonomy fields to return\n * @return array The prepared taxonomy data\n *\/","file":"class-wp-xmlrpc-server.php","line":530,"missingDoc":false,"filters":["'xmlrpc_prepare_taxonomy'"],"uses":{"in_array":[540,543,546],"array_unique":[547]},"used_by":[]},"wp_xmlrpc_server::_prepare_term":{"doc":"\/**\n * Prepares term data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param array|object $term The unprepared term data\n * @return array The prepared term data\n *\/","file":"class-wp-xmlrpc-server.php","line":560,"missingDoc":false,"filters":["'xmlrpc_prepare_term'"],"uses":{"get_object_vars":[563],"is_array":[562],"strval":[566,567,568,569],"intval":[572]},"used_by":[]},"wp_xmlrpc_server::_convert_date":{"doc":"\/**\n * Convert a WordPress date string to an IXR_Date object.\n *\n * @access protected\n *\n * @param string $date\n * @return IXR_Date\n *\/","file":"class-wp-xmlrpc-server.php","line":585,"missingDoc":false,"filters":[],"uses":{"mysql2date":[589]},"used_by":[]},"wp_xmlrpc_server::_convert_date_gmt":{"doc":"\/**\n * Convert a WordPress GMT date string to an IXR_Date object.\n *\n * @access protected\n *\n * @param string $date_gmt\n * @param string $date\n * @return IXR_Date\n *\/","file":"class-wp-xmlrpc-server.php","line":601,"missingDoc":false,"filters":[],"uses":{"get_gmt_from_date":[603],"mysql2date":[603],"_convert_date":[605]},"used_by":[]},"get_gmt_from_date":{"doc":"\/**\n * Returns a date in the GMT equivalent.\n *\n * Requires and returns a date in the Y-m-d H:i:s format. Simply subtracts the\n * value of the 'gmt_offset' option. Return format can be overridden using the\n * $format parameter. The DateTime and DateTimeZone classes are used to respect\n * time zone differences in DST.\n *\n * @since 1.2.0\n *\n * @uses get_option() to retrieve the the value of 'gmt_offset'.\n * @param string $string The date to be converted.\n * @param string $format The format string for the returned date (default is Y-m-d H:i:s)\n * @return string GMT version of the date provided.\n *\/","file":"formatting.php","line":1895,"missingDoc":false,"filters":[],"uses":{"preg_match":[1896],"date":[1898,1905],"get_option":[1900,1915],"date_default_timezone_set":[1902,1912],"date_create":[1903],"setTimezone":[1907],"getOffset":[1908],"modify":[1909],"gmdate":[1910,1915],"format":[1910],"gmmktime":[1914]},"used_by":{"wp_xmlrpc_server::_convert_date_gmt":[603],"wp_insert_comment":[1270],"wp_update_comment":[1512],"wp_insert_post":[2804],"_future_post_hook":[4828]}},"wp_xmlrpc_server::_prepare_post":{"doc":"\/**\n * Prepares post data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param array $post The unprepared post data\n * @param array $fields The subset of post type fields to return\n * @return array The prepared post data\n *\/","file":"class-wp-xmlrpc-server.php","line":617,"missingDoc":false,"filters":["'xmlrpc_prepare_post'"],"uses":{"strval":[619,635],"_convert_date":[624,626],"_convert_date_gmt":[625,627],"post_permalink":[637],"intval":[639],"is_sticky":[642],"get_post_thumbnail_id":[647],"current_theme_supports":[649],"_prepare_media_item":[650],"get_post":[650],"get_post_format":[658],"array_merge":[664,667],"array_intersect_key":[666],"array_flip":[666],"in_array":[663,670,672,681,684],"get_object_taxonomies":[673],"wp_get_object_terms":[674],"_prepare_term":[677],"get_custom_fields":[682],"get_post_meta":[686],"explode":[688],"trim":[689,690,691],"htmlspecialchars":[689]},"used_by":[]},"post_permalink":{"doc":"\/**\n * Retrieve permalink from post ID.\n *\n * @since 1.0.0\n *\n * @param int $post_id Optional. Post ID.\n * @param mixed $deprecated Not used.\n * @return string\n *\/","file":"link-template.php","line":221,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[223],"get_permalink":[225]},"used_by":{"wp_xmlrpc_server::_prepare_post":[637],"wp_xmlrpc_server::_prepare_page":[781],"wp_xmlrpc_server::mw_getPost":[4663],"wp_xmlrpc_server::mw_getRecentPosts":[4794]}},"is_sticky":{"doc":"\/**\n * Check if post is sticky.\n *\n * Sticky posts should remain at the top of The Loop. If the post ID is not\n * given, then The Loop ID for the current post will be used.\n *\n * @since 2.7.0\n *\n * @param int $post_id Optional. Post ID.\n * @return bool Whether post is sticky.\n *\/","file":"post.php","line":1912,"missingDoc":false,"filters":[],"uses":{"absint":[1913],"get_the_ID":[1916],"get_option":[1918],"is_array":[1920],"in_array":[1923]},"used_by":{"wp_xmlrpc_server::_prepare_post":[642],"wp_xmlrpc_server::mw_getPost":[4681],"sticky_class":[3190],"get_post_class":[345]}},"get_post_thumbnail_id":{"doc":"\/**\n * Retrieve Post Thumbnail ID.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @return int\n *\/","file":"post-thumbnail-template.php","line":32,"missingDoc":false,"filters":[],"uses":{"get_the_ID":[33],"get_post_meta":[34]},"used_by":{"wp_xmlrpc_server::_prepare_post":[647],"wp_xmlrpc_server::mw_getPost":[4729],"wp_xmlrpc_server::mw_getRecentPosts":[4841],"has_post_thumbnail":[21],"update_post_thumbnail_cache":[65],"get_the_post_thumbnail":[87]}},"get_post_format":{"doc":"\/**\n * Retrieve the format slug for a post\n *\n * @since 3.1.0\n *\n * @param int|object $post A post\n *\n * @return mixed The format if successful. False if no format is set. WP_Error if errors.\n *\/","file":"post.php","line":765,"missingDoc":false,"filters":[],"uses":{"get_post":[766],"post_type_supports":[768],"get_the_terms":[771],"array_shift":[776],"str_replace":[778]},"used_by":{"wp_xmlrpc_server::_prepare_post":[658],"wp_xmlrpc_server::mw_getPost":[4676],"wp_xmlrpc_server::mw_getRecentPosts":[4807],"get_post_class":[332],"get_body_class":[438]}},"get_object_taxonomies":{"doc":"\/**\n * Return all of the taxonomy names that are of $object_type.\n *\n * It appears that this function can be used to find all of the names inside of\n * $wp_taxonomies global variable.\n *\n * <code><?php $taxonomies = get_object_taxonomies('post'); ?><\/code> Should\n * result in <code>Array('category', 'post_tag')<\/code>\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wp_taxonomies\n *\n * @param array|string|object $object Name of the type of taxonomy object, or an object (row from posts)\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @return array The names of all taxonomy of $object_type.\n *\/","file":"taxonomy.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_attachment_taxonomies":[170],"is_object":[168],"array_intersect":[178]},"used_by":{"wp_xmlrpc_server::_prepare_post":[673],"wp_xmlrpc_server::_prepare_post_type":[735],"wp_xmlrpc_server::_insert_post":[1109],"get_attachment_taxonomies":[882],"_wp_menu_item_classes_by_context":[268],"wp_delete_post":[2322],"wp_delete_attachment":[4107],"_update_term_count_on_transition_post_status":[5535],"WP_Query::get_posts":[2227],"clean_object_term_cache":[2569],"update_object_term_cache":[2687],"get_the_taxonomies":[3106],"get_post_taxonomies":[3142],"is_object_in_taxonomy":[3206]}},"wp_xmlrpc_server::_prepare_post_type":{"doc":"\/**\n * Prepares post data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $post_type Post type object\n * @param array $fields The subset of post fields to return\n * @return array The prepared post type data\n *\/","file":"class-wp-xmlrpc-server.php","line":707,"missingDoc":false,"filters":["'xmlrpc_prepare_post_type'"],"uses":{"get_all_post_type_supports":[716],"in_array":[719,723,728,734],"get_object_taxonomies":[735]},"used_by":[]},"get_all_post_type_supports":{"doc":"\/**\n * Get all the post type features\n *\n * @since 3.4.0\n * @param string $post_type The post type\n * @return array\n *\/","file":"post.php","line":1615,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_xmlrpc_server::_prepare_post_type":[716]}},"wp_xmlrpc_server::_prepare_media_item":{"doc":"\/**\n * Prepares media item data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $media_item The unprepared media item data\n * @param string $thumbnail_size The image size to use for the thumbnail URL\n * @return array The prepared media item data\n *\/","file":"class-wp-xmlrpc-server.php","line":749,"missingDoc":false,"filters":["'xmlrpc_prepare_media_item'"],"uses":{"strval":[751],"_convert_date_gmt":[752],"wp_get_attachment_url":[754],"wp_get_attachment_metadata":[758],"image_downsize":[761]},"used_by":[]},"wp_get_attachment_url":{"doc":"\/**\n * Retrieve the URL for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @return string\n *\/","file":"post.php","line":4208,"missingDoc":false,"filters":["'wp_get_attachment_url'"],"uses":{"get_post":[4210],"str_replace":[4220],"strpos":[4221,4222,4219],"substr":[4222],"wp_upload_dir":[4218],"get_post_meta":[4217],"get_the_guid":[4229]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[754],"get_the_attachment_link":[1897],"get_attachment_icon_src":[1937],"image_downsize":[141],"image_get_intermediate_size":[475],"wp_prepare_attachment_for_js":[1324],"wp_get_attachment_link":[1165],"wp_get_attachment_thumb_url":[4273],"_delete_attachment_theme_mod":[1590]}},"wp_get_attachment_metadata":{"doc":"\/**\n * Retrieve attachment meta field for attachment ID.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @param bool $unfiltered Optional, default is false. If true, filters are not run.\n * @return string|bool Attachment meta field. False on failure.\n *\/","file":"post.php","line":4167,"missingDoc":false,"filters":["'wp_get_attachment_metadata'"],"uses":{"get_post":[4169],"get_post_meta":[4172]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[758],"image_downsize":[142],"image_get_intermediate_size":[433],"wp_prepare_attachment_for_js":[1318],"wp_delete_attachment":[4091],"wp_get_attachment_thumb_file":[4251],"get_uploaded_header_images":[1010]}},"image_downsize":{"doc":"\/**\n * Scale an image to fit a particular size (such as 'thumb' or 'medium').\n *\n * Array with image url, width, height, and whether is intermediate size, in\n * that order is returned on success is returned. $is_intermediate is true if\n * $url is a resized image, false if it is the original.\n *\n * The URL might be the original image, or it might be a resized version. This\n * function won't create a new resized copy, it will just return an already\n * resized one if it exists.\n *\n * A plugin may use the 'image_downsize' filter to hook into and offer image\n * resizing services for images. The hook must return an array with the same\n * elements that are returned in the function. The first element being the URL\n * to the new image that was resized.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'image_downsize' on $id and $size to provide\n *\t\tresize services.\n *\n * @param int $id Attachment ID for image.\n * @param array|string $size Optional, default is 'medium'. Size of image, either array or string.\n * @return bool|array False on failure, array on success.\n *\/","file":"media.php","line":136,"missingDoc":false,"filters":["'image_downsize'"],"uses":{"wp_attachment_is_image":[138],"wp_get_attachment_url":[141],"wp_get_attachment_metadata":[142],"wp_basename":[145,161],"str_replace":[153,161],"wp_get_attachment_thumb_file":[160],"getimagesize":[160],"image_get_intermediate_size":[152],"image_constrain_size_for_editor":[175]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[761],"get_image_tag":[230],"wp_get_attachment_image_src":[511],"wp_get_attachment_thumb_url":[4276]}},"wp_xmlrpc_server::_prepare_page":{"doc":"\/**\n * Prepares page data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $page The unprepared page data\n * @return array The prepared page data\n *\/","file":"class-wp-xmlrpc-server.php","line":778,"missingDoc":false,"filters":["'xmlrpc_prepare_page'"],"uses":{"get_extended":[780],"post_permalink":[781],"get_post":[786],"comments_open":[791],"pings_open":[792],"_convert_date":[795],"_convert_date_gmt":[796],"get_cat_name":[801],"wp_get_post_categories":[800],"get_userdata":[805],"get_page_template_slug":[807],"get_custom_fields":[834]},"used_by":[]},"get_extended":{"doc":"\/**\n * Get extended entry info (<!--more-->).\n *\n * There should not be any space after the second dash and before the word\n * 'more'. There can be text or space(s) after the word 'more', but won't be\n * referenced.\n *\n * The returned array has 'main', 'extended', and 'more_text' keys. Main has the text before\n * the <code><!--more--><\/code>. The 'extended' key has the content after the\n * <code><!--more--><\/code> comment. The 'more_text' key has the custom \"Read More\" text.\n *\n * @since 1.0.0\n *\n * @param string $post Post content.\n * @return array Post before ('main'), after ('extended'), and custom readmore ('more_text').\n *\/","file":"post.php","line":352,"missingDoc":false,"filters":[],"uses":{"explode":[355],"preg_match":[354],"preg_replace":[364,365,366]},"used_by":{"wp_xmlrpc_server::_prepare_page":[780],"wp_xmlrpc_server::mw_getPost":[4662],"wp_xmlrpc_server::mw_getRecentPosts":[4793]}},"comments_open":{"doc":"\/**\n * Whether the current post is open for comments.\n *\n * @since 1.5.0\n * @uses $post\n *\n * @param int $post_id An optional post ID to check instead of the current post.\n * @return bool True if the comments are open\n *\/","file":"comment-template.php","line":772,"missingDoc":false,"filters":["'comments_open'"],"uses":{"get_post":[774]},"used_by":{"wp_xmlrpc_server::_prepare_page":[791],"comments_popup_link":[980],"get_comment_reply_link":[1053],"get_post_reply_link":[1106],"comment_form":[1551],"feed_links_extra":[1644],"__main":[65,44,54]}},"pings_open":{"doc":"\/**\n * Whether the current post is open for pings.\n *\n * @since 1.5.0\n * @uses $post\n *\n * @param int $post_id An optional post ID to check instead of the current post.\n * @return bool True if pings are accepted\n *\/","file":"comment-template.php","line":789,"missingDoc":false,"filters":["'pings_open'"],"uses":{"get_post":[791]},"used_by":{"wp_xmlrpc_server::_prepare_page":[792],"wp_xmlrpc_server::pingback_ping":[5368],"comments_popup_link":[980],"feed_links_extra":[1644],"__main":[37]}},"wp_get_post_categories":{"doc":"\/**\n * Retrieve the list of categories for a post.\n *\n * Compatibility layer for themes and plugins. Also an easy layer of abstraction\n * away from the complexity of the taxonomy layer.\n *\n * @since 2.1.0\n *\n * @uses wp_get_object_terms() Retrieves the categories. Args details can be found here.\n *\n * @param int $post_id Optional. The Post ID.\n * @param array $args Optional. Overwrite the defaults.\n * @return array\n *\/","file":"post.php","line":2558,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2562],"wp_get_object_terms":[2564]},"used_by":{"wp_xmlrpc_server::_prepare_page":[800],"wp_xmlrpc_server::blogger_getPost":[3747],"wp_xmlrpc_server::blogger_getRecentPosts":[3801],"wp_xmlrpc_server::mw_getPost":[4648],"wp_xmlrpc_server::mw_getRecentPosts":[4778],"wp_xmlrpc_server::mt_getPostCategories":[5117],"wp_xmlrpc_server::mt_publishPost":[5275],"wp_get_post_cats":[748]}},"get_page_template_slug":{"doc":"\/**\n * Get the specific template name for a page.\n *\n * @since 3.4.0\n *\n * @param int $post_id The page ID to check. Defaults to the current post, when used in the loop.\n * @return string|bool Page template filename. Returns an empty string when the default page template\n * \tis in use. Returns false if the post is not a page.\n *\/","file":"post-template.php","line":1273,"missingDoc":false,"filters":[],"uses":{"get_post":[1274],"get_post_meta":[1277]},"used_by":{"wp_xmlrpc_server::_prepare_page":[807],"get_body_class":[504],"is_page_template":[1250],"get_page_template":[238]}},"wp_xmlrpc_server::_prepare_comment":{"doc":"\/**\n * Prepares comment data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $comment The unprepared comment data\n * @return array The prepared comment data\n *\/","file":"class-wp-xmlrpc-server.php","line":849,"missingDoc":false,"filters":["'xmlrpc_prepare_comment'"],"uses":{"_convert_date":[851],"_convert_date_gmt":[852],"get_comment_link":[870],"get_the_title":[872]},"used_by":[]},"get_comment_link":{"doc":"\/**\n * Retrieve the link to a given comment.\n *\n * @since 1.5.0\n * @uses $comment\n *\n * @param object|string|int $comment Comment to retrieve.\n * @param array $args Optional args.\n * @return string The permalink to the given comment.\n *\/","file":"comment-template.php","line":472,"missingDoc":false,"filters":["'get_comment_link'"],"uses":{"get_comment":[475],"is_array":[478],"wp_parse_args":[485],"get_option":[488,487],"get_query_var":[497],"get_page_of_comment":[497],"user_trailingslashit":[500],"trailingslashit":[500],"get_permalink":[500,502,504],"add_query_arg":[502],"using_permalinks":[499]},"used_by":{"wp_xmlrpc_server::_prepare_comment":[870],"Walker_Comment::start_el":[1361],"WP_Widget_Recent_Comments::widget":[694],"__main":[80],"comment_link":[242]}},"wp_xmlrpc_server::_prepare_user":{"doc":"\/**\n * Prepares user data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param WP_User $user The unprepared user object\n * @param array $fields The subset of user fields to return\n * @return array The prepared user data\n *\/","file":"class-wp-xmlrpc-server.php","line":892,"missingDoc":false,"filters":["'xmlrpc_prepare_user'"],"uses":{"strval":[893],"_convert_date":[899],"array_merge":[910,914,917],"in_array":[912,909],"array_intersect_key":[916],"array_flip":[916]},"used_by":[]},"wp_xmlrpc_server::wp_newPost":{"doc":"\/**\n * Create a new post for any registered post type.\n *\n * @since 3.4.0\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * $content_struct can contain:\n * - post_type (default: 'post')\n * - post_status (default: 'draft')\n * - post_title\n * - post_author\n * - post_excerpt\n * - post_content\n * - post_date_gmt | post_date\n * - post_format\n * - post_password\n * - comment_status - can be 'open' | 'closed'\n * - ping_status - can be 'open' | 'closed'\n * - sticky\n * - post_thumbnail - ID of a media item to use as the post thumbnail\/featured image\n * - custom_fields - array, with each element containing 'key' and 'value'\n * - terms - array, with taxonomy names as keys and arrays of term IDs as values\n * - terms_names - array, with taxonomy names as keys and arrays of term names as values\n * - enclosure\n * - any other fields supported by wp_insert_post()\n * @return string post_id\n *\/","file":"class-wp-xmlrpc-server.php","line":954,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[955],"escape":[958],"login":[965],"_insert_post":[972]},"used_by":[]},"wp_xmlrpc_server::_is_greater_than_one":{"doc":"\/**\n * Helper method for filtering out elements from an array.\n *\n * @since 3.4.0\n *\n * @param int $count Number to compare to one.\n *\/","file":"class-wp-xmlrpc-server.php","line":982,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::_insert_post":{"doc":"\/**\n * Helper method for wp_newPost and wp_editPost, containing shared logic.\n *\n * @since 3.4.0\n * @uses wp_insert_post()\n *\n * @param WP_User $user The post author if post_author isn't set in $content_struct.\n * @param array $content_struct Post data to insert.\n *\/","file":"class-wp-xmlrpc-server.php","line":995,"missingDoc":false,"filters":["'xmlrpc_wp_insert_post_data'"],"uses":{"wp_parse_args":[999],"get_post_type_object":[1001],"__":[1003,1009,1011,1013,1016,1025,1030,1039,1044,1049,1082,1087,1100,1121,1124,1131,1144,1147,1166,1173,1217],"get_post":[1008,1099],"current_user_can":[1010,1015,1015,1024,1029,1038,1043,1086,1123,1146,1172],"get_post_type":[1012],"get_post_status_object":[1033],"absint":[1041,1099],"get_userdata":[1046],"rtrim":[1063],"getIso":[1063,1065],"get_date_from_gmt":[1069],"iso8601_to_datetime":[1069,1070],"get_default_post_to_edit":[1074],"unstick_post":[1084,1091],"stick_post":[1089],"delete_post_thumbnail":[1098],"set_post_thumbnail":[1101],"set_custom_fields":[1106],"get_object_taxonomies":[1109],"array_keys":[1116,1140,1160],"array_key_exists":[1120,1143],"get_term_by":[1128,1168],"is_array":[1115,1139],"get_terms":[1152],"array_count_values":[1155],"array_filter":[1158],"is_taxonomy_hierarchical":[1151],"in_array":[1165],"wp_insert_term":[1176],"get_error_message":[1178,1199,1214],"is_wp_error":[1177,1198,1213],"set_post_format":[1196],"add_enclosure_if_new":[1206],"attach_uploads":[1208],"wp_update_post":[1212],"wp_insert_post":[1212],"strval":[1219]},"used_by":[]},"get_date_from_gmt":{"doc":"\/**\n * Converts a GMT date into the correct format for the blog.\n *\n * Requires and returns in the Y-m-d H:i:s format. Simply adds the value of\n * gmt_offset.Return format can be overridden using the $format parameter\n *\n * @since 1.2.0\n *\n * @param string $string The date to be converted.\n * @param string $format The format string for the returned date (default is Y-m-d H:i:s)\n * @return string Formatted date relative to the GMT offset.\n *\/","file":"formatting.php","line":1932,"missingDoc":false,"filters":[],"uses":{"preg_match":[1933],"gmmktime":[1934],"gmdate":[1935],"get_option":[1935]},"used_by":{"wp_xmlrpc_server::_insert_post":[1069],"wp_xmlrpc_server::wp_editComment":[2903],"wp_xmlrpc_server::mw_newPost":[4240],"wp_xmlrpc_server::mw_editPost":[4558]}},"iso8601_to_datetime":{"doc":"\/**\n * Converts an iso8601 date to MySQL DateTime format used by post_date[_gmt].\n *\n * @since 1.5.0\n *\n * @param string $date_string Date and time in ISO 8601 format {@link http:\/\/en.wikipedia.org\/wiki\/ISO_8601}.\n * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'.\n * @return string The date and time in MySQL DateTime format - Y-m-d H:i:s.\n *\/","file":"formatting.php","line":1969,"missingDoc":false,"filters":[],"uses":{"strtolower":[1970],"preg_match":[1974],"iso8601_timezone_to_offset":[1977],"get_option":[1979],"gmmktime":[1982],"gmdate":[1985],"preg_replace":[1988]},"used_by":{"wp_xmlrpc_server::_insert_post":[1069,1070],"wp_xmlrpc_server::wp_editComment":[2903,2904],"wp_xmlrpc_server::mw_newPost":[4240,4241],"wp_xmlrpc_server::mw_editPost":[4558,4559]}},"unstick_post":{"doc":"\/**\n * Unstick a post.\n *\n * Sticky posts should be displayed at the top of the front page.\n *\n * @since 2.7.0\n *\n * @param int $post_id Post ID.\n *\/","file":"post.php","line":2085,"missingDoc":false,"filters":[],"uses":{"get_option":[2086],"is_array":[2088],"in_array":[2091],"array_search":[2094],"array_splice":[2098],"update_option":[2100]},"used_by":{"wp_xmlrpc_server::_insert_post":[1084,1091],"wp_xmlrpc_server::mw_newPost":[4267],"wp_xmlrpc_server::mw_editPost":[4580],"wp_delete_post":[2346]}},"stick_post":{"doc":"\/**\n * Make a post sticky.\n *\n * Sticky posts should be displayed at the top of the front page.\n *\n * @since 2.7.0\n *\n * @param int $post_id Post ID.\n *\/","file":"post.php","line":2064,"missingDoc":false,"filters":[],"uses":{"get_option":[2065],"is_array":[2067],"in_array":[2070],"update_option":[2073]},"used_by":{"wp_xmlrpc_server::_insert_post":[1089],"wp_xmlrpc_server::mw_newPost":[4265],"wp_xmlrpc_server::mw_editPost":[4578]}},"delete_post_thumbnail":{"doc":"\/**\n * Removes a post thumbnail.\n *\n * @since 3.3.0\n *\n * @param int|object $post Post ID or object where thumbnail should be removed from.\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":5396,"missingDoc":false,"filters":[],"uses":{"get_post":[5397],"delete_post_meta":[5399]},"used_by":{"wp_xmlrpc_server::_insert_post":[1098],"wp_xmlrpc_server::mw_editPost":[4589]}},"set_post_thumbnail":{"doc":"\/**\n * Sets a post thumbnail.\n *\n * @since 3.1.0\n *\n * @param int|object $post Post ID or object where thumbnail should be attached.\n * @param int $thumbnail_id Thumbnail to attach.\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":5376,"missingDoc":false,"filters":[],"uses":{"get_post":[5377,5379],"absint":[5378],"update_post_meta":[5381],"delete_post_meta":[5383],"wp_get_attachment_image":[5380]},"used_by":{"wp_xmlrpc_server::_insert_post":[1101],"wp_xmlrpc_server::mw_newPost":[4274],"wp_xmlrpc_server::mw_editPost":[4591]}},"is_taxonomy_hierarchical":{"doc":"\/**\n * Whether the taxonomy object is hierarchical.\n *\n * Checks to make sure that the taxonomy is an object first. Then Gets the\n * object, and finally returns the hierarchical value in the object.\n *\n * A false return value might also mean that the taxonomy does not exist.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses taxonomy_exists() Checks whether taxonomy exists\n * @uses get_taxonomy() Used to get the taxonomy object\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy is hierarchical\n *\/","file":"taxonomy.php","line":252,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[253],"get_taxonomy":[256]},"used_by":{"wp_xmlrpc_server::_insert_post":[1151],"_wp_menu_item_classes_by_context":[269,295],"wp_set_post_terms":[3211],"WP_Tax_Query::clean_query":[754],"get_terms":[1210],"wp_delete_term":[1793],"wp_insert_term":[2089],"wp_unique_term_slug":[2279],"_get_term_hierarchy":[2764],"_pad_term_counts":[2857],"get_ancestors":[3233]}},"wp_insert_term":{"doc":"\/**\n * Adds a new term to the database. Optionally marks it as an alias of an existing term.\n *\n * Error handling is assigned for the nonexistence of the $taxonomy and $term\n * parameters before inserting. If both the term id and taxonomy exist\n * previously, then an array will be returned that contains the term id and the\n * contents of what is returned. The keys of the array are 'term_id' and\n * 'term_taxonomy_id' containing numeric values.\n *\n * It is assumed that the term does not yet exist or the above will apply. The\n * term will be first added to the term table and then related to the taxonomy\n * if everything is well. If everything is correct, then several actions will be\n * run prior to a filter and then several actions will be run after the filter\n * is run.\n *\n * The arguments decide how the term is handled based on the $args parameter.\n * The following is a list of the available overrides and the defaults.\n *\n * 'alias_of'. There is no default, but if added, expected is the slug that the\n * term will be an alias of. Expected to be a string.\n *\n * 'description'. There is no default. If exists, will be added to the database\n * along with the term. Expected to be a string.\n *\n * 'parent'. Expected to be numeric and default is 0 (zero). Will assign value\n * of 'parent' to the term.\n *\n * 'slug'. Expected to be a string. There is no default.\n *\n * If 'slug' argument exists then the slug will be checked to see if it is not\n * a valid term. If that check succeeds (it is not a valid term), then it is\n * added and the term id is given. If it fails, then a check is made to whether\n * the taxonomy is hierarchical and the parent argument is not empty. If the\n * second check succeeds, the term will be inserted and the term id will be\n * given.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @uses apply_filters() Calls 'pre_insert_term' hook with term and taxonomy as parameters.\n * @uses do_action() Calls 'create_term' hook with the term id and taxonomy id as parameters.\n * @uses do_action() Calls 'create_$taxonomy' hook with term id and taxonomy id as parameters.\n * @uses apply_filters() Calls 'term_id_filter' hook with term id and taxonomy id as parameters.\n * @uses do_action() Calls 'created_term' hook with the term id and taxonomy id as parameters.\n * @uses do_action() Calls 'created_$taxonomy' hook with term id and taxonomy id as parameters.\n *\n * @param string $term The term to add or update.\n * @param string $taxonomy The taxonomy to which to add the term\n * @param array|string $args Change the values of the inserted term\n * @return array|WP_Error The Term ID and Term Taxonomy ID\n *\/","file":"taxonomy.php","line":2041,"missingDoc":false,"filters":["'pre_insert_term'","'edit_terms'","'edited_terms'","'edit_terms'","'edited_terms'","'create_term'","\"create_{$taxonomy}\"","'term_id_filter'","'created_term'","\"created_{$taxonomy}\""],"uses":{"__":[2045,2052,2055,2093,2097,2104,2108,2114],"taxonomy_exists":[2044],"is_wp_error":[2048],"is_int":[2051],"trim":[2054],"wp_parse_args":[2058],"sanitize_term":[2061],"extract":[2062],"stripslashes":[2065,2066],"sanitize_title":[2069,2120],"get_row":[2073,2087],"prepare":[2073,2087,2126],"get_var":[2079,2126],"update":[2081,2122],"compact":[2081,2096,2103,2113,2122,2122,2131],"get_terms":[2091],"wp_unique_term_slug":[2095,2102,2112],"insert":[2096,2103,2113,2131],"in_array":[2092],"term_exists":[2106,2089,2086],"is_taxonomy_hierarchical":[2089],"clean_term_cache":[2139]},"used_by":{"wp_xmlrpc_server::_insert_post":[1176],"wp_xmlrpc_server::wp_newTerm":[1583],"wp_update_nav_menu_object":[235],"wp_set_object_terms":[2198]}},"set_post_format":{"doc":"\/**\n * Assign a format to a post\n *\n * @since 3.1.0\n *\n * @param int|object $post The post for which to assign a format\n * @param string $format A format to assign. Use an empty string or array to remove all formats from the post.\n * @return mixed WP_Error on error. Array of affected term IDs on success.\n *\/","file":"post.php","line":804,"missingDoc":false,"filters":[],"uses":{"get_post":[805],"__":[808],"sanitize_key":[811],"in_array":[812],"array_keys":[812],"get_post_format_slugs":[812],"wp_set_post_terms":[818]},"used_by":{"wp_xmlrpc_server::_insert_post":[1196],"wp_xmlrpc_server::mw_newPost":[4289],"wp_xmlrpc_server::mw_editPost":[4606]}},"wp_update_post":{"doc":"\/**\n * Update a post with new post data.\n *\n * The date does not have to be set for drafts. You can set the date and it will\n * not be overridden.\n *\n * @since 1.0.0\n *\n * @param array|object $postarr Post data. Arrays are expected to be escaped, objects are not.\n * @param bool $wp_error Optional. Allow return of WP_Error on failure.\n * @return int|WP_Error The value 0 or WP_Error on failure. The post ID on success.\n *\/","file":"post.php","line":2968,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[2971],"add_magic_quotes":[2972,2979],"is_object":[2969],"get_post":[2976],"is_array":[2982],"count":[2983],"in_array":[2989],"array_merge":[2996],"current_time":[2999],"wp_insert_attachment":[3004],"wp_insert_post":[3006]},"used_by":{"wp_xmlrpc_server::_insert_post":[1212],"wp_xmlrpc_server::blogger_editPost":[3942],"wp_xmlrpc_server::mw_editPost":[4568],"wp_xmlrpc_server::mt_publishPost":[5279],"wp_update_nav_menu_item":[393],"wp_restore_post_revision":[5160],"wp_check_post_hierarchy_for_loops":[5311]}},"wp_insert_post":{"doc":"\/**\n * Insert a post.\n *\n * If the $postarr parameter has 'ID' set to a value, then post will be updated.\n *\n * You can set the post date manually, but setting the values for 'post_date'\n * and 'post_date_gmt' keys. You can close the comments or open the comments by\n * setting the value for 'comment_status' key.\n *\n * The defaults for the parameter $postarr are:\n * 'post_status' - Default is 'draft'.\n * 'post_type' - Default is 'post'.\n * 'post_author' - Default is current user ID ($user_ID). The ID of the user who added the post.\n * 'ping_status' - Default is the value in 'default_ping_status' option.\n * Whether the attachment can accept pings.\n * 'post_parent' - Default is 0. Set this for the post it belongs to, if any.\n * 'menu_order' - Default is 0. The order it is displayed.\n * 'to_ping' - Whether to ping.\n * 'pinged' - Default is empty string.\n * 'post_password' - Default is empty string. The password to access the attachment.\n * 'guid' - Global Unique ID for referencing the attachment.\n * 'post_content_filtered' - Post content filtered.\n * 'post_excerpt' - Post excerpt.\n *\n * @since 1.0.0\n * @uses $wpdb\n * @uses $user_ID\n * @uses do_action() Calls 'pre_post_update' on post ID if this is an update.\n * @uses do_action() Calls 'edit_post' action on post ID and post data if this is an update.\n * @uses do_action() Calls 'save_post' and 'wp_insert_post' on post id and post data just before returning.\n * @uses apply_filters() Calls 'wp_insert_post_data' passing $data, $postarr prior to database update or insert.\n * @uses wp_transition_post_status()\n *\n * @param array $postarr Elements that make up post to insert.\n * @param bool $wp_error Optional. Allow return of WP_Error on failure.\n * @return int|WP_Error The value 0 or WP_Error on failure. The post ID on success.\n *\/","file":"post.php","line":2700,"missingDoc":false,"filters":["'wp_insert_post_empty_content'","'wp_insert_post_parent'","'wp_insert_post_data'","'pre_post_update'","'edit_post'","'post_updated'","'save_post'","'wp_insert_post'"],"uses":{"get_option":[2704,2749,2831,2834],"wp_parse_args":[2709],"sanitize_post":[2713],"extract":[2716],"get_post_field":[2722,2762,2780,2920],"post_type_supports":[2727,2728,2728],"__":[2731,2797,2872,2888,2935],"array_filter":[2743,2914],"count":[2746],"is_array":[2746,2913],"get_post":[2763,2928,2946],"current_user_can":[2767,2915],"sanitize_title":[2774,2779,2783,2899],"in_array":[2773,2803,2898],"strtolower":[2780],"urlencode":[2780],"current_time":[2788,2810,2811],"substr":[2791,2792,2793],"wp_checkdate":[2794],"get_gmt_from_date":[2804],"gmdate":[2818,2822],"mysql2date":[2819,2819,2823,2823],"sanitize_trackback_urls":[2837],"compact":[2850,2863],"array_keys":[2850],"wp_unique_post_slug":[2860],"stripslashes_deep":[2865],"update":[2870,2900,2924],"stripslashes":[2878],"get_var":[2882],"prepare":[2882],"insert":[2886],"wp_set_post_categories":[2904],"is_object_in_taxonomy":[2903,2906],"wp_set_post_tags":[2907],"get_taxonomy":[2912],"wp_set_post_terms":[2916],"get_permalink":[2924],"clean_post_cache":[2926],"get_page_templates":[2932],"wp_get_theme":[2932],"update_post_meta":[2939],"wp_transition_post_status":[2942]},"used_by":{"wp_xmlrpc_server::_insert_post":[1212],"wp_xmlrpc_server::blogger_newPost":[3884],"wp_xmlrpc_server::mw_newPost":[4291],"wp_update_nav_menu_item":[360],"wp_trash_post":[2413],"wp_untrash_post":[2448],"wp_update_post":[3006],"_wp_put_post_revision":[5081]}},"wp_xmlrpc_server::wp_editPost":{"doc":"\/**\n * Edit a post for any registered post type.\n *\n * The $content_struct parameter only needs to contain fields that\n * should be changed. All other fields will retain their existing values.\n *\n * @since 3.4.0\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * - array $content_struct\n * @return true on success\n *\/","file":"class-wp-xmlrpc-server.php","line":1238,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1239],"escape":[1242,1277],"login":[1250],"get_post":[1255],"__":[1258,1263],"mysql2date":[1262],"getTimestamp":[1262],"_convert_date":[1268,1275],"array_merge":[1278],"_insert_post":[1280]},"used_by":[]},"wp_xmlrpc_server::wp_deletePost":{"doc":"\/**\n * Delete a post for any registered post type.\n *\n * @since 3.4.0\n *\n * @uses wp_delete_post()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * @return true on success\n *\/","file":"class-wp-xmlrpc-server.php","line":1300,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1301],"escape":[1304],"login":[1311],"get_post":[1316],"__":[1318,1322,1327],"get_post_type_object":[1320],"current_user_can":[1321],"wp_delete_post":[1324]},"used_by":[]},"wp_delete_post":{"doc":"\/**\n * Trashes or deletes a post or page.\n *\n * When the post and page is permanently deleted, everything that is tied to it is deleted also.\n * This includes comments, post meta fields, and terms associated with the post.\n *\n * The post or page is moved to trash instead of permanently deleted unless trash is\n * disabled, item is already in the trash, or $force_delete is true.\n *\n * @since 1.0.0\n * @uses do_action() on 'delete_post' before deletion unless post type is 'attachment'.\n * @uses do_action() on 'deleted_post' after deletion unless post type is 'attachment'.\n * @uses wp_delete_attachment() if post type is 'attachment'.\n * @uses wp_trash_post() if item should be trashed.\n *\n * @param int $postid Post ID.\n * @param bool $force_delete Whether to bypass trash and force deletion. Defaults to false.\n * @return mixed False on failure\n *\/","file":"post.php","line":2305,"missingDoc":false,"filters":["'before_delete_post'","'delete_post'","'deleted_post'","'after_delete_post'"],"uses":{"get_row":[2308],"prepare":[2308,2329,2350,2358,2362],"wp_trash_post":[2312],"get_post_status":[2311],"wp_delete_attachment":[2315],"delete_post_meta":[2319,2320],"wp_delete_object_term_relationships":[2322],"get_object_taxonomies":[2322],"get_results":[2330],"update":[2332,2356],"is_post_type_hierarchical":[2327,2372],"update_option":[2339],"delete_option":[2340,2343],"get_option":[2338,2342],"unstick_post":[2346],"get_col":[2350,2358,2362],"wp_delete_post_revision":[2353],"wp_delete_comment":[2360],"delete_metadata_by_mid":[2364],"delete":[2367],"clean_post_cache":[2370,2374],"wp_clear_scheduled_hook":[2377]},"used_by":{"wp_xmlrpc_server::wp_deletePost":[1324],"wp_xmlrpc_server::wp_deletePage":[2389],"wp_xmlrpc_server::blogger_deletePost":[3983],"wp_scheduled_delete":[3489],"wp_delete_nav_menu":[185],"_wp_delete_post_menu_item":[720],"_wp_delete_tax_menu_item":[739],"wp_trash_post":[2399],"wp_delete_post_revision":[5189],"wp_delete_auto_drafts":[5429]}},"wp_xmlrpc_server::wp_getPost":{"doc":"\/**\n * Retrieve a post.\n *\n * @since 3.4.0\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array. This should be a list of field names. 'post_id' will\n * always be included in the response regardless of the value of $fields.\n *\n * Instead of, or in addition to, individual field names, conceptual group\n * names can be used to specify multiple fields. The available conceptual\n * groups are 'post' (all basic fields), 'taxonomies', 'custom_fields',\n * and 'enclosure'.\n *\n * @uses get_post()\n * @param array $args Method parameters. Contains:\n * - int $post_id\n * - string $username\n * - string $password\n * - array $fields optional\n * @return array contains (based on $fields parameter):\n * - 'post_id'\n * - 'post_title'\n * - 'post_date'\n * - 'post_date_gmt'\n * - 'post_modified'\n * - 'post_modified_gmt'\n * - 'post_status'\n * - 'post_type'\n * - 'post_name'\n * - 'post_author'\n * - 'post_password'\n * - 'post_excerpt'\n * - 'post_content'\n * - 'link'\n * - 'comment_status'\n * - 'ping_status'\n * - 'sticky'\n * - 'custom_fields'\n * - 'terms'\n * - 'categories'\n * - 'tags'\n * - 'enclosure'\n *\/","file":"class-wp-xmlrpc-server.php","line":1376,"missingDoc":false,"filters":["'xmlrpc_default_post_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1377],"escape":[1380],"login":[1392],"get_post":[1397],"__":[1400,1404],"get_post_type_object":[1402],"current_user_can":[1403],"_prepare_post":[1406]},"used_by":[]},"wp_xmlrpc_server::wp_getPosts":{"doc":"\/**\n * Retrieve posts.\n *\n * @since 3.4.0\n *\n * The optional $filter parameter modifies the query used to retrieve posts.\n * Accepted keys are 'post_type', 'post_status', 'number', 'offset',\n * 'orderby', and 'order'.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses wp_get_recent_posts()\n * @see wp_getPost() for more on $fields\n * @see get_posts() for more on $filter values\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter optional\n * - array $fields optional\n * @return array contains a collection of posts.\n *\/","file":"class-wp-xmlrpc-server.php","line":1433,"missingDoc":false,"filters":["'xmlrpc_default_post_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1434],"escape":[1437],"login":[1449],"get_post_type_object":[1457,1461,1498],"__":[1459,1465],"current_user_can":[1464,1499],"absint":[1473,1476],"wp_get_recent_posts":[1489],"_prepare_post":[1502]},"used_by":[]},"wp_get_recent_posts":{"doc":"\/**\n * Retrieve number of recent posts.\n *\n * @since 1.0.0\n * @uses wp_parse_args()\n * @uses get_posts()\n *\n * @param string $deprecated Deprecated.\n * @param array $args Optional. Overrides defaults.\n * @param string $output Optional.\n * @return unknown.\n *\/","file":"post.php","line":2630,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[2633],"__":[2633],"absint":[2634],"is_numeric":[2632],"wp_parse_args":[2647],"get_posts":[2649],"get_object_vars":[2654]},"used_by":{"wp_xmlrpc_server::wp_getPosts":[1489],"wp_xmlrpc_server::blogger_getRecentPosts":[3789],"wp_xmlrpc_server::mw_getRecentPosts":[4762],"wp_xmlrpc_server::mt_getRecentPostTitles":[5016]}},"wp_xmlrpc_server::wp_newTerm":{"doc":"\/**\n * Create a new term.\n *\n * @since 3.4.0\n *\n * @uses wp_insert_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * The $content_struct must contain:\n * - 'name'\n * - 'taxonomy'\n * Also, it can optionally contain:\n * - 'parent'\n * - 'description'\n * - 'slug'\n * @return string term_id\n *\/","file":"class-wp-xmlrpc-server.php","line":1528,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1529],"escape":[1532],"login":[1539],"__":[1545,1550,1559,1563,1572,1589],"taxonomy_exists":[1544],"get_taxonomy":[1547],"current_user_can":[1549],"trim":[1557],"get_term":[1566],"get_error_message":[1569,1586],"is_wp_error":[1568,1585],"wp_insert_term":[1583],"strval":[1591]},"used_by":[]},"wp_xmlrpc_server::wp_editTerm":{"doc":"\/**\n * Edit a term.\n *\n * @since 3.4.0\n *\n * @uses wp_update_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $term_id\n * - array $content_struct\n * The $content_struct must contain:\n * - 'taxonomy'\n * Also, it can optionally contain:\n * - 'name'\n * - 'parent'\n * - 'description'\n * - 'slug'\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":1615,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1616],"escape":[1619],"login":[1627],"__":[1633,1638,1651,1657,1662,1671,1688],"taxonomy_exists":[1632],"get_taxonomy":[1635],"current_user_can":[1637],"get_term":[1645,1665],"get_error_message":[1648,1668,1685],"is_wp_error":[1647,1667,1684],"trim":[1654],"wp_update_term":[1682]},"used_by":[]},"wp_update_term":{"doc":"\/**\n * Update term based on arguments provided.\n *\n * The $args will indiscriminately override all values with the same field name.\n * Care must be taken to not override important information need to update or\n * update will fail (or perhaps create a new term, neither would be acceptable).\n *\n * Defaults will set 'alias_of', 'description', 'parent', and 'slug' if not\n * defined in $args already.\n *\n * 'alias_of' will create a term group, if it doesn't already exist, and update\n * it for the $term.\n *\n * If the 'slug' argument in $args is missing, then the 'name' in $args will be\n * used. It should also be noted that if you set 'slug' and it isn't unique then\n * a WP_Error will be passed back. If you don't pass any slug, then a unique one\n * will be created for you.\n *\n * For what can be overrode in $args, check the term scheme can contain and stay\n * away from the term keys.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses do_action() Will call both 'edit_term' and 'edit_$taxonomy' twice.\n * @uses apply_filters() Will call the 'term_id_filter' filter and pass the term\n *\tid and taxonomy id.\n *\n * @param int $term_id The ID of the term\n * @param string $taxonomy The context in which to relate the term to the object.\n * @param array|string $args Overwrite term field values\n * @return array|WP_Error Returns Term ID and Taxonomy Term ID\n *\/","file":"taxonomy.php","line":2349,"missingDoc":false,"filters":["'edit_terms'","'edited_terms'","'wp_update_term_parent'","'edit_terms'","'edited_terms'","'edit_term_taxonomy'","'edited_term_taxonomy'","'edit_term'","\"edit_{$taxonomy}\"","'term_id_filter'","'edited_term'","\"edited_{$taxonomy}\""],"uses":{"__":[2353,2379,2412],"taxonomy_exists":[2352],"get_term":[2358],"is_wp_error":[2360],"add_magic_quotes":[2364],"array_merge":[2367],"wp_parse_args":[2370],"sanitize_term":[2371],"extract":[2372],"stripslashes":[2375,2376],"trim":[2378],"sanitize_title":[2384,2417],"get_row":[2388],"prepare":[2388,2405,2422],"get_var":[2394,2405,2422],"update":[2396,2415,2418,2424],"compact":[2396,2402,2415,2415,2418,2418,2424],"array_keys":[2402],"wp_unique_term_slug":[2410],"sprintf":[2412],"clean_term_cache":[2432]},"used_by":{"wp_xmlrpc_server::wp_editTerm":[1682],"wp_update_nav_menu_object":[250],"wp_check_term_hierarchy_for_loops":[3298]}},"wp_xmlrpc_server::wp_deleteTerm":{"doc":"\/**\n * Delete a term.\n *\n * @since 3.4.0\n *\n * @uses wp_delete_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxnomy_name\n * - string $term_id\n * @return boolean|IXR_Error If it suceeded true else a reason why not\n *\/","file":"class-wp-xmlrpc-server.php","line":1707,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1708],"escape":[1711],"login":[1719],"__":[1725,1730,1738,1746],"taxonomy_exists":[1724],"get_taxonomy":[1727],"current_user_can":[1729],"get_term":[1732],"get_error_message":[1735,1743],"is_wp_error":[1734,1742],"wp_delete_term":[1740]},"used_by":[]},"wp_delete_term":{"doc":"\/**\n * Removes a term from the database.\n *\n * If the term is a parent of other terms, then the children will be updated to\n * that term's parent.\n *\n * The $args 'default' will only override the terms found, if there is only one\n * term found. Any other and the found terms are used.\n *\n * The $args 'force_default' will force the term supplied as default to be\n * assigned even if the object was not going to be termless\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses do_action() Calls both 'delete_term' and 'delete_$taxonomy' action\n *\thooks, passing term object, term id. 'delete_term' gets an additional\n *\tparameter with the $taxonomy parameter.\n *\n * @param int $term Term ID\n * @param string $taxonomy Taxonomy Name\n * @param array|string $args Optional. Change 'default' term id and override found term ids.\n * @return bool|WP_Error Returns false if not term; true if completes delete action.\n *\/","file":"taxonomy.php","line":1763,"missingDoc":false,"filters":["'edit_term_taxonomies'","'edited_term_taxonomies'","'delete_term_taxonomy'","'deleted_term_taxonomy'","'delete_term'","\"delete_{$taxonomy}\""],"uses":{"term_exists":[1768,1788],"is_wp_error":[1770,1795],"get_option":[1778],"wp_parse_args":[1783],"extract":[1784],"get_term":[1794,1826],"get_col":[1799,1805],"update":[1801],"compact":[1801,1801],"is_taxonomy_hierarchical":[1793],"prepare":[1805,1833],"wp_get_object_terms":[1808],"array_diff":[1812],"array_merge":[1814],"count":[1809],"array_map":[1816],"wp_set_object_terms":[1817],"get_taxonomy":[1821],"clean_object_term_cache":[1823],"delete":[1829,1834],"get_var":[1833],"clean_term_cache":[1836]},"used_by":{"wp_xmlrpc_server::wp_deleteTerm":[1740],"wp_xmlrpc_server::wp_deleteCategory":[2659],"wp_delete_nav_menu":[189],"wp_delete_category":[1855]}},"wp_xmlrpc_server::wp_getTerm":{"doc":"\/**\n * Retrieve a term.\n *\n * @since 3.4.0\n *\n * @uses get_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * - string $term_id\n * @return array contains:\n * - 'term_id'\n * - 'name'\n * - 'slug'\n * - 'term_group'\n * - 'term_taxonomy_id'\n * - 'taxonomy'\n * - 'description'\n * - 'parent'\n * - 'count'\n *\/","file":"class-wp-xmlrpc-server.php","line":1774,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1775],"escape":[1778],"login":[1786],"__":[1792,1797,1805],"taxonomy_exists":[1791],"get_taxonomy":[1794],"current_user_can":[1796],"get_term":[1799],"get_error_message":[1802],"is_wp_error":[1801],"_prepare_term":[1807]},"used_by":[]},"wp_xmlrpc_server::wp_getTerms":{"doc":"\/**\n * Retrieve all terms for a taxonomy.\n *\n * @since 3.4.0\n *\n * The optional $filter parameter modifies the query used to retrieve terms.\n * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'.\n *\n * @uses get_terms()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * - array $filter optional\n * @return array terms\n *\/","file":"class-wp-xmlrpc-server.php","line":1827,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1828],"escape":[1831],"login":[1839],"__":[1845,1850],"taxonomy_exists":[1844],"get_taxonomy":[1847],"current_user_can":[1849],"absint":[1855,1858],"get_terms":[1875],"get_error_message":[1878],"is_wp_error":[1877],"_prepare_term":[1883]},"used_by":[]},"wp_xmlrpc_server::wp_getTaxonomy":{"doc":"\/**\n * Retrieve a taxonomy.\n *\n * @since 3.4.0\n *\n * @uses get_taxonomy()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * @return array (@see get_taxonomy())\n *\/","file":"class-wp-xmlrpc-server.php","line":1902,"missingDoc":false,"filters":["'xmlrpc_default_taxonomy_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1903],"escape":[1906],"login":[1918],"__":[1924,1929],"taxonomy_exists":[1923],"get_taxonomy":[1926],"current_user_can":[1928],"_prepare_taxonomy":[1931]},"used_by":[]},"wp_xmlrpc_server::wp_getTaxonomies":{"doc":"\/**\n * Retrieve all taxonomies.\n *\n * @since 3.4.0\n *\n * @uses get_taxonomies()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * @return array taxonomies\n *\/","file":"class-wp-xmlrpc-server.php","line":1946,"missingDoc":false,"filters":["'xmlrpc_default_taxonomy_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1947],"escape":[1950],"login":[1962],"get_taxonomies":[1967],"current_user_can":[1974],"_prepare_taxonomy":[1977]},"used_by":[]},"get_taxonomies":{"doc":"\/**\n * Get a list of registered taxonomy objects.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n * @uses $wp_taxonomies\n * @see register_taxonomy\n *\n * @param array $args An array of key => value arguments to match against the taxonomy objects.\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of taxonomy names or objects\n *\/","file":"taxonomy.php","line":138,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[143]},"used_by":{"wp_xmlrpc_server::wp_getTaxonomies":[1967],"WP_Widget_Tag_Cloud::form":[1071],"get_taxonomies_for_attachments":[902]}},"wp_xmlrpc_server::wp_getUser":{"doc":"\/**\n * Retrieve a user.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array. This should be a list of field names. 'user_id' will\n * always be included in the response regardless of the value of $fields.\n *\n * Instead of, or in addition to, individual field names, conceptual group\n * names can be used to specify multiple fields. The available conceptual\n * groups are 'basic' and 'all'.\n *\n * @uses get_userdata()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $user_id\n * - array $fields optional\n * @return array contains (based on $fields parameter):\n * - 'user_id'\n * - 'username'\n * - 'first_name'\n * - 'last_name'\n * - 'registered'\n * - 'bio'\n * - 'email'\n * - 'nickname'\n * - 'nicename'\n * - 'url'\n * - 'display_name'\n * - 'roles'\n *\/","file":"class-wp-xmlrpc-server.php","line":2015,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2016],"escape":[2019],"login":[2031],"__":[2037,2042],"current_user_can":[2036],"get_userdata":[2039],"_prepare_user":[2044]},"used_by":[]},"wp_xmlrpc_server::wp_getUsers":{"doc":"\/**\n * Retrieve users.\n *\n * The optional $filter parameter modifies the query used to retrieve users.\n * Accepted keys are 'number' (default: 50), 'offset' (default: 0), 'role',\n * 'who', 'orderby', and 'order'.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses get_users()\n * @see wp_getUser() for more on $fields and return values\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter optional\n * - array $fields optional\n * @return array users data\n *\/","file":"class-wp-xmlrpc-server.php","line":2068,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2069],"escape":[2072],"login":[2084],"__":[2090,2106],"current_user_can":[2089,2119],"absint":[2094,2095],"get_role":[2105],"get_users":[2115],"_prepare_user":[2120]},"used_by":[]},"wp_xmlrpc_server::wp_getProfile":{"doc":"\/**\n * Retrieve information about the requesting user.\n *\n * @uses get_userdata()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $fields optional\n * @return array (@see wp_getUser)\n *\/","file":"class-wp-xmlrpc-server.php","line":2136,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2137],"escape":[2140],"login":[2151],"__":[2157],"current_user_can":[2156],"get_userdata":[2159],"_prepare_user":[2161]},"used_by":[]},"wp_xmlrpc_server::wp_editProfile":{"doc":"\/**\n * Edit user's profile.\n *\n * @uses wp_update_user()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * It can optionally contain:\n * - 'first_name'\n * - 'last_name'\n * - 'website'\n * - 'display_name'\n * - 'nickname'\n * - 'nicename'\n * - 'bio'\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2183,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[2184],"escape":[2187],"login":[2194],"__":[2200,2234],"current_user_can":[2199],"wp_update_user":[2228],"get_error_message":[2231],"is_wp_error":[2230]},"used_by":[]},"wp_update_user":{"doc":"\/**\n * Update an user in the database.\n *\n * It is possible to update a user's password by specifying the 'user_pass'\n * value in the $userdata parameter array.\n *\n * If $userdata does not contain an 'ID' key, then a new user will be created\n * and the new user's ID will be returned.\n *\n * If current user's password is being updated, then the cookies will be\n * cleared.\n *\n * @since 2.0.0\n * @see wp_insert_user() For what fields can be set in $userdata\n * @uses wp_insert_user() Used to update existing user or add new one if user doesn't exist already\n *\n * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.\n * @return int|WP_Error The updated user's ID or a WP_Error object if the user could not be updated.\n *\/","file":"user.php","line":1445,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[1447],"is_a":[1448,1446],"to_array":[1449,1458],"get_userdata":[1454],"__":[1456],"get_user_meta":[1462],"_get_additional_user_keys":[1461],"add_magic_quotes":[1466],"wp_hash_password":[1471],"wp_cache_delete":[1474],"array_merge":[1477],"wp_insert_user":[1478],"wp_get_current_user":[1481],"wp_clear_auth_cookie":[1484],"wp_set_auth_cookie":[1485]},"used_by":{"wp_xmlrpc_server::wp_editProfile":[2228]}},"wp_xmlrpc_server::wp_getPage":{"doc":"\/**\n * Retrieve page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - page_id\n * - username\n * - password\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2251,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2252],"login":[2259],"get_post":[2263],"__":[2265,2268,2278],"current_user_can":[2267],"_prepare_page":[2274]},"used_by":[]},"wp_xmlrpc_server::wp_getPages":{"doc":"\/**\n * Retrieve Pages.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - num_pages\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2294,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2295],"login":[2302],"__":[2306],"current_user_can":[2305,2318],"get_posts":[2310],"count":[2311],"_prepare_page":[2319]},"used_by":[]},"wp_xmlrpc_server::wp_newPage":{"doc":"\/**\n * Create new page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. See {@link wp_xmlrpc_server::mw_newPost()}\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2338,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2340,2341],"login":[2345],"mw_newPost":[2354]},"used_by":[]},"wp_xmlrpc_server::wp_deletePage":{"doc":"\/**\n * Delete page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return bool True, if success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2365,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deletePage'"],"uses":{"escape":[2366],"login":[2373],"get_post":[2380],"__":[2382,2386,2391],"current_user_can":[2385],"wp_delete_post":[2389]},"used_by":[]},"wp_xmlrpc_server::wp_editPage":{"doc":"\/**\n * Edit page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2406,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2409,2410,2411],"login":[2415],"get_post":[2421],"__":[2423,2427],"current_user_can":[2426],"mw_editPost":[2442]},"used_by":[]},"wp_xmlrpc_server::wp_getPageList":{"doc":"\/**\n * Retrieve page list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2453,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2456],"login":[2462],"__":[2466],"current_user_can":[2465],"get_results":[2471],"count":[2484],"_convert_date":[2486],"_convert_date_gmt":[2487]},"used_by":[]},"wp_xmlrpc_server::wp_getAuthors":{"doc":"\/**\n * Retrieve authors list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2505,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2507],"login":[2513],"__":[2517],"current_user_can":[2516],"get_users":[2522]},"used_by":[]},"wp_xmlrpc_server::wp_getTags":{"doc":"\/**\n * Get list of all tags\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2541,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2542],"login":[2548],"__":[2552],"current_user_can":[2551],"esc_html":[2564,2565],"get_tag_link":[2564],"get_tag_feed_link":[2565],"get_tags":[2558]},"used_by":[]},"get_tag_feed_link":{"doc":"\/**\n * Retrieve permalink for feed of tag.\n *\n * @since 2.3.0\n *\n * @param int $tag_id Tag ID.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":640,"missingDoc":false,"filters":[],"uses":{"get_term_feed_link":[641]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2565],"feed_links_extra":[1657]}},"wp_xmlrpc_server::wp_newCategory":{"doc":"\/**\n * Create new category.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return int Category ID.\n *\/","file":"class-wp-xmlrpc-server.php","line":2582,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_newCategory'"],"uses":{"escape":[2583],"login":[2590],"__":[2597,2625,2627],"current_user_can":[2596],"wp_insert_category":[2620],"get_error_data":[2623],"get_error_code":[2622],"is_wp_error":[2621]},"used_by":[]},"wp_xmlrpc_server::wp_deleteCategory":{"doc":"\/**\n * Remove category.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return mixed See {@link wp_delete_term()} for return info.\n *\/","file":"class-wp-xmlrpc-server.php","line":2643,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deleteCategory'"],"uses":{"escape":[2644],"login":[2651],"__":[2657],"current_user_can":[2656],"wp_delete_term":[2659]},"used_by":[]},"wp_xmlrpc_server::wp_suggestCategories":{"doc":"\/**\n * Retrieve category list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2675,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2676],"login":[2684],"__":[2688],"current_user_can":[2687],"get_categories":[2694]},"used_by":[]},"wp_xmlrpc_server::wp_getComment":{"doc":"\/**\n * Retrieve comment.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2712,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2713],"login":[2720],"__":[2724,2729],"current_user_can":[2723],"get_comment":[2728],"_prepare_comment":[2731]},"used_by":[]},"wp_xmlrpc_server::wp_getComments":{"doc":"\/**\n * Retrieve comments.\n *\n * Besides the common blog_id, username, and password arguments, it takes a filter\n * array as last argument.\n *\n * Accepted 'filter' keys are 'status', 'post_id', 'offset', and 'number'.\n *\n * The defaults are as follows:\n * - 'status' - Default is ''. Filter by status (e.g., 'approve', 'hold')\n * - 'post_id' - Default is ''. The post where the comment is posted. Empty string shows all comments.\n * - 'number' - Default is 10. Total number of media items to retrieve.\n * - 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents\n *\/","file":"class-wp-xmlrpc-server.php","line":2753,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2754],"login":[2761],"__":[2765],"current_user_can":[2764],"absint":[2776,2780,2784],"get_comments":[2786],"_prepare_comment":[2791]},"used_by":[]},"get_comments":{"doc":"\/**\n * Retrieve a list of comments.\n *\n * The comment list can be for the blog as a whole or for an individual post.\n *\n * The list of comment arguments are 'status', 'orderby', 'comment_date_gmt',\n * 'order', 'number', 'offset', and 'post_id'.\n *\n * @since 2.7.0\n * @uses $wpdb\n *\n * @param mixed $args Optional. Array or string of options to override defaults.\n * @return array List of comments.\n *\/","file":"comment.php","line":182,"missingDoc":false,"filters":[],"uses":{"query":[184]},"used_by":{"wp_xmlrpc_server::wp_getComments":[2786],"comments_template":[885],"WP_Widget_Recent_Comments::widget":[682]}},"wp_xmlrpc_server::wp_deleteComment":{"doc":"\/**\n * Delete a comment.\n *\n * By default, the comment will be moved to the trash instead of deleted.\n * See {@link wp_delete_comment()} for more information on\n * this behavior.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - comment_id\n * @return mixed {@link wp_delete_comment()}\n *\/","file":"class-wp-xmlrpc-server.php","line":2813,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deleteComment'"],"uses":{"escape":[2814],"login":[2821],"__":[2825,2828,2831],"current_user_can":[2824,2830],"get_comment":[2827],"wp_delete_comment":[2835]},"used_by":[]},"wp_delete_comment":{"doc":"\/**\n * Trashes or deletes a comment.\n *\n * The comment is moved to trash instead of permanently deleted unless trash is\n * disabled, item is already in the trash, or $force_delete is true.\n *\n * The post comment count will be updated if the comment was approved and has a\n * post ID available.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses do_action() Calls 'delete_comment' hook on comment ID\n * @uses do_action() Calls 'deleted_comment' hook on comment ID after deletion, on success\n * @uses do_action() Calls 'wp_set_comment_status' hook on comment ID with 'delete' set for the second parameter\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param int $comment_id Comment ID\n * @param bool $force_delete Whether to bypass trash and force deletion. Default is false.\n * @return bool False if delete comment query failure, true on success.\n *\/","file":"comment.php","line":997,"missingDoc":false,"filters":["'delete_comment'","'deleted_comment'","'wp_set_comment_status'"],"uses":{"get_comment":[999],"wp_trash_comment":[1003],"in_array":[1002],"wp_get_comment_status":[1002],"get_col":[1008,1015],"prepare":[1008,1015],"update":[1010],"clean_comment_cache":[1011,1027],"delete_metadata_by_mid":[1017],"delete":[1019],"wp_update_comment_count":[1025],"wp_transition_comment_status":[1030]},"used_by":{"wp_xmlrpc_server::wp_deleteComment":[2835],"wp_trash_comment":[1049],"wp_scheduled_delete":[3506],"wp_delete_post":[2360],"wp_delete_attachment":[4113]}},"wp_xmlrpc_server::wp_editComment":{"doc":"\/**\n * Edit comment.\n *\n * Besides the common blog_id, username, and password arguments, it takes a\n * comment_id integer and a content_struct array as last argument.\n *\n * The allowed keys in the content_struct array are:\n * - 'author'\n * - 'author_url'\n * - 'author_email'\n * - 'content'\n * - 'date_created_gmt'\n * - 'status'. Common statuses are 'approve', 'hold', 'spam'. See {@link get_comment_statuses()} for more details\n *\n * @since 2.7.0\n *\n * @param array $args. Contains:\n * - blog_id\n * - username\n * - password\n * - comment_id\n * - content_struct\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2867,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_editComment'"],"uses":{"escape":[2868],"login":[2876],"__":[2880,2883,2886,2895,2927],"current_user_can":[2879,2885],"get_comment":[2882],"get_comment_statuses":[2891],"array_keys":[2892],"in_array":[2894],"rtrim":[2902],"getIso":[2902],"get_date_from_gmt":[2903],"iso8601_to_datetime":[2903,2904],"compact":[2920],"wp_update_comment":[2922],"get_error_message":[2924],"is_wp_error":[2923]},"used_by":[]},"get_comment_statuses":{"doc":"\/**\n * Retrieve all of the WordPress supported comment statuses.\n *\n * Comments have a limited set of valid status values, this provides the comment\n * status values and descriptions.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.7.0\n *\n * @return array List of comment statuses.\n *\/","file":"comment.php","line":418,"missingDoc":false,"filters":[],"uses":{"__":[420],"_x":[422,424]},"used_by":{"wp_xmlrpc_server::wp_editComment":[2891],"wp_xmlrpc_server::wp_getCommentStatusList":[3044]}},"wp_update_comment":{"doc":"\/**\n * Updates an existing comment in the database.\n *\n * Filters the comment and makes sure certain fields are valid before updating.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param array $commentarr Contains information on the comment.\n * @return int Comment was updated if value is 1, or was not updated if value is 0.\n *\/","file":"comment.php","line":1491,"missingDoc":false,"filters":["'comment_save_pre'","'edit_comment'"],"uses":{"get_comment":[1495,1527],"esc_sql":[1498],"array_merge":[1503],"wp_filter_comment":[1505],"extract":[1508],"stripslashes_deep":[1508],"get_gmt_from_date":[1512],"compact":[1521,1522],"update":[1522],"clean_comment_cache":[1524],"wp_update_comment_count":[1525],"wp_transition_comment_status":[1528]},"used_by":{"wp_xmlrpc_server::wp_editComment":[2922]}},"wp_xmlrpc_server::wp_newComment":{"doc":"\/**\n * Create new comment.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return mixed {@link wp_new_comment()}\n *\/","file":"class-wp-xmlrpc-server.php","line":2942,"missingDoc":false,"filters":["'xmlrpc_allow_anonymous_comments'","'xmlrpc_call'","'xmlrpc_call_success_wp_newComment'"],"uses":{"escape":[2945,2981,2982,2983],"login":[2955],"__":[2960,2973,2976,3002,3004],"get_option":[2959,3000],"absint":[2968,3008],"url_to_postid":[2970],"is_numeric":[2967],"get_post":[2975],"is_email":[3003],"strlen":[3001],"wp_new_comment":[3014]},"used_by":[]},"url_to_postid":{"doc":"\/**\n * Examine a url and try to determine the post ID it represents.\n *\n * Checks are supposedly from the hosted site blog.\n *\n * @since 1.0.0\n *\n * @param string $url Permalink to check.\n * @return int Post ID, or 0 on failure.\n *\/","file":"rewrite.php","line":281,"missingDoc":false,"filters":["'url_to_postid'"],"uses":{"absint":[288],"preg_match":[287,346,344],"wp_rewrite_rules":[294],"explode":[301,305],"str_replace":[310,314,318,322,327],"strpos":[309,309,313,320,341],"home_url":[309,313,322,325,320],"using_index_permalinks":[317],"parse_url":[325],"trim":[331],"get_page_by_path":[348],"preg_replace":[354],"addslashes":[357],"parse_str":[361],"in_array":[364]},"used_by":{"wp_xmlrpc_server::wp_newComment":[2970],"wp_xmlrpc_server::pingback_ping":[5321,5364],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5473],"pingback":[1840],"is_local_attachment":[3858]}},"is_email":{"doc":"\/**\n * Verifies that an email is valid.\n *\n * Does not grok i18n domains. Not RFC compliant.\n *\n * @since 0.71\n *\n * @param string $email Email address to verify.\n * @param boolean $deprecated Deprecated.\n * @return string|bool Either false or the valid email address.\n *\/","file":"formatting.php","line":1790,"missingDoc":false,"filters":["'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'"],"uses":{"_deprecated_argument":[1792],"strlen":[1795],"strpos":[1800],"explode":[1805,1825],"preg_match":[1809,1815,1840],"trim":[1820,1835],"count":[1828]},"used_by":{"wp_xmlrpc_server::wp_newComment":[3003],"sanitize_option":[2762],"validate_email":[138],"wpmu_validate_user_signup":[471],"newblog_notify_siteadmin":[1017],"newuser_notify_siteadmin":[1056],"get_user_id_from_string":[1337]}},"wp_new_comment":{"doc":"\/**\n * Adds a new comment to the database.\n *\n * Filters new comment to ensure that the fields are sanitized and valid before\n * inserting comment into database. Calls 'comment_post' action with comment ID\n * and whether comment is approved by WordPress. Also has 'preprocess_comment'\n * filter for processing the comment data before the function handles it.\n *\n * We use REMOTE_ADDR here directly. If you are behind a proxy, you should ensure\n * that it is properly set, such as in wp-config.php, for your environment.\n * See {@link http:\/\/core.trac.wordpress.org\/ticket\/9235}\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'preprocess_comment' hook on $commentdata parameter array before processing\n * @uses do_action() Calls 'comment_post' hook on $comment_ID returned from adding the comment and if the comment was approved.\n * @uses wp_filter_comment() Used to filter comment before adding comment.\n * @uses wp_allow_comment() checks to see if comment is approved.\n * @uses wp_insert_comment() Does the actual comment insertion to the database.\n *\n * @param array $commentdata Contains information on the comment.\n * @return int The ID of the comment after adding.\n *\/","file":"comment.php","line":1377,"missingDoc":false,"filters":["'preprocess_comment'","'comment_post'"],"uses":{"absint":[1386],"wp_get_comment_status":[1387],"preg_replace":[1390],"substr":[1391],"current_time":[1393,1394],"wp_filter_comment":[1396],"wp_allow_comment":[1398],"wp_insert_comment":[1400],"wp_notify_moderator":[1406],"get_post":[1408],"wp_notify_postauthor":[1411],"get_option":[1410]},"used_by":{"wp_xmlrpc_server::wp_newComment":[3014],"wp_xmlrpc_server::pingback_ping":[5447]}},"wp_xmlrpc_server::wp_getCommentStatusList":{"doc":"\/**\n * Retrieve all of the comment status.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3029,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3030],"login":[3036],"__":[3040],"current_user_can":[3039],"get_comment_statuses":[3044]},"used_by":[]},"wp_xmlrpc_server::wp_getCommentCount":{"doc":"\/**\n * Retrieve comment count.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3055,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3056],"login":[3063],"__":[3067],"current_user_can":[3066],"wp_count_comments":[3071]},"used_by":[]},"wp_xmlrpc_server::wp_getPostStatusList":{"doc":"\/**\n * Retrieve post statuses.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3088,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3089],"login":[3095],"__":[3099],"current_user_can":[3098],"get_post_statuses":[3103]},"used_by":[]},"get_post_statuses":{"doc":"\/**\n * Retrieve all of the WordPress supported post statuses.\n *\n * Posts have a limited set of valid status values, this provides the\n * post_status values and descriptions.\n *\n * @since 2.5.0\n *\n * @return array List of post statuses.\n *\/","file":"post.php","line":864,"missingDoc":false,"filters":[],"uses":{"__":[866,867,868,869]},"used_by":{"wp_xmlrpc_server::wp_getPostStatusList":[3103]}},"wp_xmlrpc_server::wp_getPageStatusList":{"doc":"\/**\n * Retrieve page statuses.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3114,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3115],"login":[3121],"__":[3125],"current_user_can":[3124],"get_page_statuses":[3129]},"used_by":[]},"get_page_statuses":{"doc":"\/**\n * Retrieve all of the WordPress support page statuses.\n *\n * Pages have a limited set of valid status values, this provides the\n * post_status values and descriptions.\n *\n * @since 2.5.0\n *\n * @return array List of page statuses.\n *\/","file":"post.php","line":885,"missingDoc":false,"filters":[],"uses":{"__":[887,888,889]},"used_by":{"wp_xmlrpc_server::wp_getPageStatusList":[3129]}},"wp_xmlrpc_server::wp_getPageTemplates":{"doc":"\/**\n * Retrieve page templates.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3140,"missingDoc":false,"filters":[],"uses":{"escape":[3141],"login":[3147],"__":[3151],"current_user_can":[3150],"get_page_templates":[3153]},"used_by":[]},"wp_xmlrpc_server::wp_getOptions":{"doc":"\/**\n * Retrieve blog options.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3167,"missingDoc":false,"filters":[],"uses":{"escape":[3168],"login":[3175],"array_keys":[3180],"count":[3179],"_getOptions":[3182]},"used_by":[]},"wp_xmlrpc_server::_getOptions":{"doc":"\/**\n * Retrieve blog options value from list.\n *\n * @since 2.6.0\n *\n * @param array $options Options to retrieve.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3193,"missingDoc":false,"filters":[],"uses":{"get_option":[3200],"array_key_exists":[3196]},"used_by":[]},"wp_xmlrpc_server::wp_setOptions":{"doc":"\/**\n * Update blog options.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":3217,"missingDoc":false,"filters":[],"uses":{"escape":[3218],"login":[3225],"__":[3229],"current_user_can":[3228],"array_key_exists":[3233],"update_option":[3239],"_getOptions":[3243]},"used_by":[]},"wp_xmlrpc_server::wp_getMediaItem":{"doc":"\/**\n * Retrieve a media item by ID\n *\n * @since 3.1.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - attachment_id\n * @return array. Associative array containing:\n * - 'date_created_gmt'\n * - 'parent'\n * - 'link'\n * - 'thumbnail'\n * - 'title'\n * - 'caption'\n * - 'description'\n * - 'metadata'\n *\/","file":"class-wp-xmlrpc-server.php","line":3266,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3267],"login":[3274],"__":[3278,3283],"current_user_can":[3277],"get_post":[3282],"_prepare_media_item":[3285]},"used_by":[]},"wp_xmlrpc_server::wp_getMediaLibrary":{"doc":"\/**\n * Retrieves a collection of media library items (or attachments)\n *\n * Besides the common blog_id, username, and password arguments, it takes a filter\n * array as last argument.\n *\n * Accepted 'filter' keys are 'parent_id', 'mime_type', 'offset', and 'number'.\n *\n * The defaults are as follows:\n * - 'number' - Default is 5. Total number of media items to retrieve.\n * - 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n * - 'parent_id' - Default is ''. The post where the media item is attached. Empty string shows all media items. 0 shows unattached media items.\n * - 'mime_type' - Default is ''. Filter by mime type (e.g., 'image\/jpeg', 'application\/pdf')\n *\n * @since 3.1.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - filter\n * @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents\n *\/","file":"class-wp-xmlrpc-server.php","line":3311,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3312],"login":[3319],"__":[3323],"current_user_can":[3322],"absint":[3327,3329,3330],"get_posts":[3332],"_prepare_media_item":[3337]},"used_by":[]},"wp_xmlrpc_server::wp_getPostFormats":{"doc":"\/**\n * Retrieves a list of post formats used by the site\n *\n * @since 3.1\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3353,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3354],"login":[3360],"__":[3364],"current_user_can":[3363],"get_post_format_strings":[3368],"get_theme_support":[3374],"current_theme_supports":[3373],"is_array":[3371]},"used_by":[]},"get_post_format_strings":{"doc":"\/**\n * Returns an array of post format slugs to their translated and pretty display versions\n *\n * @since 3.1.0\n *\n * @return array The array of translations\n *\/","file":"post.php","line":5323,"missingDoc":false,"filters":[],"uses":{"_x":[5325,5326,5327,5328,5329,5330,5331,5332,5333,5334]},"used_by":{"wp_xmlrpc_server::wp_getPostFormats":[3368],"wp_xmlrpc_server::mw_newPost":[4091],"wp_xmlrpc_server::mw_editPost":[4389],"get_post_format_slugs":[5347],"get_post_format_string":[5360]}},"wp_xmlrpc_server::wp_getPostType":{"doc":"\/**\n * Retrieves a post type\n *\n * @since 3.4.0\n *\n * @uses get_post_type_object()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $post_type_name\n * - array $fields\n * @return array contains:\n * - 'labels'\n * - 'description'\n * - 'capability_type'\n * - 'cap'\n * - 'map_meta_cap'\n * - 'hierarchical'\n * - 'menu_position'\n * - 'taxonomies'\n * - 'supports'\n *\/","file":"class-wp-xmlrpc-server.php","line":3410,"missingDoc":false,"filters":["'xmlrpc_default_posttype_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3411],"escape":[3414],"login":[3426],"__":[3432,3437],"post_type_exists":[3431],"get_post_type_object":[3434],"current_user_can":[3436],"_prepare_post_type":[3439]},"used_by":[]},"post_type_exists":{"doc":"\/**\n * Checks if a post type is registered.\n *\n * @since 3.0.0\n * @uses get_post_type_object()\n *\n * @param string $post_type Post type name\n * @return bool Whether post type is registered.\n *\/","file":"post.php","line":1060,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[1061]},"used_by":{"wp_xmlrpc_server::wp_getPostType":[3431],"is_post_type_hierarchical":[1044],"get_ancestors":[3239]}},"wp_xmlrpc_server::wp_getPostTypes":{"doc":"\/**\n * Retrieves a post types\n *\n * @since 3.4.0\n *\n * @uses get_post_types()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter\n * - array $fields\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3456,"missingDoc":false,"filters":["'xmlrpc_default_posttype_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3457],"escape":[3460],"login":[3472],"get_post_types":[3477],"current_user_can":[3482],"_prepare_post_type":[3485]},"used_by":[]},"wp_xmlrpc_server::wp_getRevisions":{"doc":"\/**\n * Retrieve revisions for a specific post.\n *\n * @since 3.5.0\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses wp_get_post_revisions()\n * @see wp_getPost() for more on $fields\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * - array $fields\n * @return array contains a collection of posts.\n *\/","file":"class-wp-xmlrpc-server.php","line":3510,"missingDoc":false,"filters":["'xmlrpc_default_revision_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3511],"escape":[3514],"login":[3526],"__":[3532,3535,3539],"get_post":[3531],"current_user_can":[3534,3549],"post_type_supports":[3538],"wp_get_post_revisions":[3541],"wp_is_post_autosave":[3553],"_prepare_post":[3556],"get_object_vars":[3556]},"used_by":[]},"wp_get_post_revisions":{"doc":"\/**\n * Returns all revisions of specified post.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses get_children()\n *\n * @param int|object $post_id Post ID or post object\n * @return array empty if no revisions\n *\/","file":"post.php","line":5211,"missingDoc":false,"filters":[],"uses":{"get_post":[5214],"wp_parse_args":[5218],"array_merge":[5219],"get_children":[5221]},"used_by":{"wp_xmlrpc_server::wp_getRevisions":[3541],"wp_list_post_revisions":[1368],"wp_save_post_revision":[4950]}},"wp_is_post_autosave":{"doc":"\/**\n * Determines if the specified post is an autosave.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int|object $post Post ID or post object.\n * @return bool|int False if not a revision, ID of autosave's parent otherwise\n *\/","file":"post.php","line":5046,"missingDoc":false,"filters":[],"uses":{"wp_get_post_revision":[5047]},"used_by":{"wp_xmlrpc_server::wp_getRevisions":[3553],"wp_xmlrpc_server::wp_restoreRevision":[3595],"wp_post_revision_title":[1316],"wp_list_post_revisions":[1385]}},"wp_xmlrpc_server::wp_restoreRevision":{"doc":"\/**\n * Restore a post revision\n *\n * @since 3.5.0\n *\n * @uses wp_restore_post_revision()\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * @return bool false if there was an error restoring, true if success.\n *\/","file":"class-wp-xmlrpc-server.php","line":3576,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[3577],"escape":[3580],"login":[3587],"__":[3593,3596,3599,3602,3606],"wp_get_post_revision":[3592],"wp_is_post_autosave":[3595],"get_post":[3598],"current_user_can":[3601],"post_type_supports":[3605],"wp_restore_post_revision":[3608]},"used_by":[]},"wp_get_post_revision":{"doc":"\/**\n * Gets a post revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses get_post()\n *\n * @param int|object $post Post ID or post object\n * @param string $output Optional. OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter Optional sanitation filter. @see sanitize_post()\n * @return mixed Null if error or post object if success\n *\/","file":"post.php","line":5104,"missingDoc":false,"filters":[],"uses":{"get_post":[5106],"get_object_vars":[5114,5117],"array_values":[5117]},"used_by":{"wp_xmlrpc_server::wp_restoreRevision":[3592],"wp_is_post_revision":[5031],"wp_is_post_autosave":[5047],"wp_restore_post_revision":[5143],"wp_delete_post_revision":[5186]}},"wp_restore_post_revision":{"doc":"\/**\n * Restores a post to the specified revision.\n *\n * Can restore a past revision using all fields of the post revision, or only selected fields.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revision()\n * @uses wp_update_post()\n * @uses do_action() Calls 'wp_restore_post_revision' on post ID and revision ID if wp_update_post()\n * is successful.\n *\n * @param int|object $revision_id Revision ID or revision object.\n * @param array $fields Optional. What fields to restore from. Defaults to all.\n * @return mixed Null if error, false if no fields to restore, (int) post ID if success.\n *\/","file":"post.php","line":5142,"missingDoc":false,"filters":["'wp_restore_post_revision'"],"uses":{"wp_get_post_revision":[5143],"array_keys":[5147,5150],"_wp_post_revision_fields":[5147],"is_array":[5146],"array_intersect":[5150],"add_magic_quotes":[5158],"wp_update_post":[5160],"is_wp_error":[5161]},"used_by":{"wp_xmlrpc_server::wp_restoreRevision":[3608]}},"wp_xmlrpc_server::blogger_getUsersBlogs":{"doc":"\/**\n * Retrieve blogs that user owns.\n *\n * Will make more sense once we support multiple blogs.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3627,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"_multisite_getUsersBlogs":[3629],"is_multisite":[3628],"escape":[3631],"login":[3636],"current_user_can":[3641],"get_option":[3645,3647],"site_url":[3648]},"used_by":[]},"wp_xmlrpc_server::_multisite_getUsersBlogs":{"doc":"\/**\n * Private function for retrieving a users blogs for multisite setups\n *\n * @access protected\n *\/","file":"class-wp-xmlrpc-server.php","line":3659,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[3660],"set_url_scheme":[3665],"query":[3666],"getResponse":[3667],"strpos":[3676]},"used_by":[]},"get_blog_details":{"doc":"\/**\n * Retrieve the details for a blog from the blogs table and blog options.\n *\n * @since MU\n *\n * @param int|string|array $fields A blog ID, a blog slug, or an array of fields to query against. Optional. If not specified the current blog ID is used.\n * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true.\n * @return object Blog details.\n *\/","file":"ms-blogs.php","line":125,"missingDoc":false,"filters":["'blog_details'"],"uses":{"md5":[132,149,241],"wp_cache_get":[133,150,180,198,200],"substr":[137,136,154,153],"get_row":[138,140,155,157,218],"prepare":[138,140,155,157,218],"wp_cache_set":[143,160,221,227,239,242],"is_subdomain_install":[148],"get_current_blog_id":[170],"is_numeric":[171],"get_id_from_blogname":[172],"is_array":[128],"wp_cache_delete":[188,208],"is_object":[183,203],"switch_to_blog":[231],"get_option":[232,233,234],"restore_current_blog":[235]},"used_by":{"wp_xmlrpc_server::_multisite_getUsersBlogs":[3660],"get_blogaddress_by_id":[33],"refresh_blog_details":[256],"update_blog_details":[281],"get_blog_status":[706],"get_active_blog_for_user":[84,86,102],"add_user_to_blog":[190],"get_dashboard_blog":[1789,1791],"ms_site_check":[74],"__main":[55,76,101],"wp_authenticate_username_password":[99],"get_blogs_of_user":[712,741]}},"wp_xmlrpc_server::blogger_getUserInfo":{"doc":"\/**\n * Retrieve user's data.\n *\n * Gives your client some info about you, so you don't have to.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3693,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3695],"login":[3700],"__":[3704],"current_user_can":[3703]},"used_by":[]},"wp_xmlrpc_server::blogger_getPost":{"doc":"\/**\n * Retrieve post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3727,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3729],"login":[3735],"get_post":[3738],"__":[3740,3743],"current_user_can":[3742],"implode":[3747],"wp_get_post_categories":[3747],"stripslashes":[3749,3751],"_convert_date":[3755]},"used_by":[]},"wp_xmlrpc_server::blogger_getRecentPosts":{"doc":"\/**\n * Retrieve list of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3771,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3773],"absint":[3780],"login":[3784],"wp_get_recent_posts":[3789],"__":[3792],"current_user_can":[3797],"_convert_date":[3800],"implode":[3801],"wp_get_post_categories":[3801],"stripslashes":[3803,3805],"count":[3817],"array_push":[3818]},"used_by":[]},"wp_xmlrpc_server::blogger_getTemplate":{"doc":"\/**\n * Deprecated.\n *\n * @since 1.5.0\n * @deprecated 3.5.0\n *\/","file":"class-wp-xmlrpc-server.php","line":3830,"missingDoc":false,"filters":[],"uses":{"__":[3831]},"used_by":[]},"wp_xmlrpc_server::blogger_setTemplate":{"doc":"\/**\n * Deprecated.\n *\n * @since 1.5.0\n * @deprecated 3.5.0\n *\/","file":"class-wp-xmlrpc-server.php","line":3840,"missingDoc":false,"filters":[],"uses":{"__":[3841]},"used_by":[]},"wp_xmlrpc_server::blogger_newPost":{"doc":"\/**\n * Create new post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":3852,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_newPost'"],"uses":{"escape":[3854],"login":[3862],"__":[3869,3889],"current_user_can":[3868,3868],"get_post_type_object":[3868],"xmlrpc_getposttitle":[3875],"xmlrpc_getpostcategory":[3876],"xmlrpc_removepostdata":[3877],"current_time":[3879,3880],"compact":[3882],"wp_insert_post":[3884],"get_error_message":[3886],"is_wp_error":[3885],"attach_uploads":[3891]},"used_by":[]},"xmlrpc_getposttitle":{"doc":"\/**\n * Retrieve post title from XMLRPC XML.\n *\n * If the title element is not part of the XML, then the default post title from\n * the $post_default_title will be used instead.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @global string $post_default_title Default XMLRPC post title.\n *\n * @param string $content XMLRPC XML Request content\n * @return string Post title\n *\/","file":"functions.php","line":341,"missingDoc":false,"filters":[],"uses":{"preg_match":[343]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3875],"wp_xmlrpc_server::blogger_editPost":[3936]}},"xmlrpc_getpostcategory":{"doc":"\/**\n * Retrieve the post category or categories from XMLRPC XML.\n *\n * If the category element is not found, then the default post category will be\n * used. The return type then would be what $post_default_category. If the\n * category is found, then it will always be an array.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @global string $post_default_category Default XMLRPC post category.\n *\n * @param string $content XMLRPC XML Request content\n * @return string|array List of categories or category name.\n *\/","file":"functions.php","line":367,"missingDoc":false,"filters":[],"uses":{"trim":[370],"explode":[371],"preg_match":[369]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3876],"wp_xmlrpc_server::blogger_editPost":[3937]}},"xmlrpc_removepostdata":{"doc":"\/**\n * XMLRPC XML content without title and category elements.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @param string $content XMLRPC XML Request content\n * @return string XMLRPC XML Request content without title and category elements.\n *\/","file":"functions.php","line":388,"missingDoc":false,"filters":[],"uses":{"preg_replace":[389,390],"trim":[391]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3877],"wp_xmlrpc_server::blogger_editPost":[3938]}},"current_time":{"doc":"\/**\n * Retrieve the current time based on specified type.\n *\n * The 'mysql' type will return the time in the format for MySQL DATETIME field.\n * The 'timestamp' type will return the current timestamp.\n *\n * If $gmt is set to either '1' or 'true', then both types will use GMT time.\n * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option.\n *\n * @since 1.0.0\n *\n * @param string $type Either 'mysql' or 'timestamp'.\n * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false.\n * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.\n *\/","file":"functions.php","line":59,"missingDoc":false,"filters":[],"uses":{"gmdate":[62,62],"time":[62,65,65],"get_option":[62,65]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3879,3880],"wp_xmlrpc_server::mw_newPost":[4243,4244],"wp_insert_comment":[1268],"wp_new_comment":[1393,1394],"date_i18n":[90],"wp_upload_dir":[1597],"get_calendar":[1124,1125,1242,1242,1242],"get_year_link":[341],"get_month_link":[363,365],"get_day_link":[389,391,393],"wpmu_update_blogs_date":[19],"update_blog_details":[288],"update_blog_status":[675],"wpmu_validate_user_signup":[493,507],"wpmu_validate_blog_signup":[612],"wpmu_signup_blog":[652],"wpmu_signup_user":[688],"wpmu_activate_signup":[861],"insert_blog":[1110],"wpmu_log_new_registrations":[1513],"wp_insert_post":[2788,2810,2811],"wp_update_post":[2999],"wp_insert_attachment":[3961,3963],"WP_Query::get_posts":[2715]}},"wp_xmlrpc_server::blogger_editPost":{"doc":"\/**\n * Edit a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool true when done.\n *\/","file":"class-wp-xmlrpc-server.php","line":3906,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_editPost'"],"uses":{"escape":[3908,3926],"login":[3916],"get_post":[3921],"__":[3924,3929,3934,3945],"current_user_can":[3928,3933],"extract":[3931],"xmlrpc_getposttitle":[3936],"xmlrpc_getpostcategory":[3937],"xmlrpc_removepostdata":[3938],"compact":[3940],"wp_update_post":[3942],"attach_uploads":[3947]},"used_by":[]},"wp_xmlrpc_server::blogger_deletePost":{"doc":"\/**\n * Remove a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True when post is deleted.\n *\/","file":"class-wp-xmlrpc-server.php","line":3962,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_deletePost'"],"uses":{"escape":[3963],"login":[3970],"get_post":[3975],"__":[3978,3981,3986],"current_user_can":[3980],"wp_delete_post":[3983]},"used_by":[]},"wp_xmlrpc_server::mw_newPost":{"doc":"\/**\n * Create a new post.\n *\n * The 'content_struct' argument must contain:\n * - title\n * - description\n * - mt_excerpt\n * - mt_text_more\n * - mt_keywords\n * - mt_tb_ping_urls\n * - categories\n *\n * Also, it can optionally contain:\n * - wp_slug\n * - wp_password\n * - wp_page_parent_id\n * - wp_page_order\n * - wp_author_id\n * - post_status | page_status - can be 'draft', 'private', 'publish', or 'pending'\n * - mt_allow_comments - can be 'open' or 'closed'\n * - mt_allow_pings - can be 'open' or 'closed'\n * - date_created_gmt\n * - dateCreated\n * - wp_post_thumbnail\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - content_struct\n * - publish\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":4032,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_mw_newPost'"],"uses":{"escape":[4033],"login":[4041],"__":[4055,4066,4070,4079,4084,4092,4121,4125,4128,4133,4275,4296],"current_user_can":[4083,4085,4120,4124],"get_post_type_object":[4083],"sanitize_key":[4090],"array_key_exists":[4091],"get_post_format_strings":[4091],"get_userdata":[4131],"get_option":[4171,4184,4189,4202,4214,4219],"is_numeric":[4162,4193],"implode":[4229],"is_array":[4228,4251],"rtrim":[4235],"getIso":[4235,4237],"get_date_from_gmt":[4240],"iso8601_to_datetime":[4240,4241],"current_time":[4243,4244],"get_cat_ID":[4253],"compact":[4258],"get_default_post_to_edit":[4260],"stick_post":[4265],"unstick_post":[4267],"set_custom_fields":[4271],"set_post_thumbnail":[4274],"add_enclosure_if_new":[4282],"attach_uploads":[4284],"set_post_format":[4289],"wp_insert_post":[4291],"get_error_message":[4293],"is_wp_error":[4292],"strval":[4300]},"used_by":[]},"sanitize_key":{"doc":"\/**\n * Sanitize a string key.\n *\n * Keys are used as internal identifiers. Lowercase alphanumeric characters, dashes and underscores are allowed.\n *\n * @since 3.0.0\n *\n * @param string $key String key\n * @return string Sanitized key\n *\/","file":"formatting.php","line":915,"missingDoc":false,"filters":["'sanitize_key'"],"uses":{"strtolower":[917],"preg_replace":[918]},"used_by":{"wp_xmlrpc_server::mw_newPost":[4090],"wp_xmlrpc_server::mw_editPost":[4388],"wp_update_nav_menu_item":[372,375,376],"has_post_format":[792],"set_post_format":[811],"register_post_status":[945],"register_post_type":[1234],"WP_Query::parse_query":[1654]}},"wp_xmlrpc_server::add_enclosure_if_new":{"doc":"","file":"class-wp-xmlrpc-server.php","line":4303,"missingDoc":true,"filters":[],"uses":{"get_post_custom":[4308],"add_post_meta":[4319],"is_array":[4304]},"used_by":[]},"get_post_custom":{"doc":"\/**\n * Retrieve post meta fields, based on post ID.\n *\n * The post meta fields are retrieved from the cache where possible,\n * so the function is optimized to be called more than once.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom\n *\n * @param int $post_id Post ID.\n * @return array\n *\/","file":"post.php","line":1850,"missingDoc":false,"filters":[],"uses":{"absint":[1851],"get_the_ID":[1853],"get_post_meta":[1855]},"used_by":{"wp_xmlrpc_server::add_enclosure_if_new":[4308],"wp_xmlrpc_server::mw_getPost":[4685],"rss_enclosure":[389],"atom_enclosure":[425],"post_custom":[725],"get_post_custom_keys":[1870],"get_post_custom_values":[1896],"get_enclosed":[3316]}},"wp_xmlrpc_server::attach_uploads":{"doc":"\/**\n * Attach upload to a post.\n *\n * @since 2.1.0\n *\n * @param int $post_ID Post ID.\n * @param string $post_content Post Content for attachment.\n *\/","file":"class-wp-xmlrpc-server.php","line":4331,"missingDoc":false,"filters":[],"uses":{"get_results":[4335],"update":[4339],"strpos":[4338],"is_array":[4336]},"used_by":[]},"wp_xmlrpc_server::mw_editPost":{"doc":"\/**\n * Edit a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":4352,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_mw_editPost'"],"uses":{"escape":[4354,4394],"login":[4362],"get_post":[4367],"__":[4373,4376,4380,4384,4390,4425,4429,4432,4535,4537,4573,4592],"current_user_can":[4375,4424,4428,4536,4534],"in_array":[4379],"sanitize_key":[4388],"array_key_exists":[4389],"get_post_format_strings":[4389],"extract":[4395],"get_option":[4448,4461,4477,4489],"is_numeric":[4439,4468],"get_cat_ID":[4506],"is_array":[4504,4546],"implode":[4547],"rtrim":[4553],"getIso":[4553,4555],"get_date_from_gmt":[4558],"iso8601_to_datetime":[4558,4559],"compact":[4566],"wp_update_post":[4568],"get_error_message":[4570],"is_wp_error":[4569],"stick_post":[4578],"unstick_post":[4580],"set_custom_fields":[4584],"delete_post_thumbnail":[4589],"set_post_thumbnail":[4591],"add_enclosure_if_new":[4599],"attach_uploads":[4601],"set_post_format":[4606]},"used_by":[]},"wp_xmlrpc_server::mw_getPost":{"doc":"\/**\n * Retrieve post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4621,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4623],"login":[4629],"get_post":[4632],"__":[4634,4637,4733],"current_user_can":[4636],"_convert_date":[4642,4644],"_convert_date_gmt":[4643,4645],"wp_get_post_categories":[4648],"get_cat_name":[4650],"wp_get_post_tags":[4653],"implode":[4657],"get_extended":[4662],"post_permalink":[4663],"get_userdata":[4666],"get_post_format":[4676],"is_sticky":[4681],"explode":[4688],"trim":[4689,4690,4691],"htmlspecialchars":[4689],"get_post_custom":[4685],"get_custom_fields":[4720],"get_post_thumbnail_id":[4729]},"used_by":[]},"wp_get_post_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * There is only one default for this function, called 'fields' and by default\n * is set to 'all'. There are other defaults that can be overridden in\n * {@link wp_get_object_terms()}.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.3.0\n *\n * @uses wp_get_object_terms() Gets the tags for returning. Args can be found here\n *\n * @param int $post_id Optional. The Post ID\n * @param array $args Optional. Overwrite the defaults\n * @return array List of post tags.\n *\/","file":"post.php","line":2585,"missingDoc":false,"filters":[],"uses":{"wp_get_post_terms":[2586]},"used_by":{"wp_xmlrpc_server::mw_getPost":[4653],"wp_xmlrpc_server::mw_getRecentPosts":[4783]}},"wp_xmlrpc_server::mw_getRecentPosts":{"doc":"\/**\n * Retrieve list of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4745,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4747],"absint":[4753],"login":[4757],"wp_get_recent_posts":[4762],"current_user_can":[4769],"_convert_date":[4772,4774],"_convert_date_gmt":[4773,4775],"wp_get_post_categories":[4778],"get_cat_name":[4780],"wp_get_post_tags":[4783],"implode":[4788],"get_extended":[4793],"post_permalink":[4794],"get_userdata":[4797],"get_post_format":[4807],"get_custom_fields":[4834],"count":[4840,4845],"get_post_thumbnail_id":[4841],"array_push":[4846]},"used_by":[]},"wp_xmlrpc_server::mw_getCategories":{"doc":"\/**\n * Retrieve the list of categories on a given blog.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4860,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4862],"login":[4868],"__":[4872],"current_user_can":[4871],"esc_html":[4885,4886],"get_category_link":[4885],"get_category_feed_link":[4886],"get_categories":[4878]},"used_by":[]},"get_category_feed_link":{"doc":"\/**\n * Retrieve the feed link for a category.\n *\n * Returns a link to the feed for all posts in a given category. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int $cat_id ID of a category.\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the category specified by $cat_id.\n*\/","file":"link-template.php","line":571,"missingDoc":false,"filters":[],"uses":{"get_term_feed_link":[572]},"used_by":{"wp_xmlrpc_server::mw_getCategories":[4886],"get_category_rss_link":[1178],"feed_links_extra":[1652]}},"wp_xmlrpc_server::mw_newMediaObject":{"doc":"\/**\n * Uploads a file, following your settings.\n *\n * Adapted from a patch by Johann Richard.\n *\n * @link http:\/\/mycvs.org\/archives\/2004\/06\/30\/file-upload-to-wordpress-in-ecto\/\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4907,"missingDoc":false,"filters":["'xmlrpc_call'","'pre_upload_error'","'xmlrpc_call_success_mw_newMediaObject'","'wp_handle_upload'"],"uses":{"escape":[4911,4912],"sanitize_file_name":[4915],"login":[4919],"__":[4925,4952,4961],"current_user_can":[4924,4960],"get_row":[4934],"wp_delete_attachment":[4942],"preg_replace":[4946],"wp_upload_bits":[4950],"sprintf":[4952],"wp_insert_attachment":[4973],"wp_update_attachment_metadata":[4974],"wp_generate_attachment_metadata":[4974],"strval":[4979]},"used_by":[]},"sanitize_file_name":{"doc":"\/**\n * Sanitizes a filename replacing whitespace with dashes\n *\n * Removes special characters that are illegal in filenames on certain\n * operating systems and special characters requiring special escaping\n * to manipulate at the command line. Replaces spaces and consecutive\n * dashes with a single dash. Trim period, dash and underscore from beginning\n * and end of filename.\n *\n * @since 2.1.0\n *\n * @param string $filename The filename to be sanitized\n * @return string The sanitized filename\n *\/","file":"formatting.php","line":827,"missingDoc":false,"filters":["'sanitize_file_name_chars'","'sanitize_file_name'","'sanitize_file_name'"],"uses":{"chr":[829],"str_replace":[831],"preg_replace":[832],"trim":[833],"explode":[836],"count":[839],"array_shift":[843],"array_pop":[844],"get_allowed_mime_types":[845],"preg_match":[856,852]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4915],"wp_unique_filename":[1649]}},"wp_delete_attachment":{"doc":"\/**\n * Trashes or deletes an attachment.\n *\n * When an attachment is permanently deleted, the file will also be removed.\n * Deletion removes all post meta fields, taxonomy, comments, etc. associated\n * with the attachment (except the main post).\n *\n * The attachment is moved to the trash instead of permanently deleted unless trash\n * for media is disabled, item is already in the trash, or $force_delete is true.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses do_action() Calls 'delete_attachment' hook on Attachment ID.\n *\n * @param int $post_id Attachment ID.\n * @param bool $force_delete Whether to bypass trash and force deletion. Defaults to false.\n * @return mixed False on failure. Post data on success.\n *\/","file":"post.php","line":4076,"missingDoc":false,"filters":["'delete_attachment'","'delete_post'","'deleted_post'","'wp_delete_file'","'wp_delete_file'","'wp_delete_file'","'wp_delete_file'"],"uses":{"get_row":[4079,4127],"prepare":[4079,4111,4115,4127],"wp_trash_post":[4086],"delete_post_meta":[4088,4089],"wp_get_attachment_metadata":[4091],"get_post_meta":[4092],"get_attached_file":[4093],"image_get_intermediate_size":[4097],"get_intermediate_image_sizes":[4096],"delete_transient":[4102],"is_multisite":[4101],"wp_delete_object_term_relationships":[4106,4107],"get_object_taxonomies":[4107],"delete_metadata":[4109],"get_col":[4111,4115],"wp_delete_comment":[4113],"delete_metadata_by_mid":[4117],"delete":[4120],"wp_upload_dir":[4123],"str_replace":[4128],"basename":[4128],"unlink":[4130,4137,4144,4151],"path_join":[4130,4137,4142,4144],"dirname":[4142],"is_array":[4140],"clean_post_cache":[4153]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4942],"wp_delete_post":[2315]}},"wp_upload_bits":{"doc":"\/**\n * Create a file in the upload folder with given content.\n *\n * If there is an error, then the key 'error' will exist with the error message.\n * If success, then the key 'file' will have the unique file path, the 'url' key\n * will have the link to the new file. and the 'error' key will be set to false.\n *\n * This function will not move an uploaded file to the upload folder. It will\n * create a new file with the content in $bits parameter. If you move the upload\n * file, read the content of the uploaded file, and then you can give the\n * filename and content to this function, which will add it to the upload\n * folder.\n *\n * The permissions will be set on the new file automatically by this function.\n *\n * @since 2.0.0\n *\n * @param string $name\n * @param null $deprecated Never used. Set to null.\n * @param mixed $bits File content\n * @param string $time Optional. Time formatted in 'yyyy\/mm'.\n * @return array\n *\/","file":"functions.php","line":1715,"missingDoc":false,"filters":["'wp_upload_bits'"],"uses":{"_deprecated_argument":[1717],"__":[1720,1724,1746,1752],"wp_check_filetype":[1722],"current_user_can":[1723],"wp_upload_dir":[1726],"is_array":[1732],"wp_unique_filename":[1737],"str_replace":[1742],"basename":[1744],"strpos":[1741],"sprintf":[1746,1752],"wp_mkdir_p":[1740],"dirname":[1740,1759],"fopen":[1750],"fwrite":[1754],"fclose":[1755],"clearstatcache":[1756,1763],"stat":[1759],"chmod":[1762]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4950]}},"wp_insert_attachment":{"doc":"\/**\n * Insert an attachment.\n *\n * If you set the 'ID' in the $object parameter, it will mean that you are\n * updating and attempt to update the attachment. You can also set the\n * attachment name or title by setting the key 'post_name' or 'post_title'.\n *\n * You can set the dates for the attachment manually by setting the 'post_date'\n * and 'post_date_gmt' keys' values.\n *\n * By default, the comments will use the default settings for whether the\n * comments are allowed. You can close them manually or keep them open by\n * setting the value for the 'comment_status' key.\n *\n * The $object parameter can have the following:\n * 'post_status' - Default is 'draft'. Can not be overridden, set the same as parent post.\n * 'post_type' - Default is 'post', will be set to attachment. Can not override.\n * 'post_author' - Default is current user ID. The ID of the user, who added the attachment.\n * 'ping_status' - Default is the value in default ping status option. Whether the attachment\n * can accept pings.\n * 'post_parent' - Default is 0. Can use $parent parameter or set this for the post it belongs\n * to, if any.\n * 'menu_order' - Default is 0. The order it is displayed.\n * 'to_ping' - Whether to ping.\n * 'pinged' - Default is empty string.\n * 'post_password' - Default is empty string. The password to access the attachment.\n * 'guid' - Global Unique ID for referencing the attachment.\n * 'post_content_filtered' - Attachment post content filtered.\n * 'post_excerpt' - Attachment excerpt.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses $user_ID\n * @uses do_action() Calls 'edit_attachment' on $post_ID if this is an update.\n * @uses do_action() Calls 'add_attachment' on $post_ID if this is not an update.\n *\n * @param string|array $object Arguments to override defaults.\n * @param string $file Optional filename.\n * @param int $parent Parent post ID.\n * @return int Attachment ID.\n *\/","file":"post.php","line":3907,"missingDoc":false,"filters":["'edit_attachment'","'add_attachment'"],"uses":{"get_option":[3911,3974,3977],"wp_parse_args":[3915],"sanitize_post":[3921],"extract":[3924],"in_array":[3931],"array_filter":[3935,4035],"count":[3938],"is_array":[3938,4034],"sanitize_title":[3953,3955,4020],"wp_unique_post_slug":[3958],"current_time":[3961,3963],"preg_replace":[3980],"compact":[4001,4021],"stripslashes_deep":[4002],"update":[4005,4021],"get_var":[4010],"prepare":[4010],"insert":[4015],"wp_set_post_categories":[4025],"is_object_in_taxonomy":[4024,4027],"wp_set_post_tags":[4028],"get_taxonomy":[4033],"wp_set_post_terms":[4037],"current_user_can":[4036],"update_attached_file":[4042],"clean_post_cache":[4044],"add_post_meta":[4047]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4973],"wp_update_post":[3004]}},"wp_update_attachment_metadata":{"doc":"\/**\n * Update metadata for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @param array $data Attachment data.\n * @return int\n *\/","file":"post.php","line":4189,"missingDoc":false,"filters":["'wp_update_attachment_metadata'"],"uses":{"get_post":[4191],"update_post_meta":[4195],"delete_post_meta":[4197]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4974]}},"wp_xmlrpc_server::mt_getRecentPostTitles":{"doc":"\/**\n * Retrieve the post titles of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4999,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5001],"absint":[5007],"login":[5011],"wp_get_recent_posts":[5016],"__":[5019],"current_user_can":[5026],"_convert_date":[5029],"_convert_date_gmt":[5030],"count":[5044],"array_push":[5045]},"used_by":[]},"wp_xmlrpc_server::mt_getCategoryList":{"doc":"\/**\n * Retrieve list of all categories on blog.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5059,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5061],"login":[5067],"__":[5071],"current_user_can":[5070],"get_categories":[5077]},"used_by":[]},"wp_xmlrpc_server::mt_getPostCategories":{"doc":"\/**\n * Retrieve post categories.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5097,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5099],"login":[5105],"__":[5109,5112],"get_post":[5108],"current_user_can":[5111],"wp_get_post_categories":[5117],"intval":[5117],"get_cat_name":[5122]},"used_by":[]},"wp_xmlrpc_server::mt_setPostCategories":{"doc":"\/**\n * Sets categories for a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":5140,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5142],"login":[5149],"__":[5155,5158],"get_post":[5154],"current_user_can":[5157],"wp_set_post_categories":[5165]},"used_by":[]},"wp_set_post_categories":{"doc":"\/**\n * Set categories for a post.\n *\n * If the post categories parameter is not set, then the default category is\n * going used.\n *\n * @since 2.1.0\n *\n * @param int $post_ID Post ID.\n * @param array $post_categories Optional. List of categories.\n * @return bool|mixed\n *\/","file":"post.php","line":3230,"missingDoc":false,"filters":[],"uses":{"get_post_type":[3232],"get_post_status":[3233],"get_option":[3237],"count":[3240],"reset":[3240],"is_array":[3235],"wp_set_post_terms":[3244]},"used_by":{"wp_xmlrpc_server::mt_setPostCategories":[5165],"wp_set_post_cats":[766],"wp_insert_post":[2904],"wp_insert_attachment":[4025]}},"wp_xmlrpc_server::mt_supportedMethods":{"doc":"\/**\n * Retrieve an array of methods supported by this server.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5178,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":[],"used_by":[]},"wp_xmlrpc_server::mt_supportedTextFilters":{"doc":"\/**\n * Retrieve an empty array because we don't support per-post text filters.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n *\/","file":"class-wp-xmlrpc-server.php","line":5197,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_text_filters'"],"uses":[],"used_by":[]},"wp_xmlrpc_server::mt_getTrackbackPings":{"doc":"\/**\n * Retrieve trackbacks sent to a given post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return mixed\n *\/","file":"class-wp-xmlrpc-server.php","line":5210,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"intval":[5214],"get_post":[5218],"__":[5221],"get_results":[5223],"prepare":[5223],"substr":[5232],"strpos":[5232]},"used_by":[]},"wp_xmlrpc_server::mt_publishPost":{"doc":"\/**\n * Sets a post's publish status to 'publish'.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":5252,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5254,5277],"login":[5260],"get_post":[5265],"__":[5267,5270],"current_user_can":[5269,5269],"wp_get_post_categories":[5275],"wp_update_post":[5279]},"used_by":[]},"wp_xmlrpc_server::pingback_ping":{"doc":"\/**\n * Retrieves a pingback and registers it.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5296,"missingDoc":false,"filters":["'xmlrpc_call'","'pre_remote_source'","'pingback_post'"],"uses":{"escape":[5301,5434,5439,5442],"str_replace":[5308,5309,5310,5313,5386,5418,5431],"strpos":[5313,5402],"get_option":[5313],"__":[5315,5355,5362,5365,5369,5373,5381,5393,5429,5450],"parse_url":[5320],"preg_match":[5323,5328,5339,5390,5403],"explode":[5325,5330,5397],"preg_replace":[5341,5345,5387,5388,5411,5422],"is_string":[5343],"prepare":[5346,5372],"like_escape":[5346],"get_var":[5347],"intval":[5335],"url_to_postid":[5321,5364],"get_post":[5359],"pings_open":[5368],"get_results":[5372],"sleep":[5376],"wp_remote_fopen":[5379],"strip_tags":[5395,5419,5423],"preg_quote":[5399,5421],"substr":[5415],"strlen":[5414],"trim":[5420],"esc_html":[5433],"compact":[5445],"wp_new_comment":[5447],"sprintf":[5450]},"used_by":[]},"wp_remote_fopen":{"doc":"\/**\n * HTTP request for URI to retrieve content.\n *\n * @since 1.5.1\n * @uses wp_remote_get()\n *\n * @param string $uri URI\/URL of web page to retrieve.\n * @return bool|string HTTP content. False on failure.\n *\/","file":"functions.php","line":753,"missingDoc":false,"filters":[],"uses":{"parse_url":[754],"is_array":[756],"wp_remote_get":[762],"is_wp_error":[764],"wp_remote_retrieve_body":[767]},"used_by":{"wp_xmlrpc_server::pingback_ping":[5379]}},"wp_xmlrpc_server::pingback_extensions_getPingbacks":{"doc":"\/**\n * Retrieve array of URLs that pingbacked the given URL.\n *\n * Specs on http:\/\/www.aquarionics.com\/misc\/archives\/blogite\/0198.html\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5463,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5469],"url_to_postid":[5473],"__":[5476,5483],"get_post":[5479],"get_results":[5486],"prepare":[5486]},"used_by":[]},"WP::add_query_var":{"doc":"\/**\n * Add name to list of public query variables.\n *\n * @since 2.1.0\n *\n * @param string $qv Query variable name.\n *\/","file":"class-wp.php","line":93,"missingDoc":false,"filters":[],"uses":{"in_array":[94]},"used_by":[]},"WP::set_query_var":{"doc":"\/**\n * Set the value of a query variable.\n *\n * @since 2.3.0\n *\n * @param string $key Query variable name.\n * @param mixed $value Query variable value.\n *\/","file":"class-wp.php","line":106,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP::parse_request":{"doc":"\/**\n * Parse request to find correct WordPress query.\n *\n * Sets up the query variables based on the request. There are also many\n * filters and actions that can be used to further manipulate the result.\n *\n * @since 2.0.0\n *\n * @param array|string $extra_query_vars Set the extra query variables.\n *\/","file":"class-wp.php","line":120,"missingDoc":false,"filters":["'do_parse_request'","'query_vars'","'request'","'parse_request'"],"uses":{"parse_str":[132,230],"is_array":[129,265,290],"wp_rewrite_rules":[137],"explode":[148,151],"str_replace":[149,165,285],"parse_url":[154],"home_url":[154],"trim":[159,166,168,169,171,172,174],"preg_replace":[167,170,173,222],"preg_match":[178,207,204,205],"strpos":[201,241,238],"get_page_by_path":[209],"urldecode":[205],"addslashes":[225],"is_object":[269],"get_post_types":[289],"in_array":[291],"array_intersect":[294]},"used_by":[]},"get_page_by_path":{"doc":"\/**\n * Retrieves a page given its path.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $page_path Page path\n * @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.\n * @param string $post_type Optional. Post type. Default page.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3452,"missingDoc":false,"filters":[],"uses":{"rawurlencode":[3455],"urldecode":[3455],"str_replace":[3456,3457],"explode":[3458],"trim":[3458],"array_map":[3459,3460],"implode":[3462],"escape_by_ref":[3464],"get_results":[3465],"array_reverse":[3467],"count":[3482],"get_post":[3491]},"used_by":{"WP::parse_request":[209],"WP_Query::parse_query":[1629],"WP_Query::get_posts":[2117,2123],"url_to_postid":[348]}},"WP::send_headers":{"doc":"\/**\n * Send additional HTTP headers for caching, content type, etc.\n *\n * Sets the X-Pingback header, 404 status (if 404), Content-type. If showing\n * a feed, it will also send last-modified, etag, and 304 status if needed.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":319,"missingDoc":false,"filters":["'wp_headers'","'send_headers'"],"uses":{"get_bloginfo":[320],"array_merge":[325,330],"wp_get_nocache_headers":[325,330],"is_user_logged_in":[324,329],"get_option":[331,331,336,336],"in_array":[332],"mysql2date":[350,352],"get_lastcommentmodified":[350],"get_lastpostmodified":[352],"md5":[353],"stripslashes":[359,359],"trim":[362],"strtotime":[364,367],"status_header":[380],"header_remove":[388],"stripos":[393],"headers_list":[392],"function_exists":[387],"header":[402]},"used_by":[]},"wp_get_nocache_headers":{"doc":"\/**\n * Gets the header information to prevent caching.\n *\n * The several different headers cover the different ways cache prevention is handled\n * by different browsers\n *\n * @since 2.8.0\n *\n * @uses apply_filters()\n * @return array The associative array of header names and field values.\n *\/","file":"functions.php","line":902,"missingDoc":false,"filters":["'nocache_headers'"],"uses":{"function_exists":[909]},"used_by":{"WP::send_headers":[325,330],"nocache_headers":[926]}},"get_lastcommentmodified":{"doc":"\/**\n * The date the last comment was modified.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param string $timezone Which timezone to use in reference to 'gmt', 'blog',\n *\t\tor 'server' locations.\n * @return string Last comment modified date.\n *\/","file":"comment.php","line":440,"missingDoc":false,"filters":[],"uses":{"date":[447],"strtolower":[449],"get_var":[451,454,457],"prepare":[457]},"used_by":{"WP::send_headers":[350],"__main":[27,31]}},"get_lastpostmodified":{"doc":"\/**\n * Retrieve last post modified date depending on timezone.\n *\n * The server timezone is the default and is the difference between GMT and\n * server time. The 'blog' value is just when the last post was modified. The\n * 'gmt' is when the last post was modified in GMT time.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'get_lastpostmodified' filter\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @return string The date the post was last modified.\n *\/","file":"post.php","line":4548,"missingDoc":false,"filters":["'get_lastpostmodified'"],"uses":{"_get_last_post_time":[4549],"get_lastpostdate":[4551]},"used_by":{"WP::send_headers":[352],"__main":[22,25,17,28]}},"status_header":{"doc":"\/**\n * Set HTTP status header.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'status_header' on status header string, HTTP\n *\t\tHTTP code, HTTP code description, and protocol string as separate\n *\t\tparameters.\n *\n * @param int $header HTTP status code\n * @return unknown\n *\/","file":"functions.php","line":875,"missingDoc":false,"filters":["'status_header'"],"uses":{"get_status_header_desc":[876],"function_exists":[885],"header":[888]},"used_by":{"WP::send_headers":[380],"WP::handle_404":[508,517,523,530],"_default_wp_die_handler":[2106],"dead_db":[2761],"send_origin_headers":[308],"__main":[22,28,77],"wp_redirect":[875]}},"WP::build_query_string":{"doc":"\/**\n * Sets the query string property based off of the query variable property.\n *\n * The 'query_string' filter is deprecated, but still works. Plugins should\n * use the 'request' filter instead.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":418,"missingDoc":false,"filters":["'query_string'"],"uses":{"strlen":[422],"is_scalar":[423],"rawurlencode":[425],"array_keys":[420],"parse_str":[432],"has_filter":[430]},"used_by":[]},"WP::register_globals":{"doc":"\/**\n * Set up the WordPress Globals.\n *\n * The query_vars property will be extracted to the GLOBALS. So care should\n * be taken when naming global variables that might interfere with the\n * WordPress environment.\n *\n * @global string $query_string Query string for the loop.\n * @global int $more Only set, if single page or post.\n * @global int $single If single page or post. Only set, if single page or post.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":449,"missingDoc":false,"filters":[],"uses":{"is_single":[461],"is_page":[461]},"used_by":[]},"WP::init":{"doc":"\/**\n * Set up the current user.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":472,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[473]},"used_by":[]},"WP::query_posts":{"doc":"\/**\n * Set up the Loop based on the query variables.\n *\n * @uses WP::$query_vars\n * @since 2.0.0\n *\/","file":"class-wp.php","line":482,"missingDoc":false,"filters":[],"uses":{"build_query_string":[484],"query":[485]},"used_by":[]},"WP::handle_404":{"doc":"\/**\n * Set the Headers for 404, if nothing is found for requested URL.\n *\n * Issue a 404 if a request doesn't match any posts and doesn't match\n * any object (e.g. an existing-but-empty category, tag, author) and a 404 was not already\n * issued, and if the request was not a search or the homepage.\n *\n * Otherwise, issue a 200.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":499,"missingDoc":false,"filters":[],"uses":{"is_404":[503],"status_header":[508,517,523,530],"is_admin":[507],"is_robots":[507],"is_tag":[516],"is_category":[516],"is_tax":[516],"is_author":[516],"is_post_type_archive":[516],"get_queried_object":[516],"is_home":[522],"is_search":[522],"is_paged":[513],"set_404":[529],"nocache_headers":[531]},"used_by":[]},"is_post_type_archive":{"doc":"\/**\n * Is the query for an existing post type archive page?\n *\n * @see WP_Query::is_post_type_archive()\n * @since 3.1.0\n * @uses $wp_query\n *\n * @param mixed $post_types Optional. Post type or array of posts types to check against.\n * @return bool\n *\/","file":"query.php","line":160,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[164],"__":[164],"is_post_type_archive":[168]},"used_by":{"WP::handle_404":[516],"wp_title":[557],"post_type_archive_title":[654],"feed_links_extra":[1666],"get_body_class":[454,543],"is_post_type_archive":[168]}},"is_paged":{"doc":"\/**\n * Is the query for paged result and not for the first page?\n *\n * @see WP_Query::is_paged()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":508,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[512],"__":[512],"is_paged":[516]},"used_by":{"WP::handle_404":[513],"get_post_class":[345],"get_body_class":[420],"wp_page_menu":[903],"is_paged":[516],"__main":[42,27]}},"nocache_headers":{"doc":"\/**\n * Sets the headers to prevent caching for the different browsers.\n *\n * Different browsers support different nocache headers, so several headers must\n * be sent so that all of them get the point that no caching should occur.\n *\n * @since 2.0.0\n * @uses wp_get_nocache_headers()\n *\/","file":"functions.php","line":925,"missingDoc":false,"filters":[],"uses":{"wp_get_nocache_headers":[926],"header_remove":[932],"stripos":[937],"headers_list":[936],"function_exists":[931],"header":[945]},"used_by":{"WP::handle_404":[531],"_default_wp_die_handler":[2107],"dead_db":[2762],"auth_redirect":[783]}},"WP::main":{"doc":"\/**\n * Sets up all of the variables required by the WordPress environment.\n *\n * The action 'wp' has one parameter that references the WP object. It\n * allows for accessing the properties and methods to further manipulate the\n * object.\n *\n * @since 2.0.0\n *\n * @param string|array $query_args Passed to {@link parse_request()}\n *\/","file":"class-wp.php","line":545,"missingDoc":false,"filters":["'wp'"],"uses":{"init":[546],"parse_request":[547],"send_headers":[548],"query_posts":[549],"handle_404":[550],"register_globals":[551]},"used_by":[]},"query_posts":{"doc":"\/**\n * Set up The Loop with query parameters.\n *\n * This will override the current WordPress Loop and shouldn't be used more than\n * once. This must not be used within the WordPress Loop.\n *\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string $query\n * @return array List of posts\n *\/","file":"query.php","line":89,"missingDoc":false,"filters":[],"uses":{"query":[91]},"used_by":{"WP::main":[549]}},"WP_MatchesMapRegex::WP_MatchesMapRegex":{"doc":"\/**\n * constructor\n *\n * @param string $subject subject if regex\n * @param array $matches data to use in map\n * @return self\n *\/","file":"class-wp.php","line":601,"missingDoc":false,"filters":[],"uses":{"_map":[604]},"used_by":[]},"WP_MatchesMapRegex::apply":{"doc":"\/**\n * Substitute substring matches in subject.\n *\n * static helper function to ease use\n *\n * @access public\n * @param string $subject subject\n * @param array $matches data used for substitution\n * @return string\n *\/","file":"class-wp.php","line":617,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_MatchesMapRegex::_map":{"doc":"\/**\n * do the actual mapping\n *\n * @access private\n * @return string\n *\/","file":"class-wp.php","line":628,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[630]},"used_by":[]},"WP_MatchesMapRegex::callback":{"doc":"\/**\n * preg_replace_callback hook\n *\n * @access public\n * @param array $matches preg_replace regexp matches\n * @return string\n *\/","file":"class-wp.php","line":640,"missingDoc":false,"filters":[],"uses":{"intval":[641],"substr":[641],"urlencode":[642]},"used_by":[]},"WP_Dependencies::do_items":{"doc":"\/**\n * Do the dependencies\n *\n * Process the items passed to it or the queue. Processes all dependencies.\n *\n * @param mixed $handles (optional) items to be processed. (void) processes queue, (string) process that item, (array of strings) process those items\n * @return array Items that have been processed\n *\/","file":"class.wp-dependencies.php","line":36,"missingDoc":false,"filters":[],"uses":{"all_deps":[39],"do_item":[49],"in_array":[42]},"used_by":[]},"WP_Dependencies::do_item":{"doc":"","file":"class.wp-dependencies.php","line":59,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::all_deps":{"doc":"\/**\n * Determines dependencies\n *\n * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops.\n *\n *\n * @param mixed $handles Accepts (string) dep name or (array of strings) dep names\n * @param bool $recursion Used internally when function calls itself\n *\/","file":"class.wp-dependencies.php","line":72,"missingDoc":false,"filters":[],"uses":{"explode":[77],"in_array":[79,81],"set_group":[84],"array_diff":[92],"array_keys":[92],"all_deps":[94]},"used_by":[]},"WP_Dependencies::add":{"doc":"\/**\n * Adds item\n *\n * Adds the item only if no item of that name already exists\n *\n * @param string $handle Script name\n * @param string $src Script url\n * @param array $deps (optional) Array of script names on which this script depends\n * @param string $ver (optional) Script version (used for cache busting)\n * @return array Hierarchical array of dependencies\n *\/","file":"class.wp-dependencies.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::add_data":{"doc":"\/**\n * Adds extra data\n *\n * Adds data only if script has already been added.\n *\n * @param string $handle Script name\n * @param string $key\n * @param mixed $value\n * @return bool success\n *\/","file":"class.wp-dependencies.php","line":144,"missingDoc":false,"filters":[],"uses":{"add_data":[148]},"used_by":[]},"WP_Dependencies::get_data":{"doc":"\/**\n * Get extra data\n *\n * Gets data associated with a certain handle.\n *\n * @since WP 3.3\n *\n * @param string $handle Script name\n * @param string $key\n * @return mixed\n *\/","file":"class.wp-dependencies.php","line":162,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::remove":{"doc":"","file":"class.wp-dependencies.php","line":172,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::enqueue":{"doc":"","file":"class.wp-dependencies.php","line":177,"missingDoc":true,"filters":[],"uses":{"explode":[179],"in_array":[180]},"used_by":[]},"WP_Dependencies::dequeue":{"doc":"","file":"class.wp-dependencies.php","line":188,"missingDoc":true,"filters":[],"uses":{"explode":[190],"array_search":[191]},"used_by":[]},"WP_Dependencies::query":{"doc":"","file":"class.wp-dependencies.php","line":200,"missingDoc":true,"filters":[],"uses":{"in_array":[210,214,218]},"used_by":[]},"WP_Dependencies::set_group":{"doc":"","file":"class.wp-dependencies.php","line":223,"missingDoc":true,"filters":[],"uses":{"min":[227]},"used_by":[]},"_WP_Dependency::__construct":{"doc":"","file":"class.wp-dependencies.php","line":249,"missingDoc":true,"filters":[],"uses":{"func_get_args":[250],"is_array":[251]},"used_by":[]},"_WP_Dependency::add_data":{"doc":"","file":"class.wp-dependencies.php","line":255,"missingDoc":true,"filters":[],"uses":{"is_scalar":[256]},"used_by":[]},"WP_Scripts::__construct":{"doc":"","file":"class.wp-scripts.php","line":33,"missingDoc":true,"filters":[],"uses":{"init":[34],"add_action":[35]},"used_by":[]},"WP_Scripts::init":{"doc":"","file":"class.wp-scripts.php","line":38,"missingDoc":true,"filters":["'wp_default_scripts'"],"uses":[],"used_by":[]},"WP_Scripts::print_scripts":{"doc":"\/**\n * Prints scripts\n *\n * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies.\n *\n * @param mixed $handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts.\n * @param int $group (optional) If scripts were queued in groups prints this group number.\n * @return array Scripts that have been printed\n *\/","file":"class.wp-scripts.php","line":51,"missingDoc":false,"filters":[],"uses":{"do_items":[52]},"used_by":[]},"WP_Scripts::print_scripts_l10n":{"doc":"","file":"class.wp-scripts.php","line":56,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[57],"print_extra_script":[58]},"used_by":[]},"WP_Scripts::print_extra_script":{"doc":"","file":"class.wp-scripts.php","line":61,"missingDoc":true,"filters":[],"uses":{"get_data":[62]},"used_by":[]},"WP_Scripts::do_item":{"doc":"","file":"class.wp-scripts.php","line":77,"missingDoc":true,"filters":["'script_loader_src'","'script_loader_src'"],"uses":{"array_diff":[87],"in_array":[86],"print_extra_script":[102,112],"in_default_dir":[101],"preg_match":[113],"strpos":[113],"add_query_arg":[118],"esc_url":[120]},"used_by":[]},"WP_Scripts::localize":{"doc":"\/**\n * Localizes a script\n *\n * Localizes only if the script has already been added\n *\/","file":"class.wp-scripts.php","line":135,"missingDoc":false,"filters":[],"uses":{"is_array":[136],"is_scalar":[142],"html_entity_decode":[145],"json_encode":[148],"get_data":[153],"add_data":[158]},"used_by":[]},"WP_Scripts::set_group":{"doc":"","file":"class.wp-scripts.php","line":161,"missingDoc":true,"filters":[],"uses":{"get_data":[166]},"used_by":[]},"WP_Scripts::all_deps":{"doc":"","file":"class.wp-scripts.php","line":174,"missingDoc":true,"filters":["'print_scripts_array'"],"uses":[],"used_by":[]},"WP_Scripts::do_head_items":{"doc":"","file":"class.wp-scripts.php","line":181,"missingDoc":true,"filters":[],"uses":{"do_items":[182]},"used_by":[]},"WP_Scripts::do_footer_items":{"doc":"","file":"class.wp-scripts.php","line":186,"missingDoc":true,"filters":[],"uses":{"do_items":[187]},"used_by":[]},"WP_Scripts::in_default_dir":{"doc":"","file":"class.wp-scripts.php","line":191,"missingDoc":true,"filters":[],"uses":{"strpos":[195,199]},"used_by":[]},"WP_Scripts::reset":{"doc":"","file":"class.wp-scripts.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Styles::__construct":{"doc":"","file":"class.wp-styles.php","line":31,"missingDoc":true,"filters":["'wp_default_styles'"],"uses":[],"used_by":[]},"WP_Styles::do_item":{"doc":"","file":"class.wp-styles.php","line":35,"missingDoc":true,"filters":["'style_loader_tag'","'style_loader_tag'"],"uses":{"get_data":[53],"in_default_dir":[49],"esc_attr":[60,66],"_css_href":[64,78,80],"str_replace":[78],"is_bool":[76],"print_inline_style":[90,93]},"used_by":[]},"WP_Styles::add_inline_style":{"doc":"","file":"class.wp-styles.php","line":99,"missingDoc":true,"filters":[],"uses":{"get_data":[103],"add_data":[109]},"used_by":[]},"WP_Styles::print_inline_style":{"doc":"","file":"class.wp-styles.php","line":112,"missingDoc":true,"filters":[],"uses":{"get_data":[113],"implode":[118]},"used_by":[]},"WP_Styles::all_deps":{"doc":"","file":"class.wp-styles.php","line":130,"missingDoc":true,"filters":["'print_styles_array'"],"uses":[],"used_by":[]},"WP_Styles::_css_href":{"doc":"","file":"class.wp-styles.php","line":137,"missingDoc":true,"filters":["'style_loader_src'"],"uses":{"is_bool":[138],"preg_match":[138],"strpos":[138],"add_query_arg":[143],"esc_url":[145]},"used_by":[]},"WP_Styles::in_default_dir":{"doc":"","file":"class.wp-styles.php","line":148,"missingDoc":true,"filters":[],"uses":{"strpos":[153]},"used_by":[]},"WP_Styles::do_footer_items":{"doc":"","file":"class.wp-styles.php","line":159,"missingDoc":true,"filters":[],"uses":{"do_items":[160]},"used_by":[]},"WP_Styles::reset":{"doc":"","file":"class.wp-styles.php","line":164,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"get_comment_author":{"doc":"\/**\n * Retrieve the author of the current comment.\n *\n * If the comment has an empty comment_author field, then 'Anonymous' person is\n * assumed.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author' hook on the comment author\n *\n * @param int $comment_ID The ID of the comment for which to retrieve the author. Optional.\n * @return string The comment author\n *\/","file":"comment-template.php","line":23,"missingDoc":false,"filters":["'get_comment_author'"],"uses":{"get_comment":[24],"get_userdata":[27],"__":[30]},"used_by":{"comment_author":[47],"get_comment_author_link":[150],"comment_form_title":[1205,1205],"get_comment_author_rss":[257]}},"comment_author":{"doc":"\/**\n * Displays the author of the current comment.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'comment_author' on comment author before displaying\n *\n * @param int $comment_ID The ID of the comment for which to print the author. Optional.\n *\/","file":"comment-template.php","line":46,"missingDoc":false,"filters":["'comment_author'"],"uses":{"get_comment_author":[47]},"used_by":[]},"get_comment_author_email":{"doc":"\/**\n * Retrieve the email of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comment_author_email' hook on the comment author email\n * @uses $comment\n *\n * @param int $comment_ID The ID of the comment for which to get the author's email. Optional.\n * @return string The current comment author's email\n *\/","file":"comment-template.php","line":61,"missingDoc":false,"filters":["'get_comment_author_email'"],"uses":{"get_comment":[62]},"used_by":{"comment_author_email":[81]}},"comment_author_email":{"doc":"\/**\n * Display the email of the author of the current global $comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'author_email' hook on the author email\n *\n * @param int $comment_ID The ID of the comment for which to print the author's email. Optional.\n *\/","file":"comment-template.php","line":80,"missingDoc":false,"filters":["'author_email'"],"uses":{"get_comment_author_email":[81]},"used_by":[]},"comment_author_email_link":{"doc":"\/**\n * Display the html email link to the author of the current comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'comment_email' hook for the display of the comment author's email\n * @uses get_comment_author_email_link() For generating the link\n * @global object $comment The current Comment row object\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":102,"missingDoc":false,"filters":[],"uses":{"get_comment_author_email_link":[103]},"used_by":[]},"get_comment_author_email_link":{"doc":"\/**\n * Return the html email link to the author of the current comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 2.7\n * @uses apply_filters() Calls 'comment_email' hook for the display of the comment author's email\n * @global object $comment The current Comment row object\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":124,"missingDoc":false,"filters":["'comment_email'"],"uses":[],"used_by":{"comment_author_email_link":[103]}},"get_comment_author_link":{"doc":"\/**\n * Retrieve the html link to the url of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author_link' hook on the complete link HTML or author\n *\n * @param int $comment_ID The ID of the comment for which to get the author's link. Optional.\n * @return string Comment Author name or HTML link for author's URL\n *\/","file":"comment-template.php","line":147,"missingDoc":false,"filters":["'get_comment_author_link'"],"uses":{"get_comment_author_url":[149],"get_comment_author":[150]},"used_by":{"comment_author_link":[168],"Walker_Comment::start_el":[1354],"WP_Widget_Recent_Comments::widget":[694],"__main":[56]}},"get_comment_author_url":{"doc":"\/**\n * Retrieve the url of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author_url' hook on the comment author's URL\n *\n * @param int $comment_ID The ID of the comment for which to get the author's URL. Optional.\n * @return string\n *\/","file":"comment-template.php","line":207,"missingDoc":false,"filters":["'get_comment_author_url'"],"uses":{"get_comment":[208],"esc_url":[210]},"used_by":{"get_comment_author_link":[149],"comment_author_url":[224],"get_comment_author_url_link":[246],"__main":[61,61]}},"comment_author_link":{"doc":"\/**\n * Display the html link to the url of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_link() Echoes result\n *\n * @param int $comment_ID The ID of the comment for which to print the author's link. Optional.\n *\/","file":"comment-template.php","line":167,"missingDoc":false,"filters":[],"uses":{"get_comment_author_link":[168]},"used_by":[]},"get_comment_author_IP":{"doc":"\/**\n * Retrieve the IP address of the author of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters()\n *\n * @param int $comment_ID The ID of the comment for which to get the author's IP address. Optional.\n * @return string The comment author's IP address.\n *\/","file":"comment-template.php","line":181,"missingDoc":false,"filters":["'get_comment_author_IP'"],"uses":{"get_comment":[182]},"used_by":{"comment_author_IP":[195]}},"comment_author_IP":{"doc":"\/**\n * Display the IP address of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_IP() Echoes Result\n *\n * @param int $comment_ID The ID of the comment for which to print the author's IP address. Optional.\n *\/","file":"comment-template.php","line":194,"missingDoc":false,"filters":[],"uses":{"get_comment_author_IP":[195]},"used_by":[]},"comment_author_url":{"doc":"\/**\n * Display the url of the author of the current comment.\n *\n * @since 0.71\n * @uses apply_filters()\n * @uses get_comment_author_url() Retrieves the comment author's URL\n *\n * @param int $comment_ID The ID of the comment for which to print the author's URL. Optional.\n *\/","file":"comment-template.php","line":223,"missingDoc":false,"filters":["'comment_url'"],"uses":{"get_comment_author_url":[224]},"used_by":[]},"get_comment_author_url_link":{"doc":"\/**\n * Retrieves the HTML link of the url of the author of the current comment.\n *\n * $linktext parameter is only used if the URL does not exist for the comment\n * author. If the URL does exist then the URL will be used and the $linktext\n * will be ignored.\n *\n * Encapsulate the HTML link between the $before and $after. So it will appear\n * in the order of $before, link, and finally $after.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comment_author_url_link' on the complete HTML before returning.\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n * @return string The HTML link between the $before and $after parameters\n *\/","file":"comment-template.php","line":245,"missingDoc":false,"filters":["'get_comment_author_url_link'"],"uses":{"get_comment_author_url":[246],"str_replace":[248,249],"substr":[251,250]},"used_by":{"comment_author_url_link":[267]}},"comment_author_url_link":{"doc":"\/**\n * Displays the HTML link of the url of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_url_link() Echoes result\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":266,"missingDoc":false,"filters":[],"uses":{"get_comment_author_url_link":[267]},"used_by":[]},"comment_class":{"doc":"\/**\n * Generates semantic classes for each comment element\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list\n * @param int $comment_id An optional comment ID\n * @param int $post_id An optional post ID\n * @param bool $echo Whether comment_class should echo or return\n *\/","file":"comment-template.php","line":280,"missingDoc":false,"filters":[],"uses":{"join":[282],"get_comment_class":[282]},"used_by":{"Walker_Comment::start_el":[1348]}},"get_comment_class":{"doc":"\/**\n * Returns the classes for the comment div as an array\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list\n * @param int $comment_id An optional comment ID\n * @param int $post_id An optional post ID\n * @return array Array of classes\n *\/","file":"comment-template.php","line":299,"missingDoc":false,"filters":["'comment_class'"],"uses":{"get_comment":[302],"sanitize_html_class":[313],"get_post":[315],"get_userdata":[310],"preg_split":[352],"is_array":[351],"array_merge":[353],"array_map":[356]},"used_by":{"comment_class":[282]}},"sanitize_html_class":{"doc":"\/**\n * Sanitizes a html classname to ensure it only contains valid characters\n *\n * Strips the string down to A-Z,a-z,0-9,_,-. If this results in an empty\n * string then it will return the alternative value supplied.\n *\n * @todo Expand to support the full range of CDATA that a class attribute can contain.\n *\n * @since 2.8.0\n *\n * @param string $class The classname to be sanitized\n * @param string $fallback Optional. The value to return if the sanitization end's up as an empty string.\n * \tDefaults to an empty string.\n * @return string The sanitized value\n *\/","file":"formatting.php","line":1053,"missingDoc":false,"filters":["'sanitize_html_class'"],"uses":{"preg_replace":[1055,1058]},"used_by":{"get_comment_class":[313],"gallery_shortcode":[765],"get_post_class":[335,356,365],"get_body_class":[433,441,456,461,468,475,481,482,504]}},"get_comment_date":{"doc":"\/**\n * Retrieve the comment date of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_date' hook with the formatted date and the $d parameter respectively\n * @uses $comment\n *\n * @param string $d The format of the date (defaults to user's config)\n * @param int $comment_ID The ID of the comment for which to get the date. Optional.\n * @return string The comment's date\n *\/","file":"comment-template.php","line":372,"missingDoc":false,"filters":["'get_comment_date'"],"uses":{"get_comment":[373],"mysql2date":[375,377],"get_option":[375]},"used_by":{"comment_date":[390],"Walker_Comment::start_el":[1364],"__main":[56]}},"comment_date":{"doc":"\/**\n * Display the comment date of the current comment.\n *\n * @since 0.71\n *\n * @param string $d The format of the date (defaults to user's config)\n * @param int $comment_ID The ID of the comment for which to print the date. Optional.\n *\/","file":"comment-template.php","line":389,"missingDoc":false,"filters":[],"uses":{"get_comment_date":[390]},"used_by":[]},"get_comment_excerpt":{"doc":"\/**\n * Retrieve the excerpt of the current comment.\n *\n * Will cut each word and only output the first 20 words with '...' at the end.\n * If the word count is less than 20, then no truncating is done and no '...'\n * will appear.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls 'get_comment_excerpt' on truncated comment\n *\n * @param int $comment_ID The ID of the comment for which to get the excerpt. Optional.\n * @return string The maybe truncated comment with 20 words or less\n *\/","file":"comment-template.php","line":407,"missingDoc":false,"filters":["'get_comment_excerpt'"],"uses":{"get_comment":[408],"strip_tags":[409],"explode":[410],"count":[415,411]},"used_by":{"comment_excerpt":[435]}},"comment_excerpt":{"doc":"\/**\n * Display the excerpt of the current comment.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'comment_excerpt' hook before displaying excerpt\n *\n * @param int $comment_ID The ID of the comment for which to print the excerpt. Optional.\n *\/","file":"comment-template.php","line":434,"missingDoc":false,"filters":["'comment_excerpt'"],"uses":{"get_comment_excerpt":[435]},"used_by":[]},"get_comment_ID":{"doc":"\/**\n * Retrieve the comment id of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls the 'get_comment_ID' hook for the comment ID\n *\n * @return int The comment ID\n *\/","file":"comment-template.php","line":447,"missingDoc":false,"filters":["'get_comment_ID'"],"uses":[],"used_by":{"comment_ID":[459],"comment_form_title":[1205],"__main":[56]}},"comment_ID":{"doc":"\/**\n * Displays the comment id of the current comment.\n *\n * @since 0.71\n * @see get_comment_ID() Echoes Result\n *\/","file":"comment-template.php","line":458,"missingDoc":false,"filters":[],"uses":{"get_comment_ID":[459]},"used_by":{"Walker_Comment::start_el":[1348,1350],"__main":[54]}},"get_page_of_comment":{"doc":"\/**\n * Calculate what page number a comment will appear on for comment paging.\n *\n * @since 2.7.0\n * @uses get_comment() Gets the full comment of the $comment_ID parameter.\n * @uses get_option() Get various settings to control function and defaults.\n * @uses get_page_of_comment() Used to loop up to top level comment.\n *\n * @param int $comment_ID Comment ID.\n * @param array $args Optional args.\n * @return int|null Comment page number or null on error.\n *\/","file":"comment.php","line":825,"missingDoc":false,"filters":[],"uses":{"get_comment":[828],"wp_parse_args":[832],"get_query_var":[835],"get_option":[834,845,844],"get_page_of_comment":[852],"get_var":[863],"prepare":[863],"ceil":[870]},"used_by":{"get_comment_link":[497],"get_page_of_comment":[852]}},"get_comments_link":{"doc":"\/**\n * Retrieves the link to the current post comments.\n *\n * @since 1.5.0\n *\n * @param int $post_id Optional post id\n * @return string The link to the comments\n *\/","file":"comment-template.php","line":518,"missingDoc":false,"filters":[],"uses":{"get_permalink":[519]},"used_by":{"comments_link":[535],"comments_link_feed":[201]}},"comments_link":{"doc":"\/**\n * Displays the link to the current post comments.\n *\n * @since 0.71\n *\n * @param string $deprecated Not Used\n * @param bool $deprecated_2 Not Used\n *\/","file":"comment-template.php","line":530,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[532,534],"get_comments_link":[535]},"used_by":{"comments_popup_link":[1002]}},"get_comments_number":{"doc":"\/**\n * Retrieve the amount of comments a post has.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comments_number' hook on the number of comments\n *\n * @param int $post_id The Post ID\n * @return int The number of comments a post has\n *\/","file":"comment-template.php","line":547,"missingDoc":false,"filters":["'get_comments_number'"],"uses":{"absint":[548],"get_the_ID":[551],"get_post":[553]},"used_by":{"comments_number":[577],"comments_popup_link":[978],"__main":[50,51,52,55,26,27]}},"get_the_ID":{"doc":"\/**\n * Retrieve the ID of the current item in the WordPress Loop.\n *\n * @since 2.1.0\n * @uses $post\n *\n * @return int\n *\/","file":"post-template.php","line":28,"missingDoc":false,"filters":[],"uses":{"get_post":[29]},"used_by":{"get_comments_number":[551],"get_trackback_url":[710],"comments_popup_link":[971],"get_comment_id_fields":[1166],"WP_Widget_Recent_Posts::widget":[574],"get_post_comments_feed_link":[469],"the_ID":[17],"get_post_thumbnail_id":[33],"get_the_post_thumbnail":[86],"get_post_custom":[1853],"is_sticky":[1916]}},"comments_number":{"doc":"\/**\n * Display the language string for the number of comments the current post has.\n *\n * @since 0.71\n * @uses apply_filters() Calls the 'comments_number' hook on the output and number of comments respectively.\n *\n * @param string $zero Text for no comments\n * @param string $one Text for one comment\n * @param string $more Text for more than one comment\n * @param string $deprecated Not used.\n *\/","file":"comment-template.php","line":573,"missingDoc":false,"filters":["'comments_number'"],"uses":{"_deprecated_argument":[575],"get_comments_number":[577],"str_replace":[580],"number_format_i18n":[580],"__":[580,582,584]},"used_by":{"comments_popup_link":[1014]}},"get_comment_text":{"doc":"\/**\n * Retrieve the text of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n *\n * @param int $comment_ID The ID of the comment for which to get the text. Optional.\n * @return string The comment content\n *\/","file":"comment-template.php","line":598,"missingDoc":false,"filters":["'get_comment_text'"],"uses":{"get_comment":[599]},"used_by":{"comment_text":[614],"comment_text_rss":[281]}},"comment_text":{"doc":"\/**\n * Displays the text of the current comment.\n *\n * @since 0.71\n * @uses apply_filters() Passes the comment content through the 'comment_text' hook before display\n * @uses get_comment_text() Gets the comment content\n *\n * @param int $comment_ID The ID of the comment for which to print the text. Optional.\n *\/","file":"comment-template.php","line":612,"missingDoc":false,"filters":["'comment_text'"],"uses":{"get_comment":[613],"get_comment_text":[614]},"used_by":{"Walker_Comment::start_el":[1368],"__main":[71,58,55]}},"get_comment_time":{"doc":"\/**\n * Retrieve the comment time of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filter() Calls 'get_comment_time' hook with the formatted time, the $d parameter, and $gmt parameter passed.\n *\n * @param string $d Optional. The format of the time (defaults to user's config)\n * @param bool $gmt Whether to use the GMT date\n * @param bool $translate Whether to translate the time (for use in feeds)\n * @return string The formatted time\n *\/","file":"comment-template.php","line":629,"missingDoc":false,"filters":["'get_comment_time'"],"uses":{"mysql2date":[633,635],"get_option":[633]},"used_by":{"comment_time":[647],"Walker_Comment::start_el":[1364],"__main":[66,67,51,56]}},"comment_time":{"doc":"\/**\n * Display the comment time of the current comment.\n *\n * @since 0.71\n *\n * @param string $d Optional. The format of the time (defaults to user's config)\n *\/","file":"comment-template.php","line":646,"missingDoc":false,"filters":[],"uses":{"get_comment_time":[647]},"used_by":[]},"get_comment_type":{"doc":"\/**\n * Retrieve the comment type of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls the 'get_comment_type' hook on the comment type\n *\n * @param int $comment_ID The ID of the comment for which to get the type. Optional.\n * @return string The comment type\n *\/","file":"comment-template.php","line":660,"missingDoc":false,"filters":["'get_comment_type'"],"uses":{"get_comment":[661]},"used_by":{"comment_type":[681]}},"comment_type":{"doc":"\/**\n * Display the comment type of the current comment.\n *\n * @since 0.71\n *\n * @param string $commenttxt The string to display for comment type\n * @param string $trackbacktxt The string to display for trackback type\n * @param string $pingbacktxt The string to display for pingback type\n *\/","file":"comment-template.php","line":677,"missingDoc":false,"filters":[],"uses":{"_x":[678],"__":[679,680],"get_comment_type":[681]},"used_by":{"__main":[56]}},"get_trackback_url":{"doc":"\/**\n * Retrieve The current post's trackback URL.\n *\n * There is a check to see if permalink's have been enabled and if so, will\n * retrieve the pretty path. If permalinks weren't enabled, the ID of the\n * current post is used and appended to the correct page to go to.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'trackback_url' on the resulting trackback URL\n *\n * @return string The trackback URL after being filtered\n *\/","file":"comment-template.php","line":706,"missingDoc":false,"filters":["'trackback_url'"],"uses":{"trailingslashit":[708],"get_permalink":[708],"user_trailingslashit":[708],"get_option":[710,707],"get_the_ID":[710]},"used_by":{"trackback_url":[728,730],"trackback_rdf":[759],"__main":[38]}},"trackback_url":{"doc":"\/**\n * Displays the current post's trackback URL.\n *\n * @since 0.71\n * @uses get_trackback_url() Gets the trackback url for the current post\n *\n * @param bool $deprecated_echo Remove backwards compat in 2.5\n * @return void|string Should only be used to echo the trackback URL, use get_trackback_url() for the result instead.\n *\/","file":"comment-template.php","line":724,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[726],"__":[726],"get_trackback_url":[728,730]},"used_by":[]},"trackback_rdf":{"doc":"\/**\n * Generates and displays the RDF for the trackback information of current post.\n *\n * Deprecated in 3.0.0, and restored in 3.0.1.\n *\n * @since 0.71\n *\n * @param int $deprecated Not used (Was $timezone = 0)\n *\/","file":"comment-template.php","line":742,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[744],"stripos":[746],"the_permalink":[753,756],"str_replace":[758],"wptexturize":[758],"strip_tags":[758],"get_the_title":[758],"get_trackback_url":[759]},"used_by":[]},"the_permalink":{"doc":"\/**\n * Display the permalink for the current post.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'the_permalink' filter on the permalink string.\n *\/","file":"link-template.php","line":15,"missingDoc":false,"filters":["'the_permalink'"],"uses":{"get_permalink":[16]},"used_by":{"trackback_rdf":[753,756],"WP_Widget_Recent_Posts::widget":[574],"permalink_link":[864]}},"wp_comment_form_unfiltered_html_nonce":{"doc":"\/**\n * Displays form token for unfiltered comments.\n *\n * Will only display nonce token if the current user has permissions for\n * unfiltered html. Won't display the token for other users.\n *\n * The function was backported to 2.0.10 and was added to versions 2.1.3 and\n * above. Does not exist in versions prior to 2.0.10 in the 2.0 branch and in\n * the 2.1 branch, prior to 2.1.3. Technically added in 2.2.0.\n *\n * Backported to 2.0.10.\n *\n * @since 2.1.3\n * @uses $post Gets the ID of the current post for the token\n *\/","file":"comment-template.php","line":812,"missingDoc":false,"filters":[],"uses":{"get_post":[813],"wp_nonce_field":[817],"current_user_can":[816]},"used_by":[]},"comments_template":{"doc":"\/**\n * Loads the comment template specified in $file.\n *\n * Will not display the comments template if not on single post or page, or if\n * the post does not have comments.\n *\n * Uses the WordPress database object to query for the comments. The comments\n * are passed through the 'comments_array' filter hook with the list of comments\n * and the post ID respectively.\n *\n * The $file path is passed through a filter hook called, 'comments_template'\n * which includes the TEMPLATEPATH and $file combined. Tries the $filtered path\n * first and if it fails it will require the default comment template from the\n * default theme. If either does not exist, then the WordPress process will be\n * halted. It is advised for that reason, that the default theme is not deleted.\n *\n * @since 1.5.0\n * @global array $comment List of comment objects for the current post\n * @uses $wpdb\n * @uses $post\n * @uses $withcomments Will not try to get the comments if the post has none.\n *\n * @param string $file Optional, default '\/comments.php'. The file to load\n * @param bool $separate_comments Optional, whether to separate the comments by comment type. Default is false.\n * @return null Returns null if no comments appear\n *\/","file":"comment-template.php","line":848,"missingDoc":false,"filters":["'comments_array'","'comments_template'"],"uses":{"is_single":[851],"is_page":[851],"get_option":[857,903,902],"wp_get_current_commenter":[864],"esc_url":[879],"get_results":[883,887],"prepare":[883,887],"get_comments":[885],"wp_specialchars_decode":[887],"count":[893],"update_comment_cache":[894],"separate_comments":[897],"set_query_var":[903],"get_comment_pages_count":[903],"get_query_var":[902],"define":[908],"defined":[907],"file_exists":[913,911]},"used_by":[]},"wp_get_current_commenter":{"doc":"\/**\n * Get current commenter's name, email, and URL.\n *\n * Expects cookies content to already be sanitized. User of this function might\n * wish to recheck the returned array for validity.\n *\n * @see sanitize_comment_cookies() Use to sanitize cookies\n *\n * @since 2.0.4\n *\n * @return array Comment author, email, url respectively.\n *\/","file":"comment.php","line":1231,"missingDoc":false,"filters":["'wp_get_current_commenter'"],"uses":{"compact":[1246]},"used_by":{"comments_template":[864],"comment_form":[1517],"__main":[43]}},"wp_specialchars_decode":{"doc":"\/**\n * Converts a number of HTML entities into their special characters.\n *\n * Specifically deals with: &, <, >, \", and '.\n *\n * $quote_style can be set to ENT_COMPAT to decode \" entities,\n * or ENT_QUOTES to do both \" and '. Default is ENT_NOQUOTES where no quotes are decoded.\n *\n * @since 2.8\n *\n * @param string $string The text which is to be decoded.\n * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old _wp_specialchars() values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.\n * @return string The decoded text without HTML entities.\n *\/","file":"formatting.php","line":451,"missingDoc":false,"filters":[],"uses":{"strlen":[454],"strpos":[459],"in_array":[466],"array_merge":[479,480,482,483,485,486],"preg_replace":[493],"array_keys":[493],"array_values":[493],"strtr":[496]},"used_by":{"comments_template":[887],"_wp_specialchars":[416],"wp_notify_postauthor":[1014],"wp_notify_moderator":[1113],"wp_password_change_notification":[1182],"wp_new_user_notification":[1205]}},"update_comment_cache":{"doc":"\/**\n * Updates the comment cache of given comments.\n *\n * Will add the comments in $comments to the cache. If comment ID already exists\n * in the comment cache then it will not be updated. The comment is added to the\n * cache using the comment group with the key using the ID of the comments.\n *\n * @since 2.3.0\n * @package WordPress\n * @subpackage Cache\n *\n * @param array $comments Array of comment row objects\n *\/","file":"comment.php","line":1992,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[1994]},"used_by":{"comments_template":[894]}},"separate_comments":{"doc":"\/**\n * Separates an array of comments into an array keyed by comment_type.\n *\n * @since 2.7.0\n *\n * @param array $comments Array of comments\n * @return array Array of comments keyed by comment_type.\n *\/","file":"comment.php","line":753,"missingDoc":false,"filters":[],"uses":{"count":[755]},"used_by":{"comments_template":[897],"wp_list_comments":[1431,1443]}},"set_query_var":{"doc":"\/**\n * Set query variable.\n *\n * @see WP_Query::set()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @param string $var Query variable key.\n * @param mixed $value\n * @return null\n *\/","file":"query.php","line":71,"missingDoc":false,"filters":[],"uses":{"set":[74]},"used_by":{"comments_template":[903],"wp_list_comments":[1473]}},"get_comment_pages_count":{"doc":"\/**\n * Calculate the total number of comment pages.\n *\n * @since 2.7.0\n * @uses get_query_var() Used to fill in the default for $per_page parameter.\n * @uses get_option() Used to fill in defaults for parameters.\n * @uses Walker_Comment\n *\n * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments\n * @param int $per_page Optional comments per page.\n * @param boolean $threaded Optional control over flat or threaded comments.\n * @return int Number of comment pages.\n *\/","file":"comment.php","line":781,"missingDoc":false,"filters":[],"uses":{"is_array":[787],"get_query_var":[794],"get_option":[796,801],"ceil":[805,807],"get_number_of_root_elements":[805],"count":[807]},"used_by":{"comments_template":[903],"wp_list_comments":[1472],"get_next_comments_link":[1738],"paginate_comments_links":[1815]}},"comments_popup_script":{"doc":"\/**\n * Displays the JS popup script to show a comment.\n *\n * If the $file parameter is empty, then the home page is assumed. The defaults\n * for the window are 400px by 400px.\n *\n * For the comment link popup to work, this function has to be called or the\n * normal comment link will be assumed.\n *\n * @since 0.71\n * @global string $wpcommentspopupfile The URL to use for the popup window\n * @global int $wpcommentsjavascript Whether to use JavaScript. Set when function is called\n *\n * @param int $width Optional. The width of the popup window\n * @param int $height Optional. The height of the popup window\n * @param string $file Optional. Sets the location of the popup window\n *\/","file":"comment-template.php","line":936,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"comments_popup_link":{"doc":"\/**\n * Displays the link to the comments popup window for the current post ID.\n *\n * Is not meant to be displayed on single posts and pages. Should be used on the\n * lists of posts\n *\n * @since 0.71\n * @uses $wpcommentspopupfile\n * @uses $wpcommentsjavascript\n * @uses $post\n *\n * @param string $zero The string to display when no comments\n * @param string $one The string to display when only one comment is available\n * @param string $more The string to display when there are more than one comment\n * @param string $css_class The CSS class to use for comments\n * @param string $none The string to display when comments have been turned off\n * @return null Returns null on single posts and pages.\n *\/","file":"comment-template.php","line":968,"missingDoc":false,"filters":["'comments_popup_link_attributes'"],"uses":{"get_the_ID":[971],"__":[973,974,975,976,986,1013],"get_comments_number":[978],"esc_attr":[981,1013],"comments_open":[980],"pings_open":[980],"post_password_required":[985],"home_url":[993],"get_option":[995],"get_permalink":[1000],"comments_link":[1002],"the_title_attribute":[1009],"sprintf":[1013],"comments_number":[1014]},"used_by":[]},"post_password_required":{"doc":"\/**\n * Whether post requires password and correct password has been provided.\n *\n * @since 2.7.0\n *\n * @param int|object $post An optional post. Global $post used if not provided.\n * @return bool false if a password is not required or the correct password cookie is present, true otherwise.\n *\/","file":"post-template.php","line":569,"missingDoc":false,"filters":[],"uses":{"get_post":[572],"stripslashes":[586],"CheckPassword":[588]},"used_by":{"comments_popup_link":[985],"__main":[68,53,47,16],"rss_enclosure":[386],"atom_enclosure":[422],"get_the_content":[192],"get_the_excerpt":[266],"get_post_class":[341]}},"the_title_attribute":{"doc":"\/**\n * Sanitize the current title when retrieving or displaying.\n *\n * Works like {@link the_title()}, except the parameters can be in a string or\n * an array. See the function for what can be override in the $args parameter.\n *\n * The title before it is displayed will have the tags stripped and {@link\n * esc_attr()} before it is passed to the user or displayed. The default\n * as with {@link the_title()}, is to display the title.\n *\n * @since 2.3.0\n *\n * @param string|array $args Optional. Override the defaults.\n * @return string|null Null on failure or display. String when echo is false.\n *\/","file":"post-template.php","line":71,"missingDoc":false,"filters":[],"uses":{"get_the_title":[72],"strlen":[74],"wp_parse_args":[78],"extract":[79],"esc_attr":[82],"strip_tags":[82]},"used_by":{"comments_popup_link":[1009],"the_shortlink":[2430]}},"get_comment_reply_link":{"doc":"\/**\n * Retrieve HTML content for reply to comment link.\n *\n * The default arguments that can be override are 'add_below', 'respond_id',\n * 'reply_text', 'login_text', and 'depth'. The 'login_text' argument will be\n * used, if the user must log in or register first before posting a comment. The\n * 'reply_text' will be used, if they can post a reply. The 'add_below' and\n * 'respond_id' arguments are for the JavaScript moveAddCommentForm() function\n * parameters.\n *\n * @since 2.7.0\n *\n * @param array $args Optional. Override default options.\n * @param int $comment Optional. Comment being replied to.\n * @param int $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1035,"missingDoc":false,"filters":["'comment_reply_link'"],"uses":{"__":[1038,1039],"wp_parse_args":[1041],"extract":[1046],"get_comment":[1048],"get_post":[1051],"comments_open":[1053],"esc_url":[1059,1061],"wp_login_url":[1059],"get_permalink":[1059],"add_query_arg":[1061],"get_option":[1058]},"used_by":{"comment_reply_link":[1077]}},"wp_login_url":{"doc":"\/**\n * Returns the Log In URL.\n *\n * Returns the URL that allows the user to log in to the site\n *\n * @since 2.7.0\n * @uses site_url() To generate the log in URL\n * @uses apply_filters() calls 'login_url' hook on final login url\n *\n * @param string $redirect Path to redirect to on login.\n * @param bool $force_reauth Whether to force reauthorization, even if a cookie is present. Default is false.\n * @return string A log in URL.\n *\/","file":"general-template.php","line":237,"missingDoc":false,"filters":["'login_url'"],"uses":{"site_url":[238],"add_query_arg":[241,244],"urlencode":[241]},"used_by":{"get_comment_reply_link":[1059],"get_post_reply_link":[1110],"comment_form":[1536],"wp_loginout":[189],"wpmu_welcome_user_notification":[1292],"auth_redirect":[787],"wp_new_user_notification":[1218],"__main":[65]}},"comment_reply_link":{"doc":"\/**\n * Displays the HTML content for reply to comment link.\n *\n * @since 2.7.0\n * @see get_comment_reply_link() Echoes result\n *\n * @param array $args Optional. Override default options.\n * @param int $comment Optional. Comment being replied to.\n * @param int $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1076,"missingDoc":false,"filters":[],"uses":{"get_comment_reply_link":[1077]},"used_by":{"Walker_Comment::start_el":[1371]}},"get_post_reply_link":{"doc":"\/**\n * Retrieve HTML content for reply to post link.\n *\n * The default arguments that can be override are 'add_below', 'respond_id',\n * 'reply_text', 'login_text', and 'depth'. The 'login_text' argument will be\n * used, if the user must log in or register first before posting a comment. The\n * 'reply_text' will be used, if they can post a reply. The 'add_below' and\n * 'respond_id' arguments are for the JavaScript moveAddCommentForm() function\n * parameters.\n *\n * @since 2.7.0\n *\n * @param array $args Optional. Override default options.\n * @param int|object $post Optional. Post that the comment is going to be displayed on. Defaults to current post.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1096,"missingDoc":false,"filters":["'post_comments_link'"],"uses":{"__":[1099,1100],"wp_parse_args":[1102],"extract":[1103],"get_post":[1104],"comments_open":[1106],"wp_login_url":[1110],"get_permalink":[1110,1112],"get_option":[1109]},"used_by":{"post_reply_link":[1127]}},"post_reply_link":{"doc":"\/**\n * Displays the HTML content for reply to post link.\n * @since 2.7.0\n * @see get_post_reply_link()\n *\n * @param array $args Optional. Override default options.\n * @param int|object $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1126,"missingDoc":false,"filters":[],"uses":{"get_post_reply_link":[1127]},"used_by":[]},"get_cancel_comment_reply_link":{"doc":"\/**\n * Retrieve HTML content for cancel comment reply link.\n *\n * @since 2.7.0\n *\n * @param string $text Optional. Text to display for cancel reply link.\n *\/","file":"comment-template.php","line":1137,"missingDoc":false,"filters":["'cancel_comment_reply_link'"],"uses":{"__":[1139],"esc_html":[1142],"remove_query_arg":[1142]},"used_by":{"cancel_comment_reply_link":[1154]}},"cancel_comment_reply_link":{"doc":"\/**\n * Display HTML content for cancel comment reply link.\n *\n * @since 2.7.0\n *\n * @param string $text Optional. Text to display for cancel reply link.\n *\/","file":"comment-template.php","line":1153,"missingDoc":false,"filters":[],"uses":{"get_cancel_comment_reply_link":[1154]},"used_by":{"comment_form":[1554],"__main":[61]}},"get_comment_id_fields":{"doc":"\/**\n * Retrieve hidden input HTML for replying to comments.\n *\n * @since 3.0.0\n *\n * @return string Hidden input HTML for replying to comments\n *\/","file":"comment-template.php","line":1164,"missingDoc":false,"filters":["'comment_id_fields'"],"uses":{"get_the_ID":[1166]},"used_by":{"comment_id_fields":[1181]}},"comment_id_fields":{"doc":"\/**\n * Output hidden input HTML for replying to comments.\n *\n * @since 2.7.0\n * @see get_comment_id_fields() Echoes result\n *\/","file":"comment-template.php","line":1180,"missingDoc":false,"filters":[],"uses":{"get_comment_id_fields":[1181]},"used_by":{"comment_form":[1578],"__main":[92]}},"comment_form_title":{"doc":"\/**\n * Display text based on comment reply status. Only affects users with Javascript disabled.\n *\n * @since 2.7.0\n *\n * @param string $noreplytext Optional. Text to display when not replying to a comment.\n * @param string $replytext Optional. Text to display when replying to a comment. Accepts \"%s\" for the author of the comment being replied to.\n * @param string $linktoparent Optional. Boolean to control making the author's name a link to their comment.\n *\/","file":"comment-template.php","line":1193,"missingDoc":false,"filters":[],"uses":{"__":[1196,1197],"get_comment":[1204],"get_comment_ID":[1205],"get_comment_author":[1205,1205],"printf":[1206]},"used_by":{"comment_form":[1554],"__main":[58]}},"Walker_Comment::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of comment.\n * @param array $args Uses 'style' argument for type of HTML list.\n *\/","file":"comment-template.php","line":1240,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Comment::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of comment.\n * @param array $args Will only append content if style argument value is 'ol' or 'ul'.\n *\/","file":"comment-template.php","line":1264,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Comment::display_element":{"doc":"\/**\n * This function is designed to enhance Walker::display_element() to\n * display children of higher nesting levels than selected inline on\n * the highest depth level displayed. This prevents them being orphaned\n * at the end of the comment list.\n *\n * Example: max_depth = 2, with 5 levels of nested content.\n * 1\n * 1.1\n * 1.1.1\n * 1.1.1.1\n * 1.1.1.1.1\n * 1.1.2\n * 1.1.2.1\n * 2\n * 2.2\n *\n *\/","file":"comment-template.php","line":1298,"missingDoc":false,"filters":[],"uses":{"display_element":[1312]},"used_by":[]},"Walker_Comment::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $comment Comment data object.\n * @param int $depth Depth of comment in reference to parents.\n * @param array $args\n *\/","file":"comment-template.php","line":1328,"missingDoc":false,"filters":[],"uses":{"call_user_func":[1334],"extract":[1338],"comment_class":[1348],"comment_ID":[1348,1350],"get_avatar":[1353],"printf":[1354,1364],"__":[1354,1364,1364],"get_comment_author_link":[1354],"_e":[1357],"htmlspecialchars":[1361],"get_comment_link":[1361],"get_comment_date":[1364],"get_comment_time":[1364],"edit_comment_link":[1364],"comment_text":[1368],"comment_reply_link":[1371],"array_merge":[1371]},"used_by":[]},"edit_comment_link":{"doc":"\/**\n * Display or retrieve edit comment link with formatting.\n *\n * @since 1.0.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @return string|null HTML content, if $echo is set to false.\n *\/","file":"link-template.php","line":1000,"missingDoc":false,"filters":["'edit_comment_link'"],"uses":{"current_user_can":[1003],"__":[1007],"get_edit_comment_link":[1009],"esc_attr__":[1009]},"used_by":{"Walker_Comment::start_el":[1364]}},"Walker_Comment::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $comment\n * @param int $depth Depth of comment.\n * @param array $args\n *\/","file":"comment-template.php","line":1388,"missingDoc":false,"filters":[],"uses":{"call_user_func":[1390]},"used_by":[]},"wp_list_comments":{"doc":"\/**\n * List comments\n *\n * Used in the comments.php template to list comments for a particular post\n *\n * @since 2.7.0\n * @uses Walker_Comment\n *\n * @param string|array $args Formatting options\n * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments\n *\/","file":"comment-template.php","line":1412,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1423],"separate_comments":[1431,1443],"get_query_var":[1453,1469],"get_option":[1452,1462,1461,1472,1482],"get_comment_pages_count":[1472],"set_query_var":[1473],"intval":[1477],"extract":[1484],"paged_walk":[1489]},"used_by":{"__main":[35]}},"comment_form":{"doc":"\/**\n * Outputs a complete commenting form for use within a template.\n * Most strings and form fields may be controlled through the $args array passed\n * into the function, while you may also choose to use the comment_form_default_fields\n * filter to modify the array of default fields if you'd just like to add a new\n * one or remove a single field. All fields are also individually passed through\n * a filter of the form comment_form_field_$name where $name is the key used\n * in the array of fields.\n *\n * @since 3.0.0\n * @param array $args Options for strings, fields etc in the form\n * @param mixed $post_id Post ID to generate the form for, uses the current post if null\n * @return void\n *\/","file":"comment-template.php","line":1509,"missingDoc":false,"filters":["'comment_form_default_fields'","'the_permalink'","'the_permalink'","'comment_form_defaults'","'comment_form_before'","'comment_form_must_log_in_after'","'comment_form_top'","'comment_form_logged_in'","'comment_form_logged_in_after'","'comment_form_before_fields'","\"comment_form_field_{$name}\"","'comment_form_after_fields'","'comment_form_field_comment'","'comment_form'","'comment_form_after'","'comment_form_comments_closed'"],"uses":{"wp_get_current_commenter":[1517],"wp_get_current_user":[1518],"exists":[1519],"get_option":[1521,1555],"__":[1524,1526,1528,1532,1536,1537,1538,1539,1542,1543,1544,1545],"esc_attr":[1525,1527,1529,1559,1577,1577],"sprintf":[1532,1536,1537,1539],"_x":[1535],"wp_login_url":[1536],"get_permalink":[1536,1537],"get_edit_user_link":[1537],"wp_logout_url":[1537],"allowed_tags":[1539],"wp_parse_args":[1548],"comment_form_title":[1554],"cancel_comment_reply_link":[1554],"site_url":[1559],"is_user_logged_in":[1561,1555],"comment_id_fields":[1578],"comments_open":[1551]},"used_by":[]},"get_edit_user_link":{"doc":"\/**\n * Retrieve edit user link\n *\n * @since 3.5.0\n *\n * @param int $user_id Optional. User ID. Defaults to the current user.\n * @return string URL to edit user page or empty string.\n *\/","file":"link-template.php","line":1062,"missingDoc":false,"filters":["'get_edit_user_link'"],"uses":{"get_current_user_id":[1064,1074],"current_user_can":[1066],"get_userdata":[1069],"get_edit_profile_url":[1075],"add_query_arg":[1077],"self_admin_url":[1077]},"used_by":{"comment_form":[1537],"__main":[71,72]}},"allowed_tags":{"doc":"\/**\n * Display all of the allowed tags in HTML format with attributes.\n *\n * This is useful for displaying in the comment area, which elements and\n * attributes are supported. As well as any plugins which want to display it.\n *\n * @since 1.0.1\n * @uses $allowedtags\n *\n * @return string HTML allowed tags entity encoded.\n *\/","file":"general-template.php","line":1298,"missingDoc":false,"filters":[],"uses":{"count":[1303],"htmlentities":[1310]},"used_by":{"comment_form":[1539],"__main":[67,87]}},"check_comment":{"doc":"\/**\n * Checks whether a comment passes internal checks to be allowed to add.\n *\n * If comment moderation is set in the administration, then all comments,\n * regardless of their type and whitelist will be set to false. If the number of\n * links exceeds the amount in the administration, then the check fails. If any\n * of the parameter contents match the blacklist of words, then the check fails.\n *\n * If the number of links exceeds the amount in the administration, then the\n * check fails. If any of the parameter contents match the blacklist of words,\n * then the check fails.\n *\n * If the comment author was approved before, then the comment is\n * automatically whitelisted.\n *\n * If none of the checks fail, then the failback is to set the check to pass\n * (return true).\n *\n * @since 1.2.0\n * @uses $wpdb\n *\n * @param string $author Comment Author's name\n * @param string $email Comment Author's email\n * @param string $url Comment Author's URL\n * @param string $comment Comment contents\n * @param string $user_ip Comment Author's IP address\n * @param string $user_agent Comment Author's User Agent\n * @param string $comment_type Comment type, either user submitted comment,\n *\t\ttrackback, or pingback\n * @return bool Whether the checks passed (true) and the comments should be\n *\t\tdisplayed or set to moderated\n *\/","file":"comment.php","line":41,"missingDoc":false,"filters":["'comment_text'","'comment_max_links_url'"],"uses":{"get_option":[44,50,57,83],"preg_match_all":[51],"trim":[57,62],"explode":[59],"preg_quote":[70],"preg_match":[73,74,75,76,77,78],"get_var":[86],"strpos":[88]},"used_by":{"wp_allow_comment":[696]}},"get_approved_comments":{"doc":"\/**\n * Retrieve the approved comments for post $post_id.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param int $post_id The ID of the post\n * @return array $comments The approved comments\n *\/","file":"comment.php","line":108,"missingDoc":false,"filters":[],"uses":{"get_results":[110],"prepare":[110]},"used_by":{"__main":[45]}},"WP_Comment_Query::query":{"doc":"\/**\n * Execute the query\n *\n * @since 3.1.0\n *\n * @param string|array $query_vars\n * @return int|array\n *\/","file":"comment.php","line":210,"missingDoc":false,"filters":["'pre_get_comments'"],"uses":{"wp_parse_args":[241],"parse_query_vars":[245],"extract":[248],"md5":[251],"serialize":[251],"compact":[251,350,365],"array_keys":[251],"wp_cache_get":[252,257],"wp_cache_set":[254],"absint":[260,310,311],"prepare":[267,331,333,335,341,344,346,354],"strtoupper":[271],"is_array":[274],"preg_split":[274],"array_intersect":[297],"implode":[305],"get_search_sql":[348],"array_filter":[350],"get_sql":[358],"apply_filters_ref_array":[365,378],"get_var":[375],"get_results":[377],"wp_cache_add":[380]},"used_by":[]},"apply_filters_ref_array":{"doc":"\/**\n * Execute functions hooked on a specific filter hook, specifying arguments in an array.\n *\n * @see apply_filters() This function is identical, but the arguments passed to the\n * functions hooked to <tt>$tag<\/tt> are supplied using an array.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 3.0.0\n * @global array $wp_filter Stores all of the filters\n * @global array $merged_filters Merges the filter hooks using this function.\n * @global array $wp_current_filter stores the list of current filters with the current one last\n *\n * @param string $tag The name of the filter hook.\n * @param array $args The arguments supplied to the functions hooked to <tt>$tag<\/tt>\n * @return mixed The filtered value after all hooked functions are applied to it.\n *\/","file":"plugin.php","line":200,"missingDoc":false,"filters":[],"uses":{"func_get_args":[206],"_wp_call_all_hook":[207],"array_pop":[212,234],"ksort":[221],"reset":[225],"next":[232],"call_user_func_array":[230],"array_slice":[230],"is_null":[229],"current":[228]},"used_by":{"WP_Comment_Query::query":[365,378],"WP_Meta_Query::get_sql":[830],"WP_Query::get_posts":[2209,2523,2524,2555,2556,2557,2558,2559,2585,2586,2587,2588,2589,2590,2591,2594,2604,2605,2606,2607,2608,2609,2610,2613,2630,2683,2686,2687,2688,2690,2692,2727,2772],"WP_Query::set_found_posts":[2809,2813]}},"WP_Comment_Query::get_search_sql":{"doc":"","file":"comment.php","line":395,"missingDoc":true,"filters":[],"uses":{"esc_sql":[396],"like_escape":[396],"implode":[402]},"used_by":[]},"esc_sql":{"doc":"\/**\n * Escapes data for use in a MySQL query\n *\n * This is just a handy shortcut for $wpdb->escape(), for completeness' sake\n *\n * @since 2.8.0\n * @param string $sql Unescaped SQL data\n * @return string The cleaned $sql\n *\/","file":"formatting.php","line":2558,"missingDoc":false,"filters":[],"uses":{"escape":[2560]},"used_by":{"WP_Comment_Query::get_search_sql":[396],"wp_update_comment":[1498],"addslashes_gpc":[1401],"wp_rel_nofollow":[1697],"add_metadata":[43],"update_metadata":[113],"delete_metadata":[196],"update_metadata_by_mid":[400],"delete_metadata_by_mid":[481],"update_meta_cache":[531],"WP_Meta_Query::get_sql":[709],"wp_unique_post_slug":[3118],"WP_Query::get_posts":[2196],"WP_Tax_Query::transform_query":[788],"_pad_term_counts":[2874],"_update_post_term_count":[2934],"WP_User_Query::prepare_query":[401],"WP_User_Query::get_search_sql":[612],"wp_create_user":[1507,1508]}},"get_comment_count":{"doc":"\/**\n * The amount of comments in a post or total comments.\n *\n * A lot like {@link wp_count_comments()}, in that they both return comment\n * stats (albeit with different types). The {@link wp_count_comments()} actual\n * caches, but this function does not.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param int $post_id Optional. Comment amount in post if > 0, else total comments blog wide.\n * @return array The amount of spam, approved, awaiting moderation, and total comments.\n *\/","file":"comment.php","line":479,"missingDoc":false,"filters":[],"uses":{"prepare":[486],"get_results":[489]},"used_by":[]},"add_comment_meta":{"doc":"\/**\n * Add meta data field to a comment.\n *\n * @since 2.9.0\n * @uses add_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"comment.php","line":542,"missingDoc":false,"filters":[],"uses":{"add_metadata":[543]},"used_by":{"wp_trash_comment":[1057,1058],"wp_spam_comment":[1113]}},"add_metadata":{"doc":"\/**\n * Add metadata for the specified object.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'added_{$meta_type}_meta' with meta_id of added metadata entry,\n * \t\tobject ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Metadata value\n * @param bool $unique Optional, default is false. Whether the specified metadata key should be\n * \t\tunique for the object. If true, and the object already has a value for the specified\n * \t\tmetadata key, no change will be made\n * @return bool The meta ID on successful update, false on failure.\n *\/","file":"meta.php","line":31,"missingDoc":false,"filters":["\"add_{$meta_type}_metadata\"","\"add_{$meta_type}_meta\"","\"added_{$meta_type}_meta\""],"uses":{"absint":[35],"_get_meta_table":[38],"esc_sql":[43],"stripslashes":[46],"stripslashes_deep":[47],"sanitize_meta":[48],"get_var":[54],"prepare":[54],"maybe_serialize":[60],"insert":[64],"wp_cache_delete":[75]},"used_by":{"add_comment_meta":[543],"update_metadata":[136],"add_post_meta":[1755],"add_user_meta":[800]}},"delete_comment_meta":{"doc":"\/**\n * Remove metadata matching criteria from a comment.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 2.9.0\n * @uses delete_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_comment_meta\n *\n * @param int $comment_id comment ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"comment.php","line":562,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[563]},"used_by":{"wp_untrash_comment":[1087,1088],"wp_unspam_comment":[1142],"wp_scheduled_delete":[3503,3504]}},"delete_metadata":{"doc":"\/**\n * Delete metadata for the specified object.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'deleted_{$meta_type}_meta' after deleting with meta_id of\n * \t\tdeleted metadata entries, object ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Optional. Metadata value. If specified, only delete metadata entries\n * \t\twith this value. Otherwise, delete all entries with the specified meta_key.\n * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries\n * \t\tfor all objects, ignoring the specified object_id. Otherwise, only delete matching\n * \t\tmetadata entries for the specified object_id.\n * @return bool True on successful delete, false on failure.\n *\/","file":"meta.php","line":184,"missingDoc":false,"filters":["\"delete_{$meta_type}_metadata\"","\"delete_{$meta_type}_meta\"","'delete_postmeta'","\"deleted_{$meta_type}_meta\"","'deleted_postmeta'"],"uses":{"absint":[188],"_get_meta_table":[191],"esc_sql":[196],"stripslashes":[199],"stripslashes_deep":[200],"maybe_serialize":[207],"prepare":[209,212,215,222],"get_col":[217,222],"count":[218],"implode":[230],"query":[232],"wp_cache_delete":[239,242]},"used_by":{"delete_comment_meta":[563],"install_blog":[1168,1169],"delete_post_meta":[1779],"delete_post_meta_by_key":[1835],"wp_delete_attachment":[4109],"delete_user_meta":[820]}},"get_comment_meta":{"doc":"\/**\n * Retrieve comment meta field for a comment.\n *\n * @since 2.9.0\n * @uses get_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"comment.php","line":579,"missingDoc":false,"filters":[],"uses":{"get_metadata":[580]},"used_by":{"wp_untrash_comment":[1082],"wp_unspam_comment":[1137]}},"get_metadata":{"doc":"\/**\n * Retrieve metadata for the specified object.\n *\n * @since 2.9.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for\n * \t\tthe specified object.\n * @param bool $single Optional, default is false. If true, return only the first value of the\n * \t\tspecified meta_key. This parameter has no effect if meta_key is not specified.\n * @return string|array Single metadata value, or array of values\n *\/","file":"meta.php","line":267,"missingDoc":false,"filters":["\"get_{$meta_type}_metadata\""],"uses":{"absint":[271],"is_array":[276],"wp_cache_get":[282],"update_meta_cache":[285],"maybe_unserialize":[294],"array_map":[296]},"used_by":{"get_comment_meta":[580],"update_metadata":[128],"get_post_meta":[1796],"get_user_meta":[837]}},"update_comment_meta":{"doc":"\/**\n * Update comment meta field based on comment ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and comment ID.\n *\n * If the meta field for the comment does not exist, it will be added.\n *\n * @since 2.9.0\n * @uses update_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"comment.php","line":601,"missingDoc":false,"filters":[],"uses":{"update_metadata":[602]},"used_by":[]},"update_metadata":{"doc":"\/**\n * Update metadata for the specified object. If no value already exists for the specified object\n * ID and metadata key, the metadata will be added.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'update_{$meta_type}_meta' before updating metadata with meta_id of\n * \t\tmetadata entry to update, object ID, meta key, and meta value\n * @uses do_action() Calls 'updated_{$meta_type}_meta' after updating metadata with meta_id of\n * \t\tupdated metadata entry, object ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Metadata value\n * @param string $prev_value Optional. If specified, only update existing metadata entries with\n * \t\tthe specified value. Otherwise, update all entries.\n * @return bool True on successful update, false on failure.\n *\/","file":"meta.php","line":101,"missingDoc":false,"filters":["\"update_{$meta_type}_metadata\"","\"update_{$meta_type}_meta\"","'update_postmeta'","\"updated_{$meta_type}_meta\"","'updated_postmeta'"],"uses":{"absint":[105],"_get_meta_table":[108],"esc_sql":[113],"stripslashes":[117],"stripslashes_deep":[119],"sanitize_meta":[120],"get_metadata":[128],"count":[129],"add_metadata":[136],"get_var":[135],"prepare":[135],"maybe_serialize":[139,145],"compact":[141],"update":[154],"wp_cache_delete":[156]},"used_by":{"update_comment_meta":[602],"update_post_meta":[1822],"update_user_meta":[859]}},"wp_set_comment_cookies":{"doc":"\/**\n * Sets the cookies used to store an unauthenticated commentator's identity. Typically used\n * to recall previous comments by this commentator that are still held in moderation.\n *\n * @param object $comment Comment object.\n * @param object $user Comment author's object.\n *\n * @since 3.4.0\n *\/","file":"comment.php","line":614,"missingDoc":false,"filters":["'comment_cookie_lifetime'"],"uses":{"exists":[615],"setcookie":[619,620,621],"time":[619,620,621],"esc_url":[621]},"used_by":[]},"sanitize_comment_cookies":{"doc":"\/**\n * Sanitizes the cookies sent to the user already.\n *\n * Will only do anything if the cookies have already been created for the user.\n * Mostly used after cookies had been sent to use elsewhere.\n *\n * @since 2.0.4\n *\/","file":"comment.php","line":632,"missingDoc":false,"filters":["'pre_comment_author_name'","'pre_comment_author_email'","'pre_comment_author_url'"],"uses":{"stripslashes":[635,642,649],"esc_attr":[636,643]},"used_by":[]},"wp_allow_comment":{"doc":"\/**\n * Validates whether this comment is allowed to be made.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses apply_filters() Calls 'pre_comment_approved' hook on the type of comment\n * @uses apply_filters() Calls 'comment_duplicate_trigger' hook on commentdata.\n * @uses do_action() Calls 'check_comment_flood' hook on $comment_author_IP, $comment_author_email, and $comment_date_gmt\n *\n * @param array $commentdata Contains information on the comment\n * @return mixed Signifies the approval status (0|1|'spam')\n *\/","file":"comment.php","line":666,"missingDoc":false,"filters":["'comment_duplicate_trigger'","'check_comment_flood'","'pre_comment_approved'"],"uses":{"extract":[668],"__":[679,681],"defined":[678],"wp_die":[681],"get_var":[676,688],"get_userdata":[687],"prepare":[688],"check_comment":[696],"wp_blacklist_check":[700],"has_cap":[691]},"used_by":{"wp_new_comment":[1398]}},"wp_blacklist_check":{"doc":"\/**\n * Does comment contain blacklisted characters or words.\n *\n * @since 1.5.0\n * @uses do_action() Calls 'wp_blacklist_check' hook for all parameters.\n *\n * @param string $author The author of the comment\n * @param string $email The email of the comment\n * @param string $url The url used in the comment\n * @param string $comment The comment content\n * @param string $user_ip The comment author IP address\n * @param string $user_agent The author's browser user agent\n * @return bool True if comment contains blacklisted content, false if comment does not\n *\/","file":"comment.php","line":887,"missingDoc":false,"filters":["'wp_blacklist_check'"],"uses":{"trim":[890,896],"get_option":[890],"explode":[893],"preg_quote":[903],"preg_match":[907,908,909,910,911,912]},"used_by":{"wp_allow_comment":[700]}},"check_comment_flood_db":{"doc":"\/**\n * Check whether comment flooding is occurring.\n *\n * Won't run, if current user can manage options, so to not block\n * administrators.\n *\n * @since 2.3.0\n * @uses $wpdb\n * @uses apply_filters() Calls 'comment_flood_filter' filter with first\n *\t\tparameter false, last comment timestamp, new comment timestamp.\n * @uses do_action() Calls 'comment_flood_trigger' action with parameters with\n *\t\tlast comment timestamp and new comment timestamp.\n *\n * @param string $ip Comment IP.\n * @param string $email Comment author email address.\n * @param string $date MySQL time string.\n *\/","file":"comment.php","line":725,"missingDoc":false,"filters":["'comment_flood_filter'","'comment_flood_trigger'"],"uses":{"current_user_can":[727],"gmdate":[729],"time":[729],"mysql2date":[731,732],"__":[738,740],"defined":[737],"wp_die":[740],"get_var":[730],"prepare":[730]},"used_by":[]},"wp_trash_comment":{"doc":"\/**\n * Moves a comment to the Trash\n *\n * If trash is disabled, comment is permanently deleted.\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_comment' before trashing\n * @uses do_action() on 'trashed_comment' after trashing\n * @uses wp_delete_comment() if trash is disabled\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1047,"missingDoc":false,"filters":["'trash_comment'","'trashed_comment'"],"uses":{"wp_delete_comment":[1049],"get_comment":[1051],"add_comment_meta":[1057,1058],"time":[1058],"wp_set_comment_status":[1056]},"used_by":{"wp_delete_comment":[1003]}},"wp_get_comment_status":{"doc":"\/**\n * The status of a comment by ID.\n *\n * @since 1.0.0\n *\n * @param int $comment_id Comment ID\n * @return string|bool Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure.\n *\/","file":"comment.php","line":1158,"missingDoc":false,"filters":[],"uses":{"get_comment":[1159]},"used_by":{"wp_delete_comment":[1002],"wp_new_comment":[1387]}},"clean_comment_cache":{"doc":"\/**\n * Removes comment ID from the comment cache.\n *\n * @since 2.3.0\n * @package WordPress\n * @subpackage Cache\n *\n * @param int|array $ids Comment ID or array of comment IDs to remove from cache\n *\/","file":"comment.php","line":1967,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[1969],"wp_cache_incr":[1972],"wp_cache_get":[1974],"wp_cache_set":[1975],"function_exists":[1971]},"used_by":{"wp_delete_comment":[1011,1027],"wp_set_comment_status":[1467],"wp_update_comment":[1524],"wp_trash_post_comments":[2491],"wp_untrash_post_comments":[2537]}},"wp_update_comment_count":{"doc":"\/**\n * Updates the comment count for post(s).\n *\n * When $do_deferred is false (is by default) and the comments have been set to\n * be deferred, the post_id will be added to a queue, which will be updated at a\n * later date and only updated once per post ID.\n *\n * If the comments have not be set up to be deferred, then the post will be\n * updated. When $do_deferred is set to true, then all previous deferred post\n * IDs will be updated along with the current $post_id.\n *\n * @since 2.1.0\n * @see wp_update_comment_count_now() For what could cause a false return value\n *\n * @param int $post_id Post ID\n * @param bool $do_deferred Whether to process previously deferred post comment counts\n * @return bool True on success, false on failure\n *\/","file":"comment.php","line":1577,"missingDoc":false,"filters":[],"uses":{"array_unique":[1581],"wp_update_comment_count_now":[1583,1593],"wp_defer_comment_counting":[1588]},"used_by":{"wp_delete_comment":[1025],"wp_insert_comment":[1288],"wp_set_comment_status":[1474],"wp_update_comment":[1525],"wp_defer_comment_counting":[1553]}},"wp_transition_comment_status":{"doc":"\/**\n * Call hooks for when a comment status transition occurs.\n *\n * Calls hooks for comment status transitions. If the new comment status is not the same\n * as the previous comment status, then two hooks will be ran, the first is\n * 'transition_comment_status' with new status, old status, and comment data. The\n * next action called is 'comment_OLDSTATUS_to_NEWSTATUS' the NEWSTATUS is the\n * $new_status parameter and the OLDSTATUS is $old_status parameter; it has the\n * comment data.\n *\n * The final action will run whether or not the comment statuses are the same. The\n * action is named 'comment_NEWSTATUS_COMMENTTYPE', NEWSTATUS is from the $new_status\n * parameter and COMMENTTYPE is comment_type comment data.\n *\n * @since 2.7.0\n *\n * @param string $new_status New comment status.\n * @param string $old_status Previous comment status.\n * @param object $comment Comment data.\n *\/","file":"comment.php","line":1199,"missingDoc":false,"filters":["'transition_comment_status'","\"comment_{$old_status}_to_{$new_status}\"","\"comment_{$new_status}_{$comment->comment_type}\""],"uses":[],"used_by":{"wp_delete_comment":[1030],"wp_set_comment_status":[1472],"wp_update_comment":[1528]}},"wp_set_comment_status":{"doc":"\/**\n * Sets the status of a comment.\n *\n * The 'wp_set_comment_status' action is called after the comment is handled.\n * If the comment status is not in the list, then false is returned.\n *\n * @since 1.0.0\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param int $comment_id Comment ID.\n * @param string $comment_status New comment status, either 'hold', 'approve', 'spam', or 'trash'.\n * @param bool $wp_error Whether to return a WP_Error object if there is a failure. Default is false.\n * @return bool False on failure or deletion and true on success.\n *\/","file":"comment.php","line":1431,"missingDoc":false,"filters":["'wp_set_comment_status'"],"uses":{"get_comment":[1444,1458,1469],"wp_notify_postauthor":[1445],"get_option":[1443],"__":[1462],"update":[1460],"clean_comment_cache":[1467],"wp_transition_comment_status":[1472],"wp_update_comment_count":[1474]},"used_by":{"wp_trash_comment":[1056],"wp_untrash_comment":[1086],"wp_spam_comment":[1112],"wp_unspam_comment":[1141]}},"wp_untrash_comment":{"doc":"\/**\n * Removes a comment from the Trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_comment' before untrashing\n * @uses do_action() on 'untrashed_comment' after untrashing\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1076,"missingDoc":false,"filters":["'untrash_comment'","'untrashed_comment'"],"uses":{"get_comment_meta":[1082],"delete_comment_meta":[1087,1088],"wp_set_comment_status":[1086]},"used_by":[]},"wp_spam_comment":{"doc":"\/**\n * Marks a comment as Spam\n *\n * @since 2.9.0\n * @uses do_action() on 'spam_comment' before spamming\n * @uses do_action() on 'spammed_comment' after spamming\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1106,"missingDoc":false,"filters":["'spam_comment'","'spammed_comment'"],"uses":{"get_comment":[1107],"add_comment_meta":[1113],"wp_set_comment_status":[1112]},"used_by":[]},"wp_unspam_comment":{"doc":"\/**\n * Removes a comment from the Spam\n *\n * @since 2.9.0\n * @uses do_action() on 'unspam_comment' before unspamming\n * @uses do_action() on 'unspammed_comment' after unspamming\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1131,"missingDoc":false,"filters":["'unspam_comment'","'unspammed_comment'"],"uses":{"get_comment_meta":[1137],"delete_comment_meta":[1142],"wp_set_comment_status":[1141]},"used_by":[]},"wp_insert_comment":{"doc":"\/**\n * Inserts a comment to the database.\n *\n * The available comment data key names are 'comment_author_IP', 'comment_date',\n * 'comment_date_gmt', 'comment_parent', 'comment_approved', and 'user_id'.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param array $commentdata Contains information on the comment.\n * @return int The new comment's ID.\n *\/","file":"comment.php","line":1261,"missingDoc":false,"filters":["'wp_insert_comment'"],"uses":{"extract":[1263],"stripslashes_deep":[1263],"current_time":[1268],"get_gmt_from_date":[1270],"compact":[1282],"insert":[1283],"wp_update_comment_count":[1288],"get_comment":[1290],"wp_cache_incr":[1294],"wp_cache_get":[1296],"wp_cache_set":[1297],"function_exists":[1293]},"used_by":{"wp_new_comment":[1400]}},"wp_filter_comment":{"doc":"\/**\n * Filters and sanitizes comment data.\n *\n * Sets the comment data 'filtered' field to true when finished. This can be\n * checked as to whether the comment should be filtered and to keep from\n * filtering the same comment more than once.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'pre_user_id' hook on comment author's user ID\n * @uses apply_filters() Calls 'pre_comment_user_agent' hook on comment author's user agent\n * @uses apply_filters() Calls 'pre_comment_author_name' hook on comment author's name\n * @uses apply_filters() Calls 'pre_comment_content' hook on the comment's content\n * @uses apply_filters() Calls 'pre_comment_user_ip' hook on comment author's IP\n * @uses apply_filters() Calls 'pre_comment_author_url' hook on comment author's URL\n * @uses apply_filters() Calls 'pre_comment_author_email' hook on comment author's email address\n *\n * @param array $commentdata Contains information on the comment.\n * @return array Parsed comment information.\n *\/","file":"comment.php","line":1322,"missingDoc":false,"filters":["'pre_user_id'","'pre_user_id'","'pre_comment_user_agent'","'pre_comment_author_name'","'pre_comment_content'","'pre_comment_user_ip'","'pre_comment_author_url'","'pre_comment_author_email'"],"uses":[],"used_by":{"wp_new_comment":[1396],"wp_update_comment":[1505]}},"wp_throttle_comment_flood":{"doc":"\/**\n * Whether comment should be blocked because of comment flood.\n *\n * @since 2.1.0\n *\n * @param bool $block Whether plugin has already blocked comment.\n * @param int $time_lastcomment Timestamp for last comment.\n * @param int $time_newcomment Timestamp for new comment.\n * @return bool Whether comment should be blocked.\n *\/","file":"comment.php","line":1347,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_notify_moderator":{"doc":"\/**\n * Notifies the moderator of the blog about a new comment that is awaiting approval.\n *\n * @since 1.0\n * @uses $wpdb\n *\n * @param int $comment_id Comment ID\n * @return bool Always returns true\n *\/","file":"pluggable.php","line":1094,"missingDoc":false,"filters":["'comment_moderation_text'","'comment_moderation_subject'","'comment_moderation_headers'"],"uses":{"get_option":[1097,1104,1105,1113],"get_comment":[1100],"get_post":[1101],"get_userdata":[1102],"user_can":[1105],"gethostbyaddr":[1108],"get_var":[1109],"wp_specialchars_decode":[1113],"sprintf":[1118,1120,1121,1125,1127,1128,1132,1134,1135,1136,1137,1142,1144,1146,1147,1149,1153],"__":[1118,1120,1121,1122,1125,1127,1128,1129,1132,1134,1135,1136,1137,1138,1142,1144,1146,1147,1153],"get_permalink":[1119,1126,1133],"admin_url":[1142,1144,1146,1147,1151],"_n":[1149],"number_format_i18n":[1150],"wp_mail":[1161]},"used_by":{"wp_new_comment":[1406]}},"wp_notify_postauthor":{"doc":"\/**\n * Notify an author of a comment\/trackback\/pingback to one of their posts.\n *\n * @since 1.0.0\n *\n * @param int $comment_id Comment ID\n * @param string $comment_type Optional. The comment type either 'comment' (default), 'trackback', or 'pingback'\n * @return bool False if user email does not exist. True on completion.\n *\/","file":"pluggable.php","line":989,"missingDoc":false,"filters":["'comment_notification_text'","'comment_notification_subject'","'comment_notification_headers'"],"uses":{"get_comment":[990],"get_post":[991],"get_userdata":[992],"is_user_member_of_blog":[995],"get_current_user_id":[1003],"gethostbyaddr":[1010],"wp_specialchars_decode":[1014],"get_option":[1014,1069],"sprintf":[1019,1021,1022,1023,1024,1028,1030,1032,1033,1037,1039,1041,1042,1043,1046,1049,1051,1053,1054],"__":[1019,1021,1022,1023,1024,1025,1026,1028,1030,1032,1033,1034,1035,1037,1039,1041,1042,1043,1044,1046,1049,1051,1053,1054],"get_permalink":[1048,1049],"admin_url":[1051,1053,1054],"preg_replace":[1056],"strtolower":[1056],"wp_mail":[1078]},"used_by":{"wp_new_comment":[1411],"wp_set_comment_status":[1445]}},"wp_defer_comment_counting":{"doc":"\/**\n * Whether to defer comment counting.\n *\n * When setting $defer to true, all post comment counts will not be updated\n * until $defer is set to false. When $defer is set to false, then all\n * previously deferred updated post comment counts will then be automatically\n * updated without having to call wp_update_comment_count() after.\n *\n * @since 2.5.0\n * @staticvar bool $_defer\n *\n * @param bool $defer\n * @return unknown\n *\/","file":"comment.php","line":1546,"missingDoc":false,"filters":[],"uses":{"wp_update_comment_count":[1553],"is_bool":[1549]},"used_by":{"wp_update_comment_count":[1588]}},"wp_update_comment_count_now":{"doc":"\/**\n * Updates the comment count for the post.\n *\n * @since 2.5.0\n * @uses $wpdb\n * @uses do_action() Calls 'wp_update_comment_count' hook on $post_id, $new, and $old\n * @uses do_action() Calls 'edit_posts' hook on $post_id and $post\n *\n * @param int $post_id Post ID\n * @return bool False on '0' $post_id or if post with ID does not exist. True on success.\n *\/","file":"comment.php","line":1609,"missingDoc":false,"filters":["'wp_update_comment_count'","'edit_post'"],"uses":{"get_post":[1614],"get_var":[1618],"prepare":[1618],"update":[1619],"clean_post_cache":[1621]},"used_by":{"wp_update_comment_count":[1583,1593]}},"clean_post_cache":{"doc":"\/**\n * Will clean the post in the cache.\n *\n * Cleaning means delete from the cache of the post. Will call to clean the term\n * object cache associated with the post ID.\n *\n * This function not run if $_wp_suspend_cache_invalidation is not empty. See\n * wp_suspend_cache_invalidation().\n *\n * @package WordPress\n * @subpackage Cache\n * @since 2.0.0\n *\n * @uses do_action() Calls 'clean_post_cache' on $id before adding children (if any).\n *\n * @param object|int $post The post object or ID to remove from the cache\n *\/","file":"post.php","line":4640,"missingDoc":false,"filters":["'clean_post_cache'","'clean_page_cache'"],"uses":{"get_post":[4646],"wp_cache_delete":[4650,4651,4655,4660,4663],"clean_object_term_cache":[4653],"is_post_type_hierarchical":[4659]},"used_by":{"wp_update_comment_count_now":[1621],"clean_page_cache":[3157],"set_post_type":[1669],"wp_delete_post":[2370,2374],"wp_insert_post":[2926],"wp_publish_post":[3029],"wp_insert_attachment":[4044],"wp_delete_attachment":[4153]}},"discover_pingback_server_uri":{"doc":"\/**\n * Finds a pingback server URI based on the given URL.\n *\n * Checks the HTML for the rel=\"pingback\" link and x-pingback headers. It does\n * a check for the x-pingback headers first and returns that, if available. The\n * check for the rel=\"pingback\" has more overhead than just the header.\n *\n * @since 1.5.0\n *\n * @param string $url URL to ping.\n * @param int $deprecated Not Used.\n * @return bool|string False on failure, string containing URI on success.\n *\/","file":"comment.php","line":1646,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1648],"parse_url":[1654],"wp_upload_dir":[1660],"strpos":[1661,1684,1685,1689,1691],"wp_remote_head":[1664],"is_wp_error":[1666,1679],"wp_remote_retrieve_header":[1670,1669,1673],"preg_match":[1673],"wp_remote_get":[1677],"wp_remote_retrieve_body":[1682],"substr":[1693]},"used_by":{"pingback":[1854]}},"wp_upload_dir":{"doc":"\/**\n * Get an array containing the current upload directory's path and url.\n *\n * Checks the 'upload_path' option, which should be from the web root folder,\n * and if it isn't empty it will be used. If it is empty, then the path will be\n * 'WP_CONTENT_DIR\/uploads'. If the 'UPLOADS' constant is defined, then it will\n * override the 'upload_path' option and 'WP_CONTENT_DIR\/uploads' path.\n *\n * The upload URL path is set either by the 'upload_url_path' option or by using\n * the 'WP_CONTENT_URL' constant and appending '\/uploads' to the path.\n *\n * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in\n * the administration settings panel), then the time will be used. The format\n * will be year first and then month.\n *\n * If the path couldn't be created, then an error will be returned with the key\n * 'error' containing the error message. The error suggests that the parent\n * directory is not writable by the server.\n *\n * On success, the returned array will have many indices:\n * 'path' - base directory and sub directory or full path to upload directory.\n * 'url' - base url and sub directory or absolute URL to upload directory.\n * 'subdir' - sub directory if uploads use year\/month folders option is on.\n * 'basedir' - path without subdir.\n * 'baseurl' - URL path without subdir.\n * 'error' - set to false.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'upload_dir' on returned array.\n *\n * @param string $time Optional. Time formatted in 'yyyy\/mm'.\n * @return array See above for description.\n *\/","file":"functions.php","line":1524,"missingDoc":false,"filters":["'upload_dir'"],"uses":{"get_option":[1525,1526,1537,1594],"trim":[1526],"strpos":[1530,1618],"path_join":[1532],"trailingslashit":[1541,1548,1586],"defined":[1546,1561,1569,1582,1552],"is_multisite":[1546,1552],"get_site_option":[1546,1554],"get_current_blog_id":[1562,1564],"ms_is_switched":[1569],"untrailingslashit":[1583],"is_main_site":[1552],"current_time":[1597],"substr":[1598,1599],"str_replace":[1619],"basename":[1621],"sprintf":[1623],"__":[1623],"wp_mkdir_p":[1617]},"used_by":{"discover_pingback_server_uri":[1660],"wp_upload_bits":[1726],"get_space_used":[1946],"get_attached_file":[188],"_wp_relative_upload_path":[233],"wp_delete_attachment":[4123],"wp_get_attachment_url":[4218]}},"wp_remote_head":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the HEAD method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":106,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[107],"head":[108]},"used_by":{"discover_pingback_server_uri":[1664],"wp_get_http_headers":[546]}},"wp_remote_retrieve_header":{"doc":"\/**\n * Retrieve a single header by name from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response\n * @param string $header Header name to retrieve value from.\n * @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist.\n *\/","file":"http.php","line":135,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[136],"is_array":[136],"array_key_exists":[139]},"used_by":{"discover_pingback_server_uri":[1670,1669,1673]}},"do_all_pings":{"doc":"\/**\n * Perform all pingbacks, enclosures, trackbacks, and send to pingback services.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\/","file":"comment.php","line":1710,"missingDoc":false,"filters":[],"uses":{"get_row":[1714,1720],"delete_metadata_by_mid":[1715,1721],"pingback":[1716],"do_enclose":[1722],"get_col":[1726],"do_trackbacks":[1729],"is_array":[1727],"generic_ping":[1732]},"used_by":[]},"pingback":{"doc":"\/**\n * Pings back the links found in a post.\n *\n * @since 0.71\n * @uses $wp_version\n * @uses IXR_Client\n *\n * @param string $content Post content to check for links.\n * @param int $post_ID Post ID.\n *\/","file":"comment.php","line":1808,"missingDoc":false,"filters":["'pre_ping'","'pingback_useragent'"],"uses":{"get_pung":[1816],"preg_match_all":[1828],"parse_url":[1842],"in_array":[1840],"url_to_postid":[1840],"is_local_attachment":[1841],"discover_pingback_server_uri":[1854],"set_time_limit":[1857],"get_permalink":[1859],"add_ping":[1869],"query":[1868]},"used_by":{"do_all_pings":[1716]}},"do_enclose":{"doc":"\/**\n * Check content for video and audio links to add as enclosures.\n *\n * Will not add enclosures that have already been added and will\n * remove enclosures that are no longer in the post. This is called as\n * pingbacks and trackbacks.\n *\n * @package WordPress\n * @since 1.5.0\n *\n * @uses $wpdb\n *\n * @param string $content Post Content\n * @param int $post_ID Post ID\n *\/","file":"functions.php","line":410,"missingDoc":false,"filters":[],"uses":{"get_enclosed":[418],"preg_match_all":[425],"get_col":[429],"prepare":[429,448],"like_escape":[429,448],"delete_metadata_by_mid":[431],"in_array":[428,436,470],"parse_url":[437,457],"pathinfo":[459],"preg_match":[462],"wp_get_mime_types":[461],"add_post_meta":[471],"substr":[470],"strpos":[470],"wp_get_http_headers":[450],"get_var":[448]},"used_by":{"do_all_pings":[1722]}},"do_trackbacks":{"doc":"\/**\n * Perform trackbacks.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID to do trackbacks on.\n *\/","file":"comment.php","line":1743,"missingDoc":false,"filters":["'the_content'","'the_excerpt'","'the_title'"],"uses":{"get_post":[1746],"get_to_ping":[1747],"get_pung":[1748],"update":[1750],"str_replace":[1758],"wp_html_excerpt":[1759],"strip_tags":[1762],"trim":[1766],"trackback":[1768],"query":[1771],"prepare":[1771],"in_array":[1767]},"used_by":{"do_all_pings":[1729]}},"generic_ping":{"doc":"\/**\n * Sends pings to all of the ping site services.\n *\n * @since 1.2.0\n *\n * @param int $post_id Post ID. Not actually used.\n * @return int Same as Post ID from parameter\n *\/","file":"comment.php","line":1785,"missingDoc":false,"filters":[],"uses":{"get_option":[1786],"explode":[1788],"trim":[1790],"weblog_ping":[1792]},"used_by":{"do_all_pings":[1732]}},"get_to_ping":{"doc":"\/**\n * Retrieve URLs that need to be pinged.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID\n * @return array\n *\/","file":"post.php","line":3360,"missingDoc":false,"filters":["'get_to_ping'"],"uses":{"get_var":[3362],"prepare":[3362],"sanitize_trackback_urls":[3363],"preg_split":[3364]},"used_by":{"do_trackbacks":[1747]}},"get_pung":{"doc":"\/**\n * Retrieve URLs already pinged for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @return array\n *\/","file":"post.php","line":3342,"missingDoc":false,"filters":["'get_pung'"],"uses":{"get_var":[3344],"prepare":[3344],"trim":[3345],"preg_split":[3346]},"used_by":{"do_trackbacks":[1748],"pingback":[1816]}},"trackback":{"doc":"\/**\n * Send a Trackback.\n *\n * Updates database when sending trackback to prevent duplicates.\n *\n * @since 0.71\n * @uses $wpdb\n *\n * @param string $trackback_url URL to send trackbacks.\n * @param string $title Title of post.\n * @param string $excerpt Excerpt of post.\n * @param int $ID Post ID.\n * @return mixed Database query from update.\n *\/","file":"comment.php","line":1903,"missingDoc":false,"filters":[],"uses":{"get_permalink":[1913],"get_option":[1914],"wp_remote_post":[1918],"is_wp_error":[1920],"query":[1923,1924],"prepare":[1923,1924]},"used_by":{"do_trackbacks":[1768],"trackback_url_list":[3395]}},"weblog_ping":{"doc":"\/**\n * Send a pingback.\n *\n * @since 1.2.0\n * @uses $wp_version\n * @uses IXR_Client\n *\n * @param string $server Host of blog to connect to.\n * @param string $path Path to send the ping.\n *\/","file":"comment.php","line":1937,"missingDoc":false,"filters":[],"uses":{"strlen":[1943],"trim":[1943],"trailingslashit":[1949],"home_url":[1949],"query":[1951,1950],"get_option":[1951,1950],"get_bloginfo":[1950]},"used_by":{"generic_ping":[1792]}},"is_local_attachment":{"doc":"\/**\n * Check if the attachment URI is local one and is really an attachment.\n *\n * @since 2.0.0\n *\n * @param string $url URL to check\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":3853,"missingDoc":false,"filters":[],"uses":{"strpos":[3854,3856],"home_url":[3854,3856],"get_post":[3859],"url_to_postid":[3858]},"used_by":{"pingback":[1841]}},"add_ping":{"doc":"\/**\n * Add a URL to those already pung.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @param string $uri Ping URI.\n * @return int How many rows were updated.\n *\/","file":"post.php","line":3293,"missingDoc":false,"filters":["'add_ping'"],"uses":{"get_var":[3295],"prepare":[3295],"trim":[3296],"preg_split":[3297],"implode":[3299],"stripslashes":[3302],"update":[3303]},"used_by":{"pingback":[1869]}},"privacy_ping_filter":{"doc":"\/**\n * Check whether blog is public before returning sites.\n *\n * @since 2.1.0\n *\n * @param mixed $sites Will return if blog is public, will not return if not public.\n * @return mixed Empty string if blog is not public, returns $sites, if site is public.\n *\/","file":"comment.php","line":1882,"missingDoc":false,"filters":[],"uses":{"get_option":[1883]},"used_by":[]},"_close_comments_for_old_posts":{"doc":"\/**\n * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts.\n *\n * @access private\n * @since 2.7.0\n *\n * @param object $posts Post data object.\n * @param object $query Query object.\n * @return object\n *\/","file":"comment.php","line":2011,"missingDoc":false,"filters":["'close_comments_for_post_types'"],"uses":{"is_singular":[2012],"get_option":[2012,2019],"in_array":[2016],"time":[2023],"strtotime":[2023]},"used_by":[]},"_close_comments_for_old_post":{"doc":"\/**\n * Close comments on an old post. Hooked to comments_open and pings_open.\n *\n * @access private\n * @since 2.7.0\n *\n * @param bool $open Comments open or closed\n * @param int $post_id Post ID\n * @return bool $open\n *\/","file":"comment.php","line":2041,"missingDoc":false,"filters":["'close_comments_for_post_types'"],"uses":{"get_option":[2045,2048],"get_post":[2052],"in_array":[2055],"time":[2058],"strtotime":[2058]},"used_by":[]},"_mb_substr":{"doc":"","file":"compat.php","line":22,"missingDoc":true,"filters":[],"uses":{"get_option":[25],"is_null":[27,31],"substr":[27,27],"in_array":[26],"preg_match_all":[30],"array_slice":[31,31],"implode":[32]},"used_by":{"mb_substr":[18]}},"hash_hmac":{"doc":"","file":"compat.php","line":36,"missingDoc":true,"filters":[],"uses":{"_hash_hmac":[37]},"used_by":{"wp_validate_auth_cookie":[549],"wp_generate_auth_cookie":[584],"wp_salt":[1376],"wp_hash":[1397]}},"_hash_hmac":{"doc":"","file":"compat.php","line":41,"missingDoc":true,"filters":[],"uses":{"pack":[50,57,60],"strlen":[49],"str_pad":[52],"chr":[52,54,55],"substr":[54,55],"str_repeat":[54,55]},"used_by":{"hash_hmac":[37]}},"_json_decode_object_helper":{"doc":"","file":"compat.php","line":91,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[93],"is_object":[92],"is_array":[94],"array_map":[94]},"used_by":{"json_decode":[88]}},"wp_schedule_single_event":{"doc":"\/**\n * Schedules a hook to run only once.\n *\n * Schedules a hook which will be executed once by the WordPress actions core at\n * a time which you specify. The action will fire off when someone visits your\n * WordPress site, if the schedule time has passed.\n *\n * @since 2.1.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/wp_schedule_single_event\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n *\/","file":"cron.php","line":22,"missingDoc":false,"filters":["'schedule_event'"],"uses":{"wp_next_scheduled":[24],"_get_cron_array":[28],"md5":[36],"serialize":[36],"uksort":[39],"_set_cron_array":[40]},"used_by":{"check_and_publish_future_post":[3065],"_future_post_hook":[4828],"_publish_post_hook":[4855]}},"wp_next_scheduled":{"doc":"\/**\n * Retrieve the next timestamp for a cron event.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|int The UNIX timestamp of the next time the scheduled event will occur.\n *\/","file":"cron.php","line":176,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[177],"md5":[178],"serialize":[178]},"used_by":{"wp_schedule_single_event":[24],"wp_clear_scheduled_hook":[163],"wp_schedule_update_network_counts":[1916],"wp_schedule_update_checks":[421,424,427]}},"_get_cron_array":{"doc":"\/**\n * Retrieve cron info array option.\n *\n * @since 2.1.0\n * @access private\n *\n * @return array CRON info array.\n *\/","file":"cron.php","line":361,"missingDoc":false,"filters":[],"uses":{"get_option":[362],"is_array":[363],"_upgrade_cron_array":[367]},"used_by":{"wp_schedule_single_event":[28],"wp_schedule_event":[64],"wp_reschedule_event":[96],"wp_unschedule_event":[137],"wp_next_scheduled":[177],"spawn_cron":[217],"wp_cron":[269],"wp_get_schedule":[338]}},"_set_cron_array":{"doc":"\/**\n * Updates the CRON option with the new CRON array.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $cron Cron info array from {@link _get_cron_array()}.\n *\/","file":"cron.php","line":382,"missingDoc":false,"filters":[],"uses":{"update_option":[384]},"used_by":{"wp_schedule_single_event":[40],"wp_schedule_event":[81],"wp_unschedule_event":[144]}},"wp_schedule_event":{"doc":"\/**\n * Schedule a periodic event.\n *\n * Schedules a hook which will be executed by the WordPress actions core on a\n * specific interval, specified by you. The action will trigger when someone\n * visits your WordPress site, if the scheduled time has passed.\n *\n * Valid values for the recurrence are hourly, daily and twicedaily. These can\n * be extended using the cron_schedules filter in wp_get_schedules().\n *\n * Use wp_next_scheduled() to prevent duplicates\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $recurrence How often the event should recur.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|null False on failure, null when complete with scheduling event.\n *\/","file":"cron.php","line":63,"missingDoc":false,"filters":["'schedule_event'"],"uses":{"_get_cron_array":[64],"wp_get_schedules":[65],"md5":[77],"serialize":[77],"uksort":[80],"_set_cron_array":[81]},"used_by":{"wp_reschedule_event":[118],"wp_schedule_update_network_counts":[1917],"wp_schedule_update_checks":[422,425,428]}},"wp_get_schedules":{"doc":"\/**\n * Retrieve supported and filtered Cron recurrences.\n *\n * The supported recurrences are 'hourly' and 'daily'. A plugin may add more by\n * hooking into the 'cron_schedules' filter. The filter accepts an array of\n * arrays. The outer array has a key that is the name of the schedule or for\n * example 'weekly'. The value is an array with two keys, one is 'interval' and\n * the other is 'display'.\n *\n * The 'interval' is a number in seconds of when the cron job should run. So for\n * 'hourly', the time is 3600 or 60*60. For weekly, the value would be\n * 60*60*24*7 or 604800. The value of 'interval' would then be 604800.\n *\n * The 'display' is the description. For the 'weekly' key, the 'display' would\n * be <code>__('Once Weekly')<\/code>.\n *\n * For your plugin, you will be passed an array. you can easily add your\n * schedule by doing the following.\n * <code>\n * \/\/ filter parameter variable name is 'array'\n *\t$array['weekly'] = array(\n *\t\t'interval' => 604800,\n *\t\t'display' => __('Once Weekly')\n *\t);\n * <\/code>\n *\n * @since 2.1.0\n *\n * @return array\n *\/","file":"cron.php","line":319,"missingDoc":false,"filters":["'cron_schedules'"],"uses":{"__":[321,322,323],"array_merge":[325]},"used_by":{"wp_schedule_event":[65],"wp_reschedule_event":[97],"wp_cron":[277]}},"wp_reschedule_event":{"doc":"\/**\n * Reschedule a recurring event.\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $recurrence How often the event should recur.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|null False on failure. Null when event is rescheduled.\n *\/","file":"cron.php","line":95,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[96],"wp_get_schedules":[97],"md5":[98],"serialize":[98],"time":[111],"wp_schedule_event":[118]},"used_by":[]},"wp_unschedule_event":{"doc":"\/**\n * Unschedule a previously scheduled cron job.\n *\n * The $timestamp and $hook parameters are required, so that the event can be\n * identified.\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $hook Action hook, the execution of which will be unscheduled.\n * @param array $args Arguments to pass to the hook's callback function.\n * Although not passed to a callback function, these arguments are used\n * to uniquely identify the scheduled event, so they should be the same\n * as those used when originally scheduling the event.\n *\/","file":"cron.php","line":136,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[137],"md5":[138],"serialize":[138],"_set_cron_array":[144]},"used_by":{"wp_clear_scheduled_hook":[164]}},"wp_clear_scheduled_hook":{"doc":"\/**\n * Unschedule all cron jobs attached to a specific hook.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook, the execution of which will be unscheduled.\n * @param array $args Optional. Arguments that were to be pass to the hook's callback function.\n *\/","file":"cron.php","line":155,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[159],"__":[159],"array_slice":[160],"func_get_args":[160],"is_array":[158],"wp_next_scheduled":[163],"wp_unschedule_event":[164]},"used_by":{"wp_delete_post":[2377],"check_and_publish_future_post":[3064],"_transition_post_status":[4810],"_future_post_hook":[4827]}},"spawn_cron":{"doc":"\/**\n * Send request to run cron through HTTP request that doesn't halt page loading.\n *\n * @since 2.1.0\n *\n * @return null Cron could not be spawned, because it is not needed to run.\n *\/","file":"cron.php","line":195,"missingDoc":false,"filters":["'cron_request'","'https_local_ssl_verify'"],"uses":{"microtime":[198],"defined":[200,226,225],"get_transient":[207],"_get_cron_array":[217],"is_array":[218],"array_keys":[221],"sprintf":[229,244],"set_transient":[230,245],"ob_start":[232],"wp_redirect":[233],"add_query_arg":[233],"stripslashes":[233],"ob_end_flush":[237],"flush":[238],"site_url":[248],"wp_remote_post":[253]},"used_by":{"wp_cron":[283]}},"wp_cron":{"doc":"\/**\n * Run scheduled callbacks or spawn cron for all scheduled events.\n *\n * @since 2.1.0\n *\n * @return null When doesn't need to run Cron.\n *\/","file":"cron.php","line":263,"missingDoc":false,"filters":[],"uses":{"strpos":[266],"defined":[266],"_get_cron_array":[269],"microtime":[272],"array_keys":[273],"wp_get_schedules":[277],"call_user_func":[281],"spawn_cron":[283]},"used_by":[]},"wp_get_schedule":{"doc":"\/**\n * Retrieve Cron schedule for hook with arguments.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return string|bool False, if no schedule. Schedule on success.\n *\/","file":"cron.php","line":337,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[338],"md5":[339],"serialize":[339]},"used_by":[]},"_upgrade_cron_array":{"doc":"\/**\n * Upgrade a Cron info array.\n *\n * This function upgrades the Cron info array to version 2.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $cron Cron info array from {@link _get_cron_array()}.\n * @return array An upgraded Cron info array.\n *\/","file":"cron.php","line":398,"missingDoc":false,"filters":[],"uses":{"md5":[406],"serialize":[406],"update_option":[412]},"used_by":{"_get_cron_array":[367]}},"wp_initial_constants":{"doc":"\/**\n * Defines initial WordPress constants\n *\n * @see wp_debug_mode()\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":15,"missingDoc":false,"filters":[],"uses":{"define":[21,23,28,49,53,58,62,65,71,74,78,79,80,81,82],"is_multisite":[20],"defined":[19,27,48,52,57,61,64,70,73],"ini_get":[43],"ini_set":[45],"intval":[44,44],"abs":[44],"function_exists":[42]},"used_by":[]},"wp_plugin_directory_constants":{"doc":"\/**\n * Defines plugin directory WordPress constants\n *\n * Defines must-use plugin directory constants, which may be overridden in the sunrise.php drop-in\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":92,"missingDoc":false,"filters":[],"uses":{"define":[94,102,110,119,127,135,144],"get_option":[94],"defined":[93,101,109,118,126,134,143]},"used_by":[]},"wp_cookie_constants":{"doc":"\/**\n * Defines cookie related WordPress constants\n *\n * Defines constants after multisite is loaded. Cookie-related constants may be overridden in ms_network_cookies().\n * @since 3.0.0\n *\/","file":"default-constants.php","line":153,"missingDoc":false,"filters":[],"uses":{"get_site_option":[159],"define":[161,163,170,176,182,188,194,200,206,212,218,224,230],"md5":[161],"defined":[158,169,175,181,187,193,199,205,211,217,223,229],"preg_replace":[206,212,224],"get_option":[206,212]},"used_by":[]},"wp_ssl_constants":{"doc":"\/**\n * Defines cookie related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":238,"missingDoc":false,"filters":[],"uses":{"define":[243,250],"defined":[242,249],"force_ssl_admin":[244],"force_ssl_login":[251]},"used_by":[]},"force_ssl_admin":{"doc":"\/**\n * Whether to force SSL used for the Administration Screens.\n *\n * @since 2.6.0\n *\n * @param string|bool $force\n * @return bool True if forced, false if not forced.\n *\/","file":"functions.php","line":3132,"missingDoc":false,"filters":[],"uses":{"is_null":[3135]},"used_by":{"wp_ssl_constants":[244],"set_url_scheme":[2230,2232,2228],"auth_redirect":[745]}},"force_ssl_login":{"doc":"\/**\n * Whether SSL login should be forced.\n *\n * @since 2.6.0\n *\n * @param string|bool $force Optional.\n * @return bool True if forced, false if not forced.\n *\/","file":"functions.php","line":3112,"missingDoc":false,"filters":[],"uses":{"is_null":[3115]},"used_by":{"wp_ssl_constants":[251],"set_url_scheme":[2228]}},"wp_functionality_constants":{"doc":"\/**\n * Defines functionality related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":259,"missingDoc":false,"filters":[],"uses":{"define":[264,270,273,279],"defined":[263,269,272,278]},"used_by":[]},"wp_templating_constants":{"doc":"\/**\n * Defines templating related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":287,"missingDoc":false,"filters":[],"uses":{"define":[292,298,307],"get_template_directory":[292],"get_stylesheet_directory":[298],"defined":[306]},"used_by":[]},"WP_Widget_Pages::__construct":{"doc":"","file":"default-widgets.php","line":16,"missingDoc":true,"filters":[],"uses":{"__":[17,18]},"used_by":[]},"WP_Widget_Pages::widget":{"doc":"","file":"default-widgets.php","line":21,"missingDoc":true,"filters":["'widget_title'","'widget_pages_args'"],"uses":{"extract":[22],"__":[24],"wp_list_pages":[31]},"used_by":[]},"wp_list_pages":{"doc":"\/**\n * Retrieve or display list of pages in list (li) format.\n *\n * @since 1.5.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return string HTML content, if not displaying.\n *\/","file":"post-template.php","line":813,"missingDoc":false,"filters":["'wp_list_pages_excludes'","'wp_list_pages'"],"uses":{"get_option":[816],"__":[818],"wp_parse_args":[823],"extract":[824],"preg_replace":[830],"explode":[833],"implode":[834],"get_pages":[838],"get_queried_object_id":[846],"is_page":[845],"is_attachment":[845],"walk_page_tree":[847]},"used_by":{"WP_Widget_Pages::widget":[31],"wp_page_menu":[919],"__main":[55]}},"WP_Widget_Pages::update":{"doc":"","file":"default-widgets.php","line":46,"missingDoc":true,"filters":[],"uses":{"strip_tags":[48,55],"in_array":[49]},"used_by":[]},"WP_Widget_Pages::form":{"doc":"","file":"default-widgets.php","line":60,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[62],"esc_attr":[63,64],"get_field_id":[66,66,68,69,76,76],"_e":[66,68,70,71,72,76,78],"get_field_name":[66,69,76],"selected":[70,71,72]},"used_by":[]},"WP_Widget_Links::__construct":{"doc":"","file":"default-widgets.php","line":92,"missingDoc":true,"filters":[],"uses":{"__":[93,94]},"used_by":[]},"WP_Widget_Links::widget":{"doc":"","file":"default-widgets.php","line":97,"missingDoc":true,"filters":["'widget_links_args'"],"uses":{"extract":[98],"preg_replace":[109],"wp_list_bookmarks":[110]},"used_by":[]},"WP_Widget_Links::update":{"doc":"","file":"default-widgets.php","line":121,"missingDoc":true,"filters":[],"uses":{"in_array":[130],"intval":[133,134]},"used_by":[]},"WP_Widget_Links::form":{"doc":"","file":"default-widgets.php","line":139,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[142],"get_terms":[143],"intval":[144,153,179],"get_field_id":[148,149,159,160,168,169,170,171,172,173,174,175,178,179],"_e":[148,159,161,162,163,169,171,173,175,178],"get_field_name":[149,160,168,170,172,174,179],"_ex":[150,164],"selected":[154,161,162,163,164],"checked":[168,170,172,174]},"used_by":[]},"WP_Widget_Search::__construct":{"doc":"","file":"default-widgets.php","line":192,"missingDoc":true,"filters":[],"uses":{"__":[193,194]},"used_by":[]},"WP_Widget_Search::widget":{"doc":"","file":"default-widgets.php","line":197,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[198],"get_search_form":[206]},"used_by":[]},"get_search_form":{"doc":"\/**\n * Display search form.\n *\n * Will first attempt to locate the searchform.php file in either the child or\n * the parent, then load it. If it doesn't exist, then the default search form\n * will be displayed. The default search form is HTML, which will be displayed.\n * There is a filter applied to the search form HTML in order to edit or replace\n * it. The filter is 'get_search_form'.\n *\n * This function is primarily used by themes which want to hardcode the search\n * form into the sidebar and also by the search widget in WordPress.\n *\n * There is also an action that is called whenever the function is run called,\n * 'get_search_form'. This can be useful for outputting JavaScript that the\n * search relies on or various formatting that applies to the beginning of the\n * search. To give a few examples of what it can be used for.\n *\n * @since 2.7.0\n * @param boolean $echo Default to echo and not return the form.\n * @return string|null String when retrieving, null when displaying or if searchform.php exists.\n *\/","file":"general-template.php","line":152,"missingDoc":false,"filters":["'get_search_form'","'get_search_form'","'get_search_form'"],"uses":{"locate_template":[155],"esc_url":[161],"home_url":[161],"__":[162],"get_search_query":[163],"esc_attr__":[164]},"used_by":{"WP_Widget_Search::widget":[206],"__main":[17]}},"WP_Widget_Search::form":{"doc":"","file":"default-widgets.php","line":211,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[212],"get_field_id":[215,215],"_e":[215],"get_field_name":[215],"esc_attr":[215]},"used_by":[]},"WP_Widget_Search::update":{"doc":"","file":"default-widgets.php","line":219,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[221],"strip_tags":[222]},"used_by":[]},"WP_Widget_Archives::__construct":{"doc":"","file":"default-widgets.php","line":235,"missingDoc":true,"filters":[],"uses":{"__":[236,237]},"used_by":[]},"WP_Widget_Archives::widget":{"doc":"","file":"default-widgets.php","line":240,"missingDoc":true,"filters":["'widget_title'","'widget_archives_dropdown_args'","'widget_archives_args'"],"uses":{"extract":[241],"__":[244,252],"esc_attr":[252],"wp_get_archives":[252,257]},"used_by":[]},"wp_get_archives":{"doc":"\/**\n * Display archive links based on type and format.\n *\n * The 'type' argument offers a few choices and by default will display monthly\n * archive links. The other options for values are 'daily', 'weekly', 'monthly',\n * 'yearly', 'postbypost' or 'alpha'. Both 'postbypost' and 'alpha' display the\n * same archive link list, the difference between the two is that 'alpha'\n * will order by post title and 'postbypost' will order by post date.\n *\n * The date archives will logically display dates with links to the archive post\n * page. The 'postbypost' and 'alpha' values for 'type' argument will display\n * the post titles.\n *\n * The 'limit' argument will only display a limited amount of links, specified\n * by the 'limit' integer value. By default, there is no limit. The\n * 'show_post_count' argument will show how many posts are within the archive.\n * By default, the 'show_post_count' argument is set to false.\n *\n * For the 'format', 'before', and 'after' arguments, see {@link\n * get_archives_link()}. The values of these arguments have to do with that\n * function.\n *\n * @since 1.2.0\n *\n * @param string|array $args Optional. Override defaults.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":871,"missingDoc":false,"filters":["'getarchives_where'","'getarchives_join'","'the_title'"],"uses":{"wp_parse_args":[881],"extract":[882],"absint":[888],"strtoupper":[892],"get_option":[910,911,912,1005],"md5":[923,945,966,989,1019],"wp_cache_get":[924,946,967,990,1020],"get_results":[926,948,969,992,1022],"wp_cache_set":[928,950,971,994,1024],"get_month_link":[935],"sprintf":[937,958,979,1008],"__":[937],"get_month":[937],"get_archives_link":[940,961,983,1012,1036],"get_year_link":[957],"get_day_link":[978],"mysql2date":[980],"_wp_mysql_week":[987],"get_weekstartend":[1005],"date_i18n":[1006,1007],"home_url":[1008],"get_permalink":[1031],"strip_tags":[1033]},"used_by":{"WP_Widget_Archives::widget":[252,257],"get_archives":[786],"__main":[59]}},"WP_Widget_Archives::update":{"doc":"","file":"default-widgets.php","line":265,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[267],"strip_tags":[268]},"used_by":[]},"WP_Widget_Archives::form":{"doc":"","file":"default-widgets.php","line":275,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[276],"strip_tags":[277],"get_field_id":[281,281,283,283,285,285],"_e":[281,283,285],"get_field_name":[281,283,285],"esc_attr":[281]},"used_by":[]},"WP_Widget_Meta::__construct":{"doc":"","file":"default-widgets.php","line":300,"missingDoc":true,"filters":[],"uses":{"__":[301,302]},"used_by":[]},"WP_Widget_Meta::widget":{"doc":"","file":"default-widgets.php","line":305,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[306],"__":[307,316,317,318],"wp_register":[314],"wp_loginout":[315],"bloginfo":[316,317],"esc_attr":[316,317,318],"_e":[316,317,320],"esc_attr_e":[318],"wp_meta":[322]},"used_by":[]},"wp_register":{"doc":"\/**\n * Display the Registration or Admin link.\n *\n * Display a link which allows the user to navigate to the registration page if\n * not logged in and registration is enabled or to the dashboard if logged in.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'register' hook on register \/ admin link content.\n *\n * @param string $before Text to output before the link (defaults to <li>).\n * @param string $after Text to output after the link (defaults to <\/li>).\n * @param boolean $echo Default to echo and not return the link.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":337,"missingDoc":false,"filters":["'register'","'register'"],"uses":{"site_url":[341],"__":[341,345],"get_option":[340],"admin_url":[345],"is_user_logged_in":[339]},"used_by":{"WP_Widget_Meta::widget":[314],"__main":[71]}},"wp_loginout":{"doc":"\/**\n * Display the Log In\/Out link.\n *\n * Displays a link, which allows users to navigate to the Log In page to log in\n * or log out depending on whether they are currently logged in.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'loginout' hook on HTML link content.\n *\n * @param string $redirect Optional path to redirect to on login\/logout.\n * @param boolean $echo Default to echo and not return the link.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":187,"missingDoc":false,"filters":["'loginout'","'loginout'"],"uses":{"esc_url":[189,191],"wp_login_url":[189],"__":[189,191],"wp_logout_url":[191],"is_user_logged_in":[188]},"used_by":{"WP_Widget_Meta::widget":[315],"__main":[72]}},"bloginfo":{"doc":"\/**\n * Display information about the blog.\n *\n * @see get_bloginfo() For possible values for the parameter.\n * @since 0.71\n *\n * @param string $show What to display.\n *\/","file":"general-template.php","line":376,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[377]},"used_by":{"WP_Widget_Meta::widget":[316,317],"__main":[25,15,16,18,16,16,18,20,21,29,29,31,45,46]}},"wp_meta":{"doc":"\/**\n * Theme container function for the 'wp_meta' action.\n *\n * The 'wp_meta' action can have several purposes, depending on how you use it,\n * but one purpose might have been to allow for theme switching.\n *\n * @since 1.5.0\n * @link http:\/\/trac.wordpress.org\/ticket\/1458 Explanation of 'wp_meta' action.\n * @uses do_action() Calls 'wp_meta' hook.\n *\/","file":"general-template.php","line":364,"missingDoc":false,"filters":["'wp_meta'"],"uses":[],"used_by":{"WP_Widget_Meta::widget":[322],"__main":[76]}},"WP_Widget_Meta::update":{"doc":"","file":"default-widgets.php","line":328,"missingDoc":true,"filters":[],"uses":{"strip_tags":[330]},"used_by":[]},"WP_Widget_Meta::form":{"doc":"","file":"default-widgets.php","line":335,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[336],"strip_tags":[337],"get_field_id":[339,339],"_e":[339],"get_field_name":[339],"esc_attr":[339]},"used_by":[]},"WP_Widget_Calendar::__construct":{"doc":"","file":"default-widgets.php","line":351,"missingDoc":true,"filters":[],"uses":{"__":[352,353]},"used_by":[]},"WP_Widget_Calendar::widget":{"doc":"","file":"default-widgets.php","line":356,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[357],"get_calendar":[363]},"used_by":[]},"get_calendar":{"doc":"\/**\n * Display calendar with days that have posts as links.\n *\n * The calendar is cached, which will be retrieved, if it exists. If there are\n * no posts for the month, then it will not be displayed.\n *\n * @since 1.0.0\n * @uses calendar_week_mod()\n *\n * @param bool $initial Optional, default is true. Use initial calendar names.\n * @param bool $echo Optional, default is true. Set to false for return.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":1073,"missingDoc":false,"filters":["'get_calendar'","'get_calendar'","'the_title'","'get_calendar'","'get_calendar'"],"uses":{"md5":[1077],"is_array":[1079,1089],"wp_cache_get":[1078],"get_var":[1094,1116],"wp_cache_set":[1097,1264],"intval":[1103,1106,1110,1111,1114,1118,1122,1236],"get_option":[1106],"zeroise":[1110,1122],"substr":[1114,1118,1122],"strlen":[1119],"gmdate":[1124,1125,1242,1242,1242],"current_time":[1124,1125,1242,1242,1242],"mktime":[1128,1172,1180,1253,1257],"date":[1129,1148,1172,1180,1232,1236,1253,1257],"get_row":[1132,1138],"_x":[1146],"sprintf":[1148,1172,1180],"get_month":[1148,1172,1172,1180,1180],"get_weekday":[1155],"get_weekday_initial":[1159],"get_weekday_abbrev":[1159],"esc_attr":[1160,1172,1180,1220,1234,1248,1259],"get_month_link":[1172,1180],"__":[1172,1180],"get_month_abbrev":[1172,1180],"get_results":[1193,1211],"strpos":[1205],"stripos":[1205,1205],"calendar_week_mod":[1232,1253,1257],"get_day_link":[1248],"in_array":[1247]},"used_by":{"WP_Widget_Calendar::widget":[363]}},"WP_Widget_Calendar::update":{"doc":"","file":"default-widgets.php","line":368,"missingDoc":true,"filters":[],"uses":{"strip_tags":[370]},"used_by":[]},"WP_Widget_Calendar::form":{"doc":"","file":"default-widgets.php","line":375,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[376],"strip_tags":[377],"get_field_id":[379,380],"_e":[379],"get_field_name":[380],"esc_attr":[380]},"used_by":[]},"WP_Widget_Text::__construct":{"doc":"","file":"default-widgets.php","line":392,"missingDoc":true,"filters":[],"uses":{"__":[393,395]},"used_by":[]},"WP_Widget_Text::widget":{"doc":"","file":"default-widgets.php","line":398,"missingDoc":true,"filters":["'widget_title'","'widget_text'"],"uses":{"extract":[399],"wpautop":[404]},"used_by":[]},"wpautop":{"doc":"\/**\n * Replaces double line-breaks with paragraph elements.\n *\n * A group of regex replaces used to identify text formatted with newlines and\n * replace double line-breaks with HTML paragraph tags. The remaining\n * line-breaks after conversion become <<br \/>> tags, unless $br is set to '0'\n * or 'false'.\n *\n * @since 0.71\n *\n * @param string $pee The text which has to be formatted.\n * @param bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true.\n * @return string Text which has been converted into correct paragraph tags.\n *\/","file":"formatting.php","line":188,"missingDoc":false,"filters":[],"uses":{"trim":[191,236],"explode":[197],"array_pop":[198],"strpos":[203,196,227],"substr":[212,214],"preg_replace":[221,224,225,228,229,231,237,238,239,240,241,243,244,247,250,251,252],"str_replace":[226,242,248,255],"preg_split":[233],"preg_replace_callback":[246],"array_keys":[255],"array_values":[255]},"used_by":{"WP_Widget_Text::widget":[404],"wp_richedit_pre":[2495]}},"WP_Widget_Text::update":{"doc":"","file":"default-widgets.php","line":409,"missingDoc":true,"filters":[],"uses":{"strip_tags":[411],"stripslashes":[415],"wp_filter_post_kses":[415],"addslashes":[415],"current_user_can":[412]},"used_by":[]},"wp_filter_post_kses":{"doc":"\/**\n * Sanitize content for allowed HTML tags for post content.\n *\n * Post content refers to the page contents of the 'post' type and not $_POST\n * data from forms.\n *\n * @since 2.0.0\n *\n * @param string $data Post content to filter, expected to be escaped with slashes\n * @return string Filtered post content with allowed HTML tags and attributes intact.\n *\/","file":"kses.php","line":1284,"missingDoc":false,"filters":[],"uses":{"addslashes":[1285],"wp_kses":[1285],"stripslashes":[1285]},"used_by":{"WP_Widget_Text::update":[415]}},"WP_Widget_Text::form":{"doc":"","file":"default-widgets.php","line":420,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[421],"strip_tags":[422],"esc_textarea":[423],"get_field_id":[425,426,428,430,430],"_e":[425,430],"get_field_name":[426,428,430],"esc_attr":[426],"checked":[430]},"used_by":[]},"esc_textarea":{"doc":"\/**\n * Escaping for textarea values.\n *\n * @since 3.1\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2699,"missingDoc":false,"filters":["'esc_textarea'"],"uses":{"htmlspecialchars":[2700]},"used_by":{"WP_Widget_Text::form":[423],"format_to_edit":[1300]}},"WP_Widget_Categories::__construct":{"doc":"","file":"default-widgets.php","line":442,"missingDoc":true,"filters":[],"uses":{"__":[443,444]},"used_by":[]},"WP_Widget_Categories::widget":{"doc":"","file":"default-widgets.php","line":447,"missingDoc":true,"filters":["'widget_title'","'widget_categories_dropdown_args'","'widget_categories_args'"],"uses":{"extract":[448],"__":[450,462],"wp_dropdown_categories":[463],"home_url":[471],"wp_list_categories":[484]},"used_by":[]},"WP_Widget_Categories::update":{"doc":"","file":"default-widgets.php","line":493,"missingDoc":true,"filters":[],"uses":{"strip_tags":[495]},"used_by":[]},"WP_Widget_Categories::form":{"doc":"","file":"default-widgets.php","line":503,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[505],"esc_attr":[506],"get_field_id":[511,512,514,515,517,518,520,521],"_e":[511,515,518,521],"get_field_name":[512,514,517,520],"checked":[514,517,520]},"used_by":[]},"WP_Widget_Recent_Posts::__construct":{"doc":"","file":"default-widgets.php","line":534,"missingDoc":true,"filters":[],"uses":{"__":[535,536],"add_action":[539,540,541]},"used_by":[]},"WP_Widget_Recent_Posts::widget":{"doc":"","file":"default-widgets.php","line":544,"missingDoc":true,"filters":["'widget_title'","'widget_posts_args'"],"uses":{"wp_cache_get":[545],"is_array":[547],"ob_start":[558],"extract":[559],"__":[561],"absint":[562],"have_posts":[572,567],"the_post":[572],"the_permalink":[574],"esc_attr":[574],"get_the_title":[574,574,574],"get_the_ID":[574],"the_title":[574],"the_ID":[574],"get_the_date":[576],"wp_reset_postdata":[584],"ob_get_flush":[588],"wp_cache_set":[589]},"used_by":[]},"have_posts":{"doc":"\/**\n * Whether current WordPress query has results to loop over.\n *\n * @see WP_Query::have_posts()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":740,"missingDoc":false,"filters":[],"uses":{"have_posts":[743]},"used_by":{"WP_Widget_Recent_Posts::widget":[572,567],"__main":[29,32,38,22,33,31,30],"have_posts":[743]}},"the_post":{"doc":"\/**\n * Iterate the post index in the loop.\n *\n * @see WP_Query::the_post()\n * @since 1.5.0\n * @uses $wp_query\n *\/","file":"query.php","line":782,"missingDoc":false,"filters":[],"uses":{"the_post":[785]},"used_by":{"WP_Widget_Recent_Posts::widget":[572],"__main":[29,32,38,22,33,31],"the_post":[785]}},"the_title":{"doc":"\/**\n * Display or retrieve the current post title with optional content.\n *\n * @since 0.71\n *\n * @param string $before Optional. Content to prepend to the title.\n * @param string $after Optional. Content to append to the title.\n * @param bool $echo Optional, default to true.Whether to display or return.\n * @return null|string Null on no title. String if $echo parameter is false.\n *\/","file":"post-template.php","line":42,"missingDoc":false,"filters":[],"uses":{"get_the_title":[43],"strlen":[45]},"used_by":{"WP_Widget_Recent_Posts::widget":[574],"__main":[14]}},"the_ID":{"doc":"\/**\n * Display the ID of the current item in the WordPress Loop.\n *\n * @since 0.71\n *\/","file":"post-template.php","line":16,"missingDoc":false,"filters":[],"uses":{"get_the_ID":[17]},"used_by":{"WP_Widget_Recent_Posts::widget":[574]}},"get_the_date":{"doc":"\/**\n * Retrieve the date the current $post was written.\n *\n * Unlike the_date() this function will always return the date.\n * Modify output with 'get_the_date' filter.\n *\n * @since 3.0.0\n *\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1375,"missingDoc":false,"filters":["'get_the_date'"],"uses":{"get_post":[1376],"mysql2date":[1380,1382],"get_option":[1380]},"used_by":{"WP_Widget_Recent_Posts::widget":[576],"the_date":[1349]}},"wp_reset_postdata":{"doc":"\/**\n * After looping through a separate query, this function restores\n * the $post global to the current post in the main query\n *\n * @since 3.0.0\n * @uses $wp_query\n *\/","file":"query.php","line":116,"missingDoc":false,"filters":[],"uses":{"setup_postdata":[120]},"used_by":{"WP_Widget_Recent_Posts::widget":[584],"wp_reset_query":[106]}},"WP_Widget_Recent_Posts::update":{"doc":"","file":"default-widgets.php","line":592,"missingDoc":true,"filters":[],"uses":{"strip_tags":[594],"flush_widget_cache":[597],"wp_cache_get":[599],"delete_option":[601]},"used_by":[]},"WP_Widget_Recent_Posts::flush_widget_cache":{"doc":"","file":"default-widgets.php","line":606,"missingDoc":true,"filters":[],"uses":{"wp_cache_delete":[607]},"used_by":[]},"WP_Widget_Recent_Posts::form":{"doc":"","file":"default-widgets.php","line":610,"missingDoc":true,"filters":[],"uses":{"esc_attr":[611],"absint":[612],"get_field_id":[615,616,618,619,621,622],"_e":[615,618,622],"get_field_name":[616,619,621],"checked":[621]},"used_by":[]},"WP_Widget_Recent_Comments::__construct":{"doc":"","file":"default-widgets.php","line":634,"missingDoc":true,"filters":[],"uses":{"__":[635,636],"add_action":[640,642,643],"is_active_widget":[639]},"used_by":[]},"is_active_widget":{"doc":"\/**\n * Whether widget is displayed on the front-end.\n *\n * Either $callback or $id_base can be used\n * $id_base is the first argument when extending WP_Widget class\n * Without the optional $widget_id parameter, returns the ID of the first sidebar\n * in which the first instance of the widget with the given callback or $id_base is found.\n * With the $widget_id parameter, returns the ID of the sidebar where\n * the widget with that callback\/$id_base AND that ID is found.\n *\n * NOTE: $widget_id and $id_base are the same for single widgets. To be effective\n * this function has to run after widgets have initialized, at action 'init' or later.\n *\n * @since 2.2.0\n *\n * @param string $callback Optional, Widget callback to check.\n * @param int $widget_id Optional, but needed for checking. Widget ID.\n * @param string $id_base Optional, the base ID of a widget created by extending WP_Widget.\n * @param bool $skip_inactive Optional, whether to check in 'wp_inactive_widgets'.\n * @return mixed false if widget is not active or id of sidebar in which the widget is active.\n *\/","file":"widgets.php","line":933,"missingDoc":false,"filters":[],"uses":{"wp_get_sidebars_widgets":[936],"_get_widget_id_base":[945],"is_array":[943,938]},"used_by":{"WP_Widget_Recent_Comments::__construct":[639]}},"WP_Widget_Recent_Comments::recent_comments_style":{"doc":"","file":"default-widgets.php","line":646,"missingDoc":true,"filters":["'show_recent_comments_widget_style'"],"uses":{"current_theme_supports":[647]},"used_by":[]},"WP_Widget_Recent_Comments::flush_widget_cache":{"doc":"","file":"default-widgets.php","line":655,"missingDoc":true,"filters":[],"uses":{"wp_cache_delete":[656]},"used_by":[]},"WP_Widget_Recent_Comments::widget":{"doc":"","file":"default-widgets.php","line":659,"missingDoc":true,"filters":["'widget_title'","'widget_comments_args'"],"uses":{"wp_cache_get":[662],"is_array":[664],"extract":[675],"__":[677],"absint":[679],"get_comments":[682],"array_unique":[690],"wp_list_pluck":[690],"_prime_post_caches":[691],"strpos":[691],"get_option":[691],"sprintf":[694],"_x":[694],"get_comment_author_link":[694],"esc_url":[694],"get_comment_link":[694],"get_the_title":[694],"wp_cache_set":[702]},"used_by":[]},"wp_list_pluck":{"doc":"\/**\n * Pluck a certain field out of each object in a list.\n *\n * @since 3.1.0\n *\n * @param array $list A list of objects or arrays\n * @param int|string $field A field from the object to place instead of the entire object\n * @return array\n *\/","file":"functions.php","line":2674,"missingDoc":false,"filters":[],"uses":{"is_object":[2676]},"used_by":{"WP_Widget_Recent_Comments::widget":[690],"wp_filter_object_list":[2616],"wp_enqueue_media":[1461],"WP_Post::__get":[627,637],"WP_Query::get_posts":[2225]}},"_prime_post_caches":{"doc":"\/**\n * Adds any posts from the given ids to the cache that do not already exist in cache\n *\n * @since 3.4.0\n *\n * @access private\n *\n * @param array $post_ids ID list\n * @param bool $update_term_cache Whether to update the term cache. Default is true.\n * @param bool $update_meta_cache Whether to update the meta cache. Default is true.\n *\/","file":"post.php","line":5552,"missingDoc":false,"filters":[],"uses":{"_get_non_cached_ids":[5555],"get_results":[5557],"sprintf":[5557],"join":[5557],"update_post_caches":[5559]},"used_by":{"WP_Widget_Recent_Comments::widget":[691],"update_post_thumbnail_cache":[70],"WP_Query::get_posts":[2668]}},"WP_Widget_Recent_Comments::update":{"doc":"","file":"default-widgets.php","line":705,"missingDoc":true,"filters":[],"uses":{"strip_tags":[707],"absint":[708],"flush_widget_cache":[709],"wp_cache_get":[711],"delete_option":[713]},"used_by":[]},"WP_Widget_Recent_Comments::form":{"doc":"","file":"default-widgets.php","line":718,"missingDoc":true,"filters":[],"uses":{"esc_attr":[719],"absint":[720],"get_field_id":[722,723,725,726],"_e":[722,725],"get_field_name":[723,726]},"used_by":[]},"WP_Widget_RSS::__construct":{"doc":"","file":"default-widgets.php","line":738,"missingDoc":true,"filters":[],"uses":{"__":[739,741]},"used_by":[]},"WP_Widget_RSS::widget":{"doc":"","file":"default-widgets.php","line":744,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[749],"stristr":[752,772],"substr":[753,773],"in_array":[759],"untrailingslashit":[759],"site_url":[759],"home_url":[759],"fetch_feed":[762],"esc_attr":[768],"strip_tags":[768,770,771,780],"html_entity_decode":[768],"get_description":[768],"get_option":[768],"esc_html":[770],"get_title":[770],"esc_url":[771,780],"get_permalink":[771],"is_wp_error":[767,791],"__":[777],"includes_url":[781],"esc_attr__":[783],"wp_widget_rss_output":[788],"__destruct":[792]},"used_by":[]},"fetch_feed":{"doc":"\/**\n * Build SimplePie object based on RSS or Atom feed from URL.\n *\n * @since 2.8\n *\n * @param string $url URL to retrieve feed\n * @return WP_Error|SimplePie WP_Error object on failure or SimplePie object on success\n *\/","file":"feed.php","line":526,"missingDoc":false,"filters":["'wp_feed_cache_transient_lifetime'","'wp_feed_options'"],"uses":{"set_sanitize_class":[531],"set_cache_class":[536],"set_file_class":[537],"set_feed_url":[539],"set_cache_duration":[540],"init":[542],"handle_content_type":[543],"error":[546,545]},"used_by":{"WP_Widget_RSS::widget":[762],"wp_widget_rss_output":[821,824],"wp_widget_rss_process":[1004]}},"wp_widget_rss_output":{"doc":"\/**\n * Display the RSS entries in a list.\n *\n * @since 2.5.0\n *\n * @param string|array|object $rss RSS url.\n * @param array $args Widget arguments.\n *\/","file":"default-widgets.php","line":819,"missingDoc":false,"filters":[],"uses":{"fetch_feed":[821,824],"is_array":[822],"is_object":[825,892],"is_string":[820],"sprintf":[831],"__":[831,847,861],"get_error_message":[831],"is_admin":[830],"current_user_can":[830],"is_wp_error":[829],"wp_parse_args":[836],"extract":[837],"__destruct":[848,905],"get_item_quantity":[846],"get_link":[855],"stristr":[856],"substr":[857,868,869,867],"esc_url":[858],"strip_tags":[858,859,863,894],"esc_attr":[859,863],"get_title":[859],"str_replace":[863],"html_entity_decode":[863],"get_description":[863],"get_option":[863,885],"wp_html_excerpt":[864],"esc_html":[872,894],"get_date":[882],"date_i18n":[885],"get_author":[891],"get_name":[893],"get_items":[854]},"used_by":{"WP_Widget_RSS::widget":[788]}},"WP_Widget_RSS::update":{"doc":"","file":"default-widgets.php","line":796,"missingDoc":true,"filters":[],"uses":{"wp_widget_rss_process":[798]},"used_by":[]},"wp_widget_rss_process":{"doc":"\/**\n * Process RSS feed widget data and optionally retrieve feed items.\n *\n * The feed widget can not have more than 20 items or it will reset back to the\n * default, which is 10.\n *\n * The resulting array has the feed title, feed url, feed link (from channel),\n * feed items, error (if any), and whether to show summary, author, and date.\n * All respectively in the order of the array elements.\n *\n * @since 2.5.0\n *\n * @param array $widget_rss RSS widget feed data. Expects unescaped data.\n * @param bool $check_feed Optional, default is true. Whether to check feed for errors.\n * @return array\n *\/","file":"default-widgets.php","line":993,"missingDoc":false,"filters":[],"uses":{"esc_url_raw":[997],"strip_tags":[997,998,1010],"trim":[998],"fetch_feed":[1004],"get_error_message":[1008],"esc_url":[1010],"get_permalink":[1010],"stristr":[1011],"substr":[1012],"__destruct":[1014],"is_wp_error":[1007],"compact":[1019]},"used_by":{"WP_Widget_RSS::update":[798]}},"WP_Widget_RSS::form":{"doc":"","file":"default-widgets.php","line":801,"missingDoc":true,"filters":[],"uses":{"wp_widget_rss_form":[807]},"used_by":[]},"wp_widget_rss_form":{"doc":"\/**\n * Display RSS widget options form.\n *\n * The options for what fields are displayed for the RSS form are all booleans\n * and are as follows: 'url', 'title', 'items', 'show_summary', 'show_author',\n * 'show_date'.\n *\n * @since 2.5.0\n *\n * @param array|string $args Values for input fields.\n * @param array $inputs Override default display options.\n *\/","file":"default-widgets.php","line":921,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[924],"extract":[925,926],"esc_attr":[928,929],"esc_url":[930],"sprintf":[939],"__":[939],"_e":[943,946,949,958,961,964],"selected":[953],"str_replace":[969],"array_keys":[967]},"used_by":{"WP_Widget_RSS::form":[807]}},"date_i18n":{"doc":"\/**\n * Retrieve the date in localized format, based on timestamp.\n *\n * If the locale specifies the locale month and weekday, then the locale will\n * take over the format for the date. If it isn't, then the date format string\n * will be used instead.\n *\n * @since 0.71\n *\n * @param string $dateformatstring Format to display the date.\n * @param int $unixtimestamp Optional. Unix timestamp.\n * @param bool $gmt Optional, default is false. Whether to convert to GMT for time.\n * @return string The date, translated if locale specifies it.\n *\/","file":"functions.php","line":84,"missingDoc":false,"filters":["'date_i18n'"],"uses":{"current_time":[90],"time":[92],"get_month":[105],"get_month_abbrev":[106],"get_weekday":[107],"get_weekday_abbrev":[108],"get_meridiem":[109,110],"preg_replace":[112,113,114,115,116,117,132],"backslashit":[112,113,114,115,116,117,132],"substr":[119,133],"strlen":[119,133],"implode":[122],"get_option":[124],"timezone_open":[126],"date_create":[127],"date_format":[130],"strpos":[129],"preg_match":[123]},"used_by":{"wp_widget_rss_output":[885],"mysql2date":[39],"wp_get_archives":[1006,1007],"wp_post_revision_title":[1310]}},"WP_Widget_Tag_Cloud::__construct":{"doc":"","file":"default-widgets.php","line":1029,"missingDoc":true,"filters":[],"uses":{"__":[1030,1031]},"used_by":[]},"WP_Widget_Tag_Cloud::widget":{"doc":"","file":"default-widgets.php","line":1034,"missingDoc":true,"filters":["'widget_title'","'widget_tag_cloud_args'"],"uses":{"extract":[1035],"_get_current_taxonomy":[1036],"__":[1041],"get_taxonomy":[1043],"wp_tag_cloud":[1053]},"used_by":[]},"WP_Widget_Tag_Cloud::update":{"doc":"","file":"default-widgets.php","line":1058,"missingDoc":true,"filters":[],"uses":{"strip_tags":[1059],"stripslashes":[1059,1060]},"used_by":[]},"WP_Widget_Tag_Cloud::form":{"doc":"","file":"default-widgets.php","line":1064,"missingDoc":true,"filters":[],"uses":{"_get_current_taxonomy":[1065],"get_field_id":[1067,1068,1069,1070],"_e":[1067,1069],"get_field_name":[1068,1070],"esc_attr":[1068,1076],"get_taxonomy":[1072],"selected":[1076],"get_taxonomies":[1071]},"used_by":[]},"WP_Widget_Tag_Cloud::_get_current_taxonomy":{"doc":"","file":"default-widgets.php","line":1081,"missingDoc":true,"filters":[],"uses":{"taxonomy_exists":[1082]},"used_by":[]},"WP_Nav_Menu_Widget::__construct":{"doc":"","file":"default-widgets.php","line":1096,"missingDoc":true,"filters":[],"uses":{"__":[1097,1098]},"used_by":[]},"WP_Nav_Menu_Widget::widget":{"doc":"","file":"default-widgets.php","line":1101,"missingDoc":true,"filters":["'widget_title'"],"uses":{"wp_get_nav_menu_object":[1103],"wp_nav_menu":[1115]},"used_by":[]},"wp_get_nav_menu_object":{"doc":"\/**\n * Returns a navigation menu object.\n *\n * @since 3.0.0\n *\n * @uses get_term\n * @uses get_term_by\n *\n * @param string $menu Menu id, slug or name\n * @return mixed false if $menu param isn't supplied or term does not exist, menu object if successful.\n *\/","file":"nav-menu.php","line":21,"missingDoc":false,"filters":[],"uses":{"get_term":[25],"get_term_by":[28,31]},"used_by":{"WP_Nav_Menu_Widget::widget":[1103],"wp_nav_menu":[148,152],"is_nav_menu":[53],"wp_delete_nav_menu":[178],"wp_update_nav_menu_object":[209],"wp_update_nav_menu_item":[277],"wp_get_nav_menu_items":[473]}},"wp_nav_menu":{"doc":"\/**\n * Displays a navigation menu.\n *\n * Optional $args contents:\n *\n * menu - The menu that is desired. Accepts (matching in order) id, slug, name. Defaults to blank.\n * menu_class - CSS class to use for the ul element which forms the menu. Defaults to 'menu'.\n * menu_id - The ID that is applied to the ul element which forms the menu. Defaults to the menu slug, incremented.\n * container - Whether to wrap the ul, and what to wrap it with. Defaults to 'div'.\n * container_class - the class that is applied to the container. Defaults to 'menu-{menu slug}-container'.\n * container_id - The ID that is applied to the container. Defaults to blank.\n * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallback.\n * before - Text before the link text.\n * after - Text after the link text.\n * link_before - Text before the link.\n * link_after - Text after the link.\n * echo - Whether to echo the menu or return it. Defaults to echo.\n * depth - how many levels of the hierarchy are to be included. 0 means all. Defaults to 0.\n * walker - allows a custom walker to be specified.\n * theme_location - the location in the theme to be used. Must be registered with register_nav_menu() in order to be selectable by the user.\n * items_wrap - How the list items should be wrapped. Defaults to a ul with an id and class. Uses printf() format with numbered placeholders.\n *\n * @since 3.0.0\n *\n * @param array $args Arguments\n *\/","file":"nav-menu-template.php","line":136,"missingDoc":false,"filters":["'wp_nav_menu_args'","'wp_nav_menu_container_allowedtags'","'wp_nav_menu_objects'","'wp_nav_menu_items'","\"wp_nav_menu_{$menu->slug}_items\"","'wp_nav_menu'"],"uses":{"wp_parse_args":[143],"wp_get_nav_menu_object":[148,152],"get_nav_menu_locations":[151],"wp_get_nav_menus":[156],"wp_get_nav_menu_items":[158,167],"is_wp_error":[166,177,181],"call_user_func":[179],"is_callable":[178],"esc_attr":[191,192,231,231],"in_array":[189,216],"_wp_menu_item_classes_by_context":[198],"walk_nav_menu_tree":[208],"preg_replace":[218],"preg_match":[217],"sprintf":[231]},"used_by":{"WP_Nav_Menu_Widget::widget":[1115]}},"WP_Nav_Menu_Widget::update":{"doc":"","file":"default-widgets.php","line":1120,"missingDoc":true,"filters":[],"uses":{"strip_tags":[1121],"stripslashes":[1121]},"used_by":[]},"WP_Nav_Menu_Widget::form":{"doc":"","file":"default-widgets.php","line":1126,"missingDoc":true,"filters":[],"uses":{"get_terms":[1131],"sprintf":[1135],"__":[1135],"admin_url":[1135],"get_field_id":[1140,1141,1144,1145],"_e":[1140,1144],"get_field_name":[1141,1145],"selected":[1149]},"used_by":[]},"wp_widgets_init":{"doc":"\/**\n * Register all of the default WordPress widgets on startup.\n *\n * Calls 'widgets_init' action after all of the WordPress widgets have been\n * registered.\n *\n * @since 2.2.0\n *\/","file":"default-widgets.php","line":1167,"missingDoc":false,"filters":["'widgets_init'"],"uses":{"is_blog_installed":[1168],"register_widget":[1171,1173,1175,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196],"get_option":[1177]},"used_by":[]},"is_blog_installed":{"doc":"\/**\n * Test whether blog is already installed.\n *\n * The cache will be checked first. If you have a cache plugin, which saves the\n * cache values, then this will work. If you use the default WordPress cache,\n * and the database goes away, then you might have problems.\n *\n * Checks for the option siteurl for whether WordPress is installed.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @return bool Whether blog is already installed.\n *\/","file":"functions.php","line":1104,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[1108],"suppress_errors":[1111,1120,1132,1157],"wp_load_alloptions":[1113],"defined":[1112,1129,1140,1142],"get_var":[1117],"wp_cache_set":[1123,1159],"tables":[1137],"get_results":[1145],"wp_load_translations_early":[1150],"sprintf":[1153],"__":[1153],"dead_db":[1154]},"used_by":{"wp_widgets_init":[1168],"wp_not_installed":[427,429]}},"register_widget":{"doc":"\/**\n * Register a widget\n *\n * Registers a WP_Widget widget\n *\n * @since 2.8.0\n *\n * @see WP_Widget\n * @see WP_Widget_Factory\n * @uses WP_Widget_Factory\n *\n * @param string $widget_class The name of a class that extends WP_Widget\n *\/","file":"widgets.php","line":428,"missingDoc":false,"filters":[],"uses":{"register":[431]},"used_by":{"wp_widgets_init":[1171,1173,1175,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196]}},"get_postdata":{"doc":"\/**\n * Entire Post data.\n *\n * @since 0.71\n * @deprecated 1.5.1\n * @deprecated Use get_post()\n * @see get_post()\n *\n * @param int $postid\n * @return array\n *\/","file":"deprecated.php","line":26,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[27],"get_post":[29]},"used_by":[]},"start_wp":{"doc":"\/**\n * Sets up the WordPress Loop.\n *\n * @since 1.0.1\n * @deprecated 1.5\n * @deprecated Use The Loop - {@link http:\/\/codex.wordpress.org\/The_Loop Use new WordPress Loop}\n *\/","file":"deprecated.php","line":59,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[62],"__":[62],"next_post":[65],"setup_postdata":[67],"get_post":[67]},"used_by":[]},"next_post":{"doc":"\/**\n * Prints link to the next post.\n *\n * @since 0.71\n * @deprecated 2.0\n * @deprecated Use next_post_link()\n * @see next_post_link()\n *\n * @param string $format\n * @param string $next\n * @param string $title\n * @param string $in_same_cat\n * @param int $limitnext\n * @param string $excluded_categories\n *\/","file":"deprecated.php","line":173,"missingDoc":false,"filters":["'the_title'"],"uses":{"_deprecated_function":[174],"get_next_post":[181],"get_permalink":[186],"str_replace":[190]},"used_by":{"start_wp":[65],"WP_Query::the_post":[2853]}},"setup_postdata":{"doc":"\/**\n * Set up global post data.\n *\n * @since 1.5.0\n *\n * @param object $post Post data.\n * @uses do_action_ref_array() Calls 'the_post'\n * @return bool True when finished.\n *\/","file":"query.php","line":3625,"missingDoc":false,"filters":["'the_post'"],"uses":{"get_userdata":[3630],"mysql2date":[3632,3633],"get_query_var":[3635],"is_single":[3638],"is_page":[3638],"is_feed":[3638],"str_replace":[3645,3646,3647],"explode":[3648],"count":[3649],"strpos":[3641]},"used_by":{"start_wp":[67],"wp_reset_postdata":[120],"WP_Query::the_post":[2854]}},"the_category_ID":{"doc":"\/**\n * Return or Print Category ID.\n *\n * @since 0.71\n * @deprecated 0.71\n * @deprecated use get_the_category()\n * @see get_the_category()\n *\n * @param bool $echo\n * @return null|int\n *\/","file":"deprecated.php","line":81,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[82],"get_the_category":[85]},"used_by":[]},"the_category_head":{"doc":"\/**\n * Print category with optional text before and after.\n *\n * @since 0.71\n * @deprecated 0.71\n * @deprecated use get_the_category_by_ID()\n * @see get_the_category_by_ID()\n *\n * @param string $before\n * @param string $after\n *\/","file":"deprecated.php","line":105,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[108],"get_the_category":[111],"get_the_category_by_ID":[115]},"used_by":[]},"previous_post":{"doc":"\/**\n * Prints link to the previous post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use previous_post_link()\n * @see previous_post_link()\n *\n * @param string $format\n * @param string $previous\n * @param string $title\n * @param string $in_same_cat\n * @param int $limitprev\n * @param string $excluded_categories\n *\/","file":"deprecated.php","line":136,"missingDoc":false,"filters":["'the_title'"],"uses":{"_deprecated_function":[138],"get_previous_post":[145],"get_permalink":[150],"str_replace":[154]},"used_by":[]},"get_previous_post":{"doc":"\/**\n * Retrieve previous post that is adjacent to current post.\n *\n * @since 1.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1093,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post":[1094]},"used_by":{"previous_post":[145]}},"get_next_post":{"doc":"\/**\n * Retrieve next post that is adjacent to current post.\n *\n * @since 1.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1106,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post":[1107]},"used_by":{"next_post":[181]}},"user_can_create_post":{"doc":"\/**\n * Whether user can create a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":207,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[208],"get_userdata":[210]},"used_by":{"user_can_set_post_date":[300]}},"user_can_create_draft":{"doc":"\/**\n * Whether user can create a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":227,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[228],"get_userdata":[230]},"used_by":[]},"user_can_edit_post":{"doc":"\/**\n * Whether user can edit a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":247,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[248],"get_userdata":[250,252],"get_post":[251]},"used_by":{"user_can_delete_post":[280],"user_can_edit_post_date":[320],"user_can_edit_post_comments":[340]}},"user_can_delete_post":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":276,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[277],"user_can_edit_post":[280]},"used_by":[]},"user_can_set_post_date":{"doc":"\/**\n * Whether user can set new posts' dates.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":296,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[297],"get_userdata":[299],"user_can_create_post":[300]},"used_by":[]},"user_can_edit_post_date":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can edit $post_id's date\n *\/","file":"deprecated.php","line":316,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[317],"get_userdata":[319],"user_can_edit_post":[320]},"used_by":[]},"user_can_edit_post_comments":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can edit $post_id's comments\n *\/","file":"deprecated.php","line":336,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[337],"user_can_edit_post":[340]},"used_by":{"user_can_delete_post_comments":[360]}},"user_can_delete_post_comments":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can delete $post_id's comments\n *\/","file":"deprecated.php","line":356,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[357],"user_can_edit_post_comments":[360]},"used_by":[]},"user_can_edit_user":{"doc":"\/**\n * Can user can edit other user.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $other_user\n * @return bool\n *\/","file":"deprecated.php","line":375,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[376],"get_userdata":[378,379]},"used_by":[]},"get_linksbyname":{"doc":"\/**\n * Gets the links associated with category $cat_name.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name Optional. The category name to use. If no match is found uses all.\n * @param string $before Optional. The html to output before the link.\n * @param string $after Optional. The html to output after the link.\n * @param string $between Optional. The html to output between the link\/image and its description. Not used if no image or $show_images is true.\n * @param bool $show_images Optional. Whether to show images (if defined).\n * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 'description' or 'rating'. Or maybe owner.\n *\t\tIf you start the name with an underscore the order will be reversed. You can also specify 'rand' as the order which will return links in a\n *\t\trandom order.\n * @param bool $show_description Optional. Whether to show the description if show_images=false\/not defined.\n * @param bool $show_rating Optional. Show rating stars\/chars.\n * @param int $limit\t\tOptional. Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Optional. Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":407,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[410],"get_term_by":[413],"get_links":[417]},"used_by":{"get_linksbyname_withrating":[564]}},"wp_get_linksbyname":{"doc":"\/**\n * Gets the links associated with the named category.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $category The category to use.\n * @param string $args\n * @return bool|null\n *\/","file":"deprecated.php","line":432,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[433],"wp_parse_args":[446],"wp_list_bookmarks":[448]},"used_by":[]},"get_linkobjectsbyname":{"doc":"\/**\n * Gets an array of link objects associated with category $cat_name.\n *\n * <code>\n *\t$links = get_linkobjectsbyname('fred');\n *\tforeach ($links as $link) {\n * \t\techo '<li>'.$link->link_name.'<\/li>';\n *\t}\n * <\/code>\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name The category name to use. If no match is found uses all.\n * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', 'description', or 'rating'.\n *\t\tOr maybe owner. If you start the name with an underscore the order will be reversed. You can also\n *\t\tspecify 'rand' as the order which will return links in a random order.\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @return unknown\n *\/","file":"deprecated.php","line":473,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[474],"get_term_by":[477],"get_linkobjects":[481]},"used_by":[]},"get_linkobjects":{"doc":"\/**\n * Gets an array of link objects associated with category n.\n *\n * Usage:\n * <code>\n *\t$links = get_linkobjects(1);\n *\tif ($links) {\n *\t\tforeach ($links as $link) {\n *\t\t\techo '<li>'.$link->link_name.'<br \/>'.$link->link_description.'<\/li>';\n *\t\t}\n *\t}\n * <\/code>\n *\n * Fields are:\n * <ol>\n *\t<li>link_id<\/li>\n *\t<li>link_url<\/li>\n *\t<li>link_name<\/li>\n *\t<li>link_image<\/li>\n *\t<li>link_target<\/li>\n *\t<li>link_category<\/li>\n *\t<li>link_description<\/li>\n *\t<li>link_visible<\/li>\n *\t<li>link_owner<\/li>\n *\t<li>link_rating<\/li>\n *\t<li>link_updated<\/li>\n *\t<li>link_rel<\/li>\n *\t<li>link_notes<\/li>\n * <\/ol>\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @return unknown\n *\/","file":"deprecated.php","line":527,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[528],"get_bookmarks":[530]},"used_by":{"get_linkobjectsbyname":[481]}},"get_linksbyname_withrating":{"doc":"\/**\n * Gets the links associated with category 'cat_name' and display rating stars\/chars.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name The category name to use. If no match is found uses all\n * @param string $before The html to output before the link\n * @param string $after The html to output after the link\n * @param string $between The html to output between the link\/image and its description. Not used if no image or show_images is true\n * @param bool $show_images Whether to show images (if defined).\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param bool $show_description Whether to show the description if show_images=false\/not defined\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":560,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[562],"get_linksbyname":[564]},"used_by":[]},"get_links_withrating":{"doc":"\/**\n * Gets the links associated with category n and display rating stars\/chars.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $before The html to output before the link\n * @param string $after The html to output after the link\n * @param string $between The html to output between the link\/image and its description. Not used if no image or show_images == true\n * @param bool $show_images Whether to show images (if defined).\n * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param bool $show_description Whether to show the description if show_images=false\/not defined.\n * @param string $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":588,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[590],"get_links":[592]},"used_by":[]},"get_autotoggle":{"doc":"\/**\n * Gets the auto_toggle setting.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated No alternative function available\n *\n * @param int $id The category to get. If no category supplied uses 0\n * @return int Only returns 0.\n *\/","file":"deprecated.php","line":605,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[606]},"used_by":[]},"list_cats":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_list_categories()\n * @see wp_list_categories()\n *\n * @param int $optionall\n * @param string $all\n * @param string $sort_column\n * @param string $sort_order\n * @param string $file\n * @param bool $list\n * @param int $optiondates\n * @param int $optioncount\n * @param int $hide_empty\n * @param int $use_desc_for_title\n * @param bool $children\n * @param int $child_of\n * @param int $categories\n * @param int $recurse\n * @param string $feed\n * @param string $feed_image\n * @param string $exclude\n * @param bool $hierarchical\n * @return unknown\n *\/","file":"deprecated.php","line":636,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[639],"compact":[641],"wp_list_cats":[643]},"used_by":[]},"wp_list_cats":{"doc":"\/**\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use wp_list_categories()\n * @see wp_list_categories()\n *\n * @param string|array $args\n * @return unknown\n *\/","file":"deprecated.php","line":655,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[656],"wp_parse_args":[658],"wp_list_categories":[675]},"used_by":{"list_cats":[643]}},"dropdown_cats":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_dropdown_categories()\n * @see wp_dropdown_categories()\n *\n * @param int $optionall\n * @param string $all\n * @param string $orderby\n * @param string $order\n * @param int $show_last_update\n * @param int $show_count\n * @param int $hide_empty\n * @param bool $optionnone\n * @param int $selected\n * @param int $exclude\n * @return unknown\n *\/","file":"deprecated.php","line":696,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[699],"__":[707],"compact":[709],"add_query_arg":[711],"wp_dropdown_categories":[712]},"used_by":[]},"list_authors":{"doc":"\/**\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use wp_list_authors()\n * @see wp_list_authors()\n *\n * @param bool $optioncount\n * @param bool $exclude_admin\n * @param bool $show_fullname\n * @param bool $hide_empty\n * @param string $feed\n * @param string $feed_image\n * @return unknown\n *\/","file":"deprecated.php","line":729,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[730],"compact":[732],"wp_list_authors":[733]},"used_by":[]},"wp_get_post_cats":{"doc":"\/**\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_get_post_categories()\n * @see wp_get_post_categories()\n *\n * @param int $blogid Not Used\n * @param int $post_ID\n * @return unknown\n *\/","file":"deprecated.php","line":746,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[747],"wp_get_post_categories":[748]},"used_by":[]},"wp_set_post_cats":{"doc":"\/**\n * Sets the categories that the post id belongs to.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_set_post_categories()\n * @see wp_set_post_categories()\n *\n * @param int $blogid Not used\n * @param int $post_ID\n * @param array $post_categories\n * @return unknown\n *\/","file":"deprecated.php","line":764,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[765],"wp_set_post_categories":[766]},"used_by":[]},"get_archives":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_get_archives()\n * @see wp_get_archives()\n *\n * @param string $type\n * @param string $limit\n * @param string $format\n * @param string $before\n * @param string $after\n * @param bool $show_post_count\n * @return unknown\n *\/","file":"deprecated.php","line":783,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[784],"compact":[785],"wp_get_archives":[786]},"used_by":[]},"get_author_link":{"doc":"\/**\n * Returns or Prints link to the author's posts.\n *\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use get_author_posts_url()\n * @see get_author_posts_url()\n *\n * @param bool $echo Optional.\n * @param int $author_id Required.\n * @param string $author_nicename Optional.\n * @return string|null\n *\/","file":"deprecated.php","line":802,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[803],"get_author_posts_url":[805]},"used_by":[]},"link_pages":{"doc":"\/**\n * Print list of pages based on arguments.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_link_pages()\n * @see wp_link_pages()\n *\n * @param string $before\n * @param string $after\n * @param string $next_or_number\n * @param string $nextpagelink\n * @param string $previouspagelink\n * @param string $pagelink\n * @param string $more_file\n * @return string\n *\/","file":"deprecated.php","line":829,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[831],"compact":[833],"wp_link_pages":[834]},"used_by":[]},"wp_link_pages":{"doc":"\/**\n * The formatted output of a list of pages.\n *\n * Displays page links for paginated posts (i.e. includes the <!--nextpage-->.\n * Quicktag one or more times). This tag must be within The Loop.\n *\n * The defaults for overwriting are:\n * 'next_or_number' - Default is 'number' (string). Indicates whether page\n * numbers should be used. Valid values are number and next.\n * 'nextpagelink' - Default is 'Next Page' (string). Text for link to next page.\n * of the bookmark.\n * 'previouspagelink' - Default is 'Previous Page' (string). Text for link to\n * previous page, if available.\n * 'pagelink' - Default is '%' (String).Format string for page numbers. The % in\n * the parameter string will be replaced with the page number, so Page %\n * generates \"Page 1\", \"Page 2\", etc. Defaults to %, just the page number.\n * 'before' - Default is '<p> Pages:' (string). The html or text to prepend to\n * each bookmarks.\n * 'after' - Default is '<\/p>' (string). The html or text to append to each\n * bookmarks.\n * 'link_before' - Default is '' (string). The html or text to prepend to each\n * Pages link inside the <a> tag. Also prepended to the current item, which\n * is not linked.\n * 'link_after' - Default is '' (string). The html or text to append to each\n * Pages link inside the <a> tag. Also appended to the current item, which\n * is not linked.\n *\n * @since 1.2.0\n * @access private\n *\n * @param string|array $args Optional. Overwrite the defaults.\n * @return string Formatted output in HTML.\n *\/","file":"post-template.php","line":631,"missingDoc":false,"filters":["'wp_link_pages_args'"],"uses":{"__":[633,635,636],"wp_parse_args":[640],"extract":[642],"str_replace":[651],"_wp_link_page":[654,666,671]},"used_by":{"link_pages":[834]}},"get_settings":{"doc":"\/**\n * Get value based on option.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_option()\n * @see get_option()\n *\n * @param string $option\n * @return string\n *\/","file":"deprecated.php","line":848,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[849],"get_option":[851]},"used_by":{"WP_Widget::_register":[128],"WP_Widget::display_callback":[175],"WP_Widget::update_callback":[195],"WP_Widget::form_callback":[254]}},"permalink_link":{"doc":"\/**\n * Print the permalink of the current post in the loop.\n *\n * @since 0.71\n * @deprecated 1.2\n * @deprecated Use the_permalink()\n * @see the_permalink()\n *\/","file":"deprecated.php","line":862,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[863],"the_permalink":[864]},"used_by":[]},"permalink_single_rss":{"doc":"\/**\n * Print the permalink to the RSS feed.\n *\n * @since 0.71\n * @deprecated 2.3\n * @deprecated Use the_permalink_rss()\n * @see the_permalink_rss()\n *\n * @param string $deprecated\n *\/","file":"deprecated.php","line":877,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[878],"the_permalink_rss":[879]},"used_by":[]},"the_permalink_rss":{"doc":"\/**\n * Display the permalink to the post for use in feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.3.0\n * @uses apply_filters() Call 'the_permalink_rss' on the post permalink\n *\/","file":"feed.php","line":190,"missingDoc":false,"filters":["'the_permalink_rss'"],"uses":{"esc_url":[191],"get_permalink":[191]},"used_by":{"permalink_single_rss":[879],"__main":[75,39,46,50,33,39,41,26,29,36]}},"wp_get_links":{"doc":"\/**\n * Gets the links associated with category.\n *\n * @see get_links() for argument information that can be used in $args\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $args a query string\n * @return null|string\n *\/","file":"deprecated.php","line":894,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[895],"add_query_arg":[899],"strpos":[897],"wp_parse_args":[918],"wp_list_bookmarks":[920]},"used_by":[]},"get_linkrating":{"doc":"\/**\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use sanitize_bookmark_field()\n * @see sanitize_bookmark_field()\n *\n * @param object $link\n * @return unknown\n *\/","file":"deprecated.php","line":1113,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1114],"sanitize_bookmark_field":[1115]},"used_by":{"get_links":[1018]}},"get_links_list":{"doc":"\/**\n * Output entire list of links by category.\n *\n * Output a list of all links, listed by category, using the settings in\n * $wpdb->linkcategories and output it as a nested HTML unordered list.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $order Sort link categories by 'name' or 'id'\n *\/","file":"deprecated.php","line":1042,"missingDoc":false,"filters":["'link_category'"],"uses":{"_deprecated_function":[1043],"strtolower":[1045],"substr":[1051,1049],"get_categories":[1057],"get_links":[1067]},"used_by":[]},"links_popup_script":{"doc":"\/**\n * Show the link to the links popup and the number of links.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated {@internal Use function instead is unknown}}\n *\n * @param string $text the text of the link\n * @param int $width the width of the popup window\n * @param int $height the height of the popup window\n * @param string $file the page to open in the popup window\n * @param bool $count the number of links in the db\n *\/","file":"deprecated.php","line":1088,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1089],"get_var":[1092]},"used_by":[]},"get_linkcatname":{"doc":"\/**\n * Gets the name of category by id.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_category()\n * @see get_category()\n *\n * @param int $id The category to get. If no category supplied uses 0\n * @return string\n *\/","file":"deprecated.php","line":1129,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1130],"wp_get_link_cats":[1137],"is_array":[1139],"get_category":[1144]},"used_by":[]},"comments_rss_link":{"doc":"\/**\n * Print RSS comment feed link.\n *\n * @since 1.0.1\n * @deprecated 2.5\n * @deprecated Use post_comments_feed_link()\n * @see post_comments_feed_link()\n *\n * @param string $link_text\n *\/","file":"deprecated.php","line":1158,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1159],"post_comments_feed_link":[1160]},"used_by":[]},"post_comments_feed_link":{"doc":"\/**\n * Display the comment feed link for a post.\n *\n * Prints out the comment feed link for a post. Link text is placed in the\n * anchor. If no link text is specified, default text is used. If no post ID is\n * specified, the current post is used.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param string $link_text Descriptive text.\n * @param int $post_id Optional post ID. Default to current post.\n * @param string $feed Optional. Feed format.\n * @return string Link to the comment feed for the current post.\n*\/","file":"link-template.php","line":511,"missingDoc":false,"filters":["'post_comments_feed_link_html'"],"uses":{"esc_url":[512],"get_post_comments_feed_link":[512],"__":[514]},"used_by":{"comments_rss_link":[1160]}},"get_category_rss_link":{"doc":"\/**\n * Print\/Return link to category RSS2 feed.\n *\n * @since 1.2\n * @deprecated 2.5\n * @deprecated Use get_category_feed_link()\n * @see get_category_feed_link()\n *\n * @param bool $echo\n * @param int $cat_ID\n * @return string|null\n *\/","file":"deprecated.php","line":1175,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1176],"get_category_feed_link":[1178]},"used_by":[]},"get_author_rss_link":{"doc":"\/**\n * Print\/Return link to author RSS feed.\n *\n * @since 1.2\n * @deprecated 2.5\n * @deprecated Use get_author_feed_link()\n * @see get_author_feed_link()\n *\n * @param bool $echo\n * @param int $author_id\n * @return string|null\n *\/","file":"deprecated.php","line":1197,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1198],"get_author_feed_link":[1200]},"used_by":[]},"comments_rss":{"doc":"\/**\n * Return link to the post RSS feed.\n *\n * @since 1.5\n * @deprecated 2.2\n * @deprecated Use get_post_comments_feed_link()\n * @see get_post_comments_feed_link()\n *\n * @return string\n *\/","file":"deprecated.php","line":1216,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1217],"esc_url":[1218],"get_post_comments_feed_link":[1218]},"used_by":[]},"create_user":{"doc":"\/**\n * An alias of wp_create_user().\n *\n * @since 2.0\n * @deprecated 2.0\n * @deprecated Use wp_create_user()\n * @see wp_create_user()\n *\n * @param string $username The user's username.\n * @param string $password The user's password.\n * @param string $email The user's email (optional).\n * @return int The new user's ID.\n *\/","file":"deprecated.php","line":1234,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1235],"wp_create_user":[1236]},"used_by":[]},"wp_create_user":{"doc":"\/**\n * A simpler way of inserting an user into the database.\n *\n * Creates a new user with just the username, password, and email. For more\n * complex user creation use wp_insert_user() to specify more information.\n *\n * @since 2.0.0\n * @see wp_insert_user() More complete way to create a new user\n *\n * @param string $username The user's username.\n * @param string $password The user's password.\n * @param string $email The user's email (optional).\n * @return int The new user's ID.\n *\/","file":"user.php","line":1506,"missingDoc":false,"filters":[],"uses":{"esc_sql":[1507,1508],"compact":[1511],"wp_insert_user":[1512]},"used_by":{"create_user":[1236],"wpmu_create_user":[915]}},"gzip_compression":{"doc":"\/**\n * Unused function.\n *\n * @deprecated 2.5\n*\/","file":"deprecated.php","line":1244,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1245]},"used_by":[]},"get_commentdata":{"doc":"\/**\n * Retrieve an array of comment data about comment $comment_ID.\n *\n * @since 0.71\n * @deprecated 2.7\n * @deprecated Use get_comment()\n * @see get_comment()\n *\n * @param int $comment_ID The ID of the comment\n * @param int $no_cache Whether to use the cache (cast to bool)\n * @param bool $include_unapproved Whether to include unapproved comments\n * @return array The comment data\n *\/","file":"deprecated.php","line":1262,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1263],"get_comment":[1264]},"used_by":[]},"get_catname":{"doc":"\/**\n * Retrieve the category name by the category ID.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use get_cat_name()\n * @see get_cat_name()\n *\n * @param int $cat_ID Category ID\n * @return string category name\n *\/","file":"deprecated.php","line":1278,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1279],"get_cat_name":[1280]},"used_by":[]},"get_category_children":{"doc":"\/**\n * Retrieve category children list separated before and after the term IDs.\n *\n * @since 1.2.0\n * @deprecated 2.8\n * @deprecated Use get_term_children()\n * @see get_term_children()\n *\n * @param int $id Category ID to retrieve children.\n * @param string $before Optional. Prepend before category term ID.\n * @param string $after Optional, default is empty string. Append after category term ID.\n * @param array $visited Optional. Category Term IDs that have already been added.\n * @return string\n *\/","file":"deprecated.php","line":1297,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1298],"get_all_category_ids":[1304],"get_category":[1309],"is_wp_error":[1310],"get_category_children":[1315],"in_array":[1312]},"used_by":{"get_category_children":[1315]}},"get_the_author_description":{"doc":"\/**\n * Retrieve the description of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('description')\n * @see get_the_author_meta()\n *\n * @return string The author's description.\n *\/","file":"deprecated.php","line":1331,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1332],"get_the_author_meta":[1333]},"used_by":[]},"the_author_description":{"doc":"\/**\n * Display the description of the author of the current post.\n *\n * @since 1.0.0\n * @deprecated 2.8\n * @deprecated Use the_author_meta('description')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1344,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1345],"the_author_meta":[1346]},"used_by":[]},"get_the_author_login":{"doc":"\/**\n * Retrieve the login name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('login')\n * @see get_the_author_meta()\n *\n * @return string The author's login name (username).\n *\/","file":"deprecated.php","line":1359,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1360],"get_the_author_meta":[1361]},"used_by":[]},"the_author_login":{"doc":"\/**\n * Display the login name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('login')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1372,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1373],"the_author_meta":[1374]},"used_by":[]},"get_the_author_firstname":{"doc":"\/**\n * Retrieve the first name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('first_name')\n * @see get_the_author_meta()\n *\n * @return string The author's first name.\n *\/","file":"deprecated.php","line":1387,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1388],"get_the_author_meta":[1389]},"used_by":[]},"the_author_firstname":{"doc":"\/**\n * Display the first name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('first_name')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1400,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1401],"the_author_meta":[1402]},"used_by":[]},"get_the_author_lastname":{"doc":"\/**\n * Retrieve the last name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('last_name')\n * @see get_the_author_meta()\n *\n * @return string The author's last name.\n *\/","file":"deprecated.php","line":1415,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1416],"get_the_author_meta":[1417]},"used_by":[]},"the_author_lastname":{"doc":"\/**\n * Display the last name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('last_name')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1428,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1429],"the_author_meta":[1430]},"used_by":[]},"get_the_author_nickname":{"doc":"\/**\n * Retrieve the nickname of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('nickname')\n * @see get_the_author_meta()\n *\n * @return string The author's nickname.\n *\/","file":"deprecated.php","line":1443,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1444],"get_the_author_meta":[1445]},"used_by":[]},"the_author_nickname":{"doc":"\/**\n * Display the nickname of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('nickname')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1456,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1457],"the_author_meta":[1458]},"used_by":[]},"get_the_author_email":{"doc":"\/**\n * Retrieve the email of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('email')\n * @see get_the_author_meta()\n *\n * @return string The author's username.\n *\/","file":"deprecated.php","line":1471,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1472],"get_the_author_meta":[1473]},"used_by":[]},"the_author_email":{"doc":"\/**\n * Display the email of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('email')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1484,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1485],"the_author_meta":[1486]},"used_by":[]},"get_the_author_icq":{"doc":"\/**\n * Retrieve the ICQ number of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('icq')\n * @see get_the_author_meta()\n *\n * @return string The author's ICQ number.\n *\/","file":"deprecated.php","line":1499,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1500],"get_the_author_meta":[1501]},"used_by":[]},"the_author_icq":{"doc":"\/**\n * Display the ICQ number of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('icq')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1512,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1513],"the_author_meta":[1514]},"used_by":[]},"get_the_author_yim":{"doc":"\/**\n * Retrieve the Yahoo! IM name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('yim')\n * @see get_the_author_meta()\n *\n * @return string The author's Yahoo! IM name.\n *\/","file":"deprecated.php","line":1527,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1528],"get_the_author_meta":[1529]},"used_by":[]},"the_author_yim":{"doc":"\/**\n * Display the Yahoo! IM name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('yim')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1540,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1541],"the_author_meta":[1542]},"used_by":[]},"get_the_author_msn":{"doc":"\/**\n * Retrieve the MSN address of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('msn')\n * @see get_the_author_meta()\n *\n * @return string The author's MSN address.\n *\/","file":"deprecated.php","line":1555,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1556],"get_the_author_meta":[1557]},"used_by":[]},"the_author_msn":{"doc":"\/**\n * Display the MSN address of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('msn')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1568,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1569],"the_author_meta":[1570]},"used_by":[]},"get_the_author_aim":{"doc":"\/**\n * Retrieve the AIM address of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('aim')\n * @see get_the_author_meta()\n *\n * @return string The author's AIM address.\n *\/","file":"deprecated.php","line":1583,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1584],"get_the_author_meta":[1585]},"used_by":[]},"the_author_aim":{"doc":"\/**\n * Display the AIM address of the author of the current post.\n *\n * @since 0.71\n * @see the_author_meta()\n * @deprecated 2.8\n * @deprecated Use the_author_meta('aim')\n *\/","file":"deprecated.php","line":1596,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1597],"the_author_meta":[1598]},"used_by":[]},"get_author_name":{"doc":"\/**\n * Retrieve the specified author's preferred display name.\n *\n * @since 1.0.0\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('display_name')\n * @see get_the_author_meta()\n *\n * @param int $auth_id The ID of the author.\n * @return string The author's display name.\n *\/","file":"deprecated.php","line":1612,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1613],"get_the_author_meta":[1614]},"used_by":[]},"get_the_author_url":{"doc":"\/**\n * Retrieve the URL to the home page of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('url')\n * @see get_the_author_meta()\n *\n * @return string The URL to the author's page.\n *\/","file":"deprecated.php","line":1627,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1628],"get_the_author_meta":[1629]},"used_by":[]},"the_author_url":{"doc":"\/**\n * Display the URL to the home page of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('url')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1640,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1641],"the_author_meta":[1642]},"used_by":[]},"get_the_author_ID":{"doc":"\/**\n * Retrieve the ID of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('ID')\n * @see get_the_author_meta()\n *\n * @return int The author's ID.\n *\/","file":"deprecated.php","line":1655,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1656],"get_the_author_meta":[1657]},"used_by":[]},"the_author_ID":{"doc":"\/**\n * Display the ID of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('ID')\n * @see the_author_meta()\n*\/","file":"deprecated.php","line":1668,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1669],"the_author_meta":[1670]},"used_by":[]},"the_content_rss":{"doc":"\/**\n * Display the post content for the feed.\n *\n * For encoding the html or the $encode_html parameter, there are three possible\n * values. '0' will make urls footnotes and use make_url_footnote(). '1' will\n * encode special characters and automatically display all of the content. The\n * value of '2' will strip all HTML tags from the content.\n *\n * Also note that you cannot set the amount of words and not set the html\n * encoding. If that is the case, then the html encoding will default to 2,\n * which will strip all HTML tags.\n *\n * To restrict the amount of words of the content, you can use the cut\n * parameter. If the content is less than the amount, then there won't be any\n * dots added to the end. If there is content left over, then dots will be added\n * and the rest of the content will be removed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'the_content_rss' on the content before processing.\n * @see get_the_content() For the $more_link_text, $stripteaser, and $more_file\n *\t\tparameters.\n *\n * @deprecated 2.9.0\n * @deprecated Use the_content_feed()\n * @see the_content_feed()\n *\n * @param string $more_link_text Optional. Text to display when more content is available but not displayed.\n * @param int|bool $stripteaser Optional. Default is 0.\n * @param string $more_file Optional.\n * @param int $cut Optional. Amount of words to keep for the content.\n * @param int $encode_html Optional. How to encode the content.\n *\/","file":"deprecated.php","line":1707,"missingDoc":false,"filters":["'the_content_rss'"],"uses":{"_deprecated_function":[1708],"get_the_content":[1709],"esc_html":[1714],"make_url_footnote":[1717],"strip_tags":[1719],"explode":[1722],"count":[1727,1723],"str_replace":[1737]},"used_by":[]},"get_the_content":{"doc":"\/**\n * Retrieve the post content.\n *\n * @since 0.71\n *\n * @param string $more_link_text Optional. Content for when there is more text.\n * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.\n * @return string\n *\/","file":"post-template.php","line":180,"missingDoc":false,"filters":["'the_content_more_link'"],"uses":{"get_post":[183],"__":[186],"get_the_password_form":[193],"post_password_required":[192],"count":[196,195,214],"explode":[200],"strip_tags":[202],"wp_kses_no_null":[202],"trim":[202],"preg_match":[199],"strpos":[208],"get_permalink":[219],"force_balance_tags":[220],"preg_replace_callback":[225]},"used_by":{"the_content_rss":[1709],"get_the_content_feed":[149],"wp_trim_excerpt":[2148],"the_content":[165]}},"make_url_footnote":{"doc":"\/**\n * Strip HTML and put links at the bottom of stripped content.\n *\n * Searches for all of the links, strips them out of the content, and places\n * them at the bottom of the content with numbers.\n *\n * @since 0.71\n * @deprecated 2.9.0\n *\n * @param string $content Content to get links\n * @return string HTML stripped out of content with links at the bottom.\n *\/","file":"deprecated.php","line":1753,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1754],"preg_match_all":[1755],"count":[1757],"str_replace":[1762],"strtolower":[1763,1763],"substr":[1763,1763],"get_option":[1763],"strip_tags":[1766]},"used_by":{"the_content_rss":[1717]}},"_c":{"doc":"\/**\n * Retrieve translated string with vertical bar context\n *\n * Quite a few times, there will be collisions with similar translatable text\n * found in more than two places but with different translated context.\n *\n * In order to use the separate contexts, the _c() function is used and the\n * translatable string uses a pipe ('|') which has the context the string is in.\n *\n * When the translated string is returned, it is everything before the pipe, not\n * including the pipe character. If there is no pipe in the translated text then\n * everything is returned.\n *\n * @since 2.2.0\n * @deprecated 2.9.0\n * @deprecated Use _x()\n * @see _x()\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"deprecated.php","line":1793,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1794],"before_last_bar":[1795],"translate":[1795]},"used_by":[]},"before_last_bar":{"doc":"","file":"l10n.php","line":72,"missingDoc":true,"filters":[],"uses":{"strrpos":[73],"substr":[77]},"used_by":{"_c":[1795],"translate_with_context":[1814],"_nc":[1831],"translate_user_role":[531]}},"translate_with_context":{"doc":"\/**\n * Translates $text like translate(), but assumes that the text\n * contains a context after its last vertical bar.\n *\n * @since 2.5\n * @uses translate()\n * @deprecated 3.0.0\n * @deprecated Use _x()\n * @see _x()\n *\n * @param string $text Text to translate\n * @param string $domain Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"deprecated.php","line":1812,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1813],"before_last_bar":[1814],"translate":[1814]},"used_by":[]},"_nc":{"doc":"\/**\n * A version of _n(), which supports contexts.\n * Strips everything from the translation after the last bar.\n *\n * @since 2.7.0\n * @deprecated 3.0.0\n * @deprecated Use _nx()\n * @see _nx()\n * @see _n() For parameters.\n * @see _c() For parameters. _c() is deprecated.\n *\n *\/","file":"deprecated.php","line":1829,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1830],"before_last_bar":[1831],"_n":[1831]},"used_by":[]},"__ngettext":{"doc":"\/**\n * Retrieve the plural or single form based on the amount.\n *\n * @since 1.2.0\n * @deprecated 2.8.0\n * @deprecated Use _n()\n * @see _n()\n *\/","file":"deprecated.php","line":1842,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1843],"func_get_args":[1844],"call_user_func_array":[1845]},"used_by":[]},"__ngettext_noop":{"doc":"\/**\n * Register plural strings in POT file, but don't translate them.\n *\n * @since 2.5\n * @deprecated 2.8.0\n * @deprecated Use _n_noop()\n * @see _n_noop()\n *\/","file":"deprecated.php","line":1856,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1857],"func_get_args":[1858],"call_user_func_array":[1859]},"used_by":[]},"get_alloptions":{"doc":"\/**\n * Retrieve all autoload options, or all options if no autoloaded ones exist.\n *\n * @since 1.0.0\n * @deprecated 3.0.0\n * @deprecated Use wp_load_alloptions())\n * @see wp_load_alloptions()\n *\n * @return array List of all options.\n *\/","file":"deprecated.php","line":1873,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1874],"wp_load_alloptions":[1875]},"used_by":[]},"wp_load_alloptions":{"doc":"\/**\n * Loads and caches all autoloaded options, if available or all options.\n *\n * @since 2.2.0\n * @package WordPress\n * @subpackage Option\n *\n * @return array List of all options.\n *\/","file":"option.php","line":135,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[139],"defined":[138,152],"is_multisite":[138,152],"suppress_errors":[144,147],"get_results":[146,145],"wp_cache_add":[153]},"used_by":{"get_alloptions":[1875],"_wp_specialchars":[393],"is_blog_installed":[1113],"get_option":[53],"update_option":[249],"add_option":[322],"delete_option":[373],"get_transient":[455]}},"get_the_attachment_link":{"doc":"\/**\n * Retrieve HTML content of attachment image with link.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_link()\n * @see wp_get_attachment_link()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default is false. Whether to use full size image.\n * @param array $max_dims Optional. Max image dimensions.\n * @param bool $permalink Optional, default is false. Whether to include permalink to image.\n * @return string\n *\/","file":"deprecated.php","line":1892,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1893],"get_post":[1895],"__":[1898],"wp_get_attachment_url":[1897],"get_attachment_link":[1901],"esc_attr":[1903],"get_attachment_innerHTML":[1905]},"used_by":[]},"get_attachment_innerHTML":{"doc":"\/**\n * Retrieve HTML content of image element.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image()\n * @see wp_get_attachment_image()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full size image.\n * @param array $max_dims Optional. Dimensions of image.\n * @return string\n *\/","file":"deprecated.php","line":2023,"missingDoc":false,"filters":["'attachment_innerHTML'"],"uses":{"_deprecated_function":[2024],"get_post":[2026],"get_attachment_icon":[2029],"esc_attr":[2032]},"used_by":{"get_the_attachment_link":[1905]}},"get_attachment_icon_src":{"doc":"\/**\n * Retrieve icon URL and Path.\n *\n * @since 2.1.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image_src()\n * @see wp_get_attachment_image_src()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full image.\n * @return array Icon URL and full path to file, respectively.\n *\/","file":"deprecated.php","line":1921,"missingDoc":false,"filters":["'icon_dir'"],"uses":{"_deprecated_function":[1922],"get_post":[1924],"get_attached_file":[1927],"basename":[1932,1944],"wp_attachment_is_image":[1934],"wp_get_attachment_url":[1937],"wp_mime_type_icon":[1940],"get_template_directory":[1943],"wp_get_attachment_thumb_url":[1929]},"used_by":{"get_attachment_icon":[1972]}},"get_attached_file":{"doc":"\/**\n * Retrieve attached file path based on attachment ID.\n *\n * You can optionally send it through the 'get_attached_file' filter, but by\n * default it will just return the file path unfiltered.\n *\n * The function works by getting the single post meta name, named\n * '_wp_attached_file' and returning it. This is a convenience function to\n * prevent looking up the meta name and provide a mechanism for sending the\n * attached filename through a filter.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'get_attached_file' on file path and attachment ID.\n *\n * @param int $attachment_id Attachment ID.\n * @param bool $unfiltered Whether to apply filters.\n * @return string|bool The file path to the attached file, or false if the attachment does not exist.\n *\/","file":"post.php","line":185,"missingDoc":false,"filters":["'get_attached_file'"],"uses":{"get_post_meta":[186],"strpos":[188],"preg_match":[188],"wp_upload_dir":[188]},"used_by":{"get_attachment_icon_src":[1927],"wp_load_image":[3222],"wp_delete_attachment":[4093],"wp_get_attachment_thumb_file":[4254],"wp_attachment_is_image":[4301]}},"wp_attachment_is_image":{"doc":"\/**\n * Check if the attachment is an image.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @return bool\n *\/","file":"post.php","line":4296,"missingDoc":false,"filters":[],"uses":{"get_post":[4298],"get_attached_file":[4301],"preg_match":[4304],"strtolower":[4304],"substr":[4308],"in_array":[4308]},"used_by":{"get_attachment_icon_src":[1934],"image_downsize":[138]}},"wp_mime_type_icon":{"doc":"\/**\n * Retrieve the icon for a MIME type.\n *\n * @since 2.1.0\n *\n * @param string|int $mime MIME type or attachment ID.\n * @return string|bool\n *\/","file":"post.php","line":4321,"missingDoc":false,"filters":["'icon_dir'","'icon_dir_uri'","'icon_dirs'","'wp_mime_type_icon'"],"uses":{"wp_cache_get":[4323,4346],"is_numeric":[4322,4328,4391],"preg_replace":[4332,4377],"wp_ext2type":[4335],"get_post":[4330],"includes_url":[4350],"array_keys":[4354,4385],"array_shift":[4355,4356],"readdir":[4358],"basename":[4359,4377],"substr":[4360,4362,4380,4381],"is_dir":[4363],"in_array":[4362],"strtolower":[4362],"closedir":[4369],"opendir":[4357],"wp_cache_add":[4372,4392],"is_array":[4348],"strpos":[4380,4381],"str_replace":[4382],"wp_match_mime_types":[4385]},"used_by":{"get_attachment_icon_src":[1940],"wp_get_attachment_image_src":[516],"wp_prepare_attachment_for_js":[1345]}},"wp_get_attachment_thumb_url":{"doc":"\/**\n * Retrieve URL for an attachment thumbnail.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @return string|bool False on failure. Thumbnail URL on success.\n *\/","file":"post.php","line":4269,"missingDoc":false,"filters":["'wp_get_attachment_thumb_url'"],"uses":{"get_post":[4271],"wp_get_attachment_url":[4273],"image_downsize":[4276],"wp_get_attachment_thumb_file":[4280],"str_replace":[4283],"basename":[4283,4283]},"used_by":{"get_attachment_icon_src":[1929]}},"get_attachment_icon":{"doc":"\/**\n * Retrieve HTML content of icon attachment image element.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image()\n * @see wp_get_attachment_image()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full size image.\n * @param array $max_dims Optional. Dimensions of image.\n * @return string HTML content.\n *\/","file":"deprecated.php","line":1966,"missingDoc":false,"filters":["'attachment_max_dims'","'attachment_icon'"],"uses":{"_deprecated_function":[1967],"get_post":[1969],"get_attachment_icon_src":[1972],"getimagesize":[1980],"file_exists":[1978],"esc_attr":[2003]},"used_by":{"get_attachment_innerHTML":[2029]}},"sanitize_url":{"doc":"\/**\n * Performs esc_url() for database or redirect usage.\n *\n * @since 2.3.1\n * @deprecated 2.8.0\n * @deprecated Use esc_url_raw()\n * @see esc_url_raw()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols An array of acceptable protocols.\n * @return string The cleaned URL.\n *\/","file":"deprecated.php","line":2066,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2067],"esc_url_raw":[2068]},"used_by":[]},"clean_url":{"doc":"\/**\n * Checks and cleans a URL.\n *\n * A number of characters are removed from the URL. If the URL is for displaying\n * (the default behaviour) ampersands are also replaced. The 'clean_url' filter\n * is applied to the returned cleaned URL.\n *\n * @since 1.2.0\n * @deprecated 3.0.0\n * @deprecated Use esc_url()\n * @see Alias for esc_url()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols Optional. An array of acceptable protocols.\n * @param string $context Optional. How the URL will be used. Default is 'display'.\n * @return string The cleaned $url after the 'clean_url' filter is applied.\n *\/","file":"deprecated.php","line":2088,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2090,2092],"esc_url":[2093]},"used_by":[]},"js_escape":{"doc":"\/**\n * Escape single quotes, specialchar double quotes, and fix line endings.\n *\n * The filter 'js_escape' is also applied by esc_js()\n *\n * @since 2.0.4\n * @deprecated 2.8.0\n * @deprecated Use esc_js()\n * @see esc_js()\n *\n * @param string $text The text to be escaped.\n * @return string Escaped text.\n *\/","file":"deprecated.php","line":2109,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2110],"esc_js":[2111]},"used_by":[]},"wp_specialchars":{"doc":"\/**\n * Escaping for HTML blocks.\n *\n * @deprecated 2.8.0\n * @deprecated Use esc_html()\n * @see esc_html()\n *\/","file":"deprecated.php","line":2121,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2122],"func_get_args":[2124],"call_user_func_array":[2125],"esc_html":[2127],"func_num_args":[2123]},"used_by":[]},"attribute_escape":{"doc":"\/**\n * Escaping for HTML attributes.\n *\n * @since 2.0.6\n * @deprecated 2.8.0\n * @deprecated Use esc_attr()\n * @see esc_attr()\n *\n * @param string $text\n * @return string\n *\/","file":"deprecated.php","line":2142,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2143],"esc_attr":[2144]},"used_by":[]},"register_sidebar_widget":{"doc":"\/**\n * Register widget for sidebar with backwards compatibility.\n *\n * Allows $name to be an array that accepts either three elements to grab the\n * first element and the third for the name or just uses the first element of\n * the array for the name.\n *\n * Passes to {@link wp_register_sidebar_widget()} after argument list and\n * backwards compatibility is complete.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_register_sidebar_widget()\n * @see wp_register_sidebar_widget()\n *\n * @param string|int $name Widget ID.\n * @param callback $output_callback Run when widget is called.\n * @param string $classname Classname widget option.\n * @param mixed $params,... Widget parameters.\n *\/","file":"deprecated.php","line":2167,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2168],"sprintf":[2172],"count":[2171],"is_array":[2170],"sanitize_title":[2177],"is_string":[2179],"array_slice":[2181],"func_get_args":[2181],"array_merge":[2184],"call_user_func_array":[2186]},"used_by":[]},"unregister_sidebar_widget":{"doc":"\/**\n * Alias of {@link wp_unregister_sidebar_widget()}.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_unregister_sidebar_widget()\n * @see wp_unregister_sidebar_widget()\n *\n * @param int|string $id Widget ID.\n *\/","file":"deprecated.php","line":2199,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2200],"wp_unregister_sidebar_widget":[2201]},"used_by":[]},"wp_unregister_sidebar_widget":{"doc":"\/**\n * Remove widget from sidebar.\n *\n * @since 2.2.0\n *\n * @param int|string $id Widget ID.\n *\/","file":"widgets.php","line":702,"missingDoc":false,"filters":["'wp_unregister_sidebar_widget'"],"uses":{"wp_register_sidebar_widget":[705],"wp_unregister_widget_control":[706]},"used_by":{"unregister_sidebar_widget":[2201]}},"register_widget_control":{"doc":"\/**\n * Registers widget control callback for customizing options.\n *\n * Allows $name to be an array that accepts either three elements to grab the\n * first element and the third for the name or just uses the first element of\n * the array for the name.\n *\n * Passes to {@link wp_register_widget_control()} after the argument list has\n * been compiled.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_register_widget_control()\n * @see wp_register_widget_control()\n *\n * @param int|string $name Sidebar ID.\n * @param callback $control_callback Widget control callback to display and process form.\n * @param int $width Widget width.\n * @param int $height Widget height.\n *\/","file":"deprecated.php","line":2224,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2225],"sprintf":[2229],"count":[2228],"is_array":[2227],"sanitize_title":[2234],"array_slice":[2240],"func_get_args":[2240],"array_merge":[2243],"call_user_func_array":[2245]},"used_by":[]},"unregister_widget_control":{"doc":"\/**\n * Alias of {@link wp_unregister_widget_control()}.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_unregister_widget_control()\n * @see wp_unregister_widget_control()\n *\n * @param int|string $id Widget ID.\n *\/","file":"deprecated.php","line":2258,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2259],"wp_unregister_widget_control":[2260]},"used_by":[]},"wp_unregister_widget_control":{"doc":"\/**\n * Remove control callback for widget.\n *\n * @since 2.2.0\n * @uses wp_register_widget_control() Unregisters by using empty callback.\n *\n * @param int|string $id Widget ID.\n *\/","file":"widgets.php","line":829,"missingDoc":false,"filters":[],"uses":{"wp_register_widget_control":[830]},"used_by":{"unregister_widget_control":[2260],"wp_unregister_sidebar_widget":[706]}},"delete_usermeta":{"doc":"\/**\n * Remove user meta data.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use delete_user_meta()\n * @see delete_user_meta()\n *\n * @param int $user_id User ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @return bool True deletion completed and false if user_id is not a number.\n *\/","file":"deprecated.php","line":2276,"missingDoc":false,"filters":["'delete_usermeta'","'deleted_usermeta'"],"uses":{"_deprecated_function":[2277],"is_numeric":[2279],"preg_replace":[2281],"serialize":[2284],"is_array":[2283],"is_object":[2283],"trim":[2285],"get_row":[2287],"prepare":[2287,2293,2295],"query":[2293,2295],"clean_user_cache":[2297],"wp_cache_delete":[2298]},"used_by":{"update_usermeta":[2390]}},"clean_user_cache":{"doc":"\/**\n * Clean all user caches\n *\n * @since 3.0.0\n *\n * @param WP_User|int $user User object or ID to be cleaned from the cache\n *\/","file":"user.php","line":1176,"missingDoc":false,"filters":[],"uses":{"is_numeric":[1177],"exists":[1180],"wp_cache_delete":[1183,1184,1185,1186]},"used_by":{"delete_usermeta":[2297],"update_usermeta":[2405]}},"get_usermeta":{"doc":"\/**\n * Retrieve user metadata.\n *\n * If $user_id is not a number, then the function will fail over with a 'false'\n * boolean return value. Other returned values depend on whether there is only\n * one item to be returned, which be that single item type. If there is more\n * than one metadata value, then it will be list of metadata values.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use get_user_meta()\n * @see get_user_meta()\n *\n * @param int $user_id User ID\n * @param string $meta_key Optional. Metadata key.\n * @return mixed\n *\/","file":"deprecated.php","line":2323,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2324],"preg_replace":[2332],"wp_cache_get":[2333],"get_col":[2338,2340],"prepare":[2338,2340],"array_map":[2350],"count":[2352]},"used_by":[]},"update_usermeta":{"doc":"\/**\n * Update metadata of user.\n *\n * There is no need to serialize values, they will be serialized if it is\n * needed. The metadata key can only be a string with underscores. All else will\n * be removed.\n *\n * Will remove the metadata, if the meta value is empty.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use update_user_meta()\n * @see update_user_meta()\n *\n * @param int $user_id User ID\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @return bool True on successful update, false on failure.\n *\/","file":"deprecated.php","line":2377,"missingDoc":false,"filters":["'update_usermeta'","'added_usermeta'","'updated_usermeta'"],"uses":{"_deprecated_function":[2378],"is_numeric":[2380],"preg_replace":[2382],"stripslashes":[2386],"is_string":[2385],"maybe_serialize":[2387],"delete_usermeta":[2390],"get_row":[2393],"prepare":[2393],"insert":[2399],"compact":[2399,2401,2401],"update":[2401],"clean_user_cache":[2405],"wp_cache_delete":[2406]},"used_by":[]},"maybe_serialize":{"doc":"\/**\n * Serialize data, if needed.\n *\n * @since 2.0.5\n *\n * @param mixed $data Data that might be serialized.\n * @return mixed A scalar data\n *\/","file":"functions.php","line":314,"missingDoc":false,"filters":[],"uses":{"serialize":[316,321],"is_array":[315],"is_object":[315],"is_serialized":[320]},"used_by":{"update_usermeta":[2387],"add_metadata":[60],"update_metadata":[139,145],"delete_metadata":[207],"update_metadata_by_mid":[420],"update_option":[245],"add_option":[317],"add_site_option":[827],"update_site_option":[918]}},"get_users_of_blog":{"doc":"\/**\n * Get users for the blog.\n *\n * For setups that use the multi-blog feature. Can be used outside of the\n * multi-blog feature.\n *\n * @since 2.2.0\n * @deprecated 3.1.0\n * @uses $wpdb WordPress database object for queries\n * @uses $blog_id The Blog id of the blog for those that use more than one blog\n *\n * @param int $id Blog ID.\n * @return array List of users that are part of that Blog ID\n *\/","file":"deprecated.php","line":2430,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2431],"get_blog_prefix":[2436],"get_results":[2437]},"used_by":[]},"automatic_feed_links":{"doc":"\/**\n * Enable\/disable automatic general feed link outputting.\n *\n * @since 2.8.0\n * @deprecated 3.0.0\n * @deprecated Use add_theme_support( 'automatic-feed-links' )\n *\n * @param boolean $add Optional, default is true. Add or remove links. Defaults to true.\n *\/","file":"deprecated.php","line":2450,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2451],"add_theme_support":[2454],"remove_action":[2456]},"used_by":[]},"add_theme_support":{"doc":"\/**\n * Allows a theme to register its support of a certain feature\n *\n * Must be called in the theme's functions.php file to work.\n * If attached to a hook, it must be after_setup_theme.\n * The init hook may be too late for some features.\n *\n * @since 2.9.0\n * @param string $feature the feature being added\n *\/","file":"theme.php","line":1251,"missingDoc":false,"filters":[],"uses":{"array_slice":[1257],"func_get_args":[1257],"func_num_args":[1254],"array_intersect":[1262],"array_keys":[1262],"get_post_format_slugs":[1262],"is_array":[1261,1270,1347],"add_theme_support":[1266],"wp_parse_args":[1294,1299,1363,1366],"define":[1310,1315,1320,1325,1330,1371,1376],"defined":[1307,1312,1317,1322,1327,1368,1373]},"used_by":{"automatic_feed_links":[2454],"add_custom_image_header":[3033],"add_custom_background":[3072],"register_nav_menus":[76],"add_editor_style":[1209],"add_theme_support":[1266],"_custom_header_background_just_in_time":[1395,1409],"_remove_theme_support":[1483],"register_sidebar":[572]}},"get_profile":{"doc":"\/**\n * Retrieve user data based on field.\n *\n * @since 1.5.0\n * @deprecated 3.0.0\n * @deprecated Use get_the_author_meta()\n * @see get_the_author_meta()\n *\/","file":"deprecated.php","line":2467,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2468],"get_user_by":[2470],"get_the_author_meta":[2473]},"used_by":[]},"get_user_by":{"doc":"\/**\n * Retrieve user info by a given field\n *\n * @since 2.8.0\n *\n * @param string $field The field to retrieve the user with. id | slug | email | login\n * @param int|string $value A value for $field. A user ID, slug, email address, or login name.\n * @return bool|object False on failure, WP_User object on success\n *\/","file":"pluggable.php","line":135,"missingDoc":false,"filters":[],"uses":{"init":[142]},"used_by":{"get_profile":[2470],"is_site_admin":[51],"get_user_details":[106],"get_user_id_from_string":[1338,1344],"get_userdatabylogin":[52],"get_user_by_email":[69],"wp_setcookie":[91],"get_userdata":[121],"wp_validate_auth_cookie":[540],"get_pages":[3710],"WP_Query::get_posts":[2323],"wp_authenticate_username_password":[87],"username_exists":[1198],"email_exists":[1215]}},"get_usernumposts":{"doc":"\/**\n * Number of posts user has written.\n *\n * @since 0.71\n * @deprecated 3.0.0\n * @deprecated Use count_user_posts()\n * @see count_user_posts()\n *\/","file":"deprecated.php","line":2484,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2485],"count_user_posts":[2486]},"used_by":[]},"funky_javascript_callback":{"doc":"\/**\n * Callback used to change %uXXXX to &#YYY; syntax\n *\n * @since 2.8.0\n * @access private\n * @deprecated 3.0.0\n *\n * @param array $matches Single Match\n * @return string An HTML entity\n *\/","file":"deprecated.php","line":2499,"missingDoc":false,"filters":[],"uses":{"base_convert":[2500]},"used_by":[]},"funky_javascript_fix":{"doc":"\/**\n * Fixes javascript bugs in browsers.\n *\n * Converts unicode characters to HTML numbered entities.\n *\n * @since 1.5.0\n * @uses $is_macIE\n * @uses $is_winIE\n * @deprecated 3.0.0\n *\n * @param string $text Text to be made safe.\n * @return string Fixed text.\n *\/","file":"deprecated.php","line":2516,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2517],"preg_replace_callback":[2522]},"used_by":[]},"is_taxonomy":{"doc":"\/**\n * Checks that the taxonomy name exists.\n *\n * @since 2.3.0\n * @deprecated 3.0.0\n * @deprecated Use taxonomy_exists()\n * @see taxonomy_exists()\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy exists.\n *\/","file":"deprecated.php","line":2540,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2541],"taxonomy_exists":[2542]},"used_by":[]},"is_term":{"doc":"\/**\n * Check if Term exists.\n *\n * @since 2.3.0\n * @deprecated 3.0.0\n * @deprecated Use term_exists()\n * @see term_exists()\n *\n * @param int|string $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param int $parent ID of parent term under which to confine the exists search.\n * @return mixed Get the term id or Term Object, if exists.\n *\/","file":"deprecated.php","line":2558,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2559],"term_exists":[2560]},"used_by":[]},"term_exists":{"doc":"\/**\n * Check if Term exists.\n *\n * Formerly is_term(), introduced in 2.3.0.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n *\n * @uses $wpdb\n *\n * @param int|string $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param int $parent ID of parent term under which to confine the exists search.\n * @return mixed Returns 0 if the term does not exist. Returns the term ID if no taxonomy is specified\n * \tand the term ID exists. Returns an array of the term ID and the taxonomy if the pairing exists.\n *\/","file":"taxonomy.php","line":1481,"missingDoc":false,"filters":[],"uses":{"get_row":[1492,1518,1521],"prepare":[1492,1494,1518,1521,1524,1527],"get_var":[1494,1524,1527],"is_int":[1487],"trim":[1497],"stripslashes":[1497],"sanitize_title":[1499]},"used_by":{"is_term":[2560],"wp_delete_term":[1768,1788],"wp_insert_term":[2106,2089,2086],"wp_set_object_terms":[2194],"wp_unique_term_slug":[2274,2286]}},"is_plugin_page":{"doc":"\/**\n * Is the current admin page generated by a plugin?\n *\n * @since 1.5.0\n * @deprecated 3.1.0\n * @deprecated Use global $plugin_page and\/or get_plugin_page_hookname() hooks.\n *\n * @global $plugin_page\n *\n * @return bool\n *\/","file":"deprecated.php","line":2574,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2575]},"used_by":[]},"update_category_cache":{"doc":"\/**\n * Update the categories cache.\n *\n * This function does not appear to be used anymore or does not appear to be\n * needed. It might be a legacy function left over from when there was a need\n * for updating the category cache.\n *\n * @since 1.5.0\n * @deprecated 3.1.0\n *\n * @return bool Always return True\n *\/","file":"deprecated.php","line":2597,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2598]},"used_by":[]},"wp_timezone_supported":{"doc":"\/**\n * Check for PHP timezone support\n *\n * @since 2.9.0\n * @deprecated 3.2.0\n *\n * @return bool\n *\/","file":"deprecated.php","line":2611,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2612]},"used_by":[]},"the_editor":{"doc":"\/**\n * Display editor: TinyMCE, HTML, or both.\n *\n * @since 2.1.0\n * @deprecated 3.3.0\n * @deprecated Use wp_editor()\n * @see wp_editor()\n *\n * @param string $content Textarea content.\n * @param string $id Optional, default is 'content'. HTML ID attribute value.\n * @param string $prev_id Optional, not used\n * @param bool $media_buttons Optional, default is true. Whether to display media buttons.\n * @param int $tab_index Optional, not used\n *\/","file":"deprecated.php","line":2631,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2632],"wp_editor":[2634]},"used_by":[]},"wp_editor":{"doc":"\/**\n * Renders an editor.\n *\n * Using this function is the proper way to output all needed components for both TinyMCE and Quicktags.\n * _WP_Editors should not be used directly. See http:\/\/core.trac.wordpress.org\/ticket\/17144.\n *\n * NOTE: Once initialized the TinyMCE editor cannot be safely moved in the DOM. For that reason\n * running wp_editor() inside of a metabox is not a good idea unless only Quicktags is used.\n * On the post edit screen several actions can be used to include additional editors\n * containing TinyMCE: 'edit_page_form', 'edit_form_advanced' and 'dbx_post_sidebar'.\n * See http:\/\/core.trac.wordpress.org\/ticket\/19173 for more information.\n *\n * @see wp-includes\/class-wp-editor.php\n * @since 3.3.0\n *\n * @param string $content Initial content for the editor.\n * @param string $editor_id HTML ID attribute value for the textarea and TinyMCE. Can only be \/[a-z]+\/.\n * @param array $settings See _WP_Editors::editor().\n *\/","file":"general-template.php","line":1807,"missingDoc":false,"filters":[],"uses":{"class_exists":[1808]},"used_by":{"the_editor":[2634]}},"get_user_metavalues":{"doc":"\/**\n * Perform the query to get the $metavalues array(s) needed by _fill_user and _fill_many_users\n *\n * @since 3.0.0\n * @deprecated 3.3.0\n *\n * @param array $ids User ID numbers list.\n * @return array of arrays. The array is indexed by user_id, containing $metavalues object arrays.\n *\/","file":"deprecated.php","line":2647,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2648],"array_map":[2652],"update_meta_cache":[2656]},"used_by":[]},"update_meta_cache":{"doc":"\/**\n * Update the metadata cache for the specified objects.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int|array $object_ids array or comma delimited list of object IDs to update cache for\n * @return mixed Metadata cache for the specified objects, or false on failure.\n *\/","file":"meta.php","line":524,"missingDoc":false,"filters":[],"uses":{"_get_meta_table":[528],"esc_sql":[531],"preg_replace":[536],"explode":[537],"is_array":[535,568,570],"array_map":[540],"wp_cache_get":[546],"join":[557],"get_results":[558],"prepare":[558],"intval":[563],"wp_cache_add":[581]},"used_by":{"get_user_metavalues":[2656],"get_metadata":[285],"metadata_exists":[329],"cache_users":[173],"update_postmeta_cache":[4736]}},"sanitize_user_object":{"doc":"\/**\n * Sanitize every user field.\n *\n * If the context is 'raw', then the user object or array will get minimal santization of the int fields.\n *\n * @since 2.3.0\n * @deprecated 3.3.0\n *\n * @param object|array $user The User Object or Array\n * @param string $context Optional, default is 'display'. How to sanitize user fields.\n * @return object|array The now sanitized User Object or Array (will be the same type as $user)\n *\/","file":"deprecated.php","line":2681,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2682],"get_object_vars":[2688],"sanitize_user_field":[2691,2699],"is_string":[2690],"is_numeric":[2690],"array_keys":[2689,2698],"is_a":[2687],"is_object":[2684]},"used_by":[]},"get_boundary_post_rel_link":{"doc":"\/**\n * Get boundary post relational link.\n *\n * Can either be start or end post relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param string $excluded_categories Optional. Excluded categories IDs.\n * @param bool $start Optional, default is true. Whether to display link to first or last post.\n * @return string\n *\/","file":"deprecated.php","line":2720,"missingDoc":false,"filters":["'the_title'","\"{$boundary}_post_rel_link\""],"uses":{"_deprecated_function":[2721],"get_boundary_post":[2723],"__":[2732,2732],"mysql2date":[2734],"get_option":[2734],"str_replace":[2736,2737],"esc_attr":[2741],"get_permalink":[2742]},"used_by":{"start_post_rel_link":[2761]}},"get_boundary_post":{"doc":"\/**\n * Retrieve boundary post.\n *\n * Boundary being either the first or last post by publish date within the constraints specified\n * by $in_same_cat or $excluded_categories.\n *\n * @since 2.8.0\n *\n * @param bool $in_same_cat Optional. Whether returned post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $start Optional. Whether to retrieve first or last post.\n * @return object\n *\/","file":"link-template.php","line":1305,"missingDoc":false,"filters":[],"uses":{"get_post":[1306],"is_single":[1307],"is_attachment":[1307],"explode":[1312],"is_array":[1311],"wp_get_object_terms":[1316],"array_map":[1319],"array_diff":[1320],"implode":[1329],"array_merge":[1329],"get_posts":[1333]},"used_by":{"get_boundary_post_rel_link":[2723]}},"start_post_rel_link":{"doc":"\/**\n * Display relational link for the first post.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param string $excluded_categories Optional. Excluded categories IDs.\n *\/","file":"deprecated.php","line":2758,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2759],"get_boundary_post_rel_link":[2761]},"used_by":[]},"get_index_rel_link":{"doc":"\/**\n * Get site index relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @return string\n *\/","file":"deprecated.php","line":2772,"missingDoc":false,"filters":["'index_rel_link'"],"uses":{"_deprecated_function":[2773],"esc_attr":[2775],"get_bloginfo":[2775,2775],"esc_url":[2775],"user_trailingslashit":[2775]},"used_by":{"index_rel_link":[2788]}},"index_rel_link":{"doc":"\/**\n * Display relational link for the site index.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2785,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2786],"get_index_rel_link":[2788]},"used_by":[]},"get_parent_post_rel_link":{"doc":"\/**\n * Get parent post relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @return string\n *\/","file":"deprecated.php","line":2800,"missingDoc":false,"filters":["'the_title'","'parent_post_rel_link'"],"uses":{"_deprecated_function":[2801],"get_post":[2804],"mysql2date":[2809],"get_option":[2809],"str_replace":[2811,2812],"esc_attr":[2816],"get_permalink":[2817]},"used_by":{"parent_post_rel_link":[2831]}},"parent_post_rel_link":{"doc":"\/**\n * Display relational link for parent item\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2828,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2829],"get_parent_post_rel_link":[2831]},"used_by":[]},"wp_admin_bar_dashboard_view_site_menu":{"doc":"\/**\n * Add the \"Dashboard\"\/\"Visit Site\" menu.\n *\n * @since 3.2.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2840,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2841],"get_current_user_id":[2843],"add_menu":[2847,2849,2851],"__":[2847,2849,2851],"home_url":[2847],"is_multisite":[2848],"get_dashboard_url":[2849],"admin_url":[2851],"is_admin":[2846]},"used_by":[]},"get_dashboard_url":{"doc":"\/**\n * Get the URL to the user's dashboard.\n *\n * If a user does not belong to any site, the global user dashboard is used. If the user belongs to the current site,\n * the dashboard for the current site is returned. If the user cannot edit the current site, the dashboard to the user's\n * primary blog is returned.\n *\n * @since 3.1.0\n *\n * @param int $user_id User ID\n * @param string $path Optional path relative to the dashboard. Use only paths known to both blog and user admins.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Dashboard url link with optional path appended.\n *\/","file":"link-template.php","line":2260,"missingDoc":false,"filters":["'user_dashboard_url'"],"uses":{"get_blogs_of_user":[2263],"user_admin_url":[2265,2277],"is_multisite":[2266],"admin_url":[2267,2271],"get_current_blog_id":[2269],"get_active_blog_for_user":[2273],"get_admin_url":[2275],"is_super_admin":[2270,2264],"in_array":[2270],"array_keys":[2270]},"used_by":{"wp_admin_bar_dashboard_view_site_menu":[2849],"get_edit_profile_url":[2301]}},"is_blog_user":{"doc":"\/**\n * Checks if the current user belong to a given blog.\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use is_user_member_of_blog()\n * @see is_user_member_of_blog()\n *\n * @param int $blog_id Blog ID\n * @return bool True if the current users belong to $blog_id, false if not.\n *\/","file":"deprecated.php","line":2866,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2867],"is_user_member_of_blog":[2869],"get_current_user_id":[2869]},"used_by":[]},"debug_fopen":{"doc":"\/**\n * Open the file handle for debugging.\n *\n * @since 0.71\n * @deprecated Use error_log()\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2880,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2881]},"used_by":[]},"debug_fwrite":{"doc":"\/**\n * Write contents to the file used for debugging.\n *\n * @since 0.71\n * @deprecated Use error_log() instead.\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2893,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2894],"error_log":[2896]},"used_by":[]},"debug_fclose":{"doc":"\/**\n * Close the debugging file handle.\n *\n * @since 0.71\n * @deprecated Use error_log()\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2907,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2908]},"used_by":[]},"get_themes":{"doc":"\/**\n * Retrieve list of themes with theme data in theme directory.\n *\n * The theme is broken, if it doesn't have a parent theme and is missing either\n * style.css and, or index.php. If the theme has a parent theme then it is\n * broken, if it is missing style.css; index.php is optional.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_themes()\n * @see wp_get_themes()\n *\n * @return array Theme list with theme data.\n *\/","file":"deprecated.php","line":2925,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2926],"wp_get_themes":[2932],"get":[2936],"get_stylesheet":[2938]},"used_by":{"get_theme":[2960]}},"get_theme":{"doc":"\/**\n * Retrieve theme data.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_theme()\n * @see wp_get_theme()\n *\n * @param string $theme Theme name.\n * @return array|null Null, if theme name does not exist. Theme data, if exists.\n *\/","file":"deprecated.php","line":2957,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2958],"get_themes":[2960],"is_array":[2961],"array_key_exists":[2961]},"used_by":[]},"get_current_theme":{"doc":"\/**\n * Retrieve current theme name.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use (string) wp_get_theme()\n * @see wp_get_theme()\n *\n * @return string\n *\/","file":"deprecated.php","line":2976,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2977],"get_option":[2979],"get":[2982],"wp_get_theme":[2982]},"used_by":[]},"clean_pre":{"doc":"\/**\n * Accepts matches array from preg_replace_callback in wpautop() or a string.\n *\n * Ensures that the contents of a <<pre>>...<<\/pre>> HTML block are not\n * converted into paragraphs or line-breaks.\n *\n * @since 1.2.0\n * @deprecated 3.4.0\n *\n * @param array|string $matches The array or string\n * @return string The pre block without paragraph\/line-break conversion.\n *\/","file":"deprecated.php","line":2997,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2998],"is_array":[3000],"str_replace":[3005,3006,3007]},"used_by":[]},"add_custom_image_header":{"doc":"\/**\n * Add callbacks for image header display.\n *\n * @since 2.1.0\n * @deprecated 3.4.0\n * @deprecated Use add_theme_support('custom-header', $args)\n * @see add_theme_support()\n *\n * @param callback $wp_head_callback Call on 'wp_head' action.\n * @param callback $admin_head_callback Call on custom header administration screen.\n * @param callback $admin_preview_callback Output a custom header image div on the custom header administration screen. Optional.\n *\/","file":"deprecated.php","line":3025,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3026],"add_theme_support":[3033]},"used_by":[]},"remove_custom_image_header":{"doc":"\/**\n * Remove image header support.\n *\n * @since 3.1.0\n * @deprecated 3.4.0\n * @deprecated Use remove_theme_support('custom-header')\n * @see remove_theme_support()\n *\n * @return bool Whether support was removed.\n *\/","file":"deprecated.php","line":3046,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3047],"remove_theme_support":[3048]},"used_by":[]},"remove_theme_support":{"doc":"\/**\n * Allows a theme to de-register its support of a certain feature\n *\n * Should be called in the theme's functions.php file. Generally would\n * be used for child themes to override support from the parent theme.\n *\n * @since 3.0.0\n * @see add_theme_support()\n * @param string $feature the feature being added\n * @return bool Whether feature was removed.\n *\/","file":"theme.php","line":1462,"missingDoc":false,"filters":[],"uses":{"in_array":[1464],"_remove_theme_support":[1467]},"used_by":{"remove_custom_image_header":[3048],"remove_custom_background":[3085]}},"add_custom_background":{"doc":"\/**\n * Add callbacks for background image display.\n *\n * @since 3.0.0\n * @deprecated 3.4.0\n * @deprecated Use add_theme_support('custom-background, $args)\n * @see add_theme_support()\n *\n * @param callback $wp_head_callback Call on 'wp_head' action.\n * @param callback $admin_head_callback Call on custom background administration screen.\n * @param callback $admin_preview_callback Output a custom background image div on the custom background administration screen. Optional.\n *\/","file":"deprecated.php","line":3063,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3064],"add_theme_support":[3072]},"used_by":[]},"remove_custom_background":{"doc":"\/**\n * Remove custom background support.\n *\n * @since 3.1.0\n * @see add_custom_background()\n *\n * @return bool Whether support was removed.\n *\/","file":"deprecated.php","line":3083,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3084],"remove_theme_support":[3085]},"used_by":[]},"get_theme_data":{"doc":"\/**\n * Retrieve theme data from parsed theme file.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_theme()\n * @see wp_get_theme()\n *\n * @param string $theme_file Theme file path.\n * @return array Theme data.\n *\/","file":"deprecated.php","line":3099,"missingDoc":false,"filters":["'extra_theme_headers'"],"uses":{"_deprecated_function":[3100],"basename":[3101],"dirname":[3101,3101,3101],"get":[3104,3109,3110,3111,3112,3113,3114,3119],"display":[3105,3106,3107,3108]},"used_by":[]},"update_page_cache":{"doc":"\/**\n * Alias of update_post_cache().\n *\n * @see update_post_cache() Posts and pages are the same, alias is intentional\n *\n * @since 1.5.1\n * @deprecated 3.4.0\n *\n * @param array $pages list of page objects\n *\/","file":"deprecated.php","line":3135,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3136],"update_post_cache":[3138]},"used_by":[]},"update_post_cache":{"doc":"\/**\n * Updates posts in cache.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 1.5.1\n *\n * @param array $posts Array of post objects\n *\/","file":"post.php","line":4615,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[4620]},"used_by":{"update_page_cache":[3138],"get_children":[316],"get_pages":[3811],"update_post_caches":[4690]}},"clean_page_cache":{"doc":"\/**\n * Will clean the page in the cache.\n *\n * Clean (read: delete) page from cache that matches $id. Will also clean cache\n * associated with 'all_page_ids' and 'get_pages'.\n *\n * @since 2.0.0\n * @deprecated 3.4.0\n *\n * @uses do_action() Will call the 'clean_page_cache' hook action.\n *\n * @param int $id Page ID to clean\n *\/","file":"deprecated.php","line":3154,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3155],"clean_post_cache":[3157]},"used_by":[]},"wp_explain_nonce":{"doc":"\/**\n * Retrieve nonce action \"Are you sure\" message.\n *\n * Deprecated in 3.4.1 and 3.5.0. Backported to 3.3.3.\n *\n * @since 2.0.4\n * @deprecated 3.4.1\n * @deprecated Use wp_nonce_ays()\n * @see wp_nonce_ays()\n *\n * @param string $action Nonce action.\n * @return string Are you sure message.\n *\/","file":"deprecated.php","line":3173,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3174],"__":[3175]},"used_by":[]},"sticky_class":{"doc":"\/**\n * Display \"sticky\" CSS class, if a post is sticky.\n *\n * @since 2.7.0\n * @deprecated 3.5.0\n * @deprecated Use post_class()\n * @see post_class()\n *\n * @param int $post_id An optional post ID.\n *\/","file":"deprecated.php","line":3188,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3189],"is_sticky":[3190]},"used_by":[]},"_get_post_ancestors":{"doc":"\/**\n * Retrieve post ancestors.\n *\n * This is no longer needed as WP_Post lazy-loads the ancestors\n * property with get_post_ancestors().\n *\n * @since 2.3.4\n * @deprecated 3.5.0\n * @see get_post_ancestors()\n *\/","file":"deprecated.php","line":3204,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3205]},"used_by":[]},"wp_load_image":{"doc":"\/**\n * Load an image from a string, if PHP supports it.\n *\n * @since 2.1.0\n * @deprecated 3.5.0\n * @see wp_get_image_editor()\n *\n * @param string $file Filename of the image to load.\n * @return resource The resulting image resource on success, Error string on failure.\n *\/","file":"deprecated.php","line":3218,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"_deprecated_function":[3219],"get_attached_file":[3222],"is_numeric":[3221],"sprintf":[3225,3235],"__":[3225,3228,3235],"is_file":[3224],"function_exists":[3227],"ini_set":[3231],"imagecreatefromstring":[3232],"file_get_contents":[3232],"is_resource":[3234]},"used_by":[]},"image_resize":{"doc":"\/**\n * Scale down an image to fit a particular size and save a new copy of the image.\n *\n * The PNG transparency will be preserved using the function, as well as the\n * image type. If the file going in is PNG, then the resized image is going to\n * be PNG. The only supported image types are PNG, GIF, and JPEG.\n *\n * Some functionality requires API to exist, so some PHP version may lose out\n * support. This is not the fault of WordPress (where functionality is\n * downgraded, not actual defects), but of your PHP version.\n *\n * @since 2.5.0\n * @deprecated 3.5.0\n * @see wp_get_image_editor()\n *\n * @param string $file Image file path.\n * @param int $max_w Maximum width to resize to.\n * @param int $max_h Maximum height to resize to.\n * @param bool $crop Optional. Whether to crop image or resize.\n * @param string $suffix Optional. File suffix.\n * @param string $dest_path Optional. New image file path.\n * @param int $jpeg_quality Optional, default is 90. Image quality percentage.\n * @return mixed WP_Error on failure. String with new destination path.\n *\/","file":"deprecated.php","line":3264,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3265],"wp_get_image_editor":[3267],"is_wp_error":[3268,3273,3279],"set_quality":[3270],"resize":[3272],"generate_filename":[3276],"save":[3277]},"used_by":[]},"wp_get_image_editor":{"doc":"\/**\n * Returns a WP_Image_Editor instance and loads file into it.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $path Path to file to load\n * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return WP_Image_Editor|WP_Error\n *\/","file":"media.php","line":1163,"missingDoc":false,"filters":[],"uses":{"wp_check_filetype":[1167],"_wp_image_editor_choose":[1175],"load":[1179],"is_wp_error":[1181],"__":[1187]},"used_by":{"image_resize":[3267],"image_make_intermediate_size":[391]}},"wp_get_single_post":{"doc":"\/**\n * Retrieve a single post, based on post ID.\n *\n * Has categories in 'post_category' property or key. Has tags in 'tags_input'\n * property or key.\n *\n * @since 1.0.0\n * @deprecated 3.5.0\n * @see get_post()\n *\n * @param int $postid Post ID.\n * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A.\n * @return object|array Post object or array holding post contents and information\n *\/","file":"deprecated.php","line":3299,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3300],"get_post":[3301]},"used_by":[]},"user_pass_ok":{"doc":"\/**\n * Check that the user login name and password is correct.\n *\n * @since 0.71\n * @deprecated 3.5.0\n * @deprecated Use wp_authenticate()\n * @see wp_authenticate()\n *\n * @param string $user_login User name.\n * @param string $user_pass User password.\n * @return bool False if does not authenticate, true if username and password authenticates.\n *\/","file":"deprecated.php","line":3316,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3317],"wp_authenticate":[3318],"is_wp_error":[3319]},"used_by":[]},"_save_post_hook":{"doc":"\/**\n * Callback formerly fired on the save_post hook. No longer needed.\n *\n * @since 2.3.0\n * @deprecated 3.5.0\n *\/","file":"deprecated.php","line":3331,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"gd_edit_image_support":{"doc":"\/**\n * Check if the installed version of GD supports particular image type\n *\n * @since 2.9.0\n * @deprecated 3.5.0\n * @see wp_image_editor_supports()\n *\n * @param string $mime_type\n * @return bool\n *\/","file":"deprecated.php","line":3343,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3344],"imagetypes":[3349,3351,3353],"function_exists":[3358,3360,3362,3346]},"used_by":[]},"feed_content_type":{"doc":"\/**\n * Return the content type for specified feed type.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.8.0\n *\/","file":"feed.php","line":501,"missingDoc":false,"filters":["'feed_content_type'"],"uses":{"get_default_feed":[503]},"used_by":{"__main":[8,8,8,8,8,8],"feed_links":[1609,1610],"feed_links_extra":[1672]}},"bloginfo_rss":{"doc":"\/**\n * Display RSS container for the bloginfo function.\n *\n * You can retrieve anything that you can using the get_bloginfo() function.\n * Everything will be stripped of tags and characters converted, when the values\n * are retrieved for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'bloginfo_rss' hook with two parameters.\n * @see get_bloginfo() For the list of possible values to display.\n *\n * @param string $show See get_bloginfo() for possible values.\n *\/","file":"feed.php","line":48,"missingDoc":false,"filters":["'bloginfo_rss'"],"uses":{"get_bloginfo_rss":[49]},"used_by":{"__main":[13,25,30,34,38,38,39,40,57,75,80,15,16,19,20,24,24,39,50,21,22,23,24,14,15,16,19,29,30,24,26,27,29]}},"ent2ncr":{"doc":"\/**\n * Converts named entities into numbered entities.\n *\n * @since 1.5.1\n *\n * @param string $text The text within which entities will be converted.\n * @return string Text with converted entities.\n *\/","file":"formatting.php","line":2209,"missingDoc":false,"filters":["'pre_ent2ncr'"],"uses":{"str_replace":[2476],"array_keys":[2476],"array_values":[2476]},"used_by":{"__main":[19,21,23,52,54,22,24,26,44,46,54]}},"get_the_title_rss":{"doc":"\/**\n * Retrieve the current post title for the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.0.0\n * @uses apply_filters() Calls 'the_title_rss' on the post title.\n *\n * @return string Current post title.\n *\/","file":"feed.php","line":115,"missingDoc":false,"filters":["'the_title_rss'"],"uses":{"get_the_title":[116]},"used_by":{"__main":[19,22],"the_title_rss":[130]}},"get_bloginfo_rss":{"doc":"\/**\n * RSS container for the bloginfo function.\n *\n * You can retrieve anything that you can using the get_bloginfo() function.\n * Everything will be stripped of tags and characters converted, when the values\n * are retrieved for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.5.1\n * @uses apply_filters() Calls 'get_bloginfo_rss' hook with two parameters.\n * @see get_bloginfo() For the list of possible values to display.\n *\n * @param string $show See get_bloginfo() for possible values.\n * @return string\n *\/","file":"feed.php","line":28,"missingDoc":false,"filters":["'get_bloginfo_rss'"],"uses":{"strip_tags":[29],"get_bloginfo":[29],"convert_chars":[30]},"used_by":{"__main":[21,23,24,26],"bloginfo_rss":[49],"get_the_generator":[2196,2199,2202,2208]}},"get_search_query":{"doc":"\/**\n * Retrieve the contents of the search WordPress query variable.\n *\n * The search query string is passed through {@link esc_attr()}\n * to ensure that it is safe for placing in an html attribute.\n *\n * @since 2.3.0\n * @uses esc_attr()\n *\n * @param bool $escaped Whether the result is escaped. Default true.\n * \tOnly use when you are later escaping it. Do not use unescaped.\n * @return string\n *\/","file":"general-template.php","line":1827,"missingDoc":false,"filters":["'get_search_query'"],"uses":{"get_query_var":[1828],"esc_attr":[1830]},"used_by":{"__main":[21,34,24,44],"get_search_form":[163],"feed_links_extra":[1664],"the_search_query":[1844],"get_search_link":[747]}},"get_wp_title_rss":{"doc":"\/**\n * Retrieve the blog title for the feed title.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n * @uses apply_filters() Calls 'get_wp_title_rss' hook on title.\n * @uses wp_title() See function for $sep parameter usage.\n *\n * @param string $sep Optional.How to separate the title. See wp_title() for more info.\n * @return string Error message on failure or blog title on success.\n *\/","file":"feed.php","line":82,"missingDoc":false,"filters":["'get_wp_title_rss'"],"uses":{"wp_title":[83],"get_error_message":[85],"is_wp_error":[84]},"used_by":{"__main":[23,26],"wp_title_rss":[102]}},"comments_link_feed":{"doc":"\/**\n * Outputs the link to the comments for the current post in an xml safe way\n *\n * @since 3.0.0\n * @return none\n *\/","file":"feed.php","line":200,"missingDoc":false,"filters":[],"uses":{"esc_url":[201],"get_comments_link":[201]},"used_by":{"__main":[30,37]}},"get_search_comments_feed_link":{"doc":"\/**\n * Retrieve the permalink for the comments feed of the search results.\n *\n * @since 2.5.0\n *\n * @param string $search_query Optional. Search query.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":804,"missingDoc":false,"filters":["'search_feed_link'"],"uses":{"get_default_feed":[808],"get_search_feed_link":[810],"get_search_permastruct":[812],"add_query_arg":[815,817]},"used_by":{"__main":[35,36]}},"have_comments":{"doc":"\/**\n * Whether there are comments to loop over.\n *\n * @see WP_Query::have_comments()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":801,"missingDoc":false,"filters":[],"uses":{"have_comments":[803]},"used_by":{"__main":[44,44,36,36,25],"have_comments":[803]}},"the_comment":{"doc":"\/**\n * Iterate comment index in the comment loop.\n *\n * @see WP_Query::the_comment()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @return object\n *\/","file":"query.php","line":815,"missingDoc":false,"filters":[],"uses":{"the_comment":[817]},"used_by":{"__main":[44,36],"the_comment":[817]}},"get_comment_author_rss":{"doc":"\/**\n * Retrieve the current comment author for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.0.0\n * @uses apply_filters() Calls 'comment_author_rss' hook on comment author.\n * @uses get_comment_author()\n *\n * @return string Comment Author\n *\/","file":"feed.php","line":256,"missingDoc":false,"filters":["'comment_author_rss'"],"uses":{"get_comment_author":[257]},"used_by":{"__main":[52,54,44,46,50],"comment_author_rss":[268]}},"comment_link":{"doc":"\/**\n * Display the link to the comments.\n *\n * @since 1.5.0\n *\/","file":"feed.php","line":241,"missingDoc":false,"filters":[],"uses":{"esc_url":[242],"get_comment_link":[242]},"used_by":{"__main":[57,69,71,49]}},"comment_author_rss":{"doc":"\/**\n * Display the current comment author in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.0.0\n *\/","file":"feed.php","line":267,"missingDoc":false,"filters":[],"uses":{"get_comment_author_rss":[268]},"used_by":{"__main":[60]}},"comment_guid":{"doc":"\/**\n * Display the feed GUID for the current comment.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int|object $comment_id Optional comment object or id. Defaults to global comment object.\n *\/","file":"feed.php","line":213,"missingDoc":false,"filters":[],"uses":{"esc_url":[214],"get_comment_guid":[214]},"used_by":{"__main":[65,80,52]}},"get_the_password_form":{"doc":"\/**\n * Retrieve protected post password form content.\n *\n * @since 1.0.0\n * @uses apply_filters() Calls 'the_password_form' filter on output.\n *\n * @return string HTML content for password form for password protected post.\n *\/","file":"post-template.php","line":1222,"missingDoc":false,"filters":["'the_password_form'"],"uses":{"get_post":[1223],"rand":[1224],"esc_url":[1225],"site_url":[1225],"__":[1226,1227],"esc_attr__":[1227]},"used_by":{"__main":[69,55,48],"get_the_content":[193]}},"the_guid":{"doc":"\/**\n * Display the Post Global Unique Identifier (guid).\n *\n * The guid will appear to be a link, but should not be used as an link to the\n * post. The reason you should not use it as a link, is because of moving the\n * blog across domains.\n *\n * Url is escaped to make it xml safe\n *\n * @since 1.5.0\n *\n * @param int $id Optional. Post ID.\n *\/","file":"post-template.php","line":134,"missingDoc":false,"filters":[],"uses":{"esc_url":[135],"get_the_guid":[135]},"used_by":{"__main":[75,40,42]}},"wp_title_rss":{"doc":"\/**\n * Display the blog title for display of the feed title.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n * @uses apply_filters() Calls 'wp_title_rss' on the blog title.\n * @see wp_title() $sep parameter usage.\n *\n * @param string $sep Optional.\n *\/","file":"feed.php","line":101,"missingDoc":false,"filters":["'wp_title_rss'"],"uses":{"get_wp_title_rss":[102]},"used_by":{"__main":[19,22,14,24]}},"self_link":{"doc":"\/**\n * Display the link for the currently displayed feed in a XSS safe way.\n *\n * Generate a correct link for the atom:self element.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n *\/","file":"feed.php","line":489,"missingDoc":false,"filters":[],"uses":{"parse_url":[490],"home_url":[490],"esc_url":[491],"set_url_scheme":[491],"stripslashes":[491]},"used_by":{"__main":[26,28,25]}},"html_type_rss":{"doc":"\/**\n * Display the HTML type based on the blog setting.\n *\n * The two possible values are either 'xhtml' or 'html'.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n *\/","file":"feed.php","line":358,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[359],"strpos":[360]},"used_by":{"__main":[38,44,46]}},"the_title_rss":{"doc":"\/**\n * Display the post title in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses get_the_title_rss() Used to retrieve current post title.\n *\/","file":"feed.php","line":129,"missingDoc":false,"filters":[],"uses":{"get_the_title_rss":[130]},"used_by":{"__main":[38,40,24,35]}},"get_post_modified_time":{"doc":"\/**\n * Retrieve the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional, default is 'U'. Either 'G', 'U', or php date format.\n * @param bool $gmt Optional, default is false. Whether to return the gmt time.\n * @param int|object $post Optional, default is global post object. A post_id or post object\n * @param bool $translate Optional, default is false. Whether to translate the result\n * @return string Returns timestamp\n *\/","file":"general-template.php","line":1517,"missingDoc":false,"filters":["'get_post_modified_time'"],"uses":{"get_post":[1518],"mysql2date":[1524]},"used_by":{"__main":[41],"get_the_modified_date":[1420,1422],"get_the_modified_time":[1500,1502]}},"get_post_time":{"doc":"\/**\n * Retrieve the time at which the post was written.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format.\n * @param bool $gmt Optional, default is false. Whether to return the gmt time.\n * @param int|object $post Optional post ID or object. Default is global $post object.\n * @param bool $translate Whether to translate the time string\n * @return string\n *\/","file":"general-template.php","line":1467,"missingDoc":false,"filters":["'get_post_time'"],"uses":{"get_post":[1468],"mysql2date":[1475]},"used_by":{"__main":[42,38],"get_the_time":[1450,1452]}},"the_category_rss":{"doc":"\/**\n * Display the post categories in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @see get_the_category_rss() For better explanation.\n *\n * @param string $type Optional, default is the type returned by get_default_feed().\n *\/","file":"feed.php","line":345,"missingDoc":false,"filters":[],"uses":{"get_the_category_rss":[346]},"used_by":{"__main":[43,44,40]}},"the_excerpt_rss":{"doc":"\/**\n * Display the post excerpt for the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'the_excerpt_rss' hook on the excerpt.\n *\/","file":"feed.php","line":177,"missingDoc":false,"filters":["'the_excerpt_rss'"],"uses":{"get_the_excerpt":[178]},"used_by":{"__main":[44,46,48,25,44,46,51]}},"the_content_feed":{"doc":"\/**\n * Display the post content for feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.9.0\n * @uses apply_filters() Calls 'the_content_feed' on the content before processing.\n * @see get_the_content()\n *\n * @param string $feed_type The type of feed. rss2 | atom | rss | rdf\n *\/","file":"feed.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_the_content_feed":[166]},"used_by":{"__main":[46,49]}},"atom_enclosure":{"doc":"\/**\n * Display the atom enclosure for the current post.\n *\n * Uses the global $post to check whether the post requires a password and if\n * the user has the password for the post. If not then it will return before\n * displaying.\n *\n * Also uses the function get_post_custom() to get the post's 'enclosure'\n * metadata field and parses the value to display the enclosure(s). The\n * enclosure(s) consist of link HTML tag(s) with a URI and other attributes.\n *\n * @package WordPress\n * @subpackage Template\n * @since 2.2.0\n * @uses apply_filters() Calls 'atom_enclosure' hook on atom enclosure.\n * @uses get_post_custom() To get the current post enclosure metadata.\n *\/","file":"feed.php","line":421,"missingDoc":false,"filters":["'atom_enclosure'"],"uses":{"post_password_required":[422],"explode":[428],"trim":[429,429,429],"htmlspecialchars":[429],"get_post_custom":[425]},"used_by":{"__main":[48]}},"rewind_posts":{"doc":"\/**\n * Rewind the loop posts.\n *\n * @see WP_Query::rewind_posts()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return null\n *\/","file":"query.php","line":769,"missingDoc":false,"filters":[],"uses":{"rewind_posts":[772]},"used_by":{"__main":[38],"rewind_posts":[772],"WP_Query::have_posts":[2874]}},"comment_text_rss":{"doc":"\/**\n * Display the current comment content for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.0.0\n * @uses apply_filters() Calls 'comment_text_rss' filter on comment content.\n * @uses get_comment_text()\n *\/","file":"feed.php","line":280,"missingDoc":false,"filters":["'comment_text_rss'"],"uses":{"get_comment_text":[281]},"used_by":{"__main":[57]}},"get_the_content_feed":{"doc":"\/**\n * Retrieve the post content for feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.9.0\n * @uses apply_filters() Calls 'the_content_feed' on the content before processing.\n * @see get_the_content()\n *\n * @param string $feed_type The type of feed. rss2 | atom | rss | rdf\n * @return string The filtered content.\n *\/","file":"feed.php","line":145,"missingDoc":false,"filters":["'the_content'","'the_content_feed'"],"uses":{"get_default_feed":[147],"get_the_content":[149],"str_replace":[150]},"used_by":{"__main":[47],"the_content_feed":[166]}},"rss_enclosure":{"doc":"\/**\n * Display the rss enclosure for the current post.\n *\n * Uses the global $post to check whether the post requires a password and if\n * the user has the password for the post. If not then it will return before\n * displaying.\n *\n * Also uses the function get_post_custom() to get the post's 'enclosure'\n * metadata field and parses the value to display the enclosure(s). The\n * enclosure(s) consist of enclosure HTML tag(s) with a URI and other\n * attributes.\n *\n * @package WordPress\n * @subpackage Template\n * @since 1.5.0\n * @uses apply_filters() Calls 'rss_enclosure' hook on rss enclosure.\n * @uses get_post_custom() To get the current post enclosure metadata.\n *\/","file":"feed.php","line":385,"missingDoc":false,"filters":["'rss_enclosure'"],"uses":{"post_password_required":[386],"explode":[392],"preg_split":[395],"trim":[395,398,398],"htmlspecialchars":[398],"get_post_custom":[389]},"used_by":{"__main":[56]}},"convert_chars":{"doc":"\/**\n * Converts a number of characters from a string.\n *\n * Metadata tags <<title>> and <<category>> are removed, <<br>> and <<hr>> are\n * converted into correct XHTML and Unicode characters are converted to the\n * valid range.\n *\n * @since 0.71\n *\n * @param string $content String of characters to be converted.\n * @param string $deprecated Not used.\n * @return string Converted string.\n *\/","file":"formatting.php","line":1079,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1081],"preg_replace":[1120,1121,1124],"strtr":[1127],"str_replace":[1130,1131]},"used_by":{"get_bloginfo_rss":[30],"wp_richedit_pre":[2494]}},"wp_title":{"doc":"\/**\n * Display or retrieve page title for all areas of blog.\n *\n * By default, the page title will display the separator before the page title,\n * so that the blog title will be before the page title. This is not good for\n * title display, since the blog title shows up on most tabs and not what is\n * important, which is the page that the user is looking at.\n *\n * There are also SEO benefits to having the blog title after or to the 'right'\n * or the page title. However, it is mostly common sense to have the blog title\n * to the right with most browsers supporting tabs. You can achieve this by\n * using the seplocation parameter and setting the value to 'right'. This change\n * was introduced around 2.5.0, in case backwards compatibility of themes is\n * important.\n *\n * @since 1.0.0\n *\n * @param string $sep Optional, default is '»'. How to separate the various items within the page title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @param string $seplocation Optional. Direction to display title, 'right'.\n * @return string|null String on retrieve, null when displaying.\n *\/","file":"general-template.php","line":521,"missingDoc":false,"filters":["'wp_title'"],"uses":{"get_query_var":[524,525,526,527,528],"single_post_title":[535],"is_single":[534],"is_home":[534],"is_front_page":[534,534],"is_page":[534],"single_term_title":[540,547],"is_category":[539],"is_tag":[539],"get_queried_object":[545,552],"get_taxonomy":[546],"is_tax":[544],"is_author":[551],"post_type_archive_title":[558],"is_post_type_archive":[557],"substr":[562,563,564],"get_month":[563,572],"intval":[564],"is_archive":[561,569],"zeroise":[574],"sprintf":[580],"__":[580,585],"strip_tags":[580],"is_search":[578],"is_404":[584],"explode":[594,598],"array_reverse":[595],"implode":[596,599]},"used_by":{"get_wp_title_rss":[83],"__main":[18]}},"get_the_excerpt":{"doc":"\/**\n * Retrieve the post excerpt.\n *\n * @since 0.71\n *\n * @param mixed $deprecated Not used.\n * @return string\n *\/","file":"post-template.php","line":260,"missingDoc":false,"filters":["'get_the_excerpt'"],"uses":{"_deprecated_argument":[262],"get_post":[264],"__":[267],"post_password_required":[266]},"used_by":{"the_excerpt_rss":[178],"the_excerpt":[249]}},"get_comment_guid":{"doc":"\/**\n * Retrieve the feed GUID for the current comment.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int|object $comment_id Optional comment object or id. Defaults to global comment object.\n * @return bool|string false on failure or guid for comment on success.\n *\/","file":"feed.php","line":227,"missingDoc":false,"filters":[],"uses":{"get_comment":[228],"is_object":[230],"get_the_guid":[233]},"used_by":{"comment_guid":[214]}},"get_the_guid":{"doc":"\/**\n * Retrieve the Post Global Unique Identifier (guid).\n *\n * The guid will appear to be a link, but should not be used as an link to the\n * post. The reason you should not use it as a link, is because of moving the\n * blog across domains.\n *\n * @since 1.5.0\n *\n * @param int $id Optional. Post ID.\n * @return string\n *\/","file":"post-template.php","line":150,"missingDoc":false,"filters":["'get_the_guid'"],"uses":{"get_post":[151]},"used_by":{"get_comment_guid":[233],"the_guid":[135],"wp_get_attachment_url":[4229],"_transition_post_status":[4796]}},"get_the_category_rss":{"doc":"\/**\n * Retrieve all of the post categories, formatted for use in feeds.\n *\n * All of the categories for the current post in the feed loop, will be\n * retrieved and have feed markup added, so that they can easily be added to the\n * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.1.0\n * @uses apply_filters()\n *\n * @param string $type Optional, default is the type returned by get_default_feed().\n * @return string All of the post categories for displaying in the feed.\n *\/","file":"feed.php","line":301,"missingDoc":false,"filters":["'get_bloginfo_rss'","'the_category_rss'"],"uses":{"get_default_feed":[303],"get_the_category":[304],"get_the_tags":[305],"sanitize_term_field":[314,318],"array_unique":[321],"sprintf":[327],"esc_attr":[327,327],"get_bloginfo":[327],"html_entity_decode":[329],"get_option":[329]},"used_by":{"the_category_rss":[346]}},"prep_atom_text_construct":{"doc":"\/**\n * Determine the type of a string of data with the data formatted.\n *\n * Tell whether the type is text, html, or xhtml, per RFC 4287 section 3.1.\n *\n * In the case of WordPress, text is defined as containing no markup,\n * xhtml is defined as \"well formed\", and html as tag soup (i.e., the rest).\n *\n * Container div tags are added to xhtml values, per section 3.1.1.3.\n *\n * @link http:\/\/www.atomenabled.org\/developers\/syndication\/atom-format-spec.php#rfc.section.3.1\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n *\n * @param string $data Input string\n * @return array array(type, value)\n *\/","file":"feed.php","line":454,"missingDoc":false,"filters":[],"uses":{"strpos":[455,455,465,473],"xml_parser_create":[459],"xml_parse":[460],"xml_get_error_code":[461],"xml_parser_free":[462],"htmlspecialchars":[476]},"used_by":[]},"_wptexturize_pushpop_element":{"doc":"\/**\n * Search for disabled element tags. Push element to stack on tag open and pop\n * on tag close. Assumes first character of $text is tag opening.\n *\n * @access private\n * @since 2.9.0\n *\n * @param string $text Text to check. First character is assumed to be $opening\n * @param array $stack Array used as stack of opened tag elements\n * @param string $disabled_elements Tags to match against formatted as regexp sub-expression\n * @param string $opening Tag opening character, assumed to be 1 character long\n * @param string $closing Tag closing character\n *\/","file":"formatting.php","line":146,"missingDoc":false,"filters":[],"uses":{"array_push":[159,169],"preg_match":[150,164],"substr":[150,164],"preg_quote":[163],"array_pop":[165],"strncmp":[148]},"used_by":{"wptexturize":[119,121]}},"_autop_newline_preservation_helper":{"doc":"\/**\n * Newline preservation help function for wpautop\n *\n * @since 3.1.0\n * @access private\n * @param array $matches preg_replace_callback matches array\n * @return string\n *\/","file":"formatting.php","line":268,"missingDoc":false,"filters":[],"uses":{"str_replace":[269]},"used_by":[]},"shortcode_unautop":{"doc":"\/**\n * Don't auto-p wrap shortcodes that stand alone\n *\n * Ensures that shortcodes are not wrapped in <<p>>...<<\/p>>.\n *\n * @since 2.9.0\n *\n * @param string $pee The content.\n * @return string The filtered content.\n *\/","file":"formatting.php","line":282,"missingDoc":false,"filters":[],"uses":{"is_array":[285],"join":[289],"array_map":[289],"array_keys":[289],"preg_replace":[323]},"used_by":[]},"seems_utf8":{"doc":"\/**\n * Checks to see if a string is utf8 encoded.\n *\n * NOTE: This function checks for 5-Byte sequences, UTF8\n * has Bytes Sequences with a maximum length of 4.\n *\n * @author bmorel at ssi dot fr (modified)\n * @since 1.2.1\n *\n * @param string $str The string to be checked\n * @return bool True if $str fits a UTF-8 model, false otherwise.\n *\/","file":"formatting.php","line":338,"missingDoc":false,"filters":[],"uses":{"strlen":[339],"ord":[341,350]},"used_by":{"remove_accents":[611],"sanitize_title_with_dashes":[976]}},"_wp_specialchars":{"doc":"\/**\n * Converts a number of special characters into their HTML entities.\n *\n * Specifically deals with: &, <, >, \", and '.\n *\n * $quote_style can be set to ENT_COMPAT to encode \" to\n * ", or ENT_QUOTES to do both. Default is ENT_NOQUOTES where no quotes are encoded.\n *\n * @since 1.2.2\n *\n * @param string $string The text which is to be encoded.\n * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.\n * @param string $charset Optional. The character encoding of the string. Default is false.\n * @param boolean $double_encode Optional. Whether to encode existing html entities. Default is false.\n * @return string The encoded text with HTML entities.\n *\/","file":"formatting.php","line":373,"missingDoc":false,"filters":[],"uses":{"strlen":[376],"preg_match":[380],"in_array":[386,399],"wp_load_alloptions":[393],"htmlspecialchars":[413,425],"wp_specialchars_decode":[416],"wp_kses_normalize_entities":[419],"preg_split":[422],"count":[424],"implode":[427],"str_replace":[432]},"used_by":{"esc_js":[2656],"esc_html":[2673],"esc_attr":[2687]}},"wp_kses_normalize_entities":{"doc":"\/**\n * Converts and fixes HTML entities.\n *\n * This function normalizes HTML entities. It will convert \"AT&T\" to the correct\n * \"AT&T\", \":\" to \":\", \"&#XYZZY;\" to \"&#XYZZY;\" and so on.\n *\n * @since 1.0.0\n *\n * @param string $string Content to normalize entities\n * @return string Content with normalized entities\n *\/","file":"kses.php","line":1114,"missingDoc":false,"filters":[],"uses":{"str_replace":[1117],"preg_replace_callback":[1121,1122,1123]},"used_by":{"_wp_specialchars":[419],"esc_url":[2599],"wp_kses":[481]}},"wp_check_invalid_utf8":{"doc":"\/**\n * Checks for invalid UTF8 in a string.\n *\n * @since 2.8\n *\n * @param string $string The text which is to be checked.\n * @param boolean $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false.\n * @return string The checked text.\n *\/","file":"formatting.php","line":508,"missingDoc":false,"filters":[],"uses":{"strlen":[511],"in_array":[518],"get_option":[518],"preg_match":[527,535],"iconv":[541],"function_exists":[540]},"used_by":{"esc_js":[2655],"esc_html":[2672],"esc_attr":[2686],"sanitize_text_field":[3220]}},"utf8_uri_encode":{"doc":"\/**\n * Encode the Unicode values to be used in the URI.\n *\n * @since 1.5.0\n *\n * @param string $utf8_string\n * @param int $length Max length of the string\n * @return string String with Unicode encoded for URI.\n *\/","file":"formatting.php","line":556,"missingDoc":false,"filters":[],"uses":{"strlen":[562],"ord":[565],"chr":[570],"count":[573,579],"dechex":[581,581,581,584,584]},"used_by":{"sanitize_title_with_dashes":[980]}},"remove_accents":{"doc":"\/**\n * Converts all accent characters to ASCII characters.\n *\n * If there are no accent characters, then the string given is just returned.\n *\n * @since 1.2.1\n *\n * @param string $string Text that might have accent characters\n * @return string Filtered string with replaced \"nice\" characters.\n *\/","file":"formatting.php","line":607,"missingDoc":false,"filters":[],"uses":{"preg_match":[608],"chr":[614,614,614,614,615,615,615,615,616,616,616,616,617,617,617,617,618,618,618,618,619,619,619,619,620,620,620,620,621,621,621,621,622,622,622,622,623,623,623,623,624,624,624,624,625,625,625,625,626,626,626,626,627,627,627,627,628,628,628,628,629,629,629,629,630,630,630,630,631,631,631,631,632,632,632,632,633,633,633,633,634,634,634,634,635,635,635,635,636,636,636,636,637,637,637,637,638,638,638,638,639,639,639,639,640,640,640,640,641,641,641,641,642,642,642,642,643,643,643,643,644,644,644,644,645,645,645,645,647,647,647,647,648,648,648,648,649,649,649,649,650,650,650,650,651,651,651,651,652,652,652,652,653,653,653,653,654,654,654,654,655,655,655,655,656,656,656,656,657,657,657,657,658,658,658,658,659,659,659,659,660,660,660,660,661,661,661,661,662,662,662,662,663,663,663,663,664,664,664,664,665,665,665,665,666,666,666,666,667,667,667,667,668,668,668,668,669,669,669,669,670,670,670,670,671,671,671,671,672,672,672,672,673,673,673,673,674,674,674,674,675,675,675,675,676,676,676,676,677,677,677,677,678,678,678,678,679,679,679,679,680,680,680,680,681,681,681,681,682,682,682,682,683,683,683,683,684,684,684,684,685,685,685,685,686,686,686,686,687,687,687,687,688,688,688,688,689,689,689,689,690,690,690,690,691,691,691,691,692,692,692,692,693,693,693,693,694,694,694,694,695,695,695,695,696,696,696,696,697,697,697,697,698,698,698,698,699,699,699,699,700,700,700,700,701,701,701,701,702,702,702,702,703,703,703,703,704,704,704,704,705,705,705,705,706,706,706,706,707,707,707,707,708,708,708,708,709,709,709,709,710,710,710,710,712,712,712,712,713,713,713,713,715,715,715,717,717,720,720,720,720,721,721,721,721,723,723,723,723,723,723,724,724,724,724,724,724,725,725,725,725,725,725,726,726,726,726,726,726,727,727,727,727,727,727,728,728,728,728,728,728,729,729,729,729,729,729,731,731,731,731,731,731,732,732,732,732,732,732,733,733,733,733,733,733,734,734,734,734,734,734,735,735,735,735,735,735,736,736,736,736,736,736,737,737,737,737,737,737,738,738,738,738,738,738,739,739,739,739,739,739,740,740,740,740,740,740,741,741,741,741,741,741,742,742,742,742,742,742,744,744,744,744,744,744,745,745,745,745,745,745,746,746,746,746,746,746,747,747,747,747,747,747,748,748,748,748,748,748,749,749,749,749,749,749,750,750,750,750,750,750,751,751,751,751,751,751,753,753,753,753,753,753,754,754,754,754,754,754,755,755,755,755,755,755,756,756,756,756,756,756,757,757,757,757,757,757,758,758,758,758,758,758,760,760,760,760,760,760,761,761,761,761,761,761,762,762,762,762,762,762,763,763,763,763,763,763,764,764,764,764,764,764,765,765,765,765,765,765,766,766,766,766,766,766,767,767,767,767,767,767,768,768,768,768,768,768,769,769,769,769,769,769,770,770,770,770,770,770,771,771,771,771,771,771,773,773,775,775,775,775,777,777,777,777,779,779,779,779,780,780,780,780,781,781,781,781,782,782,782,782,783,783,783,783,785,785,785,785,791,791,791,791,791,791,792,792,792,792,792,792,792,793,793,793,793,793,793,793,794,794,794,794,794,794,794,795,795,795,795,795,795,795,796,796,796,796,796,796,796,797,797,797,797,797,797,797,798,798,798,798,798,798,798,799,799,799,799,799,799,799,800,800,800,805,805,805,805,805,805,805,805,805],"strtr":[788,804],"str_replace":[807],"seems_utf8":[611]},"used_by":{"sanitize_user":[889],"sanitize_title":[940]}},"get_allowed_mime_types":{"doc":"\/**\n * Retrieve list of allowed mime types and file extensions.\n *\n * @since 2.8.6\n *\n * @uses apply_filters() Calls 'upload_mimes' on returned array\n * @uses wp_get_upload_mime_types() to fetch the list of mime types\n *\n * @return array Array of mime types keyed by the file extension regex corresponding to those types.\n *\/","file":"functions.php","line":2002,"missingDoc":false,"filters":["'upload_mimes'"],"uses":{"wp_get_mime_types":[2003]},"used_by":{"sanitize_file_name":[845],"wp_check_filetype":[1810]}},"wp_strip_all_tags":{"doc":"\/**\n * Properly strip all HTML tags including script and style\n *\n * @since 2.9.0\n *\n * @param string $string String containing HTML tags\n * @param bool $remove_breaks optional Whether to remove left over line breaks and white space chars\n * @return string The processed string.\n *\/","file":"formatting.php","line":3195,"missingDoc":false,"filters":[],"uses":{"preg_replace":[3196,3200],"strip_tags":[3197],"trim":[3202]},"used_by":{"sanitize_user":[888],"wp_trim_words":[2179],"wp_html_excerpt":[3094],"sanitize_text_field":[3225]}},"sanitize_title_for_query":{"doc":"","file":"formatting.php","line":950,"missingDoc":true,"filters":[],"uses":{"sanitize_title":[951]},"used_by":{"WP_Query::get_posts":[2105,2133,2145,2322]}},"sanitize_title_with_dashes":{"doc":"\/**\n * Sanitizes title, replacing whitespace and a few other characters with dashes.\n *\n * Limits the output to alphanumeric characters, underscore (_) and dash (-).\n * Whitespace becomes a dash.\n *\n * @since 1.2.0\n *\n * @param string $title The title to be sanitized.\n * @param string $raw_title Optional. Not used.\n * @param string $context Optional. The operation for which the string is sanitized.\n * @return string The sanitized title.\n *\/","file":"formatting.php","line":967,"missingDoc":false,"filters":[],"uses":{"strip_tags":[968],"preg_replace":[970,974,984,1012,1013,1014],"str_replace":[972,985,989,992,1009],"mb_strtolower":[978],"function_exists":[977],"utf8_uri_encode":[980],"seems_utf8":[976],"strtolower":[983],"trim":[1015]},"used_by":{"register_post_type":[1289],"register_taxonomy":[341,347]}},"sanitize_sql_orderby":{"doc":"\/**\n * Ensures a string is a valid SQL order by clause.\n *\n * Accepts one or more columns, with or without ASC\/DESC, and also accepts\n * RAND().\n *\n * @since 2.5.1\n *\n * @param string $orderby Order by string to be checked.\n * @return string|bool Returns the order by clause if it is a match, false otherwise.\n *\/","file":"formatting.php","line":1031,"missingDoc":false,"filters":[],"uses":{"preg_match":[1032]},"used_by":{"gallery_shortcode":[691]}},"balanceTags":{"doc":"\/**\n * Will only balance the tags if forced to and the option is set to balance tags.\n *\n * The option 'use_balanceTags' is used to determine whether the tags will be balanced.\n *\n * @since 0.71\n *\n * @param string $text Text to be balanced\n * @param bool $force If true, forces balancing, ignoring the value of the option. Default false.\n * @return string Balanced text\n *\/","file":"formatting.php","line":1147,"missingDoc":false,"filters":[],"uses":{"get_option":[1148],"force_balance_tags":[1150]},"used_by":[]},"force_balance_tags":{"doc":"\/**\n * Balances tags of string using a modified stack.\n *\n * @since 2.0.4\n *\n * @author Leonard Lin <leonard@acm.org>\n * @license GPL\n * @copyright November 4, 2001\n * @version 1.1\n * @todo Make better - change loop condition to $text in 1.2\n * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004\n *\t\t1.1 Fixed handling of append\/stack pop order of end text\n *\t\t\t Added Cleaning Hooks\n *\t\t1.0 First Version\n *\n * @param string $text Text to be balanced.\n * @return string Balanced text.\n *\/","file":"formatting.php","line":1171,"missingDoc":false,"filters":[],"uses":{"str_replace":[1182,1278,1279],"preg_replace":[1184],"preg_match":[1186],"strpos":[1189],"strlen":[1190],"strtolower":[1196,1222],"substr":[1196,1231,1235,1263,1264],"array_pop":[1206,1213,1245,1274],"trim":[1235],"in_array":[1234,1238,1244],"array_push":[1248]},"used_by":{"balanceTags":[1150],"get_the_content":[220]}},"format_to_edit":{"doc":"\/**\n * Acts on text which is about to be edited.\n *\n * The $content is run through esc_textarea(), which uses htmlspecialchars()\n * to convert special characters to HTML entities. If $richedit is set to true,\n * it is simply a holder for the 'format_to_edit' filter.\n *\n * @since 0.71\n *\n * @param string $content The text about to be edited.\n * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed).\n * @return string The text after the filter (and possibly htmlspecialchars()) has been run.\n *\/","file":"formatting.php","line":1297,"missingDoc":false,"filters":["'format_to_edit'"],"uses":{"esc_textarea":[1300]},"used_by":{"sanitize_post_field":[2025,2027]}},"format_to_post":{"doc":"\/**\n * Holder for the 'format_to_post' filter.\n *\n * @since 0.71\n *\n * @param string $content The text to pass through the filter.\n * @return string Text returned from the 'format_to_post' filter.\n *\/","file":"formatting.php","line":1312,"missingDoc":false,"filters":["'format_to_post'"],"uses":[],"used_by":[]},"zeroise":{"doc":"\/**\n * Add leading zeros when necessary.\n *\n * If you set the threshold to '4' and the number is '10', then you will get\n * back '0010'. If you set the threshold to '4' and the number is '5000', then you\n * will get back '5000'.\n *\n * Uses sprintf to append the amount of zeros based on the $threshold parameter\n * and the size of the number. If the number is large enough, then no zeros will\n * be appended.\n *\n * @since 0.71\n *\n * @param mixed $number Number to append zeros to if not greater than threshold.\n * @param int $threshold Digit places number needs to be to not have zeros added.\n * @return string Adds leading zeros to number if needed.\n *\/","file":"formatting.php","line":1334,"missingDoc":false,"filters":[],"uses":{"sprintf":[1335]},"used_by":{"antispambot":[1475],"wp_title":[574],"get_calendar":[1110,1122],"get_month_link":[369,372],"get_day_link":[398,399,402,402],"WP_Locale::get_month":[257]}},"backslashit":{"doc":"\/**\n * Adds backslashes before letters and before a number at the start of a string.\n *\n * @since 0.71\n *\n * @param string $string Value to which backslashes will be added.\n * @return string String with backslashes inserted.\n *\/","file":"formatting.php","line":1346,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1347,1348]},"used_by":{"date_i18n":[112,113,114,115,116,117,132]}},"addslashes_gpc":{"doc":"\/**\n * Adds slashes to escape strings.\n *\n * Slashes will first be removed if magic_quotes_gpc is set, see {@link\n * http:\/\/www.php.net\/magic_quotes} for more details.\n *\n * @since 0.71\n *\n * @param string $gpc The string returned from HTTP request data.\n * @return string Returns a string escaped with slashes.\n *\/","file":"formatting.php","line":1397,"missingDoc":false,"filters":[],"uses":{"stripslashes":[1399],"get_magic_quotes_gpc":[1398],"esc_sql":[1401]},"used_by":{"WP_Query::parse_tax_query":[1736],"WP_Query::get_posts":[2293,2355]}},"urlencode_deep":{"doc":"\/**\n * Navigates through an array and encodes the values to be used in a URL.\n *\n *\n * @since 2.2.0\n *\n * @param array|string $value The array or string to be encoded.\n * @return array|string $value The encoded array (or string from the callback).\n *\/","file":"formatting.php","line":1439,"missingDoc":false,"filters":[],"uses":{"is_array":[1440],"array_map":[1440],"urlencode":[1440]},"used_by":{"add_query_arg":[686]}},"antispambot":{"doc":"\/**\n * Converts email addresses characters to HTML entities to block spam bots.\n *\n * @since 0.71\n *\n * @param string $emailaddy Email address.\n * @param int $mailto Optional. Range from 0 to 1. Used for encoding.\n * @return string Converted email address.\n *\/","file":"formatting.php","line":1465,"missingDoc":false,"filters":[],"uses":{"srand":[1467],"microtime":[1467],"strlen":[1468],"floor":[1469],"rand":[1469],"ord":[1471,1475],"substr":[1471,1473,1475],"zeroise":[1475],"dechex":[1475],"str_replace":[1478]},"used_by":[]},"_make_url_clickable_cb":{"doc":"\/**\n * Callback to convert URI match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with URI address.\n *\/","file":"formatting.php","line":1494,"missingDoc":false,"filters":[],"uses":{"strpos":[1497],"substr_count":[1507,1507],"strrchr":[1508],"substr":[1509],"strrpos":[1509],"esc_url":[1512]},"used_by":[]},"_make_web_ftp_clickable_cb":{"doc":"\/**\n * Callback to convert URL match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with URL address.\n *\/","file":"formatting.php","line":1531,"missingDoc":false,"filters":[],"uses":{"esc_url":[1535],"substr":[1541,1542,1540],"strlen":[1542],"in_array":[1540]},"used_by":[]},"_make_email_clickable_cb":{"doc":"\/**\n * Callback to convert email address match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with email address.\n *\/","file":"formatting.php","line":1559,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"make_clickable":{"doc":"\/**\n * Convert plaintext URI to HTML links.\n *\n * Converts URI, www and ftp, and email addresses. Finishes by fixing links\n * within links.\n *\n * @since 0.71\n *\n * @param string $text Content to convert URIs.\n * @return string Content with converted URIs.\n *\/","file":"formatting.php","line":1575,"missingDoc":false,"filters":[],"uses":{"preg_split":[1577],"preg_match":[1579],"make_clickable":[1591],"strlen":[1588,1585],"_split_str_by_whitespace":[1587],"preg_replace_callback":[1612,1614,1615],"substr":[1617],"preg_replace":[1623]},"used_by":{"make_clickable":[1591]}},"_split_str_by_whitespace":{"doc":"\/**\n * Breaks a string into chunks by splitting at whitespace characters.\n * The length of each returned chunk is as close to the specified length goal as possible,\n * with the caveat that each chunk includes its trailing delimiter.\n * Chunks longer than the goal are guaranteed to not have any inner whitespace.\n *\n * Joining the returned chunks with empty delimiters reconstructs the input string losslessly.\n *\n * Input string must have no null characters (or eventual transformations on output chunks must not care about null characters)\n *\n * <code>\n * _split_str_by_whitespace( \"1234 67890 1234 67890a cd 1234 890 123456789 1234567890a 45678 1 3 5 7 90 \", 10 ) ==\n * array (\n * 0 => '1234 67890 ', \/\/ 11 characters: Perfect split\n * 1 => '1234 ', \/\/ 5 characters: '1234 67890a' was too long\n * 2 => '67890a cd ', \/\/ 10 characters: '67890a cd 1234' was too long\n * 3 => '1234 890 ', \/\/ 11 characters: Perfect split\n * 4 => '123456789 ', \/\/ 10 characters: '123456789 1234567890a' was too long\n * 5 => '1234567890a ', \/\/ 12 characters: Too long, but no inner whitespace on which to split\n * 6 => ' 45678 ', \/\/ 11 characters: Perfect split\n * 7 => '1 3 5 7 9', \/\/ 9 characters: End of $string\n * );\n * <\/code>\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $string The string to split.\n * @param int $goal The desired chunk length.\n * @return array Numeric array of chunks.\n *\/","file":"formatting.php","line":1658,"missingDoc":false,"filters":[],"uses":{"strtr":[1661],"strlen":[1663],"strrpos":[1664],"substr":[1664,1673,1674,1675],"strpos":[1667]},"used_by":{"make_clickable":[1587]}},"wp_rel_nofollow":{"doc":"\/**\n * Adds rel nofollow string to all HTML A elements in content.\n *\n * @since 1.5.0\n *\n * @param string $text Content that may contain HTML A elements.\n * @return string Converted content.\n *\/","file":"formatting.php","line":1693,"missingDoc":false,"filters":[],"uses":{"stripslashes":[1695],"preg_replace_callback":[1696],"esc_sql":[1697]},"used_by":[]},"wp_rel_nofollow_callback":{"doc":"\/**\n * Callback to used to add rel=nofollow string to HTML A element.\n *\n * Will remove already existing rel=\"nofollow\" and rel='nofollow' from the\n * string to prevent from invalidating (X)HTML.\n *\n * @since 2.3.0\n *\n * @param array $matches Single Match\n * @return string HTML A Element with rel nofollow.\n *\/","file":"formatting.php","line":1712,"missingDoc":false,"filters":[],"uses":{"str_replace":[1714]},"used_by":[]},"translate_smiley":{"doc":"\/**\n * Convert one smiley code to the icon graphic file equivalent.\n *\n * Looks up one smiley code in the $wpsmiliestrans global array and returns an\n * <img> string for that smiley.\n *\n * @global array $wpsmiliestrans\n * @since 2.8.0\n *\n * @param string $smiley Smiley code to convert to image.\n * @return string Image string for smiley.\n *\/","file":"formatting.php","line":1730,"missingDoc":false,"filters":["'smilies_src'"],"uses":{"count":[1733],"trim":[1737],"reset":[1737],"esc_attr":[1739],"includes_url":[1741],"site_url":[1741]},"used_by":[]},"convert_smilies":{"doc":"\/**\n * Convert text equivalent of smilies to images.\n *\n * Will only convert smilies if the option 'use_smilies' is true and the global\n * used in the function isn't empty.\n *\n * @since 0.71\n * @uses $wp_smiliessearch\n *\n * @param string $text Content to convert smilies from text.\n * @return string Converted content with text smilies replaced with images.\n *\/","file":"formatting.php","line":1758,"missingDoc":false,"filters":[],"uses":{"preg_split":[1763],"count":[1764],"preg_replace_callback":[1768],"strlen":[1767],"get_option":[1761]},"used_by":[]},"wp_iso_descrambler":{"doc":"\/**\n * Convert to ASCII from email subjects.\n *\n * @since 1.2.0\n *\n * @param string $string Subject line\n * @return string Converted string to ASCII\n *\/","file":"formatting.php","line":1857,"missingDoc":false,"filters":[],"uses":{"str_replace":[1862],"preg_replace_callback":[1863],"preg_match":[1859]},"used_by":[]},"_wp_iso_convert":{"doc":"\/**\n * Helper function to convert hex encoded chars to ASCII\n *\n * @since 3.1.0\n * @access private\n * @param array $match The preg_replace_callback matches array\n * @return array Converted chars\n *\/","file":"formatting.php","line":1876,"missingDoc":false,"filters":[],"uses":{"chr":[1877],"hexdec":[1877],"strtolower":[1877]},"used_by":[]},"iso8601_timezone_to_offset":{"doc":"\/**\n * Computes an offset in seconds from an iso8601 timezone.\n *\n * @since 1.5.0\n *\n * @param string $timezone Either 'Z' for 0 offset or '\u00b1hhmm'.\n * @return int|float The offset in seconds.\n *\/","file":"formatting.php","line":1947,"missingDoc":false,"filters":[],"uses":{"substr":[1952,1953,1954],"intval":[1953,1954]},"used_by":{"iso8601_to_datetime":[1977]}},"popuplinks":{"doc":"\/**\n * Adds a element attributes to open links in new windows.\n *\n * Comment text in popup windows should be filtered through this. Right now it's\n * a moderately dumb function, ideally it would detect whether a target or rel\n * attribute was already there and adjust its actions accordingly.\n *\n * @since 0.71\n *\n * @param string $text Content to replace links to open in a new window.\n * @return string Content that has filtered links.\n *\/","file":"formatting.php","line":2004,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2005]},"used_by":[]},"sanitize_email":{"doc":"\/**\n * Strips out all characters that are not allowable in an email.\n *\n * @since 1.5.0\n *\n * @param string $email Email address to filter.\n * @return string Filtered email address.\n *\/","file":"formatting.php","line":2017,"missingDoc":false,"filters":["'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'"],"uses":{"strlen":[2019],"strpos":[2024],"explode":[2029,2052],"preg_replace":[2033,2040,2068],"trim":[2046,2065],"count":[2055,2077],"join":[2082]},"used_by":{"sanitize_option":[2761],"wpmu_validate_user_signup":[443],"wpmu_signup_user":[678]}},"human_time_diff":{"doc":"\/**\n * Determines the difference between two timestamps.\n *\n * The difference is returned in a human readable format such as \"1 hour\",\n * \"5 mins\", \"2 days\".\n *\n * @since 1.5.0\n *\n * @param int $from Unix timestamp from which the difference begins.\n * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set.\n * @return string Human readable time difference.\n *\/","file":"formatting.php","line":2103,"missingDoc":false,"filters":[],"uses":{"time":[2105],"abs":[2106],"round":[2108,2115,2121],"sprintf":[2113,2119,2125],"_n":[2113,2119,2125]},"used_by":[]},"wp_trim_excerpt":{"doc":"\/**\n * Generates an excerpt from the content, if needed.\n *\n * The excerpt word amount will be 55 words and if the amount is greater than\n * that, then the string ' [...]' will be appended to the excerpt. If the string\n * is less than 55 words, then the content will be returned as is.\n *\n * The 55 word limit can be modified by plugins\/themes using the excerpt_length filter\n * The ' [...]' string can be modified by plugins\/themes using the excerpt_more filter\n *\n * @since 1.5.0\n *\n * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.\n * @return string The excerpt.\n *\/","file":"formatting.php","line":2145,"missingDoc":false,"filters":["'the_content'","'excerpt_length'","'excerpt_more'","'wp_trim_excerpt'"],"uses":{"get_the_content":[2148],"strip_shortcodes":[2150],"str_replace":[2153],"wp_trim_words":[2156]},"used_by":[]},"strip_shortcodes":{"doc":"\/**\n * Remove all shortcode tags from the given content.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $content Content to remove shortcode tags.\n * @return string Content without shortcode tags.\n *\/","file":"shortcodes.php","line":315,"missingDoc":false,"filters":[],"uses":{"is_array":[318],"get_shortcode_regex":[321],"preg_replace_callback":[323]},"used_by":{"wp_trim_excerpt":[2150]}},"wp_trim_words":{"doc":"\/**\n * Trims text to a certain number of words.\n *\n * This function is localized. For languages that count 'words' by the individual\n * character (such as East Asian languages), the $num_words argument will apply\n * to the number of individual characters.\n *\n * @since 3.3.0\n *\n * @param string $text Text to trim.\n * @param int $num_words Number of words. Default 55.\n * @param string $more What to append if $text needs to be trimmed. Default '…'.\n * @return string Trimmed text.\n *\/","file":"formatting.php","line":2175,"missingDoc":false,"filters":["'wp_trim_words'"],"uses":{"__":[2177],"wp_strip_all_tags":[2179],"trim":[2183],"preg_replace":[2183],"preg_match_all":[2184],"array_slice":[2185],"preg_split":[2188],"_x":[2182],"preg_match":[2182],"get_option":[2182],"array_pop":[2192],"implode":[2193,2196],"count":[2191]},"used_by":{"wp_trim_excerpt":[2156],"wp_setup_nav_menu_item":[622]}},"wp_richedit_pre":{"doc":"\/**\n * Formats text for the rich text editor.\n *\n * The filter 'richedit_pre' is applied here. If $text is empty the filter will\n * be applied to an empty string.\n *\n * @since 2.0.0\n *\n * @param string $text The text to be formatted.\n * @return string The formatted text after filter is applied.\n *\/","file":"formatting.php","line":2490,"missingDoc":false,"filters":["'richedit_pre'","'richedit_pre'"],"uses":{"convert_chars":[2494],"wpautop":[2495],"htmlspecialchars":[2496]},"used_by":[]},"wp_htmledit_pre":{"doc":"\/**\n * Formats text for the HTML editor.\n *\n * Unless $output is empty it will pass through htmlspecialchars before the\n * 'htmledit_pre' filter is applied.\n *\n * @since 2.5.0\n *\n * @param string $output The text to be formatted.\n * @return string Formatted text after filter applied.\n *\/","file":"formatting.php","line":2512,"missingDoc":false,"filters":["'htmledit_pre'"],"uses":{"htmlspecialchars":[2514]},"used_by":[]},"_deep_replace":{"doc":"\/**\n * Perform a deep string replace operation to ensure the values in $search are no longer present\n *\n * Repeats the replacement operation until it no longer replaces anything so as to remove \"nested\" values\n * e.g. $subject = '%0%0%0DDD', $search ='%0D', $result ='' rather than the '%0%0DD' that\n * str_replace would return\n *\n * @since 2.8.1\n * @access private\n *\n * @param string|array $search\n * @param string $subject\n * @return string The processed string\n *\/","file":"formatting.php","line":2533,"missingDoc":false,"filters":[],"uses":{"strpos":[2539],"str_replace":[2541]},"used_by":{"esc_url":[2587],"wp_sanitize_redirect":[895]}},"wp_allowed_protocols":{"doc":"\/**\n * Retrieve a list of protocols to allow in HTML attributes.\n *\n * @since 3.3.0\n * @see wp_kses()\n * @see esc_url()\n *\n * @return array Array of allowed protocols\n *\/","file":"functions.php","line":3759,"missingDoc":false,"filters":["'kses_allowed_protocols'"],"uses":[],"used_by":{"esc_url":[2605],"_links_add_base":[3134],"wp_kses":[478]}},"wp_kses_bad_protocol":{"doc":"\/**\n * Sanitize string from bad protocols.\n *\n * This function removes all non-allowed protocols from the beginning of\n * $string. It ignores whitespace and the case of the letters, and it does\n * understand HTML entities. It does its work in a while loop, so it won't be\n * fooled by a string like \"javascript:javascript:alert(57)\".\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter bad protocols from\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Filtered content\n *\/","file":"kses.php","line":944,"missingDoc":false,"filters":[],"uses":{"wp_kses_no_null":[945],"wp_kses_bad_protocol_once":[950]},"used_by":{"esc_url":[2606],"wp_kses_hair":[797,813,829]}},"htmlentities2":{"doc":"\/**\n * Convert entities, while preserving already-encoded entities.\n *\n * @link http:\/\/www.php.net\/htmlentities Borrowed from the PHP Manual user notes.\n *\n * @since 1.2.2\n *\n * @param string $myHTML The text to be converted.\n * @return string Converted text.\n *\/","file":"formatting.php","line":2636,"missingDoc":false,"filters":[],"uses":{"get_html_translation_table":[2637],"chr":[2638],"preg_replace":[2639],"strtr":[2639]},"used_by":[]},"tag_escape":{"doc":"\/**\n * Escape a HTML tag name.\n *\n * @since 2.5.0\n *\n * @param string $tag_name\n * @return string\n *\/","file":"formatting.php","line":2712,"missingDoc":false,"filters":["'tag_escape'"],"uses":{"strtolower":[2713],"preg_replace":[2713]},"used_by":{"gallery_shortcode":[736,737]}},"wp_make_link_relative":{"doc":"\/**\n * Convert full URL paths to absolute paths.\n *\n * Removes the http or https protocols and the domain. Keeps the path '\/' at the\n * beginning, so it isn't a true relative link, but from the web root base.\n *\n * @since 2.1.0\n *\n * @param string $link Full URL path.\n * @return string Absolute path.\n *\/","file":"formatting.php","line":2740,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2741]},"used_by":[]},"sanitize_option":{"doc":"\/**\n * Sanitises various option values based on the nature of the option.\n *\n * This is basically a switch statement which will pass $value through a number\n * of functions depending on the $option.\n *\n * @since 2.0.5\n *\n * @param string $option The name of the option.\n * @param string $value The unsanitised value.\n * @return string Sanitized value.\n *\/","file":"formatting.php","line":2756,"missingDoc":false,"filters":["\"sanitize_option_{$option}\""],"uses":{"sanitize_email":[2761],"get_option":[2763,2850,2860,2869,2901],"add_settings_error":[2765,2852,2862,2903],"__":[2765,2852,2862,2903],"function_exists":[2764,2851,2861,2902],"is_email":[2762],"absint":[2788],"abs":[2797],"wp_kses_post":[2809],"esc_html":[2810],"preg_replace":[2814,2843],"intval":[2822],"strip_tags":[2831],"wp_kses_data":[2832],"explode":[2836,2874,2885],"array_filter":[2837,2838,2876,2887],"array_map":[2837,2838,2876,2887],"implode":[2839],"esc_url_raw":[2848,2858,2910],"preg_match":[2847,2857,2891,2891],"get_available_languages":[2867],"in_array":[2868,2900],"is_array":[2873,2884],"array_values":[2876,2887],"timezone_identifiers_list":[2899],"str_replace":[2911]},"used_by":{"update_option":[227],"add_option":[308],"add_site_option":[823],"update_site_option":[913]}},"wp_kses_data":{"doc":"\/**\n * Sanitize content with allowed HTML Kses rules.\n *\n * @since 2.9.0\n * @uses $allowedtags\n *\n * @param string $data Content to filter, expected to not be escaped\n * @return string Filtered content\n *\/","file":"kses.php","line":1269,"missingDoc":false,"filters":[],"uses":{"wp_kses":[1270],"current_filter":[1270]},"used_by":{"sanitize_option":[2832]}},"get_available_languages":{"doc":"\/**\n * Get all available languages based on the presence of *.mo files in a given directory. The default directory is WP_LANG_DIR.\n *\n * @since 3.0.0\n *\n * @param string $dir A directory in which to search for language files. The default directory is WP_LANG_DIR.\n * @return array Array of language codes or an empty array if no languages are present. Language codes are formed by stripping the .mo extension from the language file names.\n *\/","file":"l10n.php","line":542,"missingDoc":false,"filters":[],"uses":{"basename":[546],"strpos":[547,547,548],"glob":[545],"is_null":[545]},"used_by":{"sanitize_option":[2867]}},"wp_parse_str":{"doc":"\/**\n * Parses a string into variables to be stored in an array.\n *\n * Uses {@link http:\/\/www.php.net\/parse_str parse_str()} and stripslashes if\n * {@link http:\/\/www.php.net\/magic_quotes magic_quotes_gpc} is on.\n *\n * @since 2.2.1\n * @uses apply_filters() for the 'wp_parse_str' filter.\n *\n * @param string $string The string to be parsed.\n * @param array $array Variables will be stored in this array.\n *\/","file":"formatting.php","line":2932,"missingDoc":false,"filters":["'wp_parse_str'"],"uses":{"parse_str":[2933],"stripslashes_deep":[2935],"get_magic_quotes_gpc":[2934]},"used_by":{"add_query_arg":[685],"wp_parse_args":[2557],"wp_style_loader_src":[624]}},"wp_pre_kses_less_than":{"doc":"\/**\n * Convert lone less than signs.\n *\n * KSES already converts lone greater than signs.\n *\n * @uses wp_pre_kses_less_than_callback in the callback function.\n * @since 2.3.0\n *\n * @param string $text Text to be converted.\n * @return string Converted text.\n *\/","file":"formatting.php","line":2950,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[2951]},"used_by":{"sanitize_text_field":[3223]}},"wp_pre_kses_less_than_callback":{"doc":"\/**\n * Callback function used by preg_replace.\n *\n * @uses esc_html to format the $matches text.\n * @since 2.3.0\n *\n * @param array $matches Populated by matches to preg_replace.\n * @return string The text returned after esc_html if needed.\n *\/","file":"formatting.php","line":2963,"missingDoc":false,"filters":[],"uses":{"esc_html":[2965],"strpos":[2964]},"used_by":[]},"wp_sprintf":{"doc":"\/**\n * WordPress implementation of PHP sprintf() with filters.\n *\n * @since 2.5.0\n * @link http:\/\/www.php.net\/sprintf\n *\n * @param string $pattern The string which formatted args are inserted.\n * @param mixed $args,... Arguments to be formatted into the $pattern string.\n * @return string The formatted string.\n *\/","file":"formatting.php","line":2979,"missingDoc":false,"filters":["'wp_sprintf'"],"uses":{"func_get_args":[2980],"strlen":[2981,2987],"substr":[2988,2993,3003],"strpos":[3000],"str_replace":[3010],"preg_match":[3008],"sprintf":[3021],"strval":[3021]},"used_by":{"get_the_taxonomies":[3125]}},"wp_sprintf_l":{"doc":"\/**\n * Localize list items before the rest of the content.\n *\n * The '%l' must be at the first characters can then contain the rest of the\n * content. The list items will have ', ', ', and', and ' and ' added depending\n * on the amount of list items in the $args parameter.\n *\n * @since 2.5.0\n *\n * @param string $pattern Content containing '%l' at the beginning.\n * @param array $args List items to prepend to the content and replace '%l'.\n * @return string Localized list items and rest of the content.\n *\/","file":"formatting.php","line":3044,"missingDoc":false,"filters":["'wp_sprintf_l'"],"uses":{"substr":[3046,3077],"__":[3056,3058,3060],"array_shift":[3064,3066,3070],"count":[3065,3068]},"used_by":[]},"links_add_base_url":{"doc":"\/**\n * Add a Base url to relative links in passed content.\n *\n * By default it supports the 'src' and 'href' attributes. However this can be\n * changed via the 3rd param.\n *\n * @since 2.7.0\n *\n * @param string $content String to search for links in.\n * @param string $base The base URL to prefix to links.\n * @param array $attrs The attributes which should be processed.\n * @return string The processed content.\n *\/","file":"formatting.php","line":3114,"missingDoc":false,"filters":[],"uses":{"implode":[3117],"preg_replace_callback":[3118]},"used_by":[]},"_links_add_base":{"doc":"\/**\n * Callback to add a base url to relative links in passed content.\n *\n * @since 2.7.0\n * @access private\n *\n * @param string $m The matched link.\n * @return string The processed link.\n *\/","file":"formatting.php","line":3130,"missingDoc":false,"filters":[],"uses":{"preg_match":[3134],"in_array":[3134],"wp_allowed_protocols":[3134],"path_join":[3136]},"used_by":[]},"path_join":{"doc":"\/**\n * Join two filesystem paths together (e.g. 'give me $path relative to $base').\n *\n * If the $path is absolute, then it the full path is returned.\n *\n * @since 2.5.0\n *\n * @param string $base\n * @param string $path\n * @return string The path with the base or absolute path.\n *\/","file":"functions.php","line":1390,"missingDoc":false,"filters":[],"uses":{"path_is_absolute":[1391],"rtrim":[1394],"ltrim":[1394]},"used_by":{"_links_add_base":[3136],"wp_upload_dir":[1532],"image_get_intermediate_size":[476,477],"wp_delete_attachment":[4130,4137,4142,4144]}},"links_add_target":{"doc":"\/**\n * Adds a Target attribute to all links in passed content.\n *\n * This function by default only applies to <a> tags, however this can be\n * modified by the 3rd param.\n *\n * <b>NOTE:<\/b> Any current target attributed will be stripped and replaced.\n *\n * @since 2.7.0\n *\n * @param string $content String to search for links in.\n * @param string $target The Target to add to the links.\n * @param array $tags An array of tags to apply to.\n * @return string The processed content.\n *\/","file":"formatting.php","line":3155,"missingDoc":false,"filters":[],"uses":{"implode":[3158],"preg_replace_callback":[3159]},"used_by":[]},"_links_add_target":{"doc":"\/**\n * Callback to add a target attribute to all links in passed content.\n *\n * @since 2.7.0\n * @access private\n *\n * @param string $m The matched link.\n * @return string The processed link.\n *\/","file":"formatting.php","line":3171,"missingDoc":false,"filters":[],"uses":{"preg_replace":[3174],"esc_attr":[3175]},"used_by":[]},"normalize_whitespace":{"doc":"","file":"formatting.php","line":3179,"missingDoc":true,"filters":[],"uses":{"trim":[3180],"str_replace":[3181],"preg_replace":[3182]},"used_by":{"wp_text_diff":[1711,1712]}},"sanitize_text_field":{"doc":"\/**\n * Sanitize a string from user input or from the db\n *\n * check for invalid UTF-8,\n * Convert single < characters to entity,\n * strip all tags,\n * remove line breaks, tabs and extra white space,\n * strip octets.\n *\n * @since 2.9.0\n *\n * @param string $str\n * @return string\n *\/","file":"formatting.php","line":3219,"missingDoc":false,"filters":["'sanitize_text_field'"],"uses":{"wp_check_invalid_utf8":[3220],"wp_pre_kses_less_than":[3223],"wp_strip_all_tags":[3225],"trim":[3227,3239],"preg_replace":[3227,3239],"strpos":[3222],"preg_match":[3232],"str_replace":[3233]},"used_by":[]},"capital_P_dangit":{"doc":"\/**\n * Forever eliminate \"Wordpress\" from the planet (or at least the little bit we can influence).\n *\n * Violating our coding standards for a good function name.\n *\n * @since 3.0.0\n *\/","file":"formatting.php","line":3265,"missingDoc":false,"filters":[],"uses":{"str_replace":[3268,3273],"current_filter":[3267],"_x":[3272]},"used_by":[]},"current_filter":{"doc":"\/**\n * Retrieve the name of the current filter or action.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n *\n * @return string Hook name of the current filter or action.\n *\/","file":"plugin.php","line":309,"missingDoc":false,"filters":[],"uses":{"end":[311]},"used_by":{"capital_P_dangit":[3267],"get_the_generator":[2164],"wp_filter_kses":[1257],"wp_kses_data":[1270],"wp_update_plugins":[156],"wp_update_themes":[265]}},"sanitize_mime_type":{"doc":"\/**\n * Sanitize a mime type\n *\n * @since 3.1.3\n *\n * @param string $mime_type Mime type\n * @return string Sanitized mime type\n *\/","file":"formatting.php","line":3288,"missingDoc":false,"filters":["'sanitize_mime_type'"],"uses":{"preg_replace":[3289]},"used_by":[]},"sanitize_trackback_urls":{"doc":"\/**\n * Sanitize space or carriage return separated URLs that are used to send trackbacks.\n *\n * @since 3.4.0\n *\n * @param string $to_ping Space or carriage return separated URLs\n * @return string URLs starting with the http or https protocol, separated by a carriage return.\n *\/","file":"formatting.php","line":3301,"missingDoc":false,"filters":["'sanitize_trackback_urls'"],"uses":{"preg_split":[3302],"trim":[3302],"preg_match":[3304],"array_map":[3307],"implode":[3308]},"used_by":{"wp_insert_post":[2837],"get_to_ping":[3363]}},"size_format":{"doc":"\/**\n * Convert number of bytes largest unit bytes will fit into.\n *\n * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts\n * number of bytes to human readable number by taking the number of that unit\n * that the bytes will go into it. Supports TB value.\n *\n * Please note that integers in PHP are limited to 32 bits, unless they are on\n * 64 bit architecture, then they have 64 bit size. If you need to place the\n * larger size then what PHP integer type will hold, then use a string. It will\n * be converted to a double, which should always have 64 bit length.\n *\n * Technically the correct unit names for powers of 1024 are KiB, MiB etc.\n * @link http:\/\/en.wikipedia.org\/wiki\/Byte\n *\n * @since 2.3.0\n *\n * @param int|string $bytes Number of bytes. Note max integer size for integers.\n * @param int $decimals Precision of number of decimal places. Deprecated.\n * @return bool|string False on failure. Number string on success.\n *\/","file":"functions.php","line":180,"missingDoc":false,"filters":[],"uses":{"number_format_i18n":[191],"doubleval":[190]},"used_by":[]},"get_weekstartend":{"doc":"\/**\n * Get the week start and end from the datetime or date string from mysql.\n *\n * @since 0.71\n *\n * @param string $mysqlstring Date or datetime field type from mysql.\n * @param int $start_of_week Optional. Start of the week as an integer.\n * @return array Keys are 'start' and 'end'.\n *\/","file":"functions.php","line":205,"missingDoc":false,"filters":[],"uses":{"substr":[206,207,208],"mktime":[209],"date":[210],"get_option":[212],"is_numeric":[211],"compact":[219]},"used_by":{"wp_get_archives":[1005]}},"maybe_unserialize":{"doc":"\/**\n * Unserialize value only if it was serialized.\n *\n * @since 2.0.0\n *\n * @param string $original Maybe unserialized original, if is needed.\n * @return mixed Unserialized data can be any type.\n *\/","file":"functions.php","line":230,"missingDoc":false,"filters":[],"uses":{"unserialize":[232],"is_serialized":[231]},"used_by":{"get_metadata":[294],"get_metadata_by_mid":[368],"wpmu_activate_signup":[846],"get_option":[91],"wp_load_core_site_options":[185],"get_site_option":[781],"wp_version_check":[95],"wp_update_plugins":[210],"wp_update_themes":[319],"count_users":[921]}},"is_serialized":{"doc":"\/**\n * Check value to find if it was serialized.\n *\n * If $data is not an string, then returned value will always be false.\n * Serialized data is always a string.\n *\n * @since 2.0.5\n *\n * @param mixed $data Value to check to see if was serialized.\n * @return bool False if not serialized and true if it was.\n *\/","file":"functions.php","line":247,"missingDoc":false,"filters":[],"uses":{"is_string":[249],"trim":[251],"strlen":[254],"preg_match":[269,273]},"used_by":{"maybe_unserialize":[231],"maybe_serialize":[320]}},"is_serialized_string":{"doc":"\/**\n * Check whether serialized data is of string type.\n *\n * @since 2.0.5\n *\n * @param mixed $data Serialized data\n * @return bool False if not a serialized string, true if it is.\n *\/","file":"functions.php","line":286,"missingDoc":false,"filters":[],"uses":{"is_string":[288],"trim":[290],"strlen":[291]},"used_by":[]},"get_enclosed":{"doc":"\/**\n * Retrieve enclosures already enclosed for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @return array List of enclosures\n *\/","file":"post.php","line":3315,"missingDoc":false,"filters":["'get_enclosed'"],"uses":{"get_post_custom":[3316],"is_array":[3318,3322],"explode":[3325],"trim":[3326]},"used_by":{"do_enclose":[418]}},"wp_get_http_headers":{"doc":"\/**\n * Retrieve HTTP Headers from URL.\n *\n * @since 1.5.1\n *\n * @param string $url\n * @param bool $deprecated Not Used.\n * @return bool|string False on failure, headers on success.\n *\/","file":"functions.php","line":542,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[544],"wp_remote_head":[546],"is_wp_error":[548],"wp_remote_retrieve_headers":[551]},"used_by":{"do_enclose":[450]}},"wp_get_http":{"doc":"\/**\n * Perform a HTTP HEAD or GET request.\n *\n * If $file_path is a writable filename, this will do a GET request and write\n * the file to that path.\n *\n * @since 2.5.0\n *\n * @param string $url URL to fetch.\n * @param string|bool $file_path Optional. File path to write request to.\n * @param int $red (private) The number of Redirects followed, Upon 5 being hit, returns false.\n * @return bool|string False on failure and string of headers if HEAD request.\n *\/","file":"functions.php","line":491,"missingDoc":false,"filters":[],"uses":{"set_time_limit":[492],"wp_remote_request":[505],"is_wp_error":[507],"wp_remote_retrieve_headers":[510],"wp_remote_retrieve_response_code":[511],"wp_get_http":[515],"in_array":[514],"fopen":[522],"fwrite":[526],"wp_remote_retrieve_body":[526],"fclose":[527],"clearstatcache":[528]},"used_by":{"wp_get_http":[515]}},"is_new_day":{"doc":"\/**\n * Whether today is a new day.\n *\n * @since 0.71\n * @uses $day Today\n * @uses $previousday Previous day\n *\n * @return int 1 when new day, 0 if not a new day.\n *\/","file":"functions.php","line":563,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"build_query":{"doc":"\/**\n * Build URL query based on an associative and, or indexed array.\n *\n * This is a convenient function for easily building url queries. It sets the\n * separator to '&' and uses _http_build_query() function.\n *\n * @see _http_build_query() Used to build the query\n * @link http:\/\/us2.php.net\/manual\/en\/function.http-build-query.php more on what\n *\t\thttp_build_query() does.\n *\n * @since 2.3.0\n *\n * @param array $data URL-encode key\/value pairs.\n * @return string URL encoded string\n *\/","file":"functions.php","line":586,"missingDoc":false,"filters":[],"uses":{"_http_build_query":[587]},"used_by":{"add_query_arg":[699]}},"_http_build_query":{"doc":"","file":"functions.php","line":591,"missingDoc":true,"filters":[],"uses":{"urlencode":[596,609],"is_int":[597],"array_push":[607,609,611],"_http_build_query":[607],"is_array":[606],"is_object":[606],"ini_get":[615],"implode":[617]},"used_by":{"build_query":[587],"_http_build_query":[607]}},"add_magic_quotes":{"doc":"\/**\n * Walks the array while sanitizing the contents.\n *\n * @since 0.71\n *\n * @param array $array Array to used to walk while sanitizing contents.\n * @return array Sanitized $array.\n *\/","file":"functions.php","line":733,"missingDoc":false,"filters":[],"uses":{"add_magic_quotes":[736],"addslashes":[738],"is_array":[735]},"used_by":{"add_magic_quotes":[736],"wp_magic_quotes":[540,541,542,543],"wp_update_post":[2972,2979],"_wp_put_post_revision":[5079],"wp_restore_post_revision":[5158],"wp_update_term":[2364],"wp_update_user":[1466]}},"wp":{"doc":"\/**\n * Set up the WordPress query.\n *\n * @since 2.0.0\n *\n * @param string $query_vars Default WP_Query arguments.\n *\/","file":"functions.php","line":777,"missingDoc":false,"filters":[],"uses":{"main":[779]},"used_by":[]},"cache_javascript_headers":{"doc":"\/**\n * Set the headers for caching for 10 days with JavaScript content type.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":953,"missingDoc":false,"filters":[],"uses":{"header":[955,956,957],"get_bloginfo":[955],"gmdate":[957],"time":[957]},"used_by":[]},"get_num_queries":{"doc":"\/**\n * Retrieve the number of database queries during the WordPress execution.\n *\n * @since 2.0.0\n *\n * @return int Number of database queries\n *\/","file":"functions.php","line":967,"missingDoc":false,"filters":[],"uses":[],"used_by":{"__main":[20]}},"bool_from_yn":{"doc":"\/**\n * Whether input is yes or no. Must be 'y' to be true.\n *\n * @since 1.0.0\n *\n * @param string $yn Character string containing either 'y' or 'n'\n * @return bool True if yes, false on anything else\n *\/","file":"functions.php","line":980,"missingDoc":false,"filters":[],"uses":{"strtolower":[981]},"used_by":[]},"do_feed":{"doc":"\/**\n * Loads the feed template from the use of an action hook.\n *\n * If the feed action does not have a hook, then the function will die with a\n * message telling the visitor that the feed is not valid.\n *\n * It is better to only have one hook for each feed.\n *\n * @since 2.1.0\n * @uses $wp_query Used to tell if the use a comment feed.\n * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed.\n *\/","file":"functions.php","line":996,"missingDoc":false,"filters":[],"uses":{"get_query_var":[999],"preg_replace":[1002],"get_default_feed":[1005],"sprintf":[1009],"__":[1009],"esc_html":[1009],"wp_die":[1010],"has_action":[1008]},"used_by":{"__main":[18]}},"has_action":{"doc":"\/**\n * Check if any action has been registered for a hook.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @see has_filter() has_action() is an alias of has_filter().\n *\n * @param string $tag The name of the action hook.\n * @param callback $function_to_check optional.\n * @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.\n * \tWhen checking a specific function, the priority of that hook is returned, or false if the function is not attached.\n * \tWhen using the $function_to_check argument, this function may return a non-boolean value that evaluates to false\n * \t(e.g.) 0, so use the === operator for testing the return value.\n *\/","file":"plugin.php","line":509,"missingDoc":false,"filters":[],"uses":{"has_filter":[510]},"used_by":{"do_feed":[1008]}},"do_feed_rdf":{"doc":"\/**\n * Load the RDF RSS 0.91 Feed template.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":1021,"missingDoc":false,"filters":[],"uses":{"load_template":[1022]},"used_by":[]},"load_template":{"doc":"\/**\n * Require the template file with WordPress environment.\n *\n * The globals are set up for the template file to ensure that the WordPress\n * environment is available from within the function. The query variables are\n * also available.\n *\n * @since 1.5.0\n *\n * @param string $_template_file Path to template file.\n * @param bool $require_once Whether to require_once or require. Default true.\n *\/","file":"template.php","line":406,"missingDoc":false,"filters":[],"uses":{"extract":[410],"is_array":[409]},"used_by":{"do_feed_rdf":[1022],"do_feed_rss":[1031],"do_feed_rss2":[1043,1045],"do_feed_atom":[1057,1059],"get_header":[35],"get_footer":[64],"get_sidebar":[93],"locate_template":[389]}},"do_feed_rss":{"doc":"\/**\n * Load the RSS 1.0 Feed Template.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":1030,"missingDoc":false,"filters":[],"uses":{"load_template":[1031]},"used_by":[]},"do_feed_rss2":{"doc":"\/**\n * Load either the RSS2 comment feed or the RSS2 posts feed.\n *\n * @since 2.1.0\n *\n * @param bool $for_comments True for the comment feed, false for normal feed.\n *\/","file":"functions.php","line":1041,"missingDoc":false,"filters":[],"uses":{"load_template":[1043,1045]},"used_by":[]},"do_feed_atom":{"doc":"\/**\n * Load either Atom comment feed or Atom posts feed.\n *\n * @since 2.1.0\n *\n * @param bool $for_comments True for the comment feed, false for normal feed.\n *\/","file":"functions.php","line":1055,"missingDoc":false,"filters":[],"uses":{"load_template":[1057,1059]},"used_by":[]},"do_robots":{"doc":"\/**\n * Display the robots.txt file content.\n *\n * The echo content should be with usage of the permalinks or for creating the\n * robots.txt file.\n *\n * @since 2.1.0\n * @uses do_action() Calls 'do_robotstxt' hook for displaying robots.txt rules.\n *\/","file":"functions.php","line":1071,"missingDoc":false,"filters":["'do_robotstxt'","'robots_txt'"],"uses":{"header":[1072],"get_option":[1077],"parse_url":[1081],"site_url":[1081]},"used_by":[]},"wp_load_translations_early":{"doc":"\/**\n * Attempts an early load of translations.\n *\n * Used for errors encountered during the initial loading process, before the locale has been\n * properly detected and loaded.\n *\n * Designed for unusual load sequences (like setup-config.php) or for when the script will then\n * terminate with an error, otherwise there is a risk that a file can be double-included.\n *\n * @since 3.4.0\n * @access private\n *\/","file":"load.php","line":692,"missingDoc":false,"filters":[],"uses":{"function_exists":[700],"did_action":[700],"defined":[717,729,732,750],"is_dir":[729,732,735,738],"array_unique":[744],"load_textdomain":[749,751],"file_exists":[750,748]},"used_by":{"is_blog_installed":[1150],"dead_db":[2765],"wp_check_php_mysql_versions":[107,112],"wp_maintenance":[161],"wp_set_wpdb_vars":[369],"wpmu_current_site":[216],"ms_not_installed":[235],"__main":[34,120],"wpdb::select":[845],"wpdb::print_error":[1026],"wpdb::db_connect":[1144]}},"dead_db":{"doc":"\/**\n * Load custom DB error or display WordPress DB error.\n *\n * If a file exists in the wp-content directory named db-error.php, then it will\n * be loaded instead of displaying the WordPress DB error. If it is not found,\n * then the WordPress DB error will be displayed instead.\n *\n * The WordPress DB error sets the HTTP status header to 500 to try to prevent\n * search engines from caching the message. Custom DB messages should do the\n * same.\n *\n * This function was backported to the the WordPress 2.3.2, but originally was\n * added in WordPress 2.5.0.\n *\n * @since 2.3.2\n * @uses $wpdb\n *\/","file":"functions.php","line":2747,"missingDoc":false,"filters":[],"uses":{"file_exists":[2751],"wp_die":[2758],"defined":[2757,2757],"status_header":[2761],"nocache_headers":[2762],"header":[2763],"wp_load_translations_early":[2765],"is_rtl":[2768],"_e":[2771,2775]},"used_by":{"is_blog_installed":[1154],"wp_set_wpdb_vars":[356]}},"wp_nonce_url":{"doc":"\/**\n * Retrieve URL with nonce added to URL query.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $actionurl URL to add nonce action\n * @param string $action Optional. Nonce action name\n * @return string URL with nonce action added.\n *\/","file":"functions.php","line":1175,"missingDoc":false,"filters":[],"uses":{"str_replace":[1176],"esc_html":[1177],"add_query_arg":[1177],"wp_create_nonce":[1177]},"used_by":{"wp_logout_url":[219],"get_delete_post_link":[969],"wp_list_post_revisions":[1401]}},"wp_referer_field":{"doc":"\/**\n * Retrieve or display referer hidden field for forms.\n *\n * The referer link is the current Request URI from the server super global. The\n * input name is '_wp_http_referer', in case you wanted to check manually.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param bool $echo Whether to echo or return the referer field.\n * @return string Referer field.\n *\/","file":"functions.php","line":1234,"missingDoc":false,"filters":[],"uses":{"esc_attr":[1235]},"used_by":{"wp_nonce_field":[1213]}},"wp_original_referer_field":{"doc":"\/**\n * Retrieve or display original referer hidden field for forms.\n *\n * The input name is '_wp_original_http_referer' and will be either the same\n * value of {@link wp_referer_field()}, if that was posted already or it will\n * be the current page, if it doesn't exist.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param bool $echo Whether to echo the original http referer\n * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.\n * @return string Original referer field.\n *\/","file":"functions.php","line":1258,"missingDoc":false,"filters":[],"uses":{"wp_get_referer":[1259],"wp_get_original_referer":[1260,1260],"esc_attr":[1261],"stripslashes":[1261]},"used_by":[]},"wp_get_referer":{"doc":"\/**\n * Retrieve referer from '_wp_http_referer' or HTTP referer. If it's the same\n * as the current request URL, will return false.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @return string|bool False on failure. Referer URL on success.\n *\/","file":"functions.php","line":1277,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_original_referer_field":[1259],"wp_nonce_ays":[2026,2025],"auth_redirect":[785,785],"check_admin_referer":[811]}},"wp_get_original_referer":{"doc":"\/**\n * Retrieve original referer that was posted, if it exists.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @return string|bool False if no original referer or original referer if set.\n *\/","file":"functions.php","line":1298,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_original_referer_field":[1260,1260]}},"wp_mkdir_p":{"doc":"\/**\n * Recursive directory creation based on full path.\n *\n * Will attempt to set permissions on folders.\n *\n * @since 2.0.1\n *\n * @param string $target Full path to attempt to create.\n * @return bool Whether the path was created. True if path already exists.\n *\/","file":"functions.php","line":1314,"missingDoc":false,"filters":[],"uses":{"explode":[1319],"wp_is_stream":[1318],"str_replace":[1323],"rtrim":[1331],"is_dir":[1336,1344],"file_exists":[1335],"stat":[1340],"dirname":[1340,1344,1349],"chmod":[1342],"mkdir":[1339],"wp_mkdir_p":[1350,1349]},"used_by":{"wp_mkdir_p":[1350,1349],"wp_upload_dir":[1617],"wp_upload_bits":[1740]}},"path_is_absolute":{"doc":"\/**\n * Test if a give filesystem path is absolute ('\/foo\/bar', 'c:\\windows').\n *\n * @since 2.5.0\n *\n * @param string $path File path\n * @return bool True if path is absolute, false is not absolute.\n *\/","file":"functions.php","line":1363,"missingDoc":false,"filters":[],"uses":{"realpath":[1365],"strlen":[1368],"preg_match":[1372]},"used_by":{"path_join":[1391],"locate_template":[376]}},"win_is_writable":{"doc":"\/**\n * Workaround for Windows bug in is_writable() function\n *\n * PHP has issues with Windows ACL's for determine if a \n * directory is writable or not, this works around them by\n * checking the ability to open files rather than relying\n * upon PHP to interprate the OS ACL.\n *\n * @link http:\/\/bugs.php.net\/bug.php?id=27609\n * @link http:\/\/bugs.php.net\/bug.php?id=30931\n *\n * @since 2.8.0\n *\n * @param string $path\n * @return bool\n *\/","file":"functions.php","line":1473,"missingDoc":false,"filters":[],"uses":{"win_is_writable":[1476,1478],"uniqid":[1476,1478],"mt_rand":[1476,1478],"is_dir":[1477],"strlen":[1475],"file_exists":[1481],"fopen":[1482],"fclose":[1485],"unlink":[1487]},"used_by":{"wp_is_writable":[1452],"win_is_writable":[1476,1478]}},"ms_is_switched":{"doc":"\/**\n * Determines if switch_to_blog() is in effect\n *\n * @since 3.5.0\n *\n * @return bool True if switched, false otherwise.\n *\/","file":"ms-blogs.php","line":626,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_upload_dir":[1569]}},"is_main_site":{"doc":"\/**\n * Is main site?\n *\n *\n * @since 3.0.0\n * @package WordPress\n *\n * @param int $blog_id optional blog id to test (default current blog)\n * @return bool True if not multisite or $blog_id is main site\n *\/","file":"functions.php","line":3219,"missingDoc":false,"filters":[],"uses":{"is_multisite":[3222],"get_current_blog_id":[3226]},"used_by":{"wp_upload_dir":[1552],"is_main_blog":[127],"maybe_redirect_404":[1653],"wp_schedule_update_network_counts":[1913],"WP_Rewrite::rewrite_rules":[1536],"__main":[431]}},"wp_unique_filename":{"doc":"\/**\n * Get a filename that is sanitized and unique for the given directory.\n *\n * If the filename is not unique, then a number will be added to the filename\n * before the extension, and will continue adding numbers until the filename is\n * unique.\n *\n * The callback is passed three parameters, the first one is the directory, the\n * second is the filename, and the third is the extension.\n *\n * @since 2.5.0\n *\n * @param string $dir\n * @param string $filename\n * @param mixed $unique_filename_callback Callback.\n * @return string New filename, if given wasn't unique.\n *\/","file":"functions.php","line":1647,"missingDoc":false,"filters":[],"uses":{"sanitize_file_name":[1649],"pathinfo":[1652],"basename":[1654],"call_user_func":[1662],"strtolower":[1668,1667],"preg_replace":[1669],"preg_quote":[1669],"file_exists":[1672,1672,1681],"str_replace":[1674,1675,1685],"is_callable":[1661]},"used_by":{"wp_upload_bits":[1737]}},"wp_check_filetype":{"doc":"\/**\n * Retrieve the file type from the file name.\n *\n * You can optionally define the mime array, if needed.\n *\n * @since 2.0.4\n *\n * @param string $filename File name or path.\n * @param array $mimes Optional. Key is the file extension with value as the mime type.\n * @return array Values with extension first and mime type.\n *\/","file":"functions.php","line":1808,"missingDoc":false,"filters":[],"uses":{"get_allowed_mime_types":[1810],"preg_match":[1816],"compact":[1823]},"used_by":{"wp_upload_bits":[1722],"wp_check_filetype_and_ext":[1847,1883],"wp_get_image_editor":[1167],"__main":[32]}},"wp_ext2type":{"doc":"\/**\n * Retrieve the file type based on the extension name.\n *\n * @package WordPress\n * @since 2.5.0\n * @uses apply_filters() Calls 'ext2type' hook on default supported types.\n *\n * @param string $ext The extension to search.\n * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found.\n *\/","file":"functions.php","line":1781,"missingDoc":false,"filters":["'ext2type'"],"uses":{"in_array":[1793]},"used_by":{"wp_mime_type_icon":[4335]}},"wp_check_filetype_and_ext":{"doc":"\/**\n * Attempt to determine the real file type of a file.\n * If unable to, the file name extension will be used to determine type.\n *\n * If it's determined that the extension does not match the file's real type,\n * then the \"proper_filename\" value will be set with a proper filename and extension.\n *\n * Currently this function only supports validating images known to getimagesize().\n *\n * @since 3.0.0\n *\n * @param string $file Full path to the image.\n * @param string $filename The filename of the image (may differ from $file due to $file being in a tmp directory)\n * @param array $mimes Optional. Key is the file extension with value as the mime type.\n * @return array Values for the extension, MIME, and either a corrected filename or false if original $filename is valid\n *\/","file":"functions.php","line":1842,"missingDoc":false,"filters":["'getimagesize_mimes_to_exts'","'wp_check_filetype_and_ext'"],"uses":{"wp_check_filetype":[1847,1883],"extract":[1848,1884],"compact":[1852,1891],"file_exists":[1851],"getimagesize":[1858],"explode":[1874],"array_pop":[1875],"implode":[1877],"strpos":[1855],"function_exists":[1855]},"used_by":[]},"wp_nonce_ays":{"doc":"\/**\n * Display \"Are You Sure\" message to confirm the action being taken.\n *\n * If the action has the nonce explain message, then it will be displayed along\n * with the \"Are you sure?\" message.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $action The nonce action.\n *\/","file":"functions.php","line":2018,"missingDoc":false,"filters":[],"uses":{"__":[2019,2021,2022,2024,2026],"sprintf":[2021,2022],"get_bloginfo":[2021],"wp_logout_url":[2022],"esc_url":[2026],"remove_query_arg":[2026],"wp_get_referer":[2026,2025],"wp_die":[2029]},"used_by":{"check_admin_referer":[814]}},"_default_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution and display HTML message with error message.\n *\n * This is the default handler for wp_die if you want a custom one for your\n * site then you can overload using the wp_die_handler filter in wp_die\n *\n * @since 3.0.0\n * @access private\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2071,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2073],"function_exists":[2075,2077,2117,2123,2123],"get_error_data":[2079],"is_array":[2080],"get_error_messages":[2083],"count":[2084],"join":[2092],"is_string":[2095],"is_wp_error":[2077],"__":[2100,2112],"status_header":[2106],"nocache_headers":[2107],"header":[2108],"headers_sent":[2105],"is_rtl":[2117],"language_attributes":[2123],"did_action":[2104]},"used_by":[]},"language_attributes":{"doc":"\/**\n * Display the language attributes for the html tag.\n *\n * Builds up a set of html attributes containing the text direction and language\n * information for the page.\n *\n * @since 2.1.0\n *\n * @param string $doctype The type of html document (xhtml|html).\n *\/","file":"general-template.php","line":1857,"missingDoc":false,"filters":["'language_attributes'"],"uses":{"function_exists":[1861],"is_rtl":[1861],"get_option":[1865,1868],"get_bloginfo":[1864],"implode":[1872]},"used_by":{"_default_wp_die_handler":[2123],"__main":[13,13]}},"did_action":{"doc":"\/**\n * Retrieve the number of times an action is fired.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.1\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action hook.\n * @return int The number of times action hook <tt>$tag<\/tt> is fired\n *\/","file":"plugin.php","line":424,"missingDoc":false,"filters":[],"uses":[],"used_by":{"_default_wp_die_handler":[2104],"wp_print_scripts":[28],"wp_register_script":[55],"wp_localize_script":[89],"wp_deregister_script":[108],"wp_enqueue_script":[128],"wp_dequeue_script":[152],"wp_script_is":[178],"wp_print_styles":[29],"wp_add_inline_style":[56],"wp_register_style":[84],"wp_deregister_style":[105],"wp_enqueue_style":[136],"wp_dequeue_style":[158],"wp_style_is":[185],"wp_admin_css":[2095],"wp_load_translations_early":[700],"wp_enqueue_media":[1431],"switch_to_blog":[544],"restore_current_blog":[605],"wp_default_scripts":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"print_head_scripts":[646],"wp_print_head_scripts":[725],"create_initial_taxonomies":[24],"_remove_theme_support":[1492,1502],"wp_register_sidebar_widget":[646],"wp_register_widget_control":[746],"_register_widget_form_callback":[802]}},"_xmlrpc_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution and display XML message with error message.\n *\n * This is the handler for wp_die when processing XMLRPC requests.\n *\n * @since 3.2.0\n * @access private\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2267,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2271],"output":[2275],"getXml":[2275]},"used_by":[]},"_ajax_wp_die_handler":{"doc":"\/**\n * Kill WordPress ajax execution.\n *\n * This is the handler for wp_die when processing Ajax requests.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $message Optional. Response to print.\n *\/","file":"functions.php","line":2290,"missingDoc":false,"filters":[],"uses":{"is_scalar":[2291]},"used_by":[]},"_scalar_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution.\n *\n * This is the handler for wp_die when processing APP requests.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $message Optional. Response to print.\n *\/","file":"functions.php","line":2306,"missingDoc":false,"filters":[],"uses":{"is_scalar":[2307]},"used_by":[]},"wp_send_json":{"doc":"\/**\n * Send a JSON response back to an Ajax request.\n *\n * @since 3.5.0\n *\n * @param mixed $response Variable (usually an array or object) to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2319,"missingDoc":false,"filters":[],"uses":{"header":[2320],"get_option":[2320],"json_encode":[2321],"wp_die":[2323],"defined":[2322]},"used_by":{"wp_send_json_success":[2341],"wp_send_json_error":[2357]}},"wp_send_json_success":{"doc":"\/**\n * Send a JSON response back to an Ajax request, indicating success.\n *\n * @since 3.5.0\n *\n * @param mixed $data Data to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2335,"missingDoc":false,"filters":[],"uses":{"wp_send_json":[2341]},"used_by":[]},"wp_send_json_error":{"doc":"\/**\n * Send a JSON response back to an Ajax request, indicating failure.\n *\n * @since 3.5.0\n *\n * @param mixed $data Data to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2351,"missingDoc":false,"filters":[],"uses":{"wp_send_json":[2357]},"used_by":[]},"_config_wp_home":{"doc":"\/**\n * Retrieve the WordPress home page URL.\n *\n * If the constant named 'WP_HOME' exists, then it will be used and returned by\n * the function. This can be used to counter the redirection on your local\n * development environment.\n *\n * @access private\n * @package WordPress\n * @since 2.2.0\n *\n * @param string $url URL for the home location\n * @return string Homepage location.\n *\/","file":"functions.php","line":2374,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[2376],"defined":[2375]},"used_by":[]},"_config_wp_siteurl":{"doc":"\/**\n * Retrieve the WordPress site URL.\n *\n * If the constant named 'WP_SITEURL' is defined, then the value in that\n * constant will always be returned. This can be used for debugging a site on\n * your localhost while not having to change the database to your URL.\n *\n * @access private\n * @package WordPress\n * @since 2.2.0\n *\n * @param string $url URL to set the WordPress site location.\n * @return string The WordPress Site URL\n *\/","file":"functions.php","line":2394,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[2396],"defined":[2395]},"used_by":[]},"_mce_set_direction":{"doc":"\/**\n * Set the localized direction for MCE plugin.\n *\n * Will only set the direction to 'rtl', if the WordPress locale has the text\n * direction set to 'rtl'.\n *\n * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array\n * keys. These keys are then returned in the $input array.\n *\n * @access private\n * @package WordPress\n * @subpackage MCE\n * @since 2.1.0\n *\n * @param array $input MCE plugin array.\n * @return array Direction set for 'rtl', if needed by locale.\n *\/","file":"functions.php","line":2417,"missingDoc":false,"filters":[],"uses":{"is_rtl":[2418]},"used_by":[]},"smilies_init":{"doc":"\/**\n * Convert smiley code to the icon graphic file equivalent.\n *\n * You can turn off smilies, by going to the write setting screen and unchecking\n * the box, or by setting 'use_smilies' option to false or removing the option.\n *\n * Plugins may override the default smiley list by setting the $wpsmiliestrans\n * to an array, with the key the code the blogger types in and the value the\n * image file.\n *\n * The $wp_smiliessearch global is for the regular expression and is set each\n * time the function is called.\n *\n * The full list of smilies can be found in the function and won't be listed in\n * the description. Probably should create a Codex page for it, so that it is\n * available.\n *\n * @global array $wpsmiliestrans\n * @global array $wp_smiliessearch\n * @since 2.2.0\n *\/","file":"functions.php","line":2448,"missingDoc":false,"filters":[],"uses":{"get_option":[2452],"count":[2505],"krsort":[2514],"substr":[2520,2521],"preg_quote":[2529,2533]},"used_by":[]},"wp_parse_id_list":{"doc":"\/**\n * Clean up an array, comma- or space-separated list of IDs.\n *\n * @since 3.0.0\n *\n * @param array|string $list\n * @return array Sanitized array of IDs\n *\/","file":"functions.php","line":2572,"missingDoc":false,"filters":[],"uses":{"preg_split":[2574],"is_array":[2573],"array_unique":[2576],"array_map":[2576]},"used_by":{"get_posts":[1717,1721],"get_pages":[3674,3689],"get_terms":[1287,1302,1316],"WP_User_Query::prepare_query":[522,525]}},"wp_filter_object_list":{"doc":"\/**\n * Filters a list of objects, based on a set of key => value arguments.\n *\n * @since 3.0.0\n *\n * @param array $list An array of objects to filter\n * @param array $args An array of key => value arguments to match against each object\n * @param string $operator The logical operation to perform. 'or' means only one element\n *\tfrom the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @param bool|string $field A field from the object to place instead of the entire object\n * @return array A list of objects or object fields\n *\/","file":"functions.php","line":2609,"missingDoc":false,"filters":[],"uses":{"is_array":[2610],"wp_list_filter":[2613],"wp_list_pluck":[2616]},"used_by":{"get_post_stati":[1029],"get_post_types":[1123],"get_taxonomies":[143]}},"wp_list_filter":{"doc":"\/**\n * Filters a list of objects, based on a set of key => value arguments.\n *\n * @since 3.1.0\n *\n * @param array $list An array of objects to filter\n * @param array $args An array of key => value arguments to match against each object\n * @param string $operator The logical operation to perform:\n * 'AND' means all elements from the array must match;\n * 'OR' means only one element needs to match;\n * 'NOT' means no elements may match.\n * The default is 'AND'.\n * @return array\n *\/","file":"functions.php","line":2635,"missingDoc":false,"filters":[],"uses":{"is_array":[2636],"strtoupper":[2642],"count":[2643],"array_key_exists":[2651]},"used_by":{"wp_filter_object_list":[2613],"WP_Query::get_posts":[2242,2258,2270],"WP_Query::get_queried_object":[2995]}},"wp_maybe_load_widgets":{"doc":"\/**\n * Determines if Widgets library should be loaded.\n *\n * Checks to make sure that the widgets library hasn't already been loaded. If\n * it hasn't, then it will load the widgets library and run an action hook.\n *\n * @since 2.2.0\n * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value.\n *\/","file":"functions.php","line":2694,"missingDoc":false,"filters":["'load_default_widgets'"],"uses":{"add_action":[2698]},"used_by":[]},"wp_widgets_add_menu":{"doc":"\/**\n * Append the Widgets menu to the themes main menu.\n *\n * @since 2.2.0\n * @uses $submenu The administration submenu list.\n *\/","file":"functions.php","line":2707,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[2710],"__":[2713],"ksort":[2714]},"used_by":[]},"wp_ob_end_flush_all":{"doc":"\/**\n * Flush all output buffers for PHP 5.2.\n *\n * Make sure all output buffers are flushed before our singletons our destroyed.\n *\n * @since 2.2.0\n *\/","file":"functions.php","line":2724,"missingDoc":false,"filters":[],"uses":{"ob_get_level":[2725],"ob_end_flush":[2727]},"used_by":[]},"url_is_accessable_via_ssl":{"doc":"\/**\n * Determines if the blog can be accessed over SSL.\n *\n * Determines if blog can be accessed over SSL by using cURL to access the site\n * using the https in the siteurl. Requires cURL extension to work correctly.\n *\n * @since 2.5.0\n *\n * @param string $url\n * @return bool Whether SSL access is available\n *\/","file":"functions.php","line":2805,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[2808],"curl_init":[2810],"curl_setopt":[2811,2812,2813,2814,2815],"curl_exec":[2817],"curl_getinfo":[2819],"curl_close":[2820],"in_array":[2807],"get_loaded_extensions":[2807]},"used_by":[]},"is_lighttpd_before_150":{"doc":"\/**\n * Is the server running earlier than 1.5.0 version of lighttpd?\n *\n * @since 2.5.0\n *\n * @return bool Whether the server is running lighttpd < 1.5.0\n *\/","file":"functions.php","line":2992,"missingDoc":false,"filters":[],"uses":{"explode":[2993],"version_compare":[2995]},"used_by":[]},"apache_mod_loaded":{"doc":"\/**\n * Does the specified module exist in the Apache config?\n *\n * @since 2.5.0\n *\n * @param string $mod e.g. mod_rewrite\n * @param bool $default The default return value if the module is not found\n * @return bool\n *\/","file":"functions.php","line":3007,"missingDoc":false,"filters":[],"uses":{"apache_get_modules":[3014],"in_array":[3015],"function_exists":[3017,3013],"ob_start":[3018],"phpinfo":[3019],"ob_get_clean":[3020],"strpos":[3021]},"used_by":[]},"validate_file":{"doc":"\/**\n * File validates against allowed set of defined rules.\n *\n * A return value of '1' means that the $file contains either '..' or '.\/'. A\n * return value of '2' means that the $file contains ':' after the first\n * character. A return value of '3' means that the file is not in the allowed\n * files list.\n *\n * @since 1.2.0\n *\n * @param string $file File path.\n * @param array $allowed_files List of allowed files.\n * @return int 0 means nothing is wrong, greater than 0 means something was wrong.\n *\/","file":"functions.php","line":3069,"missingDoc":false,"filters":[],"uses":{"strpos":[3070,3073],"in_array":[3076],"substr":[3079]},"used_by":{"wp_get_active_and_valid_plugins":[495],"wp_get_active_network_plugins":[49],"get_page_template":[248],"preview_theme":[565,572]}},"wp_guess_url":{"doc":"\/**\n * Guess the URL for the site.\n *\n * Will remove wp-admin links to retrieve only return URLs not in the wp-admin\n * directory.\n *\n * @since 2.6.0\n *\n * @return string\n *\/","file":"functions.php","line":3154,"missingDoc":false,"filters":[],"uses":{"is_ssl":[3158],"preg_replace":[3159],"defined":[3155],"rtrim":[3162]},"used_by":{"wp_not_installed":[431],"wp_default_scripts":[53],"wp_default_styles":[495]}},"wp_suspend_cache_invalidation":{"doc":"\/**\n * Suspend cache invalidation.\n *\n * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations\n * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent\n * cache when invalidation is suspended.\n *\n * @since 2.7.0\n *\n * @param bool $suspend Whether to suspend or enable cache invalidation\n * @return bool The current suspend setting\n *\/","file":"functions.php","line":3201,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"global_terms_enabled":{"doc":"\/**\n * Whether global terms are enabled.\n *\n *\n * @since 3.0.0\n * @package WordPress\n *\n * @return bool True if multisite and global terms enabled\n *\/","file":"functions.php","line":3240,"missingDoc":false,"filters":["'global_terms_enabled'"],"uses":{"is_multisite":[3241],"get_site_option":[3250],"is_null":[3247,3245]},"used_by":{"global_terms":[1530]}},"wp_timezone_override_offset":{"doc":"\/**\n * gmt_offset modification for smart timezone handling.\n *\n * Overrides the gmt_offset option if we have a timezone_string available.\n *\n * @since 2.8.0\n *\n * @return float|bool\n *\/","file":"functions.php","line":3264,"missingDoc":false,"filters":[],"uses":{"get_option":[3265],"timezone_open":[3269],"date_create":[3270],"round":[3274],"timezone_offset_get":[3274]},"used_by":[]},"_wp_timezone_choice_usort_callback":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.9.0\n *\n * @param unknown_type $a\n * @param unknown_type $b\n * @return int\n *\/","file":"functions.php","line":3286,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[3291,3305,3309,3311,3320],"substr":[3290,3290,3294,3300]},"used_by":[]},"wp_timezone_choice":{"doc":"\/**\n * Gives a nicely formatted list of timezone strings. \/\/ temporary! Not in final\n *\n * @since 2.9.0\n *\n * @param string $selected_zone Selected Zone\n * @return string\n *\/","file":"functions.php","line":3332,"missingDoc":false,"filters":[],"uses":{"get_locale":[3339],"load_textdomain":[3341],"explode":[3347],"in_array":[3348],"translate":[3366,3367,3368],"str_replace":[3366,3367,3368,3439],"timezone_identifiers_list":[3346],"usort":[3371],"__":[3376,3425],"esc_attr":[3392,3412,3425,3445],"join":[3407,3450],"esc_html":[3412,3445],"esc_attr__":[3421,3429]},"used_by":[]},"wp_scheduled_delete":{"doc":"\/**\n * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS.\n *\n * @since 2.9.0\n *\/","file":"functions.php","line":3471,"missingDoc":false,"filters":[],"uses":{"time":[3474],"get_results":[3476,3493],"prepare":[3476,3493],"get_post":[3483],"delete_post_meta":[3486,3487],"wp_delete_post":[3489],"get_comment":[3500],"delete_comment_meta":[3503,3504],"wp_delete_comment":[3506]},"used_by":[]},"_search_terms_tidy":{"doc":"\/**\n * Used internally to tidy up the search terms.\n *\n * @access private\n * @since 2.9.0\n *\n * @param string $t\n * @return string\n *\/","file":"functions.php","line":3567,"missingDoc":false,"filters":[],"uses":{"trim":[3568]},"used_by":[]},"__return_true":{"doc":"\/**\n * Returns true.\n *\n * Useful for returning true to filters easily.\n *\n * @since 3.0.0\n * @see __return_false()\n * @return bool true\n *\/","file":"functions.php","line":3580,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_false":{"doc":"\/**\n * Returns false.\n *\n * Useful for returning false to filters easily.\n *\n * @since 3.0.0\n * @see __return_true()\n * @return bool false\n *\/","file":"functions.php","line":3593,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_zero":{"doc":"\/**\n * Returns 0.\n *\n * Useful for returning 0 to filters easily.\n *\n * @since 3.0.0\n * @see __return_zero()\n * @return int 0\n *\/","file":"functions.php","line":3606,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_empty_array":{"doc":"\/**\n * Returns an empty array.\n *\n * Useful for returning an empty array to filters easily.\n *\n * @since 3.0.0\n * @see __return_zero()\n * @return array Empty array\n *\/","file":"functions.php","line":3619,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_null":{"doc":"\/**\n * Returns null.\n *\n * Useful for returning null to filters easily.\n *\n * @since 3.4.0\n * @return null\n *\/","file":"functions.php","line":3631,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"send_nosniff_header":{"doc":"\/**\n * Send a HTTP header to disable content type sniffing in browsers which support it.\n *\n * @link http:\/\/blogs.msdn.com\/ie\/archive\/2008\/07\/02\/ie8-security-part-v-comprehensive-protection.aspx\n * @link http:\/\/src.chromium.org\/viewvc\/chrome?view=rev&revision=6985\n *\n * @since 3.0.0\n * @return none\n *\/","file":"functions.php","line":3644,"missingDoc":false,"filters":[],"uses":{"header":[3645]},"used_by":[]},"_wp_mysql_week":{"doc":"\/**\n * Returns a MySQL expression for selecting the week number based on the start_of_week option.\n *\n * @internal\n * @since 3.0.0\n * @param string $column\n * @return string\n *\/","file":"functions.php","line":3656,"missingDoc":false,"filters":[],"uses":{"get_option":[3657]},"used_by":{"wp_get_archives":[987],"WP_Query::get_posts":[2151]}},"wp_find_hierarchy_loop":{"doc":"\/**\n * Finds hierarchy loops using a callback function that maps object IDs to parent IDs.\n *\n * @since 3.1.0\n * @access private\n *\n * @param callback $callback function that accepts ( ID, $callback_args ) and outputs parent_ID\n * @param int $start The ID to start the loop check at\n * @param int $start_parent the parent_ID of $start to use instead of calling $callback( $start ). Use null to always use $callback\n * @param array $callback_args optional additional arguments to send to $callback\n * @return array IDs of all members of loop\n *\/","file":"functions.php","line":3684,"missingDoc":false,"filters":[],"uses":{"is_null":[3685],"wp_find_hierarchy_loop_tortoise_hare":[3687,3690]},"used_by":{"wp_check_post_hierarchy_for_loops":[5302],"wp_check_term_hierarchy_for_loops":[3289]}},"wp_find_hierarchy_loop_tortoise_hare":{"doc":"\/**\n * Uses the \"The Tortoise and the Hare\" algorithm to detect loops.\n *\n * For every step of the algorithm, the hare takes two steps and the tortoise one.\n * If the hare ever laps the tortoise, there must be a loop.\n *\n * @since 3.1.0\n * @access private\n *\n * @param callback $callback function that accepts ( ID, callback_arg, ... ) and outputs parent_ID\n * @param int $start The ID to start the loop check at\n * @param array $override an array of ( ID => parent_ID, ... ) to use instead of $callback\n * @param array $callback_args optional additional arguments to send to $callback\n * @param bool $_return_loop Return loop members or just detect presence of loop?\n * Only set to true if you already know the given $start is part of a loop\n * (otherwise the returned array might include branches)\n * @return mixed scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if $_return_loop\n *\/","file":"functions.php","line":3711,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[3720,3722,3732],"array_merge":[3720,3722,3732]},"used_by":{"wp_find_hierarchy_loop":[3687,3690]}},"send_frame_options_header":{"doc":"\/**\n * Send a HTTP header to limit rendering of pages to same origin iframes.\n *\n * @link https:\/\/developer.mozilla.org\/en\/the_x-frame-options_response_header\n *\n * @since 3.1.3\n * @return none\n *\/","file":"functions.php","line":3746,"missingDoc":false,"filters":[],"uses":{"header":[3747]},"used_by":[]},"wp_debug_backtrace_summary":{"doc":"\/**\n * Return a comma separated string of functions that have been called to get to the current point in code.\n *\n * @link http:\/\/core.trac.wordpress.org\/ticket\/19589\n * @since 3.4\n *\n * @param string $ignore_class A class to ignore all function calls within - useful when you want to just give info about the callee\n * @param int $skip_frames A number of stack frames to skip - useful for unwinding back to the source of the issue\n * @param bool $pretty Whether or not you want a comma separated string or raw array returned\n * @return string|array Either a string containing a reversed comma separated trace or an array of individual calls.\n *\/","file":"functions.php","line":3781,"missingDoc":false,"filters":[],"uses":{"debug_backtrace":[3783,3785],"version_compare":[3782],"is_null":[3788],"in_array":[3802,3800],"str_replace":[3803],"join":[3810],"array_reverse":[3810]},"used_by":{"wpdb::get_caller":[1724]}},"_get_non_cached_ids":{"doc":"\/**\n * Retrieve ids that are not already present in the cache\n *\n * @since 3.4.0\n *\n * @param array $object_ids ID list\n * @param string $cache_key The cache bucket to check against\n *\n * @return array\n *\/","file":"functions.php","line":3825,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[3829]},"used_by":{"cache_users":[159],"_prime_post_caches":[5555]}},"wp_checkdate":{"doc":"\/**\n * Test if the supplied date is valid for the Gregorian calendar\n *\n * @since 3.5.0\n *\n * @return bool true|false\n *\/","file":"functions.php","line":3880,"missingDoc":false,"filters":["'wp_checkdate'"],"uses":{"checkdate":[3881]},"used_by":{"wp_insert_post":[2794]}},"wp_print_scripts":{"doc":"\/**\n * Prints script tags in document head.\n *\n * Called by admin-header.php and by wp_head hook. Since it is called by wp_head\n * on every page load, the function does not instantiate the WP_Scripts object\n * unless script names are explicitly passed. Does make use of already\n * instantiated $wp_scripts if present. Use provided wp_print_scripts hook to\n * register\/enqueue new scripts.\n *\n * @since r16\n * @see WP_Dependencies::print_scripts()\n *\/","file":"functions.wp-scripts.php","line":21,"missingDoc":false,"filters":["'wp_print_scripts'"],"uses":{"_doing_it_wrong":[29],"sprintf":[29],"__":[29],"did_action":[28],"is_a":[27],"do_items":[38]},"used_by":[]},"wp_register_script":{"doc":"\/**\n * Register new Javascript file.\n *\n * @since r16\n * @param string $handle Script name\n * @param string $src Script url\n * @param array $deps (optional) Array of script names on which this script depends\n * @param string|bool $ver (optional) Script version (used for cache busting), set to null to disable\n * @param bool $in_footer (optional) Whether to enqueue the script before <\/head> or before <\/body>\n * @return null\n *\/","file":"functions.wp-scripts.php","line":52,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[56],"sprintf":[56],"__":[56],"did_action":[55],"is_a":[54],"add":[61],"add_data":[63]},"used_by":[]},"wp_localize_script":{"doc":"\/**\n * Wrapper for $wp_scripts->localize().\n *\n * Used to localizes a script.\n * Works only if the script has already been added.\n * Accepts an associative array $l10n and creates JS object:\n * \"$object_name\" = {\n * key: value,\n * key: value,\n * ...\n * }\n * See http:\/\/core.trac.wordpress.org\/ticket\/11520 for more information.\n *\n * @since r16\n *\n * @param string $handle The script handle that was registered or used in script-loader\n * @param string $object_name Name for the created JS object. This is passed directly so it should be qualified JS variable \/[a-zA-Z0-9_]+\/\n * @param array $l10n Associative PHP array containing the translated strings. HTML entities will be converted and the array will be JSON encoded.\n * @return bool Whether the localization was added successfully.\n *\/","file":"functions.wp-scripts.php","line":86,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[90],"sprintf":[90],"__":[90],"did_action":[89],"is_a":[88],"localize":[96]},"used_by":{"wp_enqueue_media":[1540],"wp_just_in_time_script_localization":[577]}},"wp_deregister_script":{"doc":"\/**\n * Remove a registered script.\n *\n * @since r16\n * @see WP_Scripts::remove() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":105,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[109],"sprintf":[109],"__":[109],"did_action":[108],"is_a":[107],"remove":[114]},"used_by":[]},"wp_dequeue_script":{"doc":"\/**\n * Remove an enqueued script.\n *\n * @since WP 3.1\n * @see WP_Scripts::dequeue() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":149,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[153],"sprintf":[153],"__":[153],"did_action":[152],"is_a":[151],"dequeue":[158]},"used_by":[]},"wp_script_is":{"doc":"\/**\n * Check whether script has been added to WordPress Scripts.\n *\n * By default, checks if the script has been enqueued. You can also\n * pass 'registered' to $list, to see if the script is registered,\n * and you can check processing statuses with 'to_do' and 'done'.\n *\n * @since WP unknown; BP unknown\n *\n * @param string $handle Name of the script.\n * @param string $list Optional. Defaults to 'enqueued'. Values are\n * \t'registered', 'enqueued' (or 'queue'), 'to_do', and 'done'.\n * @return bool Whether script is in the list.\n *\/","file":"functions.wp-scripts.php","line":175,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[179],"sprintf":[179],"__":[179],"did_action":[178],"is_a":[177],"query":[184]},"used_by":[]},"wp_add_inline_style":{"doc":"\/**\n * Adds extra CSS.\n *\n * Works only if the stylesheet has already been added.\n * Accepts a string $data containing the CSS. If two or more CSS code blocks are\n * added to the same stylesheet $handle, they will be printed in the order\n * they were added, i.e. the latter added styles can redeclare the previous.\n *\n * @since 3.3.0\n * @see WP_Scripts::add_inline_style()\n *\/","file":"functions.wp-styles.php","line":53,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[57],"sprintf":[57],"__":[57],"did_action":[56],"is_a":[55],"add_inline_style":[62]},"used_by":[]},"wp_register_style":{"doc":"\/**\n * Register CSS style file.\n *\n * @since r79\n * @see WP_Styles::add() For additional information.\n * @global object $wp_styles The WP_Styles object for printing styles.\n * @link http:\/\/www.w3.org\/TR\/CSS2\/media.html#media-types List of CSS media types.\n *\n * @param string $handle Name of the stylesheet.\n * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '\/css\/mystyle.css'.\n * @param array $deps Array of handles of any stylesheet that this stylesheet depends on.\n * (Stylesheets that must be loaded before this stylesheet.) Pass an empty array if there are no dependencies.\n * @param string|bool $ver String specifying the stylesheet version number. Set to null to disable.\n * Used to ensure that the correct version is sent to the client regardless of caching.\n * @param string $media The media for which this stylesheet has been defined.\n *\/","file":"functions.wp-styles.php","line":81,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[85],"sprintf":[85],"__":[85],"did_action":[84],"is_a":[83],"add":[90]},"used_by":[]},"wp_deregister_style":{"doc":"\/**\n * Remove a registered CSS file.\n *\n * @since r79\n * @see WP_Styles::remove() For additional information.\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param string $handle Name of the stylesheet.\n *\/","file":"functions.wp-styles.php","line":102,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[106],"sprintf":[106],"__":[106],"did_action":[105],"is_a":[104],"remove":[111]},"used_by":[]},"wp_dequeue_style":{"doc":"\/**\n * Remove an enqueued style.\n *\n * @since WP 3.1\n * @see WP_Styles::dequeue() For parameter information.\n *\/","file":"functions.wp-styles.php","line":155,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[159],"sprintf":[159],"__":[159],"did_action":[158],"is_a":[157],"dequeue":[164]},"used_by":[]},"wp_style_is":{"doc":"\/**\n * Check whether style has been added to WordPress Styles.\n *\n * By default, checks if the style has been enqueued. You can also\n * pass 'registered' to $list, to see if the style is registered,\n * and you can check processing statuses with 'to_do' and 'done'.\n *\n * @since WP unknown; BP unknown\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param string $handle Name of the stylesheet.\n * @param string $list Optional. Defaults to 'enqueued'. Values are\n * \t'registered', 'enqueued' (or 'queue'), 'to_do', and 'done'.\n * @return bool Whether style is in the list.\n *\/","file":"functions.wp-styles.php","line":182,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[186],"sprintf":[186],"__":[186],"did_action":[185],"is_a":[184],"query":[191]},"used_by":[]},"get_header":{"doc":"\/**\n * Load header template.\n *\n * Includes the header template for a theme or if a name is specified then a\n * specialised header will be included.\n *\n * For the parameter, if the file is called \"header-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_header' action.\n *\n * @param string $name The name of the specialised header.\n *\/","file":"general-template.php","line":24,"missingDoc":false,"filters":["'get_header'"],"uses":{"load_template":[35],"locate_template":[34]},"used_by":{"Gettext_Translations::gettext_select_plural_form":[145],"Gettext_Translations::set_header":[222]}},"locate_template":{"doc":"\/**\n * Retrieve the name of the highest priority template file that exists.\n *\n * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which\n * inherit from a parent theme can just overload one file.\n *\n * @since 2.7.0\n * @uses apply_filters() Calls 'locate_template' filter on array of template names.\n *\n * @param string|array $template_names Template file(s) to search for, in order.\n * @param bool $load If true the template file will be loaded if it is found.\n * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false.\n * @return string The template filename if one is located.\n *\/","file":"template.php","line":369,"missingDoc":false,"filters":["'locate_template'"],"uses":{"file_exists":[382,379,376],"path_is_absolute":[376],"load_template":[389]},"used_by":{"get_header":[34],"get_footer":[63],"get_sidebar":[92],"get_template_part":[128],"get_search_form":[155],"get_query_template":[29]}},"get_footer":{"doc":"\/**\n * Load footer template.\n *\n * Includes the footer template for a theme or if a name is specified then a\n * specialised footer will be included.\n *\n * For the parameter, if the file is called \"footer-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_footer' action.\n *\n * @param string $name The name of the specialised footer.\n *\/","file":"general-template.php","line":53,"missingDoc":false,"filters":["'get_footer'"],"uses":{"load_template":[64],"locate_template":[63]},"used_by":[]},"get_sidebar":{"doc":"\/**\n * Load sidebar template.\n *\n * Includes the sidebar template for a theme or if a name is specified then a\n * specialised sidebar will be included.\n *\n * For the parameter, if the file is called \"sidebar-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_sidebar' action.\n *\n * @param string $name The name of the specialised sidebar.\n *\/","file":"general-template.php","line":82,"missingDoc":false,"filters":["'get_sidebar'"],"uses":{"load_template":[93],"locate_template":[92]},"used_by":[]},"get_template_part":{"doc":"\/**\n * Load a template part into a template\n *\n * Makes it easy for a theme to reuse sections of code in a easy to overload way\n * for child themes.\n *\n * Includes the named template part for a theme or if a name is specified then a\n * specialised part will be included. If the theme contains no {slug}.php file\n * then no template will be included.\n *\n * The template is included using require, not require_once, so you may include the\n * same template part multiple times.\n *\n * For the $name parameter, if the file is called \"{slug}-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 3.0.0\n * @uses do_action() Calls 'get_template_part_{$slug}' action.\n *\n * @param string $slug The slug name for the generic template.\n * @param string $name The name of the specialised template.\n *\/","file":"general-template.php","line":119,"missingDoc":false,"filters":["\"get_template_part_{$slug}\""],"uses":{"locate_template":[128]},"used_by":[]},"wp_login_form":{"doc":"\/**\n * Provides a simple login form for use anywhere within WordPress. By default, it echoes\n * the HTML immediately. Pass array('echo'=>false) to return the string instead.\n *\n * @since 3.0.0\n * @param array $args Configuration options to modify the form output.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":257,"missingDoc":false,"filters":["'login_form_defaults'","'login_form_top'","'login_form_middle'","'login_form_bottom'"],"uses":{"is_ssl":[259],"__":[261,262,263,264],"wp_parse_args":[273],"esc_url":[276,290],"site_url":[276],"esc_attr":[279,280,280,283,284,287,289,289],"esc_html":[279,283,287]},"used_by":[]},"wp_lostpassword_url":{"doc":"\/**\n * Returns the Lost Password URL.\n *\n * Returns the URL that allows the user to retrieve the lost password\n *\n * @since 2.8.0\n * @uses site_url() To generate the lost password URL\n * @uses apply_filters() calls 'lostpassword_url' hook on the lostpassword url\n *\n * @param string $redirect Path to redirect to on login.\n * @return string Lost password URL.\n *\/","file":"general-template.php","line":313,"missingDoc":false,"filters":["'lostpassword_url'"],"uses":{"add_query_arg":[319],"network_site_url":[319]},"used_by":{"wp_authenticate_username_password":[90,111]}},"get_stylesheet_uri":{"doc":"\/**\n * Retrieve URI of current theme stylesheet.\n *\n * The stylesheet file name is 'style.css' which is appended to {@link\n * get_stylesheet_directory_uri() stylesheet directory URI} path.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet_uri' filter on stylesheet URI path and stylesheet directory URI.\n *\n * @return string\n *\/","file":"theme.php","line":192,"missingDoc":false,"filters":["'stylesheet_uri'"],"uses":{"get_stylesheet_directory_uri":[193]},"used_by":{"get_bloginfo":[442]}},"single_post_title":{"doc":"\/**\n * Display or retrieve page title for post.\n *\n * This is optimized for single.php template file for displaying the post title.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":628,"missingDoc":false,"filters":["'single_post_title'"],"uses":{"get_queried_object":[629]},"used_by":{"wp_title":[535]}},"single_term_title":{"doc":"\/**\n * Display or retrieve page title for taxonomy term archive.\n *\n * Useful for taxonomy term template files for displaying the taxonomy term page title.\n * It has less overhead than {@link wp_title()}, because of its limited implementation.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 3.1.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":725,"missingDoc":false,"filters":["'single_cat_title'","'single_tag_title'","'single_term_title'"],"uses":{"get_queried_object":[726],"is_tag":[733],"is_tax":[735],"is_category":[731]},"used_by":{"wp_title":[540,547],"single_cat_title":[684],"single_tag_title":[705]}},"post_type_archive_title":{"doc":"\/**\n * Display or retrieve title for a post type archive.\n *\n * This is optimized for archive.php and archive-{$post_type}.php template files\n * for displaying the title of the post type.\n *\n * @since 3.1.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":653,"missingDoc":false,"filters":["'post_type_archive_title'"],"uses":{"is_post_type_archive":[654],"get_queried_object":[657]},"used_by":{"wp_title":[558],"feed_links_extra":[1667]}},"is_archive":{"doc":"\/**\n * Is the query for an existing archive page?\n *\n * Month, Year, Category, Author, Post Type archive...\n *\n * @see WP_Query::is_archive()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":139,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[143],"__":[143],"is_archive":[147]},"used_by":{"wp_title":[561,569],"get_body_class":[412,453],"is_archive":[147],"__main":[40]}},"single_cat_title":{"doc":"\/**\n * Display or retrieve page title for category archive.\n *\n * This is useful for category template file or files, because it is optimized\n * for category page title and with less overhead than {@link wp_title()}.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":683,"missingDoc":false,"filters":[],"uses":{"single_term_title":[684]},"used_by":{"__main":[32]}},"single_tag_title":{"doc":"\/**\n * Display or retrieve page title for tag post archive.\n *\n * Useful for tag template files for displaying the tag page title. It has less\n * overhead than {@link wp_title()}, because of its limited implementation.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 2.3.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":704,"missingDoc":false,"filters":[],"uses":{"single_term_title":[705]},"used_by":[]},"single_month_title":{"doc":"\/**\n * Display or retrieve page title for post archive based on date.\n *\n * Useful for when the template only needs to display the month and year, if\n * either are available. Optimized for just this purpose, so if it is all that\n * is needed, should be better than {@link wp_title()}.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":767,"missingDoc":false,"filters":[],"uses":{"get_query_var":[770,771,772],"get_month":[776,779],"substr":[778,779]},"used_by":[]},"get_archives_link":{"doc":"\/**\n * Retrieve archive link content based on predefined or custom code.\n *\n * The format can be one of four styles. The 'link' for head element, 'option'\n * for use in the select element, 'html' for use in list (either ol or ul HTML\n * elements). Custom content is also supported using the before and after\n * parameters.\n *\n * The 'link' format uses the link HTML element with the <em>archives<\/em>\n * relationship. The before and after parameters are not used. The text\n * parameter is used to describe the link.\n *\n * The 'option' format uses the option HTML element for use in select element.\n * The value is the url parameter and the before and after parameters are used\n * between the text description.\n *\n * The 'html' format, which is the default, uses the li HTML element for use in\n * the list HTML elements. The before parameter is before the link and the after\n * parameter is after the closing link.\n *\n * The custom format uses the before parameter before the link ('a' HTML\n * element) and the after parameter after the closing link tag. If the above\n * three values for the format are not used, then custom format is assumed.\n *\n * @since 1.0.0\n *\n * @param string $url URL to archive.\n * @param string $text Archive text description.\n * @param string $format Optional, default is 'html'. Can be 'link', 'option', 'html', or custom.\n * @param string $before Optional.\n * @param string $after Optional.\n * @return string HTML link content for archive.\n *\/","file":"general-template.php","line":825,"missingDoc":false,"filters":["'get_archives_link'"],"uses":{"wptexturize":[826],"esc_attr":[827],"esc_url":[828]},"used_by":{"wp_get_archives":[940,961,983,1012,1036]}},"calendar_week_mod":{"doc":"\/**\n * Get number of days since the start of the week.\n *\n * @since 1.5.0\n *\n * @param int $num Number of day.\n * @return int Days since the start of the week.\n *\/","file":"general-template.php","line":1055,"missingDoc":false,"filters":[],"uses":{"floor":[1057]},"used_by":{"get_calendar":[1232,1253,1257]}},"delete_get_calendar_cache":{"doc":"\/**\n * Purge the cached results of get_calendar.\n *\n * @see get_calendar\n * @since 2.1.0\n *\/","file":"general-template.php","line":1279,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[1280]},"used_by":[]},"the_date_xml":{"doc":"\/**\n * Outputs the date in iso8601 format for xml files.\n *\n * @since 1.0.0\n *\/","file":"general-template.php","line":1320,"missingDoc":false,"filters":[],"uses":{"mysql2date":[1321],"get_post":[1321]},"used_by":[]},"the_date":{"doc":"\/**\n * Display or Retrieve the date the current $post was written (once per date)\n *\n * Will only output the date if the current post's date is different from the\n * previous one output.\n *\n * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the\n * function is called several times for each post.\n *\n * HTML output can be filtered with 'the_date'.\n * Date string output can be filtered with 'get_the_date'.\n *\n * @since 0.71\n * @uses get_the_date()\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @param string $before Optional. Output before the date.\n * @param string $after Optional. Output after the date.\n * @param bool $echo Optional, default is display. Whether to echo the date or return it.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1344,"missingDoc":false,"filters":["'the_date'"],"uses":{"get_the_date":[1349]},"used_by":[]},"the_modified_date":{"doc":"\/**\n * Display the date on which the post was last modified.\n *\n * @since 2.1.0\n *\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @param string $before Optional. Output before the date.\n * @param string $after Optional. Output after the date.\n * @param bool $echo Optional, default is display. Whether to echo the date or return it.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1398,"missingDoc":false,"filters":["'the_modified_date'"],"uses":{"get_the_modified_date":[1400]},"used_by":[]},"get_the_modified_date":{"doc":"\/**\n * Retrieve the date on which the post was last modified.\n *\n * @since 2.1.0\n *\n * @param string $d Optional. PHP date format. Defaults to the \"date_format\" option\n * @return string\n *\/","file":"general-template.php","line":1418,"missingDoc":false,"filters":["'get_the_modified_date'"],"uses":{"get_post_modified_time":[1420,1422],"get_option":[1420]},"used_by":{"the_modified_date":[1400]}},"the_time":{"doc":"\/**\n * Display the time at which the post was written.\n *\n * @since 0.71\n *\n * @param string $d Either 'G', 'U', or php date format.\n *\/","file":"general-template.php","line":1433,"missingDoc":false,"filters":["'the_time'"],"uses":{"get_the_time":[1434]},"used_by":[]},"get_the_time":{"doc":"\/**\n * Retrieve the time at which the post was written.\n *\n * @since 1.5.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n * @param int|object $post Optional post ID or object. Default is global $post object.\n * @return string\n *\/","file":"general-template.php","line":1446,"missingDoc":false,"filters":["'get_the_time'"],"uses":{"get_post":[1447],"get_post_time":[1450,1452],"get_option":[1450]},"used_by":{"the_time":[1434],"__main":[35,38,41]}},"the_modified_time":{"doc":"\/**\n * Display the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n *\/","file":"general-template.php","line":1486,"missingDoc":false,"filters":["'the_modified_time'"],"uses":{"get_the_modified_time":[1487]},"used_by":[]},"get_the_modified_time":{"doc":"\/**\n * Retrieve the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n * @return string\n *\/","file":"general-template.php","line":1498,"missingDoc":false,"filters":["'get_the_modified_time'"],"uses":{"get_post_modified_time":[1500,1502],"get_option":[1500]},"used_by":{"the_modified_time":[1487]}},"the_weekday":{"doc":"\/**\n * Display the weekday on which the post was written.\n *\n * @since 0.71\n * @uses $wp_locale\n * @uses $post\n *\/","file":"general-template.php","line":1536,"missingDoc":false,"filters":["'the_weekday'"],"uses":{"get_weekday":[1538],"mysql2date":[1538],"get_post":[1538]},"used_by":[]},"the_weekday_date":{"doc":"\/**\n * Display the weekday on which the post was written.\n *\n * Will only output the weekday if the current post's weekday is different from\n * the previous one output.\n *\n * @since 0.71\n *\n * @param string $before Optional Output before the date.\n * @param string $after Optional Output after the date.\n *\/","file":"general-template.php","line":1554,"missingDoc":false,"filters":["'the_weekday_date'"],"uses":{"get_weekday":[1559],"mysql2date":[1559],"get_post":[1559]},"used_by":[]},"wp_head":{"doc":"\/**\n * Fire the wp_head action\n *\n * @since 1.2.0\n * @uses do_action() Calls 'wp_head' hook.\n *\/","file":"general-template.php","line":1573,"missingDoc":false,"filters":["'wp_head'"],"uses":[],"used_by":{"__main":[38]}},"wp_footer":{"doc":"\/**\n * Fire the wp_footer action\n *\n * @since 1.5.1\n * @uses do_action() Calls 'wp_footer' hook.\n *\/","file":"general-template.php","line":1583,"missingDoc":false,"filters":["'wp_footer'"],"uses":[],"used_by":{"__main":[28]}},"feed_links":{"doc":"\/**\n * Display the links to the general feeds.\n *\n * @since 2.8.0\n *\n * @param array $args Optional arguments.\n *\/","file":"general-template.php","line":1594,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1595],"_x":[1600],"__":[1602,1604],"wp_parse_args":[1607],"feed_content_type":[1609,1610],"esc_attr":[1609,1610],"sprintf":[1609,1610],"get_bloginfo":[1609,1610],"get_feed_link":[1609,1610],"get_default_feed":[1610]},"used_by":[]},"feed_links_extra":{"doc":"\/**\n * Display the links to the extra feeds such as category feeds.\n *\n * @since 2.8.0\n *\n * @param array $args Optional arguments.\n *\/","file":"general-template.php","line":1620,"missingDoc":false,"filters":[],"uses":{"_x":[1623],"__":[1625,1627,1629,1631,1633,1635],"wp_parse_args":[1638],"get_post":[1642],"sprintf":[1645,1651,1656,1661,1664,1667],"get_bloginfo":[1645,1651,1656,1661,1664,1667],"esc_html":[1645],"get_the_title":[1645],"get_post_comments_feed_link":[1646],"comments_open":[1644],"pings_open":[1644],"is_category":[1648],"get_queried_object":[1649,1654,1668],"get_category_feed_link":[1652],"is_tag":[1653],"get_tag_feed_link":[1657],"is_author":[1658],"intval":[1659],"get_query_var":[1659],"get_the_author_meta":[1661],"get_author_feed_link":[1662],"is_search":[1663],"get_search_query":[1664],"get_search_feed_link":[1665],"is_post_type_archive":[1666],"post_type_archive_title":[1667],"get_post_type_archive_feed_link":[1668],"is_single":[1640],"is_page":[1640],"feed_content_type":[1672],"esc_attr":[1672],"esc_url":[1672]},"used_by":[]},"get_search_feed_link":{"doc":"\/**\n * Retrieve the permalink for the feed of the search results.\n *\n * @since 2.5.0\n *\n * @param string $search_query Optional. Search query.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":774,"missingDoc":false,"filters":["'search_feed_link'"],"uses":{"get_search_link":[776],"get_default_feed":[779],"get_search_permastruct":[781],"add_query_arg":[784],"trailingslashit":[786]},"used_by":{"feed_links_extra":[1665],"get_search_comments_feed_link":[810]}},"get_post_type_archive_feed_link":{"doc":"\/**\n * Retrieve the permalink for a post type archive feed.\n *\n * @since 3.1.0\n *\n * @param string $post_type Post type\n * @param string $feed Optional. Feed type\n * @return string\n *\/","file":"link-template.php","line":863,"missingDoc":false,"filters":["'post_type_archive_feed_link'"],"uses":{"get_default_feed":[864],"get_post_type_archive_link":[868],"get_post_type_object":[870],"trailingslashit":[872],"add_query_arg":[877],"get_option":[871]},"used_by":{"feed_links_extra":[1668]}},"rsd_link":{"doc":"\/**\n * Display the link to the Really Simple Discovery service endpoint.\n *\n * @link http:\/\/archipelago.phrasewise.com\/rsd\n * @since 2.0.0\n *\/","file":"general-template.php","line":1681,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1682]},"used_by":[]},"wlwmanifest_link":{"doc":"\/**\n * Display the link to the Windows Live Writer manifest file.\n *\n * @link http:\/\/msdn.microsoft.com\/en-us\/library\/bb463265.aspx\n * @since 2.3.1\n *\/","file":"general-template.php","line":1691,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1693]},"used_by":[]},"noindex":{"doc":"\/**\n * Display a noindex meta tag if required by the blog configuration.\n *\n * If a blog is marked as not being public then the noindex meta tag will be\n * output to tell web robots not to index the page content. Add this to the wp_head action.\n * Typical usage is as a wp_head callback. add_action( 'wp_head', 'noindex' );\n *\n * @see wp_no_robots\n *\n * @since 2.1.0\n *\/","file":"general-template.php","line":1707,"missingDoc":false,"filters":[],"uses":{"wp_no_robots":[1710],"get_option":[1709]},"used_by":[]},"wp_no_robots":{"doc":"\/**\n * Display a noindex meta tag.\n *\n * Outputs a noindex meta tag that tells web robots not to index the page content.\n * Typical usage is as a wp_head callback. add_action( 'wp_head', 'wp_no_robots' );\n *\n * @since 3.3.0\n *\/","file":"general-template.php","line":1721,"missingDoc":false,"filters":[],"uses":[],"used_by":{"noindex":[1710]}},"rich_edit_exists":{"doc":"\/**\n * Determine if TinyMCE is available.\n *\n * Checks to see if the user has deleted the tinymce files to slim down there WordPress install.\n *\n * @since 2.1.0\n *\n * @return bool Whether TinyMCE exists.\n *\/","file":"general-template.php","line":1734,"missingDoc":false,"filters":[],"uses":{"file_exists":[1737]},"used_by":[]},"the_search_query":{"doc":"\/**\n * Display the contents of the search query variable.\n *\n * The search query string is passed through {@link esc_attr()}\n * to ensure that it is safe for placing in an html attribute.\n *\n * @uses esc_attr()\n * @since 2.1.0\n *\/","file":"general-template.php","line":1843,"missingDoc":false,"filters":["'the_search_query'"],"uses":{"esc_attr":[1844],"get_search_query":[1844]},"used_by":[]},"paginate_links":{"doc":"\/**\n * Retrieve paginated link for archive post pages.\n *\n * Technically, the function can be used to create paginated link list for any\n * area. The 'base' argument is used to reference the url, which will be used to\n * create the paginated links. The 'format' argument is then used for replacing\n * the page number. It is however, most likely and by default, to be used on the\n * archive post pages.\n *\n * The 'type' argument controls format of the returned value. The default is\n * 'plain', which is just a string with the links separated by a newline\n * character. The other possible values are either 'array' or 'list'. The\n * 'array' value will return an array of the paginated link list to offer full\n * control of display. The 'list' value will place all of the paginated links in\n * an unordered HTML list.\n *\n * The 'total' argument is the total amount of pages and is an integer. The\n * 'current' argument is the current page number and is also an integer.\n *\n * An example of the 'base' argument is \"http:\/\/example.com\/all_posts.php%_%\"\n * and the '%_%' is required. The '%_%' will be replaced by the contents of in\n * the 'format' argument. An example for the 'format' argument is \"?page=%#%\"\n * and the '%#%' is also required. The '%#%' will be replaced with the page\n * number.\n *\n * You can include the previous and next links in the list by setting the\n * 'prev_next' argument to true, which it is by default. You can set the\n * previous text, by using the 'prev_text' argument. You can set the next text\n * by setting the 'next_text' argument.\n *\n * If the 'show_all' argument is set to true, then it will show all of the pages\n * instead of a short list of the pages near the current page. By default, the\n * 'show_all' is set to false and controlled by the 'end_size' and 'mid_size'\n * arguments. The 'end_size' argument is how many numbers on either the start\n * and the end list edges, by default is 1. The 'mid_size' argument is how many\n * numbers to either side of current page, but not including current page.\n *\n * It is possible to add query vars to the link by using the 'add_args' argument\n * and see {@link add_query_arg()} for more information.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override defaults.\n * @return array|string String of page links or array of page links.\n *\/","file":"general-template.php","line":1922,"missingDoc":false,"filters":["'paginate_links'","'paginate_links'","'paginate_links'"],"uses":{"__":[1930,1931,1978],"wp_parse_args":[1939],"extract":[1940],"is_array":[1949],"str_replace":[1956,1957,1970,1971,1984,1985],"add_query_arg":[1959,1973,1987],"esc_url":[1961,1975,1989],"number_format_i18n":[1964],"join":[1997,2001]},"used_by":{"paginate_comments_links":[1828]}},"wp_admin_css_color":{"doc":"\/**\n * Registers an admin colour scheme css file.\n *\n * Allows a plugin to register a new admin colour scheme. For example:\n * <code>\n * wp_admin_css_color('classic', __('Classic'), admin_url(\"css\/colors-classic.css\"),\n * array('#07273E', '#14568A', '#D54E21', '#2683AE'));\n * <\/code>\n *\n * @since 2.5.0\n *\n * @param string $key The unique key for this theme.\n * @param string $name The name of the theme.\n * @param string $url The url of the css file containing the colour scheme.\n * @param array $colors Optional An array of CSS color definitions which are used to give the user a feel for the theme.\n *\/","file":"general-template.php","line":2023,"missingDoc":false,"filters":[],"uses":[],"used_by":{"register_admin_color_schemes":[2038,2040]}},"register_admin_color_schemes":{"doc":"\/**\n * Registers the default Admin color schemes\n *\n * @since 3.0.0\n *\/","file":"general-template.php","line":2037,"missingDoc":false,"filters":[],"uses":{"wp_admin_css_color":[2038,2040],"_x":[2038,2040],"admin_url":[2038,2040]},"used_by":[]},"wp_admin_css_uri":{"doc":"\/**\n * Display the URL of a WordPress admin CSS file.\n *\n * @see WP_Styles::_css_href and its style_loader_src filter.\n *\n * @since 2.3.0\n *\n * @param string $file file relative to wp-admin\/ without its \".css\" extension.\n *\/","file":"general-template.php","line":2053,"missingDoc":false,"filters":["'wp_admin_css_uri'"],"uses":{"admin_url":[2057],"defined":[2054],"add_query_arg":[2059],"get_bloginfo":[2059]},"used_by":{"wp_admin_css":[2102,2104]}},"wp_admin_css":{"doc":"\/**\n * Enqueues or directly prints a stylesheet link to the specified CSS file.\n *\n * \"Intelligently\" decides to enqueue or to print the CSS file. If the\n * 'wp_print_styles' action has *not* yet been called, the CSS file will be\n * enqueued. If the wp_print_styles action *has* been called, the CSS link will\n * be printed. Printing may be forced by passing true as the $force_echo\n * (second) parameter.\n *\n * For backward compatibility with WordPress 2.3 calling method: If the $file\n * (first) parameter does not correspond to a registered CSS file, we assume\n * $file is a file relative to wp-admin\/ without its \".css\" extension. A\n * stylesheet link to that generated URL is printed.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_styles WordPress Styles Object\n *\n * @param string $file Optional. Style handle name or file name (without \".css\" extension) relative\n * \t to wp-admin\/. Defaults to 'wp-admin'.\n * @param bool $force_echo Optional. Force the stylesheet link to be printed rather than enqueued.\n *\/","file":"general-template.php","line":2086,"missingDoc":false,"filters":["'wp_admin_css'","'wp_admin_css'"],"uses":{"is_a":[2088],"strpos":[2092],"substr":[2092],"wp_print_styles":[2096],"wp_enqueue_style":[2098],"did_action":[2095],"query":[2094],"esc_url":[2102,2104],"wp_admin_css_uri":[2102,2104],"function_exists":[2103],"is_rtl":[2103]},"used_by":{"__main":[19]}},"wp_generator":{"doc":"\/**\n * Display the XHTML generator that is generated on the wp_head hook.\n *\n * @since 2.5.0\n *\/","file":"general-template.php","line":2129,"missingDoc":false,"filters":["'wp_generator_type'"],"uses":{"the_generator":[2130]},"used_by":[]},"the_generator":{"doc":"\/**\n * Display the generator XML or Comment for RSS, ATOM, etc.\n *\n * Returns the correct generator type for the requested output format. Allows\n * for a plugin to filter generators overall the the_generator filter.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'the_generator' hook.\n *\n * @param string $type The type of generator to output - (html|xhtml|atom|rss2|rdf|comment|export).\n *\/","file":"general-template.php","line":2144,"missingDoc":false,"filters":["'the_generator'"],"uses":{"get_the_generator":[2145]},"used_by":{"wp_generator":[2130]}},"get_the_generator":{"doc":"\/**\n * Creates the generator XML or Comment for RSS, ATOM, etc.\n *\n * Returns the correct generator type for the requested output format. Allows\n * for a plugin to filter generators on an individual basis using the\n * 'get_the_generator_{$type}' filter.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'get_the_generator_$type' hook.\n *\n * @param string $type The type of generator to return - (html|xhtml|atom|rss2|rdf|comment|export).\n * @return string The HTML content for the generator.\n *\/","file":"general-template.php","line":2161,"missingDoc":false,"filters":["\"get_the_generator_{$type}\""],"uses":{"current_filter":[2164],"get_bloginfo":[2190,2193,2205],"get_bloginfo_rss":[2196,2199,2202,2208],"date":[2208]},"used_by":{"the_generator":[2145]}},"__checked_selected_helper":{"doc":"\/**\n * Private helper function for checked, selected, and disabled.\n *\n * Compares the first two arguments and if identical marks as $type\n *\n * @since 2.8.0\n * @access private\n *\n * @param mixed $helper One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @param string $type The type of checked|selected|disabled we are doing\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2276,"missingDoc":false,"filters":[],"uses":[],"used_by":{"checked":[2227],"selected":[2243],"disabled":[2259]}},"disabled":{"doc":"\/**\n * Outputs the html disabled attribute.\n *\n * Compares the first two arguments and if identical marks as disabled\n *\n * @since 3.0.0\n *\n * @param mixed $disabled One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2258,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2259]},"used_by":[]},"_wp_http_get_object":{"doc":"\/**\n * Returns the initialized WP_Http Object\n *\n * @since 2.7.0\n * @access private\n *\n * @return WP_Http HTTP Transport object.\n *\/","file":"http.php","line":22,"missingDoc":false,"filters":[],"uses":{"is_null":[25]},"used_by":{"wp_remote_request":[59],"wp_remote_get":[75],"wp_remote_post":[91],"wp_remote_head":[107],"wp_http_supports":[205]}},"wp_remote_retrieve_response_message":{"doc":"\/**\n * Retrieve only the response message from the raw response.\n *\n * Will return an empty array if incorrect parameter value is given.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string The response message. Empty string on incorrect parameter given.\n *\/","file":"http.php","line":172,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[173],"is_array":[173]},"used_by":[]},"wp_http_supports":{"doc":"\/**\n * Determines if there is an HTTP Transport that can process this request.\n *\n * @since 3.2.0\n *\n * @param array $capabilities Array of capabilities to test or a wp_remote_request() $args array.\n * @param string $url Optional. If given, will check if the URL requires SSL and adds that requirement to the capabilities array.\n *\n * @return bool\n *\/","file":"http.php","line":204,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[205],"wp_parse_args":[207],"count":[209,212],"array_combine":[213],"array_values":[213],"array_fill":[213],"array_filter":[212],"array_keys":[212],"parse_url":[217],"_get_first_available_transport":[223]},"used_by":[]},"get_http_origin":{"doc":"\/**\n * Get the HTTP Origin of the current request.\n *\n * @since 3.4.0\n *\n * @return string URL of the origin. Empty string if no origin.\n *\/","file":"http.php","line":233,"missingDoc":false,"filters":["'http_origin'"],"uses":[],"used_by":{"is_allowed_http_origin":[275],"send_origin_headers":[297]}},"get_allowed_http_origins":{"doc":"\/**\n * Retrieve list of allowed http origins.\n *\n * @since 3.4.0\n *\n * @return array Array of origin URLs.\n *\/","file":"http.php","line":248,"missingDoc":false,"filters":["'allowed_http_origins'"],"uses":{"parse_url":[249,250],"admin_url":[249],"home_url":[250],"array_unique":[253]},"used_by":{"is_allowed_http_origin":[277]}},"is_allowed_http_origin":{"doc":"\/**\n * Determines if the http origin is an authorized one.\n *\n * @since 3.4.0\n *\n * @param string Origin URL. If not provided, the value of get_http_origin() is used.\n * @return bool True if the origin is allowed. False otherwise.\n *\/","file":"http.php","line":271,"missingDoc":false,"filters":["'allowed_http_origin'"],"uses":{"get_http_origin":[275],"in_array":[277],"get_allowed_http_origins":[277]},"used_by":{"send_origin_headers":[299]}},"mce_escape":{"doc":"","file":"js\/tinymce\/langs\/wp-langs.php","line":10,"missingDoc":true,"filters":[],"uses":{"esc_js":[11]},"used_by":[]},"wp_mce_translation":{"doc":"","file":"js\/tinymce\/langs\/wp-langs.php","line":14,"missingDoc":true,"filters":[],"uses":{"__":[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,81,82,83,84,85,89,90,91,92,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95,95,95,95,95,96,96,96,96,96,96,96,100,104,108,109,113,114,115,116,117,121,122,126,130,131,135,139,143,144,148,152,156,157,158,159,160,161,165,169,170,171,172,173,177,178,179,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,206,210,214,215,219,223,227,231,232,233,234,235,236,237,238,239,240,244,248,249,250,251,252,253,254,255,256,257,261,265,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,501,502,503,504,505,506,507,508,509,510,511,512,513,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],"_x":[357,401],"json_encode":[554,555,556,557,558,559]},"used_by":{"__main":[564]}},"EnchantSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param String $lang Selected language code (like en_US or de_DE). Shortcodes like \"en\" and \"de\" work with enchant >= 1.4.1\n * @param Array $words Array of words to check.\n * @return Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/EnchantSpell.php","line":20,"missingDoc":false,"filters":[],"uses":{"enchant_broker_init":[21],"enchant_broker_request_dict":[24],"enchant_dict_check":[28],"trim":[30],"enchant_broker_free_dict":[35],"enchant_broker_dict_exists":[23],"enchant_broker_free":[39]},"used_by":[]},"EnchantSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions for a specific word.\n *\n * @param String $lang Selected language code (like en_US or de_DE). Shortcodes like \"en\" and \"de\" work with enchant >= 1.4.1\n * @param String $word Specific word to get suggestions for.\n * @return Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/EnchantSpell.php","line":49,"missingDoc":false,"filters":[],"uses":{"enchant_broker_init":[50],"enchant_broker_request_dict":[53],"enchant_dict_suggest":[54],"is_array":[57],"enchant_broker_free_dict":[60],"enchant_broker_dict_exists":[52],"enchant_broker_free":[65]},"used_by":[]},"GoogleSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":18,"missingDoc":false,"filters":[],"uses":{"implode":[19],"_getMatches":[20],"count":[23],"_unhtmlentities":[24],"mb_substr":[24]},"used_by":[]},"GoogleSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":36,"missingDoc":false,"filters":[],"uses":{"_getMatches":[39],"explode":[42],"utf8_encode":[42],"_unhtmlentities":[42],"count":[41]},"used_by":[]},"GoogleSpell::_getMatches":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":53,"missingDoc":true,"filters":[],"uses":{"preg_replace":[54,55],"strlen":[68],"curl_init":[79],"curl_setopt":[80,81,82,83],"curl_exec":[84],"curl_close":[85],"fsockopen":[88],"fwrite":[91],"feof":[95],"fgets":[96],"fclose":[98],"function_exists":[77],"preg_match_all":[105]},"used_by":[]},"GoogleSpell::_unhtmlentities":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":110,"missingDoc":true,"filters":[],"uses":{"preg_replace":[111,112],"get_html_translation_table":[114],"array_flip":[115],"strtr":[117]},"used_by":[]},"PSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":18,"missingDoc":false,"filters":[],"uses":{"_getPLink":[19],"utf8_encode":[24],"pspell_check":[23],"trim":[23]},"used_by":[]},"PSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":37,"missingDoc":false,"filters":[],"uses":{"pspell_suggest":[38],"_getPLink":[38],"count":[40],"utf8_encode":[41]},"used_by":[]},"PSpell::_getPLink":{"doc":"\/**\n * Opens a link for pspell.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":49,"missingDoc":false,"filters":[],"uses":{"throwError":[52,76],"function_exists":[51],"pspell_new":[55]},"used_by":[]},"PSpellShell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":18,"missingDoc":false,"filters":[],"uses":{"_getCMD":[19],"fwrite":[22,25],"fclose":[27],"throwError":[29],"fopen":[21],"shell_exec":[31],"unlink":[32],"preg_split":[35],"preg_match":[44],"utf8_encode":[47],"trim":[47]},"used_by":[]},"PSpellShell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":60,"missingDoc":false,"filters":[],"uses":{"_getCMD":[61],"mb_convert_encoding":[64],"mb_detect_encoding":[64],"utf8_encode":[66],"function_exists":[63],"fwrite":[69,70],"fclose":[71],"throwError":[73],"fopen":[68],"shell_exec":[75],"unlink":[76],"preg_split":[79],"preg_match":[88],"array_slice":[91],"explode":[91],"count":[93],"trim":[94]},"used_by":[]},"PSpellShell::_getCMD":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":103,"missingDoc":true,"filters":[],"uses":{"tempnam":[104],"preg_replace":[107],"strtolower":[107],"preg_match":[110],"php_uname":[110]},"used_by":[]},"SpellChecker::SpellChecker":{"doc":"\/**\n * Constructor.\n *\n * @param $config Configuration name\/value array.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":16,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::loopback":{"doc":"\/**\n * Simple loopback function everything that gets in will be send back.\n *\n * @param $args.. Arguments.\n * @return {Array} Array of all input arguments. \n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":26,"missingDoc":false,"filters":[],"uses":{"func_get_args":[27]},"used_by":[]},"SpellChecker::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":37,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":48,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::throwError":{"doc":"\/**\n * Throws an error message back to the user. This will stop all execution.\n *\n * @param {String} $str Message to send back to user.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":57,"missingDoc":false,"filters":[],"uses":{"addslashes":[58]},"used_by":[]},"Moxiecode_JSONReader::Moxiecode_JSONReader":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":32,"missingDoc":true,"filters":[],"uses":{"strlen":[34]},"used_by":[]},"Moxiecode_JSONReader::getToken":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":41,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getLocation":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":45,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getTokenName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":49,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getValue":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":85,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::readToken":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":89,"missingDoc":true,"filters":[],"uses":{"read":[90],"readAway":[99,106,119,126],"array_pop":[103,123],"_readString":[136],"_readNull":[140],"_readBool":[145],"_readNumber":[150],"is_numeric":[149]},"used_by":[]},"Moxiecode_JSONReader::_readBool":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":159,"missingDoc":true,"filters":[],"uses":{"skip":[164,166],"readAway":[168]},"used_by":[]},"Moxiecode_JSONReader::_readNull":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":176,"missingDoc":true,"filters":[],"uses":{"skip":[180],"readAway":[181]},"used_by":[]},"Moxiecode_JSONReader::_readString":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":189,"missingDoc":true,"filters":[],"uses":{"peek":[194],"read":[198,201,224,239,246],"_int2utf8":[224],"hexdec":[224],"readAway":[254]},"used_by":[]},"Moxiecode_JSONReader::_int2utf8":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":270,"missingDoc":true,"filters":[],"uses":{"intval":[271],"chr":[275,278,281,281,284,284,284,287,287,287,287]},"used_by":[]},"Moxiecode_JSONReader::_readNumber":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":291,"missingDoc":true,"filters":[],"uses":{"peek":[298],"read":[303],"is_numeric":[299],"readAway":[308],"floatval":[312],"intval":[314]},"used_by":[]},"Moxiecode_JSONReader::readAway":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":322,"missingDoc":true,"filters":[],"uses":{"peek":[323],"read":[327]},"used_by":[]},"Moxiecode_JSONReader::read":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":331,"missingDoc":true,"filters":[],"uses":{"substr":[334]},"used_by":[]},"Moxiecode_JSONReader::skip":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":345,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::peek":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":349,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::Moxiecode_JSON":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":363,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::decode":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":366,"missingDoc":true,"filters":[],"uses":{"readValue":[369]},"used_by":[]},"Moxiecode_JSON::readValue":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":372,"missingDoc":true,"filters":[],"uses":{"readToken":[379],"getToken":[380],"getLocation":[386,413,418],"getValue":[388,392,396,401],"addArray":[407,409],"count":[421,420],"array_pop":[422]},"used_by":[]},"Moxiecode_JSON::addArray":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":432,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::getDelim":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":444,"missingDoc":true,"filters":[],"uses":{"getLocation":[445]},"used_by":[]},"Moxiecode_JSON::encode":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":456,"missingDoc":true,"filters":[],"uses":{"gettype":[457],"encodeString":[472],"_encodeArray":[475,478],"get_object_vars":[478]},"used_by":[]},"Moxiecode_JSON::encodeString":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":484,"missingDoc":true,"filters":[],"uses":{"strlen":[489],"ord":[524,527,531,531,535,535,535,539,539,539,539,543,543,543,543,543],"pack":[527,531,535,539,543],"sprintf":[529,533,537,541,545],"bin2hex":[529,533,537,541,545],"_utf82utf16":[529,533,537,541,545],"preg_match":[486]},"used_by":[]},"Moxiecode_JSON::_utf82utf16":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":557,"missingDoc":true,"filters":[],"uses":{"mb_convert_encoding":[559],"function_exists":[558],"strlen":[561],"chr":[566,566,569,569],"ord":[566,566,566,569,569,569,569]},"used_by":[]},"Moxiecode_JSON::_encodeArray":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":575,"missingDoc":true,"filters":[],"uses":{"array_keys":[579],"count":[580,587],"encodeString":[582],"encode":[582,585],"is_int":[581]},"used_by":[]},"Moxiecode_Logger::Moxiecode_Logger":{"doc":"\/**\n * Constructs a new logger instance.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":34,"missingDoc":false,"filters":[],"uses":{"setMaxSize":[37]},"used_by":[]},"Moxiecode_Logger::setLevel":{"doc":"\/**\n * Sets the current log level, use the MC_LOGGER constants.\n *\n * @param int $level Log level instance for example MC_LOGGER_DEBUG.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":48,"missingDoc":false,"filters":[],"uses":{"strtolower":[50],"is_string":[49]},"used_by":[]},"Moxiecode_Logger::getLevel":{"doc":"\/**\n * Returns the current log level for example MC_LOGGER_DEBUG.\n *\n * @return int Current log level for example MC_LOGGER_DEBUG.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":85,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setPath":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":89,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getPath":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":93,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setFileName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":97,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getFileName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":101,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setFormat":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":105,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getFormat":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":109,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setMaxSize":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":113,"missingDoc":true,"filters":[],"uses":{"intval":[115],"preg_replace":[115],"strpos":[118,122],"strtolower":[118,122]},"used_by":[]},"Moxiecode_Logger::getMaxSize":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":129,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setMaxFiles":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":133,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getMaxFiles":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":137,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::debug":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":141,"missingDoc":true,"filters":[],"uses":{"func_get_args":[142],"_logMsg":[143],"implode":[143]},"used_by":[]},"Moxiecode_Logger::info":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":146,"missingDoc":true,"filters":[],"uses":{"func_get_args":[147],"_logMsg":[148],"implode":[148]},"used_by":[]},"Moxiecode_Logger::warn":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":151,"missingDoc":true,"filters":[],"uses":{"func_get_args":[152],"_logMsg":[153],"implode":[153]},"used_by":[]},"Moxiecode_Logger::error":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":156,"missingDoc":true,"filters":[],"uses":{"func_get_args":[157],"_logMsg":[158],"implode":[158]},"used_by":[]},"Moxiecode_Logger::fatal":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":161,"missingDoc":true,"filters":[],"uses":{"func_get_args":[162],"_logMsg":[163],"implode":[163]},"used_by":[]},"Moxiecode_Logger::isDebugEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":166,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isInfoEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":170,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isWarnEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":174,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isErrorEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":178,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isFatalEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":182,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::_logMsg":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":186,"missingDoc":true,"filters":[],"uses":{"toOSPath":[192,235,236,242,245],"str_replace":[216,219,220,221],"strtolower":[216,220],"date":[219],"filesize":[226],"strlen":[228],"file_exists":[225,238,246],"rename":[239,242],"unlink":[247],"fputs":[252],"fflush":[253],"fclose":[254],"fopen":[251]},"used_by":[]},"Moxiecode_Logger::toOSPath":{"doc":"\/**\n * Converts a Unix path to OS specific path.\n *\n * @param String $path Unix path to convert.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":263,"missingDoc":false,"filters":[],"uses":{"str_replace":[264]},"used_by":[]},"getRequestParam":{"doc":"\/**\n * Returns an request value by name without magic quoting.\n *\n * @param String $name Name of parameter to get.\n * @param String $default_value Default value to return if value not found.\n * @return String request value by name without magic quoting or default value.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":28,"missingDoc":false,"filters":[],"uses":{"is_array":[32]},"used_by":{"__main":[25]}},"getLogger":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":44,"missingDoc":true,"filters":[],"uses":{"getLogger":[48],"setPath":[54],"dirname":[54],"setMaxSize":[55],"setMaxFiles":[56],"setFormat":[57]},"used_by":{"getLogger":[48],"debug":[66],"info":[73],"error":[80],"warn":[87],"fatal":[94]}},"debug":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":63,"missingDoc":true,"filters":[],"uses":{"func_get_args":[64],"getLogger":[66],"debug":[67],"implode":[67]},"used_by":{"debug":[67],"fetch_rss":[432,451,474,484,513],"RSSCache::get":[744]}},"info":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":70,"missingDoc":true,"filters":[],"uses":{"func_get_args":[71],"getLogger":[73],"info":[74],"implode":[74]},"used_by":{"info":[74]}},"warn":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":84,"missingDoc":true,"filters":[],"uses":{"func_get_args":[85],"getLogger":[87],"warn":[88],"implode":[88]},"used_by":{"warn":[88]}},"fatal":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":91,"missingDoc":true,"filters":[],"uses":{"func_get_args":[92],"getLogger":[94],"fatal":[95],"implode":[95]},"used_by":{"fatal":[95]}},"get_file":{"doc":"","file":"js\/tinymce\/wp-tinymce.php","line":11,"missingDoc":true,"filters":[],"uses":{"realpath":[14],"function_exists":[13],"is_file":[16],"file_get_contents":[19]},"used_by":{"__main":[35,36,30]}},"wp_kses_array_lc":{"doc":"\/**\n * Goes through an array and changes the keys to all lower case.\n *\n * @since 1.0.0\n *\n * @param array $inarray Unfiltered array\n * @return array Fixed array with all lowercase keys\n *\/","file":"kses.php","line":998,"missingDoc":false,"filters":[],"uses":{"strtolower":[1002,1006]},"used_by":{"__main":[452,453]}},"wp_kses_no_null":{"doc":"\/**\n * Removes any null characters in $string.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":967,"missingDoc":false,"filters":[],"uses":{"preg_replace":[968,969]},"used_by":{"wp_kses":[479],"wp_kses_bad_protocol":[945],"wp_kses_bad_protocol_once2":[1087],"safecss_filter_attr":[1404],"wp_sanitize_redirect":[891],"get_the_content":[202]}},"wp_kses_js_entities":{"doc":"\/**\n * Removes the HTML JavaScript entities found in early versions of Netscape 4.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":1022,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1023]},"used_by":{"wp_kses":[480]}},"wp_kses_hook":{"doc":"\/**\n * You add any kses hooks here.\n *\n * There is currently only one kses WordPress hook and it is called here. All\n * parameters are passed to the hooks and expected to receive a string.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter through kses\n * @param array $allowed_html List of allowed HTML elements\n * @param array $allowed_protocols Allowed protocol in links\n * @return string Filtered content through 'pre_kses' hook\n *\/","file":"kses.php","line":536,"missingDoc":false,"filters":["'pre_kses'"],"uses":[],"used_by":{"wp_kses":[482]}},"wp_kses_split":{"doc":"\/**\n * Searches for HTML tags, no matter how malformed.\n *\n * It also matches stray \">\" characters.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Content with fixed HTML tags\n *\/","file":"kses.php","line":564,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[568]},"used_by":{"wp_kses":[483]}},"wp_kses_allowed_html":{"doc":"\/**\n * Return a list of allowed tags and attributes for a given context.\n *\n * @since 3.5.0\n *\n * @param string $context The context for which to retrieve tags. Allowed values are\n * post | strip | data | entities or the name of a field filter such as pre_user_description.\n * @return array List of allowed tags and their allowed attributes.\n *\/","file":"kses.php","line":495,"missingDoc":false,"filters":["'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'"],"uses":{"is_array":[498]},"used_by":{"wp_kses_split2":[633],"wp_kses_attr":[667]}},"wp_kses_version":{"doc":"\/**\n * This function returns kses' version number.\n *\n * @since 1.0.0\n *\n * @return string KSES Version Number\n *\/","file":"kses.php","line":548,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_wp_kses_split_callback":{"doc":"\/**\n * Callback for wp_kses_split.\n *\n * @since 3.1.0\n * @access private\n *\/","file":"kses.php","line":577,"missingDoc":false,"filters":[],"uses":{"wp_kses_split2":[579]},"used_by":[]},"wp_kses_split2":{"doc":"\/**\n * Callback for wp_kses_split for fixing malformed HTML tags.\n *\n * This function does a lot of work. It rejects some very malformed things like\n * <:::>. It returns an empty string, if the element isn't allowed (look ma, no\n * strip_tags()!). Otherwise it splits the tag into an element and an attribute\n * list.\n *\n * After the tag is split into an element and an attribute list, it is run\n * through another filter which will remove illegal attributes and once that is\n * completed, will be returned.\n *\n * @access private\n * @since 1.0.0\n * @uses wp_kses_attr()\n *\n * @param string $string Content to filter\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Fixed HTML element\n *\/","file":"kses.php","line":603,"missingDoc":false,"filters":[],"uses":{"wp_kses_stripslashes":[604],"substr":[606,610],"str_replace":[611],"wp_kses":[612],"preg_replace":[617,619],"preg_match":[624],"trim":[628],"wp_kses_allowed_html":[633],"is_array":[632],"strtolower":[635],"wp_kses_attr":[643]},"used_by":{"_wp_kses_split_callback":[579]}},"wp_kses_stripslashes":{"doc":"\/**\n * Strips slashes from in front of quotes.\n *\n * This function changes the character sequence \\\" to just \". It leaves all\n * other slashes alone. It's really weird, but the quoting from\n * preg_replace(\/\/e) seems to require this.\n *\n * @since 1.0.0\n *\n * @param string $string String to strip slashes\n * @return string Fixed string with quoted slashes\n *\/","file":"kses.php","line":986,"missingDoc":false,"filters":[],"uses":{"preg_replace":[987]},"used_by":{"wp_kses_split2":[604]}},"wp_kses_attr":{"doc":"\/**\n * Removes all attributes, if none are allowed for this element.\n *\n * If some are allowed it calls wp_kses_hair() to split them further, and then\n * it builds up new HTML code from the data that kses_hair() returns. It also\n * removes \"<\" and \">\" characters, if there are any left. One more thing it does\n * is to check if the tag has a closing XHTML slash, and if it does, it puts one\n * in the returned code as well.\n *\n * @since 1.0.0\n *\n * @param string $element HTML element\/tag\n * @param string $attr HTML attributes from HTML element to closing HTML element tag\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Sanitized HTML element\n *\/","file":"kses.php","line":663,"missingDoc":false,"filters":[],"uses":{"wp_kses_allowed_html":[667],"is_array":[666,704],"preg_match":[670],"strtolower":[674,674,684,686,689,693],"count":[674],"wp_kses_hair":[678],"safecss_filter_attr":[695],"str_replace":[701],"wp_kses_check_attr_val":[712],"preg_replace":[724]},"used_by":{"wp_kses_split2":[643]}},"wp_kses_hair":{"doc":"\/**\n * Builds an attribute list from string containing attributes.\n *\n * This function does a lot of work. It parses an attribute list into an array\n * with attribute data, and tries to do the right thing even if it gets weird\n * input. It will add quotes around attribute values that don't have any quotes\n * or apostrophes around them, to make it easier to produce HTML code that will\n * conform to W3C's HTML specification. It will also remove bad URL protocols\n * from attribute values. It also reduces duplicate attributes by using the\n * attribute defined first (foo='bar' foo='baz' will result in foo='bar').\n *\n * @since 1.0.0\n *\n * @param string $attr Attribute list from HTML element to closing HTML element tag\n * @param array $allowed_protocols Allowed protocols to keep\n * @return array List of attributes after parsing\n *\/","file":"kses.php","line":746,"missingDoc":false,"filters":[],"uses":{"strlen":[754],"preg_replace":[763,774,785,804,820,837],"preg_match":[760,770,778,792,808,824],"array_key_exists":[782,799,815,831,850],"wp_kses_bad_protocol":[797,813,829],"in_array":[796,812,828],"strtolower":[796,812,828],"wp_kses_html_error":[845]},"used_by":{"wp_kses_attr":[678]}},"safecss_filter_attr":{"doc":"\/**\n * Inline CSS filter\n *\n * @since 2.8.1\n *\/","file":"kses.php","line":1400,"missingDoc":false,"filters":["'safe_style_css'"],"uses":{"_deprecated_argument":[1402],"wp_kses_no_null":[1404],"str_replace":[1405],"preg_match":[1407],"explode":[1410,1435],"trim":[1410,1430,1436],"in_array":[1436],"strpos":[1432]},"used_by":{"wp_kses_attr":[695]}},"wp_kses_check_attr_val":{"doc":"\/**\n * Performs different checks for attribute values.\n *\n * The currently implemented checks are \"maxlen\", \"minlen\", \"maxval\", \"minval\"\n * and \"valueless\".\n *\n * @since 1.0.0\n *\n * @param string $value Attribute value\n * @param string $vless Whether the value is valueless. Use 'y' or 'n'\n * @param string $checkname What $checkvalue is checking for.\n * @param mixed $checkvalue What constraint the value should pass\n * @return bool Whether check passes\n *\/","file":"kses.php","line":872,"missingDoc":false,"filters":[],"uses":{"strtolower":[875,922],"strlen":[881,889],"preg_match":[900,910]},"used_by":{"wp_kses_attr":[712]}},"wp_kses_html_error":{"doc":"\/**\n * Handles parsing errors in wp_kses_hair().\n *\n * The general plan is to remove everything to and including some whitespace,\n * but it deals with quotes and apostrophes as well.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":1037,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1038]},"used_by":{"wp_kses_hair":[845]}},"wp_kses_bad_protocol_once":{"doc":"\/**\n * Sanitizes content from bad protocols and other characters.\n *\n * This function searches for URL protocols at the beginning of $string, while\n * handling whitespace and HTML entities.\n *\n * @since 1.0.0\n *\n * @param string $string Content to check for bad protocols\n * @param string $allowed_protocols Allowed protocols\n * @return string Sanitized content\n *\/","file":"kses.php","line":1053,"missingDoc":false,"filters":[],"uses":{"preg_split":[1054],"trim":[1056],"wp_kses_bad_protocol_once2":[1057],"wp_kses_bad_protocol_once":[1061],"preg_match":[1055]},"used_by":{"wp_kses_bad_protocol":[950],"wp_kses_bad_protocol_once":[1061]}},"wp_kses_bad_protocol_once2":{"doc":"\/**\n * Callback for wp_kses_bad_protocol_once() regular expression.\n *\n * This function processes URL protocols, checks to see if they're in the\n * whitelist or not, and returns different data depending on the answer.\n *\n * @access private\n * @since 1.0.0\n *\n * @param string $string URI scheme to check against the whitelist\n * @param string $allowed_protocols Allowed protocols\n * @return string Sanitized content\n *\/","file":"kses.php","line":1084,"missingDoc":false,"filters":[],"uses":{"wp_kses_decode_entities":[1085],"preg_replace":[1086],"wp_kses_no_null":[1087],"strtolower":[1088,1092]},"used_by":{"wp_kses_bad_protocol_once":[1057]}},"wp_kses_decode_entities":{"doc":"\/**\n * Convert all entities to their character counterparts.\n *\n * This function decodes numeric HTML entities (A and A). It doesn't do\n * anything with other entities like ä, but we don't need them in the URL\n * protocol whitelisting system anyway.\n *\n * @since 1.0.0\n *\n * @param string $string Content to change entities\n * @return string Content after decoded entities\n *\/","file":"kses.php","line":1220,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[1221,1222]},"used_by":{"wp_kses_bad_protocol_once2":[1085]}},"wp_kses_named_entities":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() regular expression.\n *\n * This function only accepts valid named entity references, which are finite,\n * case-sensitive, and highly scrutinized by HTML and XML validators.\n *\n * @since 3.0.0\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1139,"missingDoc":false,"filters":[],"uses":{"in_array":[1146]},"used_by":[]},"wp_kses_normalize_entities2":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() regular expression.\n *\n * This function helps wp_kses_normalize_entities() to only accept 16-bit values\n * and nothing more for &#number; entities.\n *\n * @access private\n * @since 1.0.0\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1161,"missingDoc":false,"filters":[],"uses":{"str_pad":[1167],"ltrim":[1167],"valid_unicode":[1166]},"used_by":[]},"valid_unicode":{"doc":"\/**\n * Helper function to determine if a Unicode value is valid.\n *\n * @param int $i Unicode value\n * @return bool True if the value was a valid Unicode number\n *\/","file":"kses.php","line":1201,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_kses_normalize_entities2":[1166],"wp_kses_normalize_entities3":[1192]}},"wp_kses_normalize_entities3":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() for regular expression.\n *\n * This function helps wp_kses_normalize_entities() to only accept valid Unicode\n * numeric entities in hex form.\n *\n * @access private\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1187,"missingDoc":false,"filters":[],"uses":{"valid_unicode":[1192],"hexdec":[1192],"ltrim":[1192]},"used_by":[]},"_wp_kses_decode_entities_chr":{"doc":"\/**\n * Regex callback for wp_kses_decode_entities()\n *\n * @param array $match preg match\n * @return string\n *\/","file":"kses.php","line":1233,"missingDoc":false,"filters":[],"uses":{"chr":[1234]},"used_by":[]},"_wp_kses_decode_entities_chr_hexdec":{"doc":"\/**\n * Regex callback for wp_kses_decode_entities()\n *\n * @param array $match preg match\n * @return string\n *\/","file":"kses.php","line":1243,"missingDoc":false,"filters":[],"uses":{"chr":[1244],"hexdec":[1244]},"used_by":[]},"wp_filter_kses":{"doc":"\/**\n * Sanitize content with allowed HTML Kses rules.\n *\n * @since 1.0.0\n * @uses $allowedtags\n *\n * @param string $data Content to filter, expected to be escaped with slashes\n * @return string Filtered content\n *\/","file":"kses.php","line":1256,"missingDoc":false,"filters":[],"uses":{"addslashes":[1257],"wp_kses":[1257],"stripslashes":[1257],"current_filter":[1257]},"used_by":[]},"wp_filter_nohtml_kses":{"doc":"\/**\n * Strips all of the HTML in the content.\n *\n * @since 2.1.0\n *\n * @param string $data Content to strip all HTML from\n * @return string Filtered content without any HTML\n *\/","file":"kses.php","line":1311,"missingDoc":false,"filters":[],"uses":{"addslashes":[1312],"wp_kses":[1312],"stripslashes":[1312]},"used_by":[]},"kses_init_filters":{"doc":"\/**\n * Adds all Kses input form content filters.\n *\n * All hooks have default priority. The wp_filter_kses() function is added to\n * the 'pre_comment_content' and 'title_save_pre' hooks.\n *\n * The wp_filter_post_kses() function is added to the 'content_save_pre',\n * 'excerpt_save_pre', and 'content_filtered_save_pre' hooks.\n *\n * @since 2.0.0\n * @uses add_filter() See description for what functions are added to what hooks.\n *\/","file":"kses.php","line":1327,"missingDoc":false,"filters":[],"uses":{"add_filter":[1329,1333,1335,1338,1339,1340],"current_user_can":[1332]},"used_by":{"kses_init":[1389]}},"kses_remove_filters":{"doc":"\/**\n * Removes all Kses input form content filters.\n *\n * A quick procedural method to removing all of the filters that kses uses for\n * content in WordPress Loop.\n *\n * Does not remove the kses_init() function from 'init' hook (priority is\n * default). Also does not remove kses_init() function from 'set_current_user'\n * hook (priority is also default).\n *\n * @since 2.0.6\n *\/","file":"kses.php","line":1355,"missingDoc":false,"filters":[],"uses":{"remove_filter":[1357,1360,1361,1364,1365,1366]},"used_by":{"kses_init":[1386]}},"kses_init":{"doc":"\/**\n * Sets up most of the Kses filters for input form content.\n *\n * If you remove the kses_init() function from 'init' hook and\n * 'set_current_user' (priority is default), then none of the Kses filter hooks\n * will be added.\n *\n * First removes all of the Kses filters in case the current user does not need\n * to have Kses filter the content. If the user does not have unfiltered_html\n * capability, then Kses filters are added.\n *\n * @uses kses_remove_filters() Removes the Kses filters\n * @uses kses_init_filters() Adds the Kses filters back if the user\n *\t\tdoes not have unfiltered HTML capability.\n * @since 2.0.0\n *\/","file":"kses.php","line":1385,"missingDoc":false,"filters":[],"uses":{"kses_remove_filters":[1386],"kses_init_filters":[1389],"current_user_can":[1388]},"used_by":[]},"_wp_add_global_attributes":{"doc":"\/**\n * Helper function to add global attributes to a tag in the allowed html list.\n *\n * @since 3.5.0\n * @access private\n *\n * @param array $value An array of attributes.\n * @return array The array of attributes with global attributes added.\n *\/","file":"kses.php","line":1458,"missingDoc":false,"filters":[],"uses":{"array_merge":[1470],"is_array":[1469]},"used_by":[]},"get_translations_for_domain":{"doc":"\/**\n * Returns the Translations instance for a domain. If there isn't one,\n * returns empty Translations instance.\n *\n * @param string $domain\n * @return object A Translation instance\n *\/","file":"l10n.php","line":500,"missingDoc":false,"filters":[],"uses":[],"used_by":{"translate":[68],"translate_with_gettext_context":[81],"_n":[239],"_nx":[252]}},"translate_with_gettext_context":{"doc":"","file":"l10n.php","line":80,"missingDoc":true,"filters":["'gettext_with_context'"],"uses":{"get_translations_for_domain":[81],"translate":[82]},"used_by":{"_x":[190],"esc_attr_x":[209],"esc_html_x":[213],"translate_user_role":[531]}},"esc_html__":{"doc":"\/**\n * Retrieves the translation of $text and escapes it for safe use in HTML output.\n * If there is no translation, or the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @see esc_html()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":128,"missingDoc":false,"filters":[],"uses":{"esc_html":[129],"translate":[129]},"used_by":[]},"esc_html_e":{"doc":"\/**\n * Displays translated text that has been escaped for safe use in HTML output.\n *\n * @see translate() Echoes returned translate() string\n * @see esc_html()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":169,"missingDoc":false,"filters":[],"uses":{"esc_html":[170],"translate":[170]},"used_by":{"wp_print_media_templates":[180]}},"esc_attr_x":{"doc":"","file":"l10n.php","line":208,"missingDoc":true,"filters":[],"uses":{"esc_attr":[209],"translate_with_gettext_context":[209]},"used_by":[]},"esc_html_x":{"doc":"","file":"l10n.php","line":212,"missingDoc":true,"filters":[],"uses":{"esc_html":[213],"translate_with_gettext_context":[213]},"used_by":[]},"_nx":{"doc":"\/**\n * A hybrid of _n() and _x(). It supports contexts and plurals.\n *\n * @see _n()\n * @see _x()\n *\n *\/","file":"l10n.php","line":251,"missingDoc":false,"filters":["'ngettext_with_context'"],"uses":{"get_translations_for_domain":[252],"translate_plural":[253]},"used_by":{"translate_nooped_plural":[305]}},"_n_noop":{"doc":"\/**\n * Register plural strings in POT file, but don't translate them.\n *\n * Used when you want to keep structures with translatable plural strings and\n * use them later.\n *\n * Example:\n * $messages = array(\n * \t'post' => _n_noop('%s post', '%s posts'),\n * \t'page' => _n_noop('%s pages', '%s pages')\n * );\n * ...\n * $message = $messages[$type];\n * $usable_text = sprintf( translate_nooped_plural( $message, $count ), $count );\n *\n * @since 2.5\n * @param string $singular Single form to be i18ned\n * @param string $plural Plural form to be i18ned\n * @param string $domain Optional. The domain identifier the text will be retrieved in\n * @return array array($singular, $plural)\n *\/","file":"l10n.php","line":278,"missingDoc":false,"filters":[],"uses":[],"used_by":{"create_initial_post_types":[113,120,127,134,141,148],"get_post_mime_types":[2194,2195,2196]}},"_nx_noop":{"doc":"\/**\n * Register plural strings with context in POT file, but don't translate them.\n *\n * @see _n_noop()\n *\/","file":"l10n.php","line":287,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"translate_nooped_plural":{"doc":"\/**\n * Translate the result of _n_noop() or _nx_noop()\n *\n * @since 3.1\n * @param array $nooped_plural Array with singular, plural and context keys, usually the result of _n_noop() or _nx_noop()\n * @param int $count Number of objects\n * @param string $domain Optional. The domain identifier the text should be retrieved in. If $nooped_plural contains\n * \ta domain passed to _n_noop() or _nx_noop(), it will override this value.\n *\/","file":"l10n.php","line":300,"missingDoc":false,"filters":[],"uses":{"_nx":[305],"_n":[307]},"used_by":[]},"unload_textdomain":{"doc":"\/**\n * Unloads translations for a domain\n *\n * @since 3.0.0\n * @param string $domain Textdomain to be unloaded\n * @return bool Whether textdomain was unloaded\n *\/","file":"l10n.php","line":359,"missingDoc":false,"filters":["'override_unload_textdomain'","'unload_textdomain'"],"uses":[],"used_by":[]},"load_default_textdomain":{"doc":"\/**\n * Loads default translated strings based on locale.\n *\n * Loads the .mo file in WP_LANG_DIR constant path from WordPress root. The\n * translated (.mo) file is named based on the locale.\n *\n * @since 1.5.0\n *\/","file":"l10n.php","line":385,"missingDoc":false,"filters":[],"uses":{"get_locale":[386],"load_textdomain":[388,391,396,399],"is_multisite":[390],"defined":[390,395,398],"file_exists":[390],"is_admin":[395],"is_network_admin":[398]},"used_by":[]},"load_plugin_textdomain":{"doc":"\/**\n * Loads the plugin's translated strings.\n *\n * If the path is not given then it will be the root of the plugin directory.\n * The .mo file should be named based on the domain with a dash, and then the locale exactly.\n *\n * @since 1.5.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $abs_rel_path Optional. Relative path to ABSPATH of a folder,\n * \twhere the .mo file resides. Deprecated, but still functional until 2.7\n * @param string $plugin_rel_path Optional. Relative path to WP_PLUGIN_DIR. This is the preferred argument to use. It takes precedence over $abs_rel_path\n *\/","file":"l10n.php","line":416,"missingDoc":false,"filters":["'plugin_locale'"],"uses":{"get_locale":[417],"trim":[420,423],"_deprecated_argument":[422],"load_textdomain":[429]},"used_by":[]},"load_muplugin_textdomain":{"doc":"\/**\n * Load the translated strings for a plugin residing in the mu-plugins dir.\n *\n * @since 3.0.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $mu_plugin_rel_path Relative to WPMU_PLUGIN_DIR directory in which\n * the MO file resides. Defaults to empty string.\n *\/","file":"l10n.php","line":441,"missingDoc":false,"filters":["'plugin_locale'"],"uses":{"get_locale":[442],"ltrim":[443],"load_textdomain":[444],"trailingslashit":[444]},"used_by":[]},"load_child_theme_textdomain":{"doc":"\/**\n * Loads the child themes translated strings.\n *\n * If the current locale exists as a .mo file in the child themes root directory, it\n * will be included in the translated strings by the $domain.\n *\n * The .mo files must be named based on the locale exactly.\n *\n * @since 2.9.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n *\/","file":"l10n.php","line":487,"missingDoc":false,"filters":[],"uses":{"get_stylesheet_directory":[489],"load_theme_textdomain":[490]},"used_by":[]},"translate_user_role":{"doc":"\/**\n * Translates role name. Since the role names are in the database and\n * not in the source there are dummy gettext calls to get them into the POT\n * file and this function properly translates them back.\n *\n * The before_last_bar() call is needed, because older installs keep the roles\n * using the old context format: 'Role name|User role' and just skipping the\n * content after the last bar is easier than fixing them in the DB. New installs\n * won't suffer from that problem.\n *\/","file":"l10n.php","line":530,"missingDoc":false,"filters":[],"uses":{"translate_with_gettext_context":[531],"before_last_bar":[531]},"used_by":[]},"permalink_anchor":{"doc":"\/**\n * Display permalink anchor for current post.\n *\n * The permalink mode title will use the post title for the 'a' element 'id'\n * attribute. The id mode uses 'post-' with the post ID for the 'id' attribute.\n *\n * @since 0.71\n *\n * @param string $mode Permalink mode can be either 'title', 'id', or default, which is 'id'.\n *\/","file":"link-template.php","line":57,"missingDoc":false,"filters":[],"uses":{"get_post":[58],"strtolower":[59],"sanitize_title":[61]},"used_by":[]},"get_page_link":{"doc":"\/**\n * Retrieve the permalink for current page or page ID.\n *\n * Respects page_on_front. Use this one.\n *\n * @since 1.5.0\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional, defaults to false. Whether to keep page name.\n * @param bool $sample Optional, defaults to false. Is it a sample permalink.\n * @return string\n *\/","file":"link-template.php","line":240,"missingDoc":false,"filters":["'page_link'"],"uses":{"get_post":[241],"home_url":[244],"_get_page_link":[246],"get_option":[243,243]},"used_by":{"get_permalink":[107]}},"get_post_permalink":{"doc":"\/**\n * Retrieve the permalink for a post with a custom post type.\n *\n * @since 3.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $leavename Optional, defaults to false. Whether to keep post name.\n * @param bool $sample Optional, defaults to false. Is it a sample permalink.\n * @return string\n *\/","file":"link-template.php","line":178,"missingDoc":false,"filters":["'post_type_link'"],"uses":{"get_post":[181],"is_wp_error":[183],"get_extra_permastruct":[186],"in_array":[190],"get_post_type_object":[192],"get_page_uri":[197],"str_replace":[198],"home_url":[200,206],"user_trailingslashit":[200],"add_query_arg":[203,205]},"used_by":{"get_permalink":[111]}},"get_page_uri":{"doc":"\/**\n * Builds URI for a page.\n *\n * Sub pages will be in the \"directory\" under the parent page post name.\n *\n * @since 1.5.0\n *\n * @param mixed $page Page object or page ID.\n * @return string Page URI.\n *\/","file":"post.php","line":3596,"missingDoc":false,"filters":[],"uses":{"get_post":[3597,3602]},"used_by":{"get_post_permalink":[197],"_get_page_link":[275],"WP_Rewrite::page_uri_index":[839,843]}},"_get_page_link":{"doc":"\/**\n * Retrieve the page permalink.\n *\n * Ignores page_on_front. Internal use only.\n *\n * @since 2.1.0\n * @access private\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional. Leave name.\n * @param bool $sample Optional. Sample permalink.\n * @return string\n *\/","file":"link-template.php","line":264,"missingDoc":false,"filters":["'_get_page_link'"],"uses":{"get_post":[267],"in_array":[269],"get_page_permastruct":[271],"str_replace":[275],"get_page_uri":[275],"home_url":[278,281],"user_trailingslashit":[279]},"used_by":{"get_page_link":[246],"get_attachment_link":[308],"get_post_comments_feed_link":[476]}},"the_feed_link":{"doc":"\/**\n * Display the permalink for the feed type.\n *\n * @since 3.0.0\n *\n * @param string $anchor The link's anchor text.\n * @param string $feed Optional, defaults to default feed. Feed type.\n *\/","file":"link-template.php","line":414,"missingDoc":false,"filters":["'the_feed_link'"],"uses":{"esc_url":[415],"get_feed_link":[415]},"used_by":[]},"get_post_field":{"doc":"\/**\n * Retrieve data from a post field based on Post ID.\n *\n * Examples of the post field will be, 'post_type', 'post_status', 'post_content',\n * etc and based off of the post object property or key names.\n *\n * The context values are based off of the taxonomy filter functions and\n * supported values are found within those functions.\n *\n * @since 2.3.0\n * @uses sanitize_post_field() See for possible $context values.\n *\n * @param string $field Post field name\n * @param id $post Post ID\n * @param string $context Optional. How to filter the field. Default is display.\n * @return bool|string False on failure or returns the value in post field\n *\/","file":"post.php","line":724,"missingDoc":false,"filters":[],"uses":{"get_post":[725],"sanitize_post_field":[733]},"used_by":{"get_post_comments_feed_link":[485],"wp_update_nav_menu_item":[309],"wp_insert_post":[2722,2762,2780,2920]}},"edit_tag_link":{"doc":"\/**\n * Display or retrieve edit tag link with formatting.\n *\n * @since 2.7.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int|object $tag Tag object or ID\n * @return string HTML content.\n *\/","file":"link-template.php","line":668,"missingDoc":false,"filters":["'edit_tag_link'"],"uses":{"edit_term_link":[669]},"used_by":[]},"edit_term_link":{"doc":"\/**\n * Display or retrieve edit term link with formatting.\n *\n * @since 3.1.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param object $term Term object\n * @return string HTML content.\n *\/","file":"link-template.php","line":715,"missingDoc":false,"filters":["'edit_term_link'"],"uses":{"get_queried_object":[717],"is_null":[716],"get_taxonomy":[720],"current_user_can":[721],"__":[725],"get_edit_term_link":[727]},"used_by":{"edit_tag_link":[669]}},"get_search_link":{"doc":"\/**\n* Retrieve permalink for search.\n*\n* @since 3.0.0\n* @param string $query Optional. The query string to use. If empty the current query is used.\n* @return string\n*\/","file":"link-template.php","line":743,"missingDoc":false,"filters":["'search_link'"],"uses":{"get_search_query":[747],"stripslashes":[749],"get_search_permastruct":[751],"home_url":[754,759],"urlencode":[754,756],"str_replace":[757,758],"user_trailingslashit":[759]},"used_by":{"get_search_feed_link":[776]}},"get_post_type_archive_link":{"doc":"\/**\n * Retrieve the permalink for a post type archive.\n *\n * @since 3.1.0\n *\n * @param string $post_type Post type\n * @return string\n *\/","file":"link-template.php","line":832,"missingDoc":false,"filters":["'post_type_archive_link'"],"uses":{"get_post_type_object":[834],"home_url":[846,848],"user_trailingslashit":[846],"get_option":[840],"is_array":[840]},"used_by":{"get_post_type_archive_feed_link":[868]}},"edit_post_link":{"doc":"\/**\n * Display edit post link for post.\n *\n * @since 1.0.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int $id Optional. Post ID.\n *\/","file":"link-template.php","line":924,"missingDoc":false,"filters":["'edit_post_link'"],"uses":{"get_post":[925],"get_edit_post_link":[928],"__":[932],"get_post_type_object":[934],"esc_attr":[935]},"used_by":[]},"get_delete_post_link":{"doc":"\/**\n * Retrieve delete posts link for post.\n *\n * Can be used within the WordPress loop or outside of it, with any post type.\n *\n * @since 2.9.0\n *\n * @param int $id Optional. Post ID.\n * @param string $deprecated Not used.\n * @param bool $force_delete Whether to bypass trash and force deletion. Default is false.\n * @return string\n *\/","file":"link-template.php","line":951,"missingDoc":false,"filters":["'get_delete_post_link'"],"uses":{"_deprecated_argument":[953],"get_post":[955],"get_post_type_object":[958],"current_user_can":[962],"add_query_arg":[967],"admin_url":[967],"sprintf":[967],"wp_nonce_url":[969]},"used_by":[]},"get_edit_comment_link":{"doc":"\/**\n * Retrieve edit comment link.\n *\n * @since 2.3.0\n *\n * @param int $comment_id Optional. Comment ID.\n * @return string\n *\/","file":"link-template.php","line":980,"missingDoc":false,"filters":["'get_edit_comment_link'"],"uses":{"get_comment":[981],"current_user_can":[983],"admin_url":[986]},"used_by":{"edit_comment_link":[1009]}},"get_edit_bookmark_link":{"doc":"\/**\n * Display edit bookmark (literally a URL external to blog) link.\n *\n * @since 2.7.0\n *\n * @param int $link Optional. Bookmark ID.\n * @return string\n *\/","file":"link-template.php","line":1021,"missingDoc":false,"filters":["'get_edit_bookmark_link'"],"uses":{"get_bookmark":[1022],"current_user_can":[1024],"admin_url":[1027]},"used_by":{"edit_bookmark_link":[1050]}},"edit_bookmark_link":{"doc":"\/**\n * Display edit bookmark (literally a URL external to blog) link anchor content.\n *\n * @since 2.7.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int $bookmark Optional. Bookmark ID.\n *\/","file":"link-template.php","line":1041,"missingDoc":false,"filters":["'edit_bookmark_link'"],"uses":{"get_bookmark":[1042],"current_user_can":[1044],"__":[1048],"get_edit_bookmark_link":[1050],"esc_attr__":[1050]},"used_by":[]},"get_adjacent_post":{"doc":"\/**\n * Retrieve adjacent post.\n *\n * Can either be next or previous post.\n *\n * @since 2.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional. Whether to retrieve previous post.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1122,"missingDoc":false,"filters":["\"get_{$adjacent}_post_join\"","\"get_{$adjacent}_post_where\"","\"get_{$adjacent}_post_sort\""],"uses":{"get_post":[1125,1182,1193],"is_object_in_taxonomy":[1136],"wp_get_object_terms":[1138],"is_wp_error":[1139],"implode":[1141,1164],"_deprecated_argument":[1149],"sprintf":[1149],"__":[1149],"explode":[1150,1152],"strpos":[1148],"is_array":[1146],"array_map":[1156],"array_diff":[1159],"prepare":[1174],"md5":[1178],"wp_cache_get":[1179],"get_var":[1186],"wp_cache_set":[1190]},"used_by":{"get_previous_post":[1094],"get_next_post":[1107],"get_adjacent_post_rel_link":[1215],"adjacent_post_link":[1381]}},"get_adjacent_post_rel_link":{"doc":"\/**\n * Get adjacent post relational link.\n *\n * Can either be next or previous post relational link.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional, default is true. Whether to display link to previous or next post.\n * @return string\n *\/","file":"link-template.php","line":1211,"missingDoc":false,"filters":["'the_title'","\"{$adjacent}_post_rel_link\""],"uses":{"get_post":[1213,1212],"get_adjacent_post":[1215],"is_attachment":[1212],"__":[1221,1221],"mysql2date":[1225],"get_option":[1225],"str_replace":[1227,1228],"esc_attr":[1232],"get_permalink":[1233]},"used_by":{"adjacent_posts_rel_link":[1249,1250],"next_post_rel_link":[1276],"prev_post_rel_link":[1289]}},"adjacent_posts_rel_link":{"doc":"\/**\n * Display relational links for the posts adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1248,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1249,1250]},"used_by":{"adjacent_posts_rel_link_wp_head":[1263]}},"adjacent_posts_rel_link_wp_head":{"doc":"\/**\n * Display relational links for the posts adjacent to the current post for single post pages.\n *\n * This is meant to be attached to actions like 'wp_head'. Do not call this directly in plugins or theme templates.\n * @since 3.0.0\n *\n *\/","file":"link-template.php","line":1260,"missingDoc":false,"filters":[],"uses":{"is_singular":[1261],"is_attachment":[1261],"adjacent_posts_rel_link":[1263]},"used_by":[]},"next_post_rel_link":{"doc":"\/**\n * Display relational link for the next post adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1275,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1276]},"used_by":[]},"prev_post_rel_link":{"doc":"\/**\n * Display relational link for the previous post adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1288,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1289]},"used_by":[]},"previous_post_link":{"doc":"\/**\n * Display previous post link that is adjacent to the current post.\n *\n * @since 1.5.0\n *\n * @param string $format Optional. Link anchor format.\n * @param string $link Optional. Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1346,"missingDoc":false,"filters":[],"uses":{"adjacent_post_link":[1347]},"used_by":[]},"adjacent_post_link":{"doc":"\/**\n * Display adjacent post link.\n *\n * Can be either next post link or previous.\n *\n * @since 2.5.0\n *\n * @param string $format Link anchor format.\n * @param string $link Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional, default is true. Whether to display link to previous or next post.\n *\/","file":"link-template.php","line":1377,"missingDoc":false,"filters":["'the_title'","\"{$adjacent}_post_link\""],"uses":{"get_post":[1379,1379],"get_adjacent_post":[1381],"is_attachment":[1378],"__":[1389,1389],"mysql2date":[1392],"get_option":[1392],"get_permalink":[1395],"str_replace":[1396,1397,1400]},"used_by":{"previous_post_link":[1347],"next_post_link":[1361]}},"next_post_link":{"doc":"\/**\n * Display next post link that is adjacent to the current post.\n *\n * @since 1.5.0\n *\n * @param string $format Optional. Link anchor format.\n * @param string $link Optional. Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1360,"missingDoc":false,"filters":[],"uses":{"adjacent_post_link":[1361]},"used_by":[]},"get_pagenum_link":{"doc":"\/**\n* Retrieve links for page numbers.\n*\n* @since 1.5.0\n*\n* @param int $pagenum Optional. Page ID.\n* @param bool $escape Optional. Whether to escape the URL for display, with esc_url(). Defaults to true.\n* \tOtherwise, prepares the URL with esc_url_raw().\n* @return string\n*\/","file":"link-template.php","line":1418,"missingDoc":false,"filters":["'get_pagenum_link'"],"uses":{"remove_query_arg":[1423],"parse_url":[1425],"home_url":[1425],"preg_quote":[1427],"preg_replace":[1429,1430,1446,1451,1452],"trailingslashit":[1433,1455,1461],"get_bloginfo":[1433,1455],"add_query_arg":[1436],"preg_match":[1442],"ltrim":[1453],"using_index_permalinks":[1457],"user_trailingslashit":[1461],"using_permalinks":[1432],"is_admin":[1432],"esc_url":[1470],"esc_url_raw":[1472]},"used_by":{"get_next_posts_page_link":[1493],"get_previous_posts_page_link":[1574]}},"get_next_posts_page_link":{"doc":"\/**\n * Retrieve next posts page link.\n *\n * Backported from 2.1.3 to 2.0.10.\n *\n * @since 2.0.10\n *\n * @param int $max_page Optional. Max pages.\n * @return string\n *\/","file":"link-template.php","line":1485,"missingDoc":false,"filters":[],"uses":{"intval":[1491],"get_pagenum_link":[1493],"is_single":[1488]},"used_by":{"next_posts":[1506]}},"next_posts":{"doc":"\/**\n * Display or return the next posts page link.\n *\n * @since 0.71\n *\n * @param int $max_page Optional. Max pages.\n * @param boolean $echo Optional. Echo or return;\n *\/","file":"link-template.php","line":1505,"missingDoc":false,"filters":[],"uses":{"esc_url":[1506],"get_next_posts_page_link":[1506]},"used_by":{"get_next_posts_link":[1539]}},"get_next_posts_link":{"doc":"\/**\n * Return the next posts page link.\n *\n * @since 2.7.0\n *\n * @param string $label Content for link text.\n * @param int $max_page Optional. Max pages.\n * @return string|null\n *\/","file":"link-template.php","line":1523,"missingDoc":false,"filters":["'next_posts_link_attributes'"],"uses":{"intval":[1532],"__":[1535],"next_posts":[1539],"preg_replace":[1539],"is_single":[1537]},"used_by":{"next_posts_link":[1553],"get_posts_nav_link":[1658]}},"next_posts_link":{"doc":"\/**\n * Display the next posts page link.\n *\n * @since 0.71\n * @uses get_next_posts_link()\n *\n * @param string $label Content for link text.\n * @param int $max_page Optional. Max pages.\n *\/","file":"link-template.php","line":1552,"missingDoc":false,"filters":[],"uses":{"get_next_posts_link":[1553]},"used_by":[]},"get_previous_posts_page_link":{"doc":"\/**\n * Retrieve previous posts page link.\n *\n * Will only return string, if not on a single page or post.\n *\n * Backported to 2.0.10 from 2.1.3.\n *\n * @since 2.0.10\n *\n * @return string|null\n *\/","file":"link-template.php","line":1567,"missingDoc":false,"filters":[],"uses":{"intval":[1571],"get_pagenum_link":[1574],"is_single":[1570]},"used_by":{"previous_posts":[1586]}},"previous_posts":{"doc":"\/**\n * Display or return the previous posts page link.\n *\n * @since 0.71\n *\n * @param boolean $echo Optional. Echo or return;\n *\/","file":"link-template.php","line":1585,"missingDoc":false,"filters":[],"uses":{"esc_url":[1586],"get_previous_posts_page_link":[1586]},"used_by":{"get_previous_posts_link":[1610]}},"get_previous_posts_link":{"doc":"\/**\n * Return the previous posts page link.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Previous page link text.\n * @return string|null\n *\/","file":"link-template.php","line":1602,"missingDoc":false,"filters":["'previous_posts_link_attributes'"],"uses":{"__":[1606],"previous_posts":[1610],"preg_replace":[1610],"is_single":[1608]},"used_by":{"previous_posts_link":[1623],"get_posts_nav_link":[1656]}},"previous_posts_link":{"doc":"\/**\n * Display the previous posts page link.\n *\n * @since 0.71\n * @uses get_previous_posts_link()\n *\n * @param string $label Optional. Previous page link text.\n *\/","file":"link-template.php","line":1622,"missingDoc":false,"filters":[],"uses":{"get_previous_posts_link":[1623]},"used_by":[]},"get_posts_nav_link":{"doc":"\/**\n * Return post pages link navigation for previous and next pages.\n *\n * @since 2.8\n *\n * @param string|array $args Optional args.\n * @return string The posts link navigation.\n *\/","file":"link-template.php","line":1634,"missingDoc":false,"filters":[],"uses":{"__":[1642,1643],"wp_parse_args":[1645],"get_query_var":[1648],"get_previous_posts_link":[1656],"preg_replace":[1657],"get_next_posts_link":[1658],"is_singular":[1639]},"used_by":{"posts_nav_link":[1676]}},"posts_nav_link":{"doc":"\/**\n * Display post pages link navigation for previous and next pages.\n *\n * @since 0.71\n *\n * @param string $sep Optional. Separator for posts navigation links.\n * @param string $prelabel Optional. Label for previous pages.\n * @param string $nxtlabel Optional Label for next pages.\n *\/","file":"link-template.php","line":1674,"missingDoc":false,"filters":[],"uses":{"array_filter":[1675],"compact":[1675],"get_posts_nav_link":[1676]},"used_by":[]},"get_comments_pagenum_link":{"doc":"\/**\n * Retrieve comments page number link.\n *\n * @since 2.7.0\n *\n * @param int $pagenum Optional. Page number.\n * @return string\n *\/","file":"link-template.php","line":1687,"missingDoc":false,"filters":["'get_comments_pagenum_link'"],"uses":{"get_permalink":[1692],"user_trailingslashit":[1697,1703],"trailingslashit":[1697,1703],"add_query_arg":[1699,1705],"using_permalinks":[1696,1702],"get_option":[1694]},"used_by":{"get_next_comments_link":[1746],"get_previous_comments_link":[1783],"rel_canonical":[2323]}},"get_next_comments_link":{"doc":"\/**\n * Return the link to next comments page.\n *\n * @since 2.7.1\n *\n * @param string $label Optional. Label for link text.\n * @param int $max_page Optional. Max page.\n * @return string|null\n *\/","file":"link-template.php","line":1724,"missingDoc":false,"filters":["'next_comments_link_attributes'"],"uses":{"is_singular":[1727],"get_option":[1727],"get_query_var":[1730],"intval":[1732],"get_comment_pages_count":[1738],"__":[1744],"esc_url":[1746],"get_comments_pagenum_link":[1746],"preg_replace":[1746]},"used_by":{"next_comments_link":[1758]}},"next_comments_link":{"doc":"\/**\n * Display the link to next comments page.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Label for link text.\n * @param int $max_page Optional. Max page.\n *\/","file":"link-template.php","line":1757,"missingDoc":false,"filters":[],"uses":{"get_next_comments_link":[1758]},"used_by":{"__main":[31,40]}},"get_previous_comments_link":{"doc":"\/**\n * Return the previous comments page link.\n *\n * @since 2.7.1\n *\n * @param string $label Optional. Label for comments link text.\n * @return string|null\n *\/","file":"link-template.php","line":1769,"missingDoc":false,"filters":["'previous_comments_link_attributes'"],"uses":{"is_singular":[1770],"get_option":[1770],"get_query_var":[1773],"intval":[1775,1778],"__":[1781],"esc_url":[1783],"get_comments_pagenum_link":[1783],"preg_replace":[1783]},"used_by":{"previous_comments_link":[1794]}},"previous_comments_link":{"doc":"\/**\n * Display the previous comments page link.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Label for comments link text.\n *\/","file":"link-template.php","line":1793,"missingDoc":false,"filters":[],"uses":{"get_previous_comments_link":[1794]},"used_by":{"__main":[30,39]}},"paginate_comments_links":{"doc":"\/**\n * Create pagination links for the comments on the current post.\n *\n * @see paginate_links()\n * @since 2.7.0\n *\n * @param string|array $args Optional args. See paginate_links().\n * @return string Markup for pagination links.\n*\/","file":"link-template.php","line":1806,"missingDoc":false,"filters":[],"uses":{"is_singular":[1809],"get_option":[1809],"get_query_var":[1812],"get_comment_pages_count":[1815],"add_query_arg":[1817],"user_trailingslashit":[1825],"trailingslashit":[1825],"get_permalink":[1825],"using_permalinks":[1824],"wp_parse_args":[1827],"paginate_links":[1828]},"used_by":[]},"get_shortcut_link":{"doc":"\/**\n * Retrieve the Press This bookmarklet link.\n *\n * Use this in 'a' element 'href' attribute.\n *\n * @since 2.6.0\n *\n * @return string\n *\/","file":"link-template.php","line":1845,"missingDoc":false,"filters":["'shortcut_link'"],"uses":{"admin_url":[1854],"str_replace":[1862]},"used_by":[]},"get_site_url":{"doc":"\/**\n * Retrieve the site url for a given site.\n *\n * Returns the 'site_url' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'.\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":1963,"missingDoc":false,"filters":["'site_url'"],"uses":{"get_option":[1965,1968],"switch_to_blog":[1967],"restore_current_blog":[1969],"is_multisite":[1964],"set_url_scheme":[1972],"ltrim":[1975],"is_string":[1974],"strpos":[1974]},"used_by":{"site_url":[1945],"get_admin_url":[2006]}},"get_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for a given site.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2005,"missingDoc":false,"filters":["'admin_url'"],"uses":{"get_site_url":[2006],"ltrim":[2009],"is_string":[2008],"strpos":[2008]},"used_by":{"admin_url":[1991],"get_dashboard_url":[2275]}},"plugins_url":{"doc":"\/**\n * Retrieve the url to the plugins directory or to a specific file within that directory.\n * You can hardcode the plugin slug in $path or pass __FILE__ as a second argument to get the correct folder name.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the plugins url.\n * @param string $plugin Optional. The plugin file that you want to be relative to - i.e. pass in __FILE__\n * @return string Plugins url link with optional path appended.\n*\/","file":"link-template.php","line":2061,"missingDoc":false,"filters":["'plugins_url'"],"uses":{"str_replace":[2065],"preg_replace":[2066],"strpos":[2069,2083],"set_url_scheme":[2075],"dirname":[2078],"plugin_basename":[2078],"ltrim":[2080,2084],"is_string":[2077,2083]},"used_by":{"plugin_dir_url":[600],"get_theme_root_uri":[485]}},"plugin_basename":{"doc":"\/**\n * Gets the basename of a plugin.\n *\n * This method extracts the name of a plugin from its filename.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.5\n *\n * @access private\n *\n * @param string $file The filename of plugin.\n * @return string The name of a plugin.\n * @uses WP_PLUGIN_DIR\n *\/","file":"plugin.php","line":565,"missingDoc":false,"filters":[],"uses":{"str_replace":[566,568,570],"preg_replace":[567,569,571,572],"preg_quote":[572,572],"trim":[573]},"used_by":{"plugins_url":[2078],"register_activation_hook":[623],"register_deactivation_hook":[648],"register_uninstall_hook":[687]}},"rel_canonical":{"doc":"\/**\n * Output rel=canonical for singular queries.\n *\n * @package WordPress\n * @since 2.9.0\n*\/","file":"link-template.php","line":2312,"missingDoc":false,"filters":[],"uses":{"is_singular":[2313],"get_queried_object_id":[2317],"get_permalink":[2320],"get_comments_pagenum_link":[2323],"get_query_var":[2322]},"used_by":[]},"wp_shortlink_wp_head":{"doc":"\/**\n * Inject rel=shortlink into head if a shortlink is defined for the current page.\n *\n * Attached to the wp_head action.\n *\n * @since 3.0.0\n *\n * @uses wp_get_shortlink()\n *\/","file":"link-template.php","line":2379,"missingDoc":false,"filters":[],"uses":{"wp_get_shortlink":[2380],"esc_url":[2385]},"used_by":[]},"wp_shortlink_header":{"doc":"\/**\n * Send a Link: rel=shortlink header if a shortlink is defined for the current page.\n *\n * Attached to the wp action.\n *\n * @since 3.0.0\n *\n * @uses wp_get_shortlink()\n *\/","file":"link-template.php","line":2397,"missingDoc":false,"filters":[],"uses":{"headers_sent":[2398],"wp_get_shortlink":[2401],"header":[2406]},"used_by":[]},"the_shortlink":{"doc":"\/**\n * Display the Short Link for a Post\n *\n * Must be called from inside \"The Loop\"\n *\n * Call like the_shortlink(__('Shortlinkage FTW'))\n *\n * @since 3.0.0\n *\n * @param string $text Optional The link text or HTML to be displayed. Defaults to 'This is the short link.'\n * @param string $title Optional The tooltip for the link. Must be sanitized. Defaults to the sanitized post title.\n * @param string $before Optional HTML to display before the link.\n * @param string $after Optional HTML to display after the link.\n *\/","file":"link-template.php","line":2423,"missingDoc":false,"filters":["'the_shortlink'"],"uses":{"get_post":[2424],"__":[2427],"the_title_attribute":[2430],"wp_get_shortlink":[2432],"esc_url":[2435]},"used_by":[]},"wp_unregister_GLOBALS":{"doc":"\/**\n * Turn register globals off.\n *\n * @access private\n * @since 2.1.0\n * @return null Will return null if register_globals PHP directive was disabled\n *\/","file":"load.php","line":17,"missingDoc":false,"filters":[],"uses":{"ini_get":[18],"array_merge":[27],"is_array":[27],"in_array":[29]},"used_by":[]},"wp_fix_server_vars":{"doc":"\/**\n * Fix $_SERVER variables for various setups.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":41,"missingDoc":false,"filters":[],"uses":{"array_merge":[49],"php_sapi_name":[52],"preg_match":[52],"strpos":[82,86],"strlen":[82],"preg_replace":[92]},"used_by":[]},"wp_check_php_mysql_versions":{"doc":"\/**\n * Check for the required PHP version, and the MySQL extension or a database drop-in.\n *\n * Dies if requirements are not met.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":103,"missingDoc":false,"filters":[],"uses":{"phpversion":[105],"wp_load_translations_early":[107,112],"sprintf":[108],"__":[108,113],"version_compare":[106],"extension_loaded":[111],"file_exists":[111]},"used_by":[]},"wp_favicon_request":{"doc":"\/**\n * Don't load all of WordPress when handling a favicon.ico request.\n * Instead, send the headers for a zero-length favicon and bail.\n *\n * @since 3.0.0\n *\/","file":"load.php","line":123,"missingDoc":false,"filters":[],"uses":{"header":[125,126]},"used_by":[]},"wp_maintenance":{"doc":"\/**\n * Dies with a maintenance message when conditions are met.\n *\n * Checks for a file in the WordPress root directory named \".maintenance\".\n * This file will contain the variable $upgrading, set to the time the file\n * was created. If the file was created less than 10 minutes ago, WordPress\n * enters maintenance mode and displays a message.\n *\n * The default message can be replaced by using a drop-in (maintenance.php in\n * the wp-content directory).\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":145,"missingDoc":false,"filters":[],"uses":{"file_exists":[146,156],"defined":[146],"time":[153],"wp_load_translations_early":[161],"header":[166,167,168],"is_rtl":[171],"_e":[174,178]},"used_by":[]},"timer_start":{"doc":"\/**\n * PHP 5 standard microtime start capture.\n *\n * @access private\n * @since 0.71\n * @global float $timestart Seconds from when function is called.\n * @return bool Always returns true.\n *\/","file":"load.php","line":193,"missingDoc":false,"filters":[],"uses":{"microtime":[195]},"used_by":{"wpdb::query":[1193]}},"timer_stop":{"doc":"\/**\n * Return and\/or display the time from the page start to when function is called.\n *\n * You can get the results and print them by doing:\n * <code>\n * $nTimePageTookToExecute = timer_stop();\n * echo $nTimePageTookToExecute;\n * <\/code>\n *\n * Or instead, you can do:\n * <code>\n * timer_stop(1);\n * <\/code>\n * which will do what the above does. If you need the result, you can assign it to a variable, but\n * in most cases, you only need to echo it.\n *\n * @since 0.71\n * @global float $timestart Seconds from when timer_start() is called\n * @global float $timeend Seconds from when function is called\n *\n * @param int $display Use '0' or null to not echo anything and 1 to echo the total time\n * @param int $precision The amount of digits from the right of the decimal to display. Default is 3.\n * @return float The \"second.microsecond\" finished time calculation\n *\/","file":"load.php","line":223,"missingDoc":false,"filters":[],"uses":{"microtime":[225],"function_exists":[227],"number_format_i18n":[227],"number_format":[227]},"used_by":{"__main":[118,20],"wpdb::query":[1199]}},"wp_debug_mode":{"doc":"\/**\n * Sets PHP error handling and handles WordPress debug mode.\n *\n * Uses three constants: WP_DEBUG, WP_DEBUG_DISPLAY, and WP_DEBUG_LOG. All three can be\n * defined in wp-config.php. Example: <code> define( 'WP_DEBUG', true ); <\/code>\n *\n * WP_DEBUG_DISPLAY and WP_DEBUG_LOG perform no function unless WP_DEBUG is true.\n * WP_DEBUG defaults to false.\n *\n * When WP_DEBUG is true, all PHP notices are reported. WordPress will also display\n * notices, including one when a deprecated WordPress function, function argument,\n * or file is used. Deprecated code may be removed from a later version.\n *\n * It is strongly recommended that plugin and theme developers use WP_DEBUG in their\n * development environments.\n *\n * When WP_DEBUG_DISPLAY is true, WordPress will force errors to be displayed.\n * WP_DEBUG_DISPLAY defaults to true. Defining it as null prevents WordPress from\n * changing the global configuration setting. Defining WP_DEBUG_DISPLAY as false\n * will force errors to be hidden.\n *\n * When WP_DEBUG_LOG is true, errors will be logged to wp-content\/debug.log.\n * WP_DEBUG_LOG defaults to false.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":260,"missingDoc":false,"filters":[],"uses":{"error_reporting":[265,267,279],"defined":[264],"ini_set":[270,272,275,276]},"used_by":[]},"wp_set_lang_dir":{"doc":"\/**\n * Sets the location of the language directory.\n *\n * To set directory manually, define <code>WP_LANG_DIR<\/code> in wp-config.php.\n *\n * If the language directory exists within WP_CONTENT_DIR, that is used.\n * Otherwise if the language directory exists within WPINC, that's used.\n * Finally, if neither of the preceding directories are found,\n * WP_CONTENT_DIR\/languages is used.\n *\n * The WP_LANG_DIR constant was introduced in 2.1.0.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":298,"missingDoc":false,"filters":[],"uses":{"define":[301,304,307,310],"defined":[302,308,299],"file_exists":[300],"is_dir":[300,300]},"used_by":[]},"require_wp_db":{"doc":"\/**\n * Load the correct database class file.\n *\n * This function is used to load the database class file either at runtime or by\n * wp-admin\/setup-config.php. We must globalize $wpdb to ensure that it is\n * defined globally by the inline code in wp-db.php.\n *\n * @since 2.5.0\n * @global $wpdb WordPress Database Object\n *\/","file":"load.php","line":326,"missingDoc":false,"filters":[],"uses":{"file_exists":[330]},"used_by":[]},"wp_set_wpdb_vars":{"doc":"\/**\n * Sets the database table prefix and the format specifiers for database table columns.\n *\n * Columns not listed here default to %s.\n *\n * @see wpdb::$field_types Since 2.8.0\n * @see wpdb::prepare()\n * @see wpdb::insert()\n * @see wpdb::update()\n * @see wpdb::set_prefix()\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":353,"missingDoc":false,"filters":[],"uses":{"dead_db":[356],"set_prefix":[366],"wp_load_translations_early":[369],"wp_die":[370],"__":[370],"is_wp_error":[368]},"used_by":[]},"wp_start_object_cache":{"doc":"\/**\n * Starts the WordPress object cache.\n *\n * If an object-cache.php file exists in the wp-content directory,\n * it uses that drop-in as an external object cache.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":383,"missingDoc":false,"filters":[],"uses":{"file_exists":[388,396],"function_exists":[387,406,411],"wp_cache_switch_to_blog":[407],"wp_cache_init":[409],"wp_cache_add_global_groups":[412],"wp_cache_add_non_persistent_groups":[413]},"used_by":{"__main":[133]}},"wp_not_installed":{"doc":"\/**\n * Redirects to the installer if WordPress is not installed.\n *\n * Dies with an error message when multisite is enabled.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":425,"missingDoc":false,"filters":[],"uses":{"wp_die":[428],"__":[428],"is_blog_installed":[427,429],"defined":[427,429],"strpos":[429],"wp_guess_url":[431],"wp_redirect":[436],"is_multisite":[426]},"used_by":[]},"wp_get_mu_plugins":{"doc":"\/**\n * Returns array of must-use plugin files to be included in global scope.\n *\n * The default directory is wp-content\/mu-plugins. To change the default directory\n * manually, define <code>WPMU_PLUGIN_DIR<\/code> and <code>WPMU_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.0.0\n * @return array Files to include\n *\/","file":"load.php","line":452,"missingDoc":false,"filters":[],"uses":{"is_dir":[454],"opendir":[456],"readdir":[458],"substr":[459],"closedir":[462],"sort":[463]},"used_by":[]},"wp_get_active_and_valid_plugins":{"doc":"\/**\n * Returns array of plugin files to be included in global scope.\n *\n * The default directory is wp-content\/plugins. To change the default directory\n * manually, define <code>WP_PLUGIN_DIR<\/code> and <code>WP_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.0.0\n * @return array Files to include\n *\/","file":"load.php","line":479,"missingDoc":false,"filters":[],"uses":{"get_option":[481,484],"_deprecated_file":[485],"array_unshift":[486],"file_exists":[484,497],"defined":[489],"is_multisite":[492],"wp_get_active_network_plugins":[492],"validate_file":[495],"substr":[496],"in_array":[499]},"used_by":[]},"wp_get_active_network_plugins":{"doc":"\/**\n * Returns array of network plugin files to be included in global scope.\n *\n * The default directory is wp-content\/plugins. To change the default directory\n * manually, define <code>WP_PLUGIN_DIR<\/code> and <code>WP_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.1.0\n * @return array Files to include\n *\/","file":"ms-load.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_site_option":[40],"array_keys":[45],"sort":[46],"validate_file":[49],"substr":[50],"file_exists":[51]},"used_by":{"wp_get_active_and_valid_plugins":[492]}},"wp_set_internal_encoding":{"doc":"\/**\n * Sets internal encoding using mb_internal_encoding().\n *\n * In most cases the default internal encoding is latin1, which is of no use,\n * since we want to use the mb_ functions for utf-8 strings.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":515,"missingDoc":false,"filters":[],"uses":{"mb_internal_encoding":[518,517],"get_option":[517],"function_exists":[516]},"used_by":[]},"wp_magic_quotes":{"doc":"\/**\n * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.\n *\n * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,\n * or $_ENV are needed, use those superglobals directly.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":531,"missingDoc":false,"filters":[],"uses":{"stripslashes_deep":[534,535,536],"get_magic_quotes_gpc":[533],"add_magic_quotes":[540,541,542,543],"array_merge":[546]},"used_by":[]},"shutdown_action_hook":{"doc":"\/**\n * Runs just before PHP shuts down execution.\n *\n * @access private\n * @since 1.2.0\n *\/","file":"load.php","line":555,"missingDoc":false,"filters":["'shutdown'"],"uses":{"wp_cache_close":[557]},"used_by":[]},"wp_clone":{"doc":"\/**\n * Copy an object.\n *\n * @since 2.7.0\n * @deprecated 3.2\n *\n * @param object $object The object to clone\n * @return object The cloned object\n *\/","file":"load.php","line":570,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::init":{"doc":"\/**\n * Sets up the translated strings and object properties.\n *\n * The method creates the translatable strings for various\n * calendar elements. Which allows for specifying locale\n * specific calendar names and text direction.\n *\n * @since 2.1.0\n * @access private\n *\/","file":"locale.php","line":97,"missingDoc":false,"filters":[],"uses":{"__":[99,100,101,102,103,104,105,109,109,110,110,111,111,112,112,113,113,114,114,115,115,122,122,123,123,124,124,125,125,126,126,127,127,128,128,131,132,133,134,135,136,137,138,139,140,141,142,146,146,147,147,148,148,149,149,150,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,164,165,166,167,173,177],"preg_replace":[118,160],"_x":[184]},"used_by":[]},"WP_Locale::get_weekday":{"doc":"\/**\n * Retrieve the full translated weekday word.\n *\n * Week starts on translated Sunday and can be fetched\n * by using 0 (zero). So the week starts with 0 (zero)\n * and ends on Saturday with is fetched by using 6 (six).\n *\n * @since 2.1.0\n * @access public\n *\n * @param int $weekday_number 0 for Sunday through 6 Saturday\n * @return string Full translated weekday\n *\/","file":"locale.php","line":201,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_weekday_initial":{"doc":"\/**\n * Retrieve the translated weekday initial.\n *\n * The weekday initial is retrieved by the translated\n * full weekday word. When translating the weekday initial\n * pay attention to make sure that the starting letter does\n * not conflict.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $weekday_name\n * @return string\n *\/","file":"locale.php","line":219,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_weekday_abbrev":{"doc":"\/**\n * Retrieve the translated weekday abbreviation.\n *\n * The weekday abbreviation is retrieved by the translated\n * full weekday word.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $weekday_name Full translated weekday word\n * @return string Translated weekday abbreviation\n *\/","file":"locale.php","line":235,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_month":{"doc":"\/**\n * Retrieve the full translated month by month number.\n *\n * The $month_number parameter has to be a string\n * because it must have the '0' in front of any number\n * that is less than 10. Starts from '01' and ends at\n * '12'.\n *\n * You can use an integer instead and it will add the\n * '0' before the numbers less than 10 for you.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string|int $month_number '01' through '12'\n * @return string Translated full month name\n *\/","file":"locale.php","line":256,"missingDoc":false,"filters":[],"uses":{"zeroise":[257]},"used_by":[]},"WP_Locale::get_month_abbrev":{"doc":"\/**\n * Retrieve translated version of month abbreviation string.\n *\n * The $month_name parameter is expected to be the translated or\n * translatable version of the month.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $month_name Translated month to get abbreviated version\n * @return string Translated abbreviated month\n *\/","file":"locale.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_meridiem":{"doc":"\/**\n * Retrieve translated version of meridiem string.\n *\n * The $meridiem parameter is expected to not be translated.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $meridiem Either 'am', 'pm', 'AM', or 'PM'. Not translated version.\n * @return string Translated version\n *\/","file":"locale.php","line":287,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::register_globals":{"doc":"\/**\n * Global variables are deprecated. For backwards compatibility only.\n *\n * @deprecated For backwards compatibility only.\n * @access private\n *\n * @since 2.1.0\n *\/","file":"locale.php","line":299,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::__construct":{"doc":"\/**\n * Constructor which calls helper methods to set up object variables\n *\n * @uses WP_Locale::init()\n * @uses WP_Locale::register_globals()\n * @since 2.1.0\n *\n * @return WP_Locale\n *\/","file":"locale.php","line":316,"missingDoc":false,"filters":[],"uses":{"init":[317],"register_globals":[318]},"used_by":[]},"WP_Locale::is_rtl":{"doc":"\/**\n * Checks if current locale is RTL.\n *\n * @since 3.0.0\n * @return bool Whether locale is RTL.\n *\/","file":"locale.php","line":327,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_print_media_templates":{"doc":"\/**\n * Prints the templates used in the media manager.\n *\n * @since 3.5.0\n *\/","file":"media-template.php","line":15,"missingDoc":false,"filters":["'upload_ui_over_quota'","'pre-upload-ui'","'pre-plupload-upload-ui'","'post-plupload-upload-ui'","'post-plupload-upload-ui'","'post-upload-ui'","'image_size_names_choose'","'disable_captions'","'print_media_templates'"],"uses":{"strpos":[18],"esc_attr_e":[32,160,164,166,168,267,270,273,276,292,295,298,301,351,354,405,408,411,414,423,426,429],"_e":[40,51,53,58,59,110,111,125,148,152,176,203,204,209,222,226,231,236,245,248,255,259,284,310,340,343,360,372,379,391,397,402,420],"is_multisite":[52],"is_upload_space_available":[52],"add_action":[71],"remove_action":[69],"wp_max_upload_size":[76],"count":[79],"printf":[93,99],"__":[93,99,319,320,321,322],"esc_html":[93,93,330,365],"admin_url":[97],"_device_can_upload":[50],"esc_html_e":[180],"esc_js":[327],"esc_attr":[329,364],"selected":[329,364]},"used_by":[]},"is_upload_space_available":{"doc":"\/**\n * Determines if there is any upload space left in the current blog's quota.\n *\n * @since 3.0.0\n * @return bool True if space is available, false otherwise.\n *\/","file":"ms-functions.php","line":1998,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1999],"get_upload_space_available":[2002]},"used_by":{"wp_print_media_templates":[52],"wp_plupload_default_settings":[1290]}},"wp_max_upload_size":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.5.0\n *\n * @return unknown\n *\/","file":"media.php","line":1146,"missingDoc":false,"filters":["'upload_size_limit'"],"uses":{"wp_convert_hr_to_bytes":[1147,1148],"ini_get":[1147,1148],"min":[1149]},"used_by":{"wp_print_media_templates":[76],"wp_plupload_default_settings":[1254]}},"image_constrain_size_for_editor":{"doc":"\/**\n * Scale down the default size of an image.\n *\n * This is so that the image is a better fit for the editor and theme.\n *\n * The $size parameter accepts either an array or a string. The supported string\n * values are 'thumb' or 'thumbnail' for the given thumbnail size or defaults at\n * 128 width and 96 height in pixels. Also supported for the string value is\n * 'medium' and 'full'. The 'full' isn't actually supported, but any value other\n * than the supported will result in the content_width size or 500 if that is\n * not set.\n *\n * Finally, there is a filter named 'editor_max_image_size', that will be called\n * on the calculated array for width and height, respectively. The second\n * parameter will be the value that was in the $size parameter. The returned\n * type for the hook is an array with the width as the first element and the\n * height as the second element.\n *\n * @since 2.5.0\n * @uses wp_constrain_dimensions() This function passes the widths and the heights.\n *\n * @param int $width Width of the image\n * @param int $height Height of the image\n * @param string|array $size Size of what the result image should be.\n * @param context Could be 'display' (like in a theme) or 'edit' (like inserting into an editor)\n * @return array Width and height of what the result image should resize to.\n *\/","file":"media.php","line":36,"missingDoc":false,"filters":["'editor_max_image_size'"],"uses":{"is_admin":[40],"intval":[47,48,56,57,65,66,68,67,70,71,73,72],"get_option":[47,48,56,57,65,66],"min":[68,73],"count":[69],"in_array":[69],"array_keys":[69],"is_array":[42],"wp_constrain_dimensions":[83]},"used_by":{"image_downsize":[175],"image_get_intermediate_size":[442,462],"wp_prepare_attachment_for_js":[1395]}},"wp_constrain_dimensions":{"doc":"\/**\n * Calculates the new dimensions for a downsampled image.\n *\n * If either width or height are empty, no constraint is applied on\n * that dimension.\n *\n * @since 2.5.0\n *\n * @param int $current_width Current width of the image.\n * @param int $current_height Current height of the image.\n * @param int $max_width Optional. Maximum wanted width.\n * @param int $max_height Optional. Maximum wanted height.\n * @return array First item is the width, the second item is the height.\n *\/","file":"media.php","line":259,"missingDoc":false,"filters":[],"uses":{"min":[277],"max":[278],"intval":[280,280,287,288]},"used_by":{"image_constrain_size_for_editor":[83],"image_resize_dimensions":[361],"wp_expand_dimensions":[1002]}},"image_hwstring":{"doc":"\/**\n * Retrieve width and height attributes using given width and height values.\n *\n * Both attributes are required in the sense that both parameters must have a\n * value, but are optional in that if you set them to false or null, then they\n * will not be added to the returned string.\n *\n * You can set the value using a string, but it will only take numeric values.\n * If you wish to put 'px' after the numbers, then it will be stripped out of\n * the return.\n *\n * @since 2.5.0\n *\n * @param int|string $width Optional. Width attribute value.\n * @param int|string $height Optional. Height attribute value.\n * @return string HTML attributes for width and, or height.\n *\/","file":"media.php","line":103,"missingDoc":false,"filters":[],"uses":{"intval":[106,108]},"used_by":{"get_image_tag":[231],"wp_get_attachment_image":[550]}},"wp_get_attachment_thumb_file":{"doc":"\/**\n * Retrieve thumbnail for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @return mixed False on failure. Thumbnail file path on success.\n *\/","file":"post.php","line":4247,"missingDoc":false,"filters":["'wp_get_attachment_thumb_file'"],"uses":{"get_post":[4249],"is_array":[4251],"wp_get_attachment_metadata":[4251],"get_attached_file":[4254],"str_replace":[4256],"basename":[4256],"file_exists":[4256]},"used_by":{"image_downsize":[160],"wp_get_attachment_thumb_url":[4280]}},"image_get_intermediate_size":{"doc":"\/**\n * Retrieve the image's intermediate size (resized) path, width, and height.\n *\n * The $size parameter can be an array with the width and height respectively.\n * If the size matches the 'sizes' metadata array for width and height, then it\n * will be used. If there is no direct match, then the nearest image size larger\n * than the specified size will be used. If nothing is found, then the function\n * will break out and return false.\n *\n * The metadata 'sizes' is used for compatible sizes that can be used for the\n * parameter $size value.\n *\n * The url path will be given, when the $size parameter is a string.\n *\n * If you are passing an array for the $size, you should consider using\n * add_image_size() so that a cropped version is generated. It's much more\n * efficient than having to find the closest-sized image and then having the\n * browser scale down the image.\n *\n * @since 2.5.0\n * @see add_image_size()\n *\n * @param int $post_id Attachment ID for image.\n * @param array|string $size Optional, default is 'thumbnail'. Size of image, either array or string.\n * @return bool|array False on failure or array of file path, width, and height on success.\n *\/","file":"media.php","line":432,"missingDoc":false,"filters":[],"uses":{"is_array":[433,437,469],"wp_get_attachment_metadata":[433],"image_constrain_size_for_editor":[442,462],"compact":[443,463],"ksort":[450],"image_resize_dimensions":[456],"wp_get_attachment_url":[475],"path_join":[476,477],"dirname":[476,477]},"used_by":{"image_downsize":[152],"wp_delete_attachment":[4097]}},"add_image_size":{"doc":"\/**\n * Registers a new image size\n *\n * @since 2.9.0\n *\/","file":"media.php","line":188,"missingDoc":false,"filters":[],"uses":{"absint":[190,190]},"used_by":{"set_post_thumbnail_size":[199]}},"set_post_thumbnail_size":{"doc":"\/**\n * Registers an image size for the post thumbnail\n *\n * @since 2.9.0\n *\/","file":"media.php","line":198,"missingDoc":false,"filters":[],"uses":{"add_image_size":[199]},"used_by":[]},"get_image_tag":{"doc":"\/**\n * An <img src \/> tag for an image attachment, scaling it down if requested.\n *\n * The filter 'get_image_tag_class' allows for changing the class name for the\n * image without having to use regular expressions on the HTML content. The\n * parameters are: what WordPress will use for the class, the Attachment ID,\n * image align value, and the size the image should be.\n *\n * The second filter 'get_image_tag' has the HTML content, which can then be\n * further manipulated by a plugin to change all attribute values and even HTML\n * content.\n *\n * @since 2.5.0\n *\n * @uses apply_filters() The 'get_image_tag_class' filter is the IMG element\n *\t\tclass attribute.\n * @uses apply_filters() The 'get_image_tag' filter is the full IMG element with\n *\t\tall attributes.\n *\n * @param int $id Attachment ID.\n * @param string $alt Image Description for the alt attribute.\n * @param string $title Image Description for the title attribute.\n * @param string $align Part of the class name for aligning the image.\n * @param string $size Optional. Default is 'medium'.\n * @return string HTML IMG element for given image attachment\n *\/","file":"media.php","line":228,"missingDoc":false,"filters":["'get_image_tag_class'","'get_image_tag'"],"uses":{"image_downsize":[230],"image_hwstring":[231],"esc_attr":[233,235,235,238,238]},"used_by":[]},"image_make_intermediate_size":{"doc":"\/**\n * Resize an image to make a thumbnail or intermediate size.\n *\n * The returned array has the file size, the image width, and image height. The\n * filter 'image_make_intermediate_size' can be used to hook in and change the\n * values of the returned array. The only parameter is the resized file path.\n *\n * @since 2.5.0\n *\n * @param string $file File path.\n * @param int $width Image width.\n * @param int $height Image height.\n * @param bool $crop Optional, default is false. Whether to crop image to specified height and width or resize.\n * @return bool|array False, if no image was created. Metadata array on success.\n *\/","file":"media.php","line":389,"missingDoc":false,"filters":[],"uses":{"wp_get_image_editor":[391],"is_wp_error":[393,393,398],"resize":[393],"save":[396]},"used_by":[]},"get_intermediate_image_sizes":{"doc":"\/**\n * Get the available image sizes\n * @since 3.0.0\n * @return array Returns a filtered array of image size strings\n *\/","file":"media.php","line":487,"missingDoc":false,"filters":["'intermediate_image_sizes'"],"uses":{"array_merge":[491],"array_keys":[491],"count":[490]},"used_by":{"wp_delete_attachment":[4096]}},"wp_get_attachment_image_src":{"doc":"\/**\n * Retrieve an image to represent an attachment.\n *\n * A mime icon for files, thumbnail or intermediate size for images.\n *\n * @since 2.5.0\n *\n * @param int $attachment_id Image attachment ID.\n * @param string $size Optional, default is 'thumbnail'.\n * @param bool $icon Optional, default is false. Whether it is an icon.\n * @return bool|array Returns an array (url, width, height), or false, if no image is available.\n *\/","file":"media.php","line":508,"missingDoc":false,"filters":["'icon_dir'"],"uses":{"image_downsize":[511],"wp_basename":[518],"getimagesize":[519],"wp_mime_type_icon":[516]},"used_by":{"wp_get_attachment_image":[547]}},"wp_get_attachment_image":{"doc":"\/**\n * Get an HTML img element representing an image attachment\n *\n * While $size will accept an array, it is better to register a size with\n * add_image_size() so that a cropped version is generated. It's much more\n * efficient than having to find the closest-sized image and then having the\n * browser scale down the image.\n *\n * @see add_image_size()\n * @uses apply_filters() Calls 'wp_get_attachment_image_attributes' hook on attributes array\n * @uses wp_get_attachment_image_src() Gets attachment file URL and dimensions\n * @since 2.5.0\n *\n * @param int $attachment_id Image attachment ID.\n * @param string $size Optional, default is 'thumbnail'.\n * @param bool $icon Optional, default is false. Whether it is an icon.\n * @return string HTML img element or empty string on failure.\n *\/","file":"media.php","line":544,"missingDoc":false,"filters":["'wp_get_attachment_image_attributes'"],"uses":{"wp_get_attachment_image_src":[547],"image_hwstring":[550],"join":[552],"is_array":[551],"get_post":[553],"trim":[557,560,562],"strip_tags":[557,560,562],"get_post_meta":[557],"wp_parse_args":[564],"array_map":[566],"rtrim":[567]},"used_by":{"wp_get_attachment_link":[1176],"get_the_post_thumbnail":[93],"set_post_thumbnail":[5380]}},"_wp_post_thumbnail_class_filter":{"doc":"\/**\n * Adds a 'wp-post-image' class to post thumbnails\n * Uses the begin_fetch_post_thumbnail_html and end_fetch_post_thumbnail_html action hooks to\n * dynamically add\/remove itself so as to only filter post thumbnails\n *\n * @since 2.9.0\n * @param array $attr Attributes including src, class, alt, title\n * @return array\n *\/","file":"media.php","line":586,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_wp_post_thumbnail_class_filter_add":{"doc":"\/**\n * Adds _wp_post_thumbnail_class_filter to the wp_get_attachment_image_attributes filter\n *\n * @since 2.9.0\n *\/","file":"media.php","line":596,"missingDoc":false,"filters":[],"uses":{"add_filter":[597]},"used_by":[]},"_wp_post_thumbnail_class_filter_remove":{"doc":"\/**\n * Removes _wp_post_thumbnail_class_filter from the wp_get_attachment_image_attributes filter\n *\n * @since 2.9.0\n *\/","file":"media.php","line":605,"missingDoc":false,"filters":[],"uses":{"remove_filter":[606]},"used_by":[]},"img_caption_shortcode":{"doc":"\/**\n * The Caption shortcode.\n *\n * Allows a plugin to replace the content that would otherwise be returned. The\n * filter is 'img_caption_shortcode' and passes an empty string, the attr\n * parameter and the content parameter values.\n *\n * The supported attributes for the shortcode are 'id', 'align', 'width', and\n * 'caption'.\n *\n * @since 2.6.0\n *\n * @param array $attr Attributes attributed to the shortcode.\n * @param string $content Optional. Shortcode content.\n * @return string\n *\/","file":"media.php","line":628,"missingDoc":false,"filters":["'img_caption_shortcode'"],"uses":{"trim":[633],"preg_match":[631],"extract":[642],"shortcode_atts":[642],"esc_attr":[652,654],"do_shortcode":[655]},"used_by":[]},"shortcode_atts":{"doc":"\/**\n * Combine user attributes with known attributes and fill in defaults when needed.\n *\n * The pairs should be considered to be all of the attributes which are\n * supported by the caller and given as a list. The returned attributes will\n * only contain the attributes in the $pairs list.\n *\n * If the $atts list has unsupported attributes, then they will be ignored and\n * removed from the final returned list.\n *\n * @since 2.5\n *\n * @param array $pairs Entire list of supported attributes and their defaults.\n * @param array $atts User defined attributes in shortcode tag.\n * @return array Combined and filtered attribute list.\n *\/","file":"shortcodes.php","line":294,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[298]},"used_by":{"img_caption_shortcode":[642],"gallery_shortcode":[696]}},"gallery_shortcode":{"doc":"\/**\n * The Gallery shortcode.\n *\n * This implements the functionality of the Gallery Shortcode for displaying\n * WordPress images on a post.\n *\n * @since 2.5.0\n *\n * @param array $attr Attributes of the shortcode.\n * @return string HTML content to display gallery.\n *\/","file":"media.php","line":671,"missingDoc":false,"filters":["'post_gallery'","'use_default_gallery_style'","'gallery_style'"],"uses":{"get_post":[672],"sanitize_sql_orderby":[691],"extract":[696],"shortcode_atts":[696],"intval":[709,738],"get_posts":[714],"get_children":[721,723],"wp_get_attachment_link":[732,771,771],"is_feed":[729],"tag_escape":[736,737],"floor":[739],"is_rtl":[740],"sanitize_html_class":[765],"wptexturize":[781],"trim":[778]},"used_by":[]},"get_children":{"doc":"\/**\n * Retrieve all children of the post parent ID.\n *\n * Normally, without any enhancements, the children would apply to pages. In the\n * context of the inner workings of WordPress, pages, posts, and attachments\n * share the same table, so therefore the functionality could apply to any one\n * of them. It is then noted that while this function does not work on posts, it\n * does not mean that it won't work on posts. It is recommended that you know\n * what context you wish to retrieve the children of.\n *\n * Attachments may also be made the child of a post, so if that is an accurate\n * statement (which needs to be verified), it would then be possible to get\n * all of the attachments for a post. Attachments have since changed since\n * version 2.5, so this is most likely unaccurate, but serves generally as an\n * example of what is possible.\n *\n * The arguments listed as defaults are for this function and also of the\n * {@link get_posts()} function. The arguments are combined with the\n * get_children defaults and are then passed to the {@link get_posts()}\n * function, which accepts additional arguments. You can replace the defaults in\n * this function, listed below and the additional arguments listed in the\n * {@link get_posts()} function.\n *\n * The 'post_parent' is the most important argument and important attention\n * needs to be paid to the $args parameter. If you pass either an object or an\n * integer (number), then just the 'post_parent' is grabbed and everything else\n * is lost. If you don't specify any arguments, then it is assumed that you are\n * in The Loop and the post parent will be grabbed for from the current post.\n *\n * The 'post_parent' argument is the ID to get the children. The 'numberposts'\n * is the amount of posts to retrieve that has a default of '-1', which is\n * used to get all of the posts. Giving a number higher than 0 will only\n * retrieve that amount of posts.\n *\n * The 'post_type' and 'post_status' arguments can be used to choose what\n * criteria of posts to retrieve. The 'post_type' can be anything, but WordPress\n * post types are 'post', 'pages', and 'attachments'. The 'post_status'\n * argument will accept any post status within the write administration panels.\n *\n * @see get_posts() Has additional arguments that can be replaced.\n * @internal Claims made in the long description might be inaccurate.\n *\n * @since 2.0.0\n *\n * @param mixed $args Optional. User defined arguments for replacing the defaults.\n * @param string $output Optional. Constant for return type, either OBJECT (default), ARRAY_A, ARRAY_N.\n * @return array|bool False on failure and the type will be determined by $output parameter.\n *\/","file":"post.php","line":290,"missingDoc":false,"filters":[],"uses":{"is_object":[298],"is_numeric":[300],"wp_parse_args":[309],"get_posts":[311],"update_post_cache":[316],"get_object_vars":[325,329],"array_values":[329]},"used_by":{"gallery_shortcode":[721,723],"adjacent_image_link":[831],"wp_get_post_revisions":[5221]}},"wp_get_attachment_link":{"doc":"\/**\n * Retrieve an attachment page link using an image or icon, if possible.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'wp_get_attachment_link' filter on HTML content with same parameters as function.\n *\n * @param int $id Optional. Post ID.\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string.\n * @param bool $permalink Optional, default is false. Whether to add permalink to image.\n * @param bool $icon Optional, default is false. Whether to include icon.\n * @param string|bool $text Optional, default is false. If string, then will be link text.\n * @return string HTML content.\n *\/","file":"post-template.php","line":1161,"missingDoc":false,"filters":["'wp_get_attachment_link'"],"uses":{"intval":[1162],"get_post":[1163],"__":[1166],"wp_get_attachment_url":[1165],"get_attachment_link":[1169],"esc_attr":[1171],"wp_get_attachment_image":[1176],"trim":[1180]},"used_by":{"gallery_shortcode":[732,771,771],"adjacent_image_link":[842],"the_attachment_link":[1143,1145],"prepend_attachment":[1203]}},"previous_image_link":{"doc":"\/**\n * Display previous image link that has the same post parent.\n *\n * @since 2.5.0\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text;\n * @param string $text Optional, default is false. If included, link will reflect $text variable.\n * @return string HTML content.\n *\/","file":"media.php","line":804,"missingDoc":false,"filters":[],"uses":{"adjacent_image_link":[805]},"used_by":[]},"adjacent_image_link":{"doc":"\/**\n * Display next or previous image link that has the same post parent.\n *\n * Retrieves the current attachment object from the $post global.\n *\n * @since 2.5.0\n *\n * @param bool $prev Optional. Default is true to display previous link, false for next.\n *\/","file":"media.php","line":829,"missingDoc":false,"filters":["\"{$adjacent}_image_link\""],"uses":{"get_post":[830],"array_values":[831],"get_children":[831],"wp_get_attachment_link":[842]},"used_by":{"previous_image_link":[805],"next_image_link":[817]}},"next_image_link":{"doc":"\/**\n * Display next image link that has the same post parent.\n *\n * @since 2.5.0\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text;\n * @param string $text Optional, default is false. If included, link will reflect $text variable.\n * @return string HTML content.\n *\/","file":"media.php","line":816,"missingDoc":false,"filters":[],"uses":{"adjacent_image_link":[817]},"used_by":[]},"get_attachment_taxonomies":{"doc":"\/**\n * Retrieve taxonomies attached to the attachment.\n *\n * @since 2.5.0\n *\n * @param int|array|object $attachment Attachment ID, Attachment data array, or Attachment data object.\n * @return array Empty array on failure. List of taxonomies on success.\n *\/","file":"media.php","line":857,"missingDoc":false,"filters":[],"uses":{"get_post":[859],"is_array":[860],"is_int":[858],"is_object":[863],"basename":[866],"substr":[871],"strrpos":[871],"strpos":[870,874],"explode":[875],"array_merge":[883],"get_object_taxonomies":[882],"array_unique":[885]},"used_by":{"get_object_taxonomies":[170]}},"get_taxonomies_for_attachments":{"doc":"\/**\n * Return all of the taxonomy names that are registered for attachments.\n *\n * Handles mime-type-specific taxonomies such as attachment:image and attachment:video.\n *\n * @since 3.5.0\n * @see get_attachment_taxonomies()\n * @uses get_taxonomies()\n *\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @return array The names of all taxonomy of $object_type.\n *\/","file":"media.php","line":900,"missingDoc":false,"filters":[],"uses":{"strpos":[904],"get_taxonomies":[902]},"used_by":{"WP_Query::get_posts":[2227]}},"wp_embed_register_handler":{"doc":"\/**\n * Register an embed handler. This function should probably only be used for sites that do not support oEmbed.\n *\n * @since 2.9.0\n * @see WP_Embed::register_handler()\n *\/","file":"media.php","line":942,"missingDoc":false,"filters":[],"uses":{"register_handler":[944]},"used_by":{"wp_maybe_load_embeds":[1076]}},"wp_embed_unregister_handler":{"doc":"\/**\n * Unregister a previously registered embed handler.\n *\n * @since 2.9.0\n * @see WP_Embed::unregister_handler()\n *\/","file":"media.php","line":953,"missingDoc":false,"filters":[],"uses":{"unregister_handler":[955]},"used_by":[]},"wp_expand_dimensions":{"doc":"\/**\n * Based on a supplied width\/height example, return the biggest possible dimensions based on the max width\/height.\n *\n * @since 2.9.0\n * @uses wp_constrain_dimensions() This function passes the widths and the heights.\n *\n * @param int $example_width The width of an example embed.\n * @param int $example_height The height of an example embed.\n * @param int $max_width The maximum allowed width.\n * @param int $max_height The maximum allowed height.\n * @return array The maximum possible width and height based on the example ratio.\n *\/","file":"media.php","line":996,"missingDoc":false,"filters":[],"uses":{"wp_constrain_dimensions":[1002]},"used_by":{"wp_embed_handler_googlevideo":[1097]}},"wp_oembed_add_provider":{"doc":"\/**\n * Adds a URL format and oEmbed provider URL pair.\n *\n * @since 2.9.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n *\n * @param string $format The format of URL that this provider can handle. You can use asterisks as wildcards.\n * @param string $provider The URL to the oEmbed provider.\n * @param boolean $regex Whether the $format parameter is in a regex format.\n *\/","file":"media.php","line":1036,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1038]},"used_by":[]},"wp_oembed_remove_provider":{"doc":"\/**\n * Removes an oEmbed provider.\n *\n * @since 3.5.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n *\n * @param string $format The URL format for the oEmbed provider to remove.\n *\/","file":"media.php","line":1052,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1055]},"used_by":[]},"wp_maybe_load_embeds":{"doc":"\/**\n * Determines if default embed handlers should be loaded.\n *\n * Checks to make sure that the embeds library hasn't already been loaded. If\n * it hasn't, then it will load the embeds library.\n *\n * @since 2.9.0\n *\/","file":"media.php","line":1073,"missingDoc":false,"filters":["'load_default_embeds'"],"uses":{"wp_embed_register_handler":[1076]},"used_by":[]},"wp_embed_handler_googlevideo":{"doc":"\/**\n * The Google Video embed handler callback. Google Video does not support oEmbed.\n *\n * @see WP_Embed::register_handler()\n * @see WP_Embed::shortcode()\n *\n * @param array $matches The regex matches from the provided regex when calling {@link wp_embed_register_handler()}.\n * @param array $attr Embed attributes.\n * @param string $url The original URL that was matched by the regex.\n * @param array $rawattr The original unmodified attributes.\n * @return string The embed HTML.\n *\/","file":"media.php","line":1091,"missingDoc":false,"filters":["'embed_googlevideo'"],"uses":{"wp_expand_dimensions":[1097],"esc_attr":[1100,1100,1100]},"used_by":[]},"wp_convert_hr_to_bytes":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.3.0\n *\n * @param unknown_type $size\n * @return unknown\n *\/","file":"media.php","line":1111,"missingDoc":false,"filters":[],"uses":{"strtolower":[1112],"intval":[1115,1117,1119],"strpos":[1116,1118,1114]},"used_by":{"wp_max_upload_size":[1147,1148]}},"wp_convert_bytes_to_hr":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.3.0\n *\n * @param unknown_type $bytes\n * @return unknown\n *\/","file":"media.php","line":1131,"missingDoc":false,"filters":[],"uses":{"log":[1133],"pow":[1135]},"used_by":[]},"_wp_image_editor_choose":{"doc":"\/**\n * Tests which editors are capable of supporting the request.\n *\n * @since 3.5.0\n * @access private\n *\n * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return string|bool Class name for the first editor that claims to support the request. False if no editor claims to support the request.\n *\/","file":"media.php","line":1212,"missingDoc":false,"filters":["'wp_image_editors'"],"uses":{"call_user_func":[1221,1225],"array_diff":[1232],"get_class_methods":[1232]},"used_by":{"wp_get_image_editor":[1175],"wp_image_editor_supports":[1200]}},"wp_image_editor_supports":{"doc":"\/**\n * Tests whether there is an editor that supports a given mime type or methods.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|array $args Array of requirements. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return boolean true if an eligible editor is found; false otherwise\n *\/","file":"media.php","line":1199,"missingDoc":false,"filters":[],"uses":{"_wp_image_editor_choose":[1200]},"used_by":[]},"wp_plupload_default_settings":{"doc":"\/**\n * Prints default plupload arguments.\n *\n * @since 3.4.0\n *\/","file":"media.php","line":1247,"missingDoc":false,"filters":["'plupload_default_settings'","'plupload_default_params'"],"uses":{"get_data":[1250],"strpos":[1251],"wp_max_upload_size":[1254],"admin_url":[1261],"includes_url":[1262,1263],"__":[1264],"wp_is_mobile":[1271,1287],"wp_create_nonce":[1281],"_device_can_upload":[1288],"is_multisite":[1290],"is_upload_space_available":[1290],"json_encode":[1293],"add_data":[1298]},"used_by":{"wp_enqueue_media":[1544]}},"wp_prepare_attachment_for_js":{"doc":"\/**\n * Prepares an attachment post object for JS, where it is expected\n * to be JSON-encoded and fit into an Attachment model.\n *\n * @since 3.5.0\n *\n * @param mixed $attachment Attachment ID or object.\n * @return array Array of attachment details.\n *\/","file":"media.php","line":1311,"missingDoc":false,"filters":["'image_size_names_choose'","'image_downsize'","'wp_prepare_attachment_for_js'"],"uses":{"get_post":[1312],"wp_get_attachment_metadata":[1318],"explode":[1320],"strpos":[1319],"wp_get_attachment_url":[1324],"basename":[1329],"get_attachment_link":[1331],"get_post_meta":[1332],"strtotime":[1339,1340],"wp_mime_type_icon":[1345],"mysql2date":[1346],"get_option":[1346],"wp_create_nonce":[1355,1360],"get_edit_post_link":[1356],"current_user_can":[1354,1359],"__":[1365,1366,1367,1368],"str_replace":[1388],"wp_basename":[1388],"image_constrain_size_for_editor":[1395],"array_merge":[1413],"get_compat_media_markup":[1417],"function_exists":[1416]},"used_by":[]},"wp_enqueue_media":{"doc":"\/**\n * Enqueues all scripts, styles, settings, and templates necessary to use\n * all media JS APIs.\n *\n * @since 3.5.0\n *\/","file":"media.php","line":1428,"missingDoc":false,"filters":["'media_upload_tabs'","'disable_captions'","'media_view_settings'","'media_view_strings'","'wp_enqueue_media'"],"uses":{"did_action":[1431],"wp_parse_args":[1437],"get_option":[1453,1454,1455],"add_query_arg":[1460],"admin_url":[1460],"wp_list_pluck":[1461],"get_post_mime_types":[1461],"wp_create_nonce":[1464,1477],"get_post":[1474],"get_post_meta":[1481],"current_theme_supports":[1480],"post_type_supports":[1480],"is_post_type_hierarchical":[1486],"__":[1490,1491,1492,1493,1494,1499,1500,1503,1504,1507,1508,1509,1510,1511,1512,1513,1513,1514,1514,1515,1518,1521,1522,1525,1526,1527,1528,1529,1530,1531,1532],"wp_localize_script":[1540],"wp_enqueue_script":[1542],"wp_enqueue_style":[1543],"wp_plupload_default_settings":[1544],"add_action":[1547,1548]},"used_by":[]},"get_post_mime_types":{"doc":"\/**\n * Get default post mime types\n *\n * @since 2.9.0\n *\n * @return array\n *\/","file":"post.php","line":2192,"missingDoc":false,"filters":["'post_mime_types'"],"uses":{"__":[2194,2194,2195,2195,2196,2196],"_n_noop":[2194,2195,2196]},"used_by":{"wp_enqueue_media":[1461]}},"is_post_type_hierarchical":{"doc":"\/**\n * Whether the post type is hierarchical.\n *\n * A false return value might also mean that the post type does not exist.\n *\n * @since 3.0.0\n * @see get_post_type_object\n *\n * @param string $post_type Post type name\n * @return bool Whether post type is hierarchical.\n *\/","file":"post.php","line":1043,"missingDoc":false,"filters":[],"uses":{"post_type_exists":[1044],"get_post_type_object":[1047]},"used_by":{"wp_enqueue_media":[1486],"_wp_menu_item_classes_by_context":[267,424],"wp_delete_post":[2327,2372],"wp_check_for_changed_slugs":[4427],"clean_post_cache":[4659],"wp_old_slug_redirect":[3587],"WP_Rewrite::generate_rewrite_rules":[1397]}},"_get_meta_table":{"doc":"\/**\n * Retrieve the name of the metadata table for the specified object type.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param string $type Type of object to get metadata table for (e.g., comment, post, or user)\n * @return mixed Metadata table name, or false if no metadata table exists\n *\/","file":"meta.php","line":843,"missingDoc":false,"filters":[],"uses":[],"used_by":{"add_metadata":[38],"update_metadata":[108],"delete_metadata":[191],"get_metadata_by_mid":[357],"update_metadata_by_mid":[397],"delete_metadata_by_mid":[477],"update_meta_cache":[528],"WP_Meta_Query::get_sql":[706]}},"sanitize_meta":{"doc":"\/**\n * Sanitize meta value\n *\n * @since 3.1.3\n *\n * @param string $meta_key Meta key\n * @param mixed $meta_value Meta value to sanitize\n * @param string $meta_type Type of meta\n * @return mixed Sanitized $meta_value\n *\/","file":"meta.php","line":878,"missingDoc":false,"filters":["\"sanitize_{$meta_type}_meta_{$meta_key}\""],"uses":[],"used_by":{"add_metadata":[48],"update_metadata":[120],"update_metadata_by_mid":[419]}},"get_meta_sql":{"doc":"\/**\n * Given a meta query, generates SQL clauses to be appended to a main query\n *\n * @since 3.2.0\n *\n * @see WP_Meta_Query\n *\n * @param array $meta_query A meta query\n * @param string $type Type of meta\n * @param string $primary_table\n * @param string $primary_id_column\n * @param object $context (optional) The main query object\n * @return array( 'join' => $join_sql, 'where' => $where_sql )\n *\/","file":"meta.php","line":601,"missingDoc":false,"filters":[],"uses":{"get_sql":[603]},"used_by":[]},"WP_Meta_Query::__construct":{"doc":"\/**\n * Constructor\n *\n * @param array $meta_query (optional) A meta query\n *\/","file":"meta.php","line":643,"missingDoc":false,"filters":[],"uses":{"strtoupper":[647],"is_array":[656]},"used_by":[]},"WP_Meta_Query::parse_query_vars":{"doc":"\/**\n * Constructs a meta query based on 'meta_*' query vars\n *\n * @since 3.2.0\n * @access public\n *\n * @param array $qv The query variables\n *\/","file":"meta.php","line":671,"missingDoc":false,"filters":[],"uses":{"array_merge":[685],"is_array":[684],"__construct":[688]},"used_by":[]},"WP_Meta_Query::get_sql":{"doc":"\/**\n * Generates SQL clauses to be appended to a main query.\n *\n * @since 3.2.0\n * @access public\n *\n * @param string $type Type of meta\n * @param string $primary_table\n * @param string $primary_id_column\n * @param object $context (optional) The main query object\n * @return array( 'join' => $join_sql, 'where' => $where_sql )\n *\/","file":"meta.php","line":703,"missingDoc":false,"filters":[],"uses":{"_get_meta_table":[706],"esc_sql":[709],"prepare":[734,781,816],"trim":[734,738,798],"strtoupper":[739,749],"in_array":[743,753,789],"is_array":[751,790],"count":[762,802],"is_null":[783],"preg_split":[791],"substr":[802,803,806,801],"str_repeat":[802],"array_slice":[804],"like_escape":[807],"array_filter":[819],"implode":[824,826],"apply_filters_ref_array":[830],"compact":[830]},"used_by":[]},"register_meta":{"doc":"\/**\n * Register meta key\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of meta\n * @param string $meta_key Meta key\n * @param string|array $sanitize_callback A function or method to call when sanitizing the value of $meta_key.\n * @param string|array $auth_callback Optional. A function or method to call when performing edit_post_meta, add_post_meta, and delete_post_meta capability checks.\n * @param array $args Arguments\n *\/","file":"meta.php","line":893,"missingDoc":false,"filters":[],"uses":{"add_filter":[895,905],"is_callable":[894,904],"is_protected_meta":[898]},"used_by":[]},"wpmu_update_blogs_date":{"doc":"\/**\n * Update the last_updated field for the current blog.\n *\n * @since MU\n *\/","file":"ms-blogs.php","line":16,"missingDoc":false,"filters":["'wpmu_blog_updated'"],"uses":{"update_blog_details":[19],"current_time":[19]},"used_by":{"_update_blog_date_on_post_publish":[751],"_update_blog_date_on_post_delete":[771]}},"update_blog_details":{"doc":"\/**\n * Update the details for a blog. Updates the blogs table for a given blog id.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n * @param array $details Array of details keyed by blogs table field names.\n * @return bool True if update succeeds, false otherwise.\n *\/","file":"ms-blogs.php","line":272,"missingDoc":false,"filters":["'make_spam_blog'","'make_ham_blog'","'mature_blog'","'unmature_blog'","'archive_blog'","'unarchive_blog'","'make_delete_blog'","'make_undelete_blog'"],"uses":{"get_object_vars":[279,285],"is_object":[278],"get_blog_details":[281],"array_merge":[287],"current_time":[288],"array_intersect":[292],"array_keys":[292],"update":[295],"switch_to_blog":[333],"update_option":[334],"restore_current_blog":[335],"refresh_blog_details":[338]},"used_by":{"wpmu_update_blogs_date":[19]}},"get_blogaddress_by_id":{"doc":"\/**\n * Get a full blog URL, given a blog id.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n * @return string\n *\/","file":"ms-blogs.php","line":32,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[33],"esc_url":[34]},"used_by":{"install_blog":[1145],"wpmu_welcome_notification":[1236]}},"get_blogaddress_by_name":{"doc":"\/**\n * Get a full blog URL, given a blog name.\n *\n * @since MU\n *\n * @param string $blogname The (subdomain or directory) name\n * @return string\n *\/","file":"ms-blogs.php","line":45,"missingDoc":false,"filters":[],"uses":{"rtrim":[51],"network_home_url":[51,55],"preg_replace":[53],"is_subdomain_install":[48],"esc_url":[57]},"used_by":[]},"is_subdomain_install":{"doc":"\/**\n * Whether a subdomain configuration is enabled.\n *\n * @since 3.0.0\n *\n * @return bool True if subdomain configuration is enabled, false otherwise.\n *\/","file":"ms-load.php","line":18,"missingDoc":false,"filters":[],"uses":{"defined":[19,22]},"used_by":{"get_blogaddress_by_name":[48],"get_blogaddress_by_domain":[70],"get_id_from_blogname":[103],"get_blog_details":[148],"ms_cookie_constants":[66,76],"wpmu_validate_blog_signup":[558,577,594],"wpmu_signup_blog_notification":[727],"wpmu_create_blog":[957],"wpmu_current_site":[199],"__main":[52,83]}},"get_blogaddress_by_domain":{"doc":"\/**\n * Get a full blog URL, given a domain and a path.\n *\n * @since MU\n *\n * @param string $domain\n * @param string $path\n * @return string\n *\/","file":"ms-blogs.php","line":69,"missingDoc":false,"filters":[],"uses":{"substr":[74,75],"strpos":[74,75],"is_subdomain_install":[70],"esc_url":[83]},"used_by":[]},"get_id_from_blogname":{"doc":"\/**\n * Given a blog's (subdomain or directory) slug, retrieve its id.\n *\n * @since MU\n *\n * @param string $slug\n * @return int A blog id\n *\/","file":"ms-blogs.php","line":94,"missingDoc":false,"filters":[],"uses":{"trim":[97],"wp_cache_get":[99],"is_subdomain_install":[103],"get_var":[111],"prepare":[111],"wp_cache_set":[112]},"used_by":{"get_blog_details":[172]}},"refresh_blog_details":{"doc":"\/**\n * Clear the blog details cache.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n *\/","file":"ms-blogs.php","line":254,"missingDoc":false,"filters":["'refresh_blog_details'"],"uses":{"get_blog_details":[256],"clean_blog_cache":[258]},"used_by":{"update_blog_details":[338],"update_blog_option":[479],"update_blog_status":[680],"insert_blog":[1114]}},"clean_blog_cache":{"doc":"\/**\n * Clean the blog cache\n *\n * @since 3.5.0\n *\n * @param stdClass $blog The blog details as returned from get_blog_details()\n *\/","file":"ms-blogs.php","line":350,"missingDoc":false,"filters":[],"uses":{"md5":[352],"wp_cache_delete":[354,355,356,357,358,359,360],"trim":[359]},"used_by":{"refresh_blog_details":[258]}},"get_blog_option":{"doc":"\/**\n * Retrieve option value for a given blog id based on name of option.\n *\n * If the option does not exist or does not have a value, then the return value\n * will be false. This is useful to check whether you need to install an option\n * and is commonly used during installation of plugin options and to test\n * whether upgrading is required.\n *\n * If the option was serialized then it will be unserialized when it is returned.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional. Default value to return if the option does not exist.\n * @return mixed Value set for the option.\n *\/","file":"ms-blogs.php","line":380,"missingDoc":false,"filters":["'blog_option_' . $option"],"uses":{"get_current_blog_id":[384,386],"get_option":[387,390],"switch_to_blog":[389],"restore_current_blog":[391]},"used_by":{"install_blog":[1161]}},"add_blog_option":{"doc":"\/**\n * Add a new option for a given blog id.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * You can create options without values and then update the values later.\n * Existing options will not be updated and checks are performed to ensure that you\n * aren't adding a protected WordPress option. Care should be taken to not name\n * options the same as the ones which are protected.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"ms-blogs.php","line":415,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[419,421],"add_option":[422,425],"switch_to_blog":[424],"restore_current_blog":[426]},"used_by":[]},"delete_blog_option":{"doc":"\/**\n * Removes option by name for a given blog id. Prevents removal of protected WordPress options.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if option is successfully deleted. False on failure.\n *\/","file":"ms-blogs.php","line":440,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[444,446],"delete_option":[447,450],"switch_to_blog":[449],"restore_current_blog":[451]},"used_by":[]},"update_blog_option":{"doc":"\/**\n * Update an option for a particular blog.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $option The option key\n * @param mixed $value The option value\n * @return bool True on success, false on failrue.\n *\/","file":"ms-blogs.php","line":466,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[470],"update_option":[473,476],"get_current_blog_id":[472],"switch_to_blog":[475],"restore_current_blog":[477],"refresh_blog_details":[479]},"used_by":[]},"is_archived":{"doc":"\/**\n * Check if a particular blog is archived.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @return string Whether the blog is archived or not\n *\/","file":"ms-blogs.php","line":638,"missingDoc":false,"filters":[],"uses":{"get_blog_status":[639]},"used_by":[]},"get_blog_status":{"doc":"\/**\n * Get a blog details field.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $pref A field name\n * @return bool $value\n *\/","file":"ms-blogs.php","line":703,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[706],"get_var":[710],"prepare":[710]},"used_by":{"is_archived":[639]}},"update_archived":{"doc":"\/**\n * Update the 'archived' status of a particular blog.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $archived The new status\n * @return string $archived\n *\/","file":"ms-blogs.php","line":651,"missingDoc":false,"filters":[],"uses":{"update_blog_status":[652]},"used_by":[]},"update_blog_status":{"doc":"\/**\n * Update a blog details field.\n *\n * @since MU\n *\n * @param int $blog_id BLog ID\n * @param string $pref A field name\n * @param string $value Value for $pref\n * @return string $value\n *\/","file":"ms-blogs.php","line":666,"missingDoc":false,"filters":["'make_spam_blog'","'make_ham_blog'","'mature_blog'","'unmature_blog'","'archive_blog'","'unarchive_blog'","'make_delete_blog'","'make_undelete_blog'"],"uses":{"_deprecated_argument":[670],"in_array":[672],"update":[675],"current_time":[675],"refresh_blog_details":[680]},"used_by":{"update_archived":[652],"wpmu_create_blog":[984],"update_blog_public":[1775]}},"get_last_updated":{"doc":"\/**\n * Get a list of most recently updated blogs.\n *\n * @since MU\n *\n * @param mixed $deprecated Not used\n * @param int $start The offset\n * @param int $quantity The maximum number of blogs to retrieve. Default is 40.\n * @return array The list of blogs\n *\/","file":"ms-blogs.php","line":723,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[727],"get_results":[729],"prepare":[729]},"used_by":[]},"_update_blog_date_on_post_publish":{"doc":"\/**\n * Handler for updating the blog date when a post is published or an already published post is changed.\n *\n * @since 3.3.0\n *\n * @param string $new_status The new post status\n * @param string $old_status The old post status\n * @param object $post Post object\n *\/","file":"ms-blogs.php","line":741,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[742],"wpmu_update_blogs_date":[751]},"used_by":[]},"_update_blog_date_on_post_delete":{"doc":"\/**\n * Handler for updating the blog date when a published post is deleted.\n *\n * @since 3.4.0\n *\n * @param int $post_id Post ID\n *\/","file":"ms-blogs.php","line":761,"missingDoc":false,"filters":[],"uses":{"get_post":[762],"get_post_type_object":[764],"wpmu_update_blogs_date":[771]},"used_by":[]},"ms_upload_constants":{"doc":"\/**\n * Defines Multisite upload constants.\n *\n * Exists for backward compatibility with legacy file-serving through\n * wp-includes\/ms-files.php (wp-content\/blogs.php in MU).\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":18,"missingDoc":false,"filters":[],"uses":{"add_filter":[22],"get_site_option":[24],"define":[29,34,38],"defined":[28,37,33]},"used_by":{"__main":[136]}},"ms_cookie_constants":{"doc":"\/**\n * Defines Multisite cookie constants.\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":47,"missingDoc":false,"filters":[],"uses":{"define":[54,60,67,69,78,80],"defined":[53,59,65,76],"is_subdomain_install":[66,76],"trim":[66],"parse_url":[66],"get_option":[66]},"used_by":[]},"ms_file_constants":{"doc":"\/**\n * Defines Multisite file constants.\n *\n * Exists for backward compatibility with legacy file-serving through\n * wp-includes\/ms-files.php (wp-content\/blogs.php in MU).\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":92,"missingDoc":false,"filters":[],"uses":{"define":[98,105],"defined":[97,104]},"used_by":{"__main":[17]}},"ms_subdomain_constants":{"doc":"\/**\n * Defines Multisite subdomain constants and handles warnings and notices.\n *\n * VHOST is deprecated in favor of SUBDOMAIN_INSTALL, which is a bool.\n *\n * On first call, the constants are checked and defined. On second call,\n * we will have translations loaded and can trigger warnings easily.\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":118,"missingDoc":false,"filters":[],"uses":{"__":[126,128],"trigger_error":[128],"_deprecated_argument":[130],"defined":[141,143,135,135],"define":[142,145,147,148]},"used_by":{"__main":[21]}},"generate_random_password":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use wp_generate_password()\n * @see wp_generate_password()\n *\/","file":"ms-deprecated.php","line":22,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[23],"wp_generate_password":[24]},"used_by":[]},"wp_generate_password":{"doc":"\/**\n * Generates a random password drawn from the defined set of characters.\n *\n * @since 2.5\n *\n * @param int $length The length of password to generate\n * @param bool $special_chars Whether to include standard special characters. Default true.\n * @param bool $extra_special_chars Whether to include other special characters. Used when\n * generating secret keys and salts. Default false.\n * @return string The random password\n **\/","file":"pluggable.php","line":1490,"missingDoc":false,"filters":["'random_password'"],"uses":{"substr":[1499],"wp_rand":[1499],"strlen":[1499]},"used_by":{"generate_random_password":[24],"wpmu_activate_signup":[849],"wp_salt":[1363,1372]}},"is_site_admin":{"doc":"\/**\n * Determine if user is a site admin.\n *\n * Plugins should use is_multisite() instead of checking if this function exists\n * to determine if multisite is enabled.\n *\n * This function must reside in a file included only if is_multisite() due to\n * legacy function_exists() checks to determine if multisite is enabled.\n *\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_super_admin()\n * @see is_super_admin()\n * @see is_multisite()\n *\n *\/","file":"ms-deprecated.php","line":43,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[44],"get_current_user_id":[47],"get_user_by":[51],"exists":[52],"is_super_admin":[57]},"used_by":[]},"graceful_fail":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use wp_die()\n * @see wp_die()\n *\/","file":"ms-deprecated.php","line":67,"missingDoc":false,"filters":["'graceful_fail'","'graceful_fail_template'"],"uses":{"_deprecated_function":[68],"sprintf":[94]},"used_by":[]},"get_user_details":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use get_user_by()\n * @see get_user_by()\n *\/","file":"ms-deprecated.php","line":104,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[105],"get_user_by":[106]},"used_by":[]},"clear_global_post_cache":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use clean_post_cache()\n * @see clean_post_cache()\n *\/","file":"ms-deprecated.php","line":115,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[116]},"used_by":[]},"is_main_blog":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_main_site()\n * @see is_main_site()\n *\/","file":"ms-deprecated.php","line":125,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[126],"is_main_site":[127]},"used_by":[]},"validate_email":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_email()\n * @see is_email()\n *\/","file":"ms-deprecated.php","line":136,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[137],"is_email":[138]},"used_by":[]},"get_blog_list":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated No alternative available. For performance reasons this function is not recommended.\n *\/","file":"ms-deprecated.php","line":146,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[147],"get_results":[150],"prepare":[150],"get_var":[154],"get_blog_prefix":[154],"is_array":[159],"array_slice":[163,165],"count":[163]},"used_by":{"get_most_active_blogs":[176]}},"get_most_active_blogs":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated No alternative available. For performance reasons this function is not recommended.\n *\/","file":"ms-deprecated.php","line":173,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[174],"get_blog_list":[176],"reset":[178,184,194],"arsort":[183],"is_array":[177,193],"esc_url":[196],"array_slice":[201]},"used_by":[]},"wpmu_admin_do_redirect":{"doc":"\/**\n * Redirect a user based on $_GET or $_POST arguments.\n *\n * The function looks for redirect arguments in the following order:\n * 1) $_GET['ref']\n * 2) $_POST['ref']\n * 3) $_SERVER['HTTP_REFERER']\n * 4) $_GET['redirect']\n * 5) $_POST['redirect']\n * 6) $url\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use wp_redirect()\n * @uses wpmu_admin_redirect_add_updated_param()\n *\n * @param string $url\n *\/","file":"ms-deprecated.php","line":222,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[223],"wpmu_admin_redirect_add_updated_param":[232,241,246],"wp_redirect":[233,237,248],"esc_html":[244],"substr":[244,243]},"used_by":[]},"wpmu_admin_redirect_add_updated_param":{"doc":"\/**\n * Adds an 'updated=true' argument to a URL.\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use add_query_arg()\n *\n * @param string $url\n * @return string\n *\/","file":"ms-deprecated.php","line":262,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[263],"strpos":[266,265]},"used_by":{"wpmu_admin_do_redirect":[232,241,246]}},"get_sitestats":{"doc":"\/**\n * Gets the network's site and user counts.\n *\n * @since MU 1.0\n * @uses get_blog_count()\n * @uses get_user_count()\n *\n * @return array Site and user count for the network.\n *\/","file":"ms-functions.php","line":19,"missingDoc":false,"filters":[],"uses":{"get_blog_count":[23],"get_user_count":[24]},"used_by":[]},"get_blog_count":{"doc":"\/**\n * The number of active sites on your installation.\n *\n * The count is cached and updated twice daily. This is not a live count.\n *\n * @since MU 1.0\n *\n * @param int $id Optional. A site_id.\n * @return int\n *\/","file":"ms-functions.php","line":144,"missingDoc":false,"filters":[],"uses":{"get_site_option":[145]},"used_by":{"get_sitestats":[23],"wp_version_check":[56]}},"get_user_count":{"doc":"\/**\n * The number of active users in your installation.\n *\n * The count is cached and updated twice daily. This is not a live count.\n *\n * @since MU 2.7\n *\n * @return int\n *\/","file":"ms-functions.php","line":130,"missingDoc":false,"filters":[],"uses":{"get_site_option":[131]},"used_by":{"get_sitestats":[24],"wp_version_check":[55]}},"get_admin_users_for_domain":{"doc":"\/**\n * Get the admin for a domain\/path combination.\n *\n * @since MU 1.0\n *\n * @param string $sitedomain Optional. Site domain.\n * @param string $path Optional. Site path.\n * @return array The network admins\n *\/","file":"ms-functions.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_var":[45],"prepare":[45,48],"get_results":[48]},"used_by":[]},"add_user_to_blog":{"doc":"\/**\n * Add a user to a blog.\n *\n * Use the 'add_user_to_blog' action to fire an event when\n * users are added to a blog.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the blog you're adding the user to.\n * @param int $user_id ID of the user you're adding.\n * @param string $role The role you want the user to have\n * @return bool\n *\/","file":"ms-functions.php","line":178,"missingDoc":false,"filters":["'add_user_to_blog'"],"uses":{"switch_to_blog":[179],"get_userdata":[181],"restore_current_blog":[184,198],"__":[185],"update_user_meta":[189,191],"get_blog_details":[190],"get_user_meta":[188],"set_role":[194],"wp_cache_delete":[197]},"used_by":{"get_active_blog_for_user":[90],"wpmu_create_blog":[980],"add_existing_user_to_blog":[1703],"add_new_user_to_blog":[1724]}},"get_blog_post":{"doc":"\/**\n * Get a blog post from any site on the network.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the blog.\n * @param int $post_id ID of the post you're looking for.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"ms-functions.php","line":157,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[158],"get_post":[159],"restore_current_blog":[160]},"used_by":[]},"remove_user_from_blog":{"doc":"\/**\n * Remove a user from a blog.\n *\n * Use the 'remove_user_from_blog' action to fire an event when\n * users are removed from a blog.\n *\n * Accepts an optional $reassign parameter, if you want to\n * reassign the user's blog posts to another user upon removal.\n *\n * @since MU 1.0\n *\n * @param int $user_id ID of the user you're removing.\n * @param int $blog_id ID of the blog you're removing the user from.\n * @param string $reassign Optional. A user to whom to reassign posts.\n * @return bool\n *\/","file":"ms-functions.php","line":218,"missingDoc":false,"filters":["'remove_user_from_blog'"],"uses":{"switch_to_blog":[220],"get_user_meta":[226],"get_blogs_of_user":[230,252],"update_user_meta":[239,240,254,255],"get_userdata":[244],"restore_current_blog":[246,264],"__":[247],"remove_all_caps":[250],"count":[253],"query":[260,261],"prepare":[260,261]},"used_by":{"add_new_user_to_blog":[1723]}},"create_empty_blog":{"doc":"\/**\n * Create an empty blog.\n *\n * @since MU 1.0\n * @uses install_blog()\n *\n * @param string $domain The new blog's domain.\n * @param string $path The new blog's path.\n * @param string $weblog_title The new blog's title.\n * @param int $site_id Optional. Defaults to 1.\n * @return int The ID of the newly created blog\n *\/","file":"ms-functions.php","line":281,"missingDoc":false,"filters":[],"uses":{"addslashes":[282,283],"__":[290,297],"domain_exists":[289],"insert_blog":[296],"switch_to_blog":[299],"install_blog":[300],"restore_current_blog":[301]},"used_by":[]},"domain_exists":{"doc":"\/**\n * Check whether a blogname is already taken.\n *\n * Used during the new site registration process to ensure\n * that each blogname is unique.\n *\n * @since MU\n *\n * @param string $domain The domain to be checked.\n * @param string $path The path to be checked.\n * @param int $site_id Optional. Relevant only on multi-network installs.\n * @return int\n *\/","file":"ms-functions.php","line":1085,"missingDoc":false,"filters":["'domain_exists'"],"uses":{"get_var":[1087],"prepare":[1087]},"used_by":{"create_empty_blog":[289],"wpmu_validate_blog_signup":[601],"wpmu_create_blog":[967]}},"insert_blog":{"doc":"\/**\n * Store basic site info in the blogs table.\n *\n * This function creates a row in the wp_blogs table and returns\n * the new blog's ID. It is the first step in creating a new blog.\n *\n * @since MU\n *\n * @param string $domain The domain of the new site.\n * @param string $path The path of the new site.\n * @param int $site_id Unless you're running a multi-network install, be sure to set this value to 1.\n * @return int The ID of the new row\n *\/","file":"ms-functions.php","line":1104,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[1107],"insert":[1110],"current_time":[1110],"refresh_blog_details":[1114]},"used_by":{"create_empty_blog":[296],"wpmu_create_blog":[973]}},"install_blog":{"doc":"\/**\n * Install an empty blog.\n *\n * Creates the new blog tables and options. If calling this function\n * directly, be sure to use switch_to_blog() first, so that $wpdb\n * points to the new blog.\n *\n * @since MU\n * @uses make_db_current_silent()\n * @uses populate_roles()\n *\n * @param int $blog_id The value returned by insert_blog().\n * @param string $blog_title The title of the new site.\n *\/","file":"ms-functions.php","line":1132,"missingDoc":false,"filters":[],"uses":{"suppress_errors":[1140,1143],"__":[1142,1142],"get_results":[1141],"get_blogaddress_by_id":[1145],"make_db_current_silent":[1148],"populate_options":[1149],"populate_roles":[1150],"_init":[1151],"untrailingslashit":[1153],"update_option":[1155,1156,1159,1161,1163,1164],"get_blog_option":[1161],"get_site_option":[1158],"stripslashes":[1163],"get_blog_prefix":[1167],"delete_metadata":[1168,1169]},"used_by":{"create_empty_blog":[300],"wpmu_create_blog":[977]}},"get_blog_permalink":{"doc":"\/**\n * Get the permalink for a post on another blog.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the source blog.\n * @param int $post_id ID of the desired post.\n * @return string The post's permalink\n *\/","file":"ms-functions.php","line":315,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[316],"get_permalink":[317],"restore_current_blog":[318]},"used_by":[]},"get_blog_id_from_url":{"doc":"\/**\n * Get a blog's numeric ID from its URL.\n *\n * On a subdirectory installation like example.com\/blog1\/,\n * $domain will be the root 'example.com' and $path the\n * subdirectory '\/blog1\/'. With subdomains like blog1.example.com,\n * $domain is 'blog1.example.com' and $path is '\/'.\n *\n * @since MU 2.6.5\n *\n * @param string $domain\n * @param string $path Optional. Not required for subdomain installations.\n * @return int 0 if no blog found, otherwise the ID of the matching blog\n *\/","file":"ms-functions.php","line":337,"missingDoc":false,"filters":[],"uses":{"strtolower":[340,341],"wp_cache_get":[342],"md5":[342,352,356],"get_var":[349],"prepare":[349],"wp_cache_set":[352,356]},"used_by":[]},"is_email_address_unsafe":{"doc":"\/**\n * Checks an email address against a list of banned domains.\n *\n * This function checks against the Banned Email Domains list\n * at wp-admin\/network\/settings.php. The check is only run on\n * self-registrations; user creation at wp-admin\/network\/users.php\n * bypasses this check.\n *\n * @since MU\n *\n * @param string $user_email The email provided by the user at registration.\n * @return bool Returns true when the email address is banned.\n *\/","file":"ms-functions.php","line":376,"missingDoc":false,"filters":["'is_email_address_unsafe'"],"uses":{"get_site_option":[377],"explode":[379,384],"is_array":[378,383],"substr":[396],"strlen":[396]},"used_by":{"wpmu_validate_user_signup":[456]}},"wpmu_validate_user_signup":{"doc":"\/**\n * Processes new user registrations.\n *\n * Checks the data provided by the user during signup. Verifies\n * the validity and uniqueness of user names and user email addresses,\n * and checks email addresses against admin-provided domain\n * whitelists and blacklists.\n *\n * The hook 'wpmu_validate_user_signup' provides an easy way\n * to modify the signup process. The value $result, which is passed\n * to the hook, contains both the user-provided info and the error\n * messages created by the function. 'wpmu_validate_user_signup' allows\n * you to process the data in any way you'd like, and unset the\n * relevant errors if necessary.\n *\n * @since MU\n * @uses is_email_address_unsafe()\n * @uses username_exists()\n * @uses email_exists()\n *\n * @param string $user_name The login name provided by the user.\n * @param string $user_email The email provided by the user.\n * @return array Contains username, email, and error messages.\n *\/","file":"ms-functions.php","line":430,"missingDoc":false,"filters":["'wpmu_validate_user_signup'"],"uses":{"preg_replace":[436],"sanitize_user":[436],"add":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"__":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"preg_match":[438,467],"sanitize_email":[443],"get_site_option":[448,474],"add_site_option":[451],"is_array":[449,475],"in_array":[453,477],"is_email_address_unsafe":[456],"strlen":[459],"strpos":[462,476],"is_email":[471],"substr":[476],"username_exists":[482],"email_exists":[486],"get_row":[490,505],"prepare":[490,505],"mysql2date":[492,507],"current_time":[493,507],"delete":[497,510]},"used_by":[]},"add_site_option":{"doc":"\/**\n * Add a new site option.\n *\n * Existing options will not be updated. Note that prior to 3.3 this wasn't the case.\n *\n * @see add_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses apply_filters() Calls 'pre_add_site_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'add_site_option_$option' and 'add_site_option' hooks on success.\n *\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"option.php","line":810,"missingDoc":false,"filters":["'pre_add_site_option_' . $option","\"add_site_option_{$option}\"","'add_site_option'"],"uses":{"add_option":[816],"get_site_option":[820],"sanitize_option":[823],"wp_cache_set":[824],"maybe_serialize":[827],"insert":[828],"is_multisite":[815]},"used_by":{"wpmu_validate_user_signup":[451],"wpmu_validate_blog_signup":[554],"update_site_option":[908],"set_site_transient":[1043,1044]}},"username_exists":{"doc":"\/**\n * Checks whether the given username exists.\n *\n * @since 2.0.0\n *\n * @param string $username Username.\n * @return null|int The user's ID on success, and null on failure.\n *\/","file":"user.php","line":1197,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1198]},"used_by":{"wpmu_validate_user_signup":[482],"wpmu_validate_blog_signup":[604],"wpmu_activate_signup":[851],"wp_insert_user":[1312]}},"email_exists":{"doc":"\/**\n * Checks whether the given email exists.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $email Email.\n * @return bool|int The user's ID on success, and false on failure.\n *\/","file":"user.php","line":1214,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1215]},"used_by":{"wpmu_validate_user_signup":[486],"wp_insert_user":[1327]}},"wpmu_validate_blog_signup":{"doc":"\/**\n * Processes new site registrations.\n *\n * Checks the data provided by the user during blog signup. Verifies\n * the validity and uniqueness of blog paths and domains.\n *\n * This function prevents the current user from registering a new site\n * with a blogname equivalent to another user's login name. Passing the\n * $user parameter to the function, where $user is the other user, is\n * effectively an override of this limitation.\n *\n * Filter 'wpmu_validate_blog_signup' if you want to modify\n * the way that WordPress validates new site signups.\n *\n * @since MU\n * @uses domain_exists()\n * @uses username_exists()\n *\n * @param string $blogname The blog name provided by the user. Must be unique.\n * @param string $blog_title The blog title provided by the user.\n * @return array Contains the new site data and error messages.\n *\/","file":"ms-functions.php","line":542,"missingDoc":false,"filters":["'subdirectory_reserved_names'","'newblogname'","'wpmu_validate_blog_signup'"],"uses":{"strip_tags":[547],"substr":[548],"get_site_option":[551],"add_site_option":[554],"array_merge":[559],"is_subdomain_install":[558,577,594],"add":[562,565,568,571,574,578,584,591,602,606,617],"__":[562,565,568,571,574,578,584,591,602,606,617],"preg_match":[564,582],"in_array":[567],"strlen":[570],"is_super_admin":[570],"strpos":[573],"get_var":[577],"prepare":[577,610],"get_blog_prefix":[577],"stripslashes":[588],"preg_replace":[595],"domain_exists":[601],"is_object":[605,605],"username_exists":[604],"get_row":[610],"current_time":[612],"mysql2date":[612],"delete":[615]},"used_by":[]},"wpmu_signup_blog":{"doc":"\/**\n * Record site signup information for future activation.\n *\n * @since MU\n * @uses wpmu_signup_blog_notification()\n *\n * @param string $domain The requested domain.\n * @param string $path The requested path.\n * @param string $title The requested site title.\n * @param string $user The user's requested login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, contains the requested privacy setting and lang_id.\n *\/","file":"ms-functions.php","line":637,"missingDoc":false,"filters":[],"uses":{"substr":[640],"md5":[640],"time":[640],"rand":[640],"serialize":[641],"escape":[642,643,644],"insert":[646],"current_time":[652],"wpmu_signup_blog_notification":[657]},"used_by":[]},"wpmu_signup_blog_notification":{"doc":"\/**\n * Notify user of signup success.\n *\n * This is the notification function used when site registration\n * is enabled.\n *\n * Filter 'wpmu_signup_blog_notification' to bypass this function or\n * replace it with your own notification behavior.\n *\n * Filter 'wpmu_signup_blog_notification_email' and\n * 'wpmu_signup_blog_notification_subject' to change the content\n * and subject line of the email sent to newly registered users.\n *\n * @since MU\n *\n * @param string $domain The new blog domain.\n * @param string $path The new blog path.\n * @param string $title The site title.\n * @param string $user The user's login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, contains the requested privacy setting and lang_id.\n * @param string $key The activation key created in wpmu_signup_blog()\n * @return bool\n *\/","file":"ms-functions.php","line":720,"missingDoc":false,"filters":["'wpmu_signup_blog_notification'","'wpmu_signup_blog_notification_email'","'wpmu_signup_blog_notification_subject'"],"uses":{"network_site_url":[728],"is_subdomain_install":[727],"esc_url":[732,744,754],"get_site_option":[733,736,736],"esc_html":[736],"get_option":[737],"sprintf":[738,748],"__":[740,750],"wp_mail":[756]},"used_by":{"wpmu_signup_blog":[657]}},"wpmu_signup_user":{"doc":"\/**\n * Record user signup information for future activation.\n *\n * This function is used when user registration is open but\n * new site registration is not.\n *\n * @since MU\n * @uses wpmu_signup_user_notification()\n *\n * @param string $user The user's requested login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, this is an empty array.\n *\/","file":"ms-functions.php","line":673,"missingDoc":false,"filters":[],"uses":{"preg_replace":[677],"sanitize_user":[677],"sanitize_email":[678],"substr":[679],"md5":[679],"time":[679],"rand":[679],"serialize":[680],"insert":[682],"current_time":[688],"wpmu_signup_user_notification":[693]},"used_by":[]},"wpmu_signup_user_notification":{"doc":"\/**\n * Notify user of signup success.\n *\n * This is the notification function used when no new site has\n * been requested.\n *\n * Filter 'wpmu_signup_user_notification' to bypass this function or\n * replace it with your own notification behavior.\n *\n * Filter 'wpmu_signup_user_notification_email' and\n * 'wpmu_signup_user_notification_subject' to change the content\n * and subject line of the email sent to newly registered users.\n *\n * @since MU\n *\n * @param string $user The user's login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, an empty array.\n * @param string $key The activation key created in wpmu_signup_user()\n * @return bool\n *\/","file":"ms-functions.php","line":781,"missingDoc":false,"filters":["'wpmu_signup_user_notification'","'wpmu_signup_user_notification_email'","'wpmu_signup_user_notification_subject'"],"uses":{"get_site_option":[786,789,789],"esc_html":[789],"get_option":[790],"sprintf":[791,799],"__":[793,801],"site_url":[796],"wp_mail":[807]},"used_by":{"wpmu_signup_user":[693]}},"wp_mail":{"doc":"\/**\n * Send mail, similar to PHP's mail\n *\n * A true return value does not automatically mean that the user received the\n * email successfully. It just only means that the method used was able to\n * process the request without any errors.\n *\n * Using the two 'wp_mail_from' and 'wp_mail_from_name' hooks allow from\n * creating a from address like 'Name <email@address.com>' when both are set. If\n * just 'wp_mail_from' is set, then just the email address will be used with no\n * name.\n *\n * The default content type is 'text\/plain' which does not allow using HTML.\n * However, you can set the content type of the email by using the\n * 'wp_mail_content_type' filter.\n *\n * The default charset is based on the charset used on the blog. The charset can\n * be set using the 'wp_mail_charset' filter.\n *\n * @since 1.2.1\n * @uses apply_filters() Calls 'wp_mail' hook on an array of all of the parameters.\n * @uses apply_filters() Calls 'wp_mail_from' hook to get the from email address.\n * @uses apply_filters() Calls 'wp_mail_from_name' hook to get the from address name.\n * @uses apply_filters() Calls 'wp_mail_content_type' hook to get the email content type.\n * @uses apply_filters() Calls 'wp_mail_charset' hook to get the email charset\n * @uses do_action_ref_array() Calls 'phpmailer_init' hook on the reference to\n *\t\tphpmailer object.\n * @uses PHPMailer\n *\n * @param string|array $to Array or comma-separated list of email addresses to send message.\n * @param string $subject Email subject\n * @param string $message Message contents\n * @param string|array $headers Optional. Additional headers.\n * @param string|array $attachments Optional. Files to attach.\n * @return bool Whether the email contents were sent successfully.\n *\/","file":"pluggable.php","line":214,"missingDoc":false,"filters":["'wp_mail'","'wp_mail_from'","'wp_mail_from_name'","'wp_mail_content_type'","'wp_mail_charset'","'phpmailer_init'"],"uses":{"extract":[216],"compact":[216],"explode":[219,237,257,281,294,297,345],"str_replace":[219,237,252,269,273,284,286],"is_array":[218,234,344],"is_object":[224],"is_a":[224],"preg_split":[251],"trim":[251,252,257,260,261,270,274,276,282,284,286,290,301,301],"stripos":[250,285,283,433],"strpos":[249,268,272,266,280],"strtolower":[263,331],"substr":[268,272,333,332],"array_merge":[294,297],"ClearAddresses":[309],"ClearAllRecipients":[310],"ClearAttachments":[311],"ClearBCCs":[312],"ClearCCs":[313],"ClearCustomHeaders":[314],"ClearReplyTos":[315],"count":[352,374,392],"preg_match":[351,373,391],"AddAddress":[357],"AddCc":[379],"AddBcc":[397],"IsMail":[405],"IsHTML":[418],"get_bloginfo":[422],"AddCustomHeader":[430,434],"sprintf":[430,434],"AddAttachment":[440],"Send":[451]},"used_by":{"wpmu_signup_blog_notification":[756],"wpmu_signup_user_notification":[807],"newblog_notify_siteadmin":[1034],"newuser_notify_siteadmin":[1068],"wpmu_welcome_notification":[1259],"wpmu_welcome_user_notification":[1307],"wp_notify_postauthor":[1078],"wp_notify_moderator":[1161],"wp_password_change_notification":[1183],"wp_new_user_notification":[1211,1220]}},"wpmu_activate_signup":{"doc":"\/**\n * Activate a signup.\n *\n * Hook to 'wpmu_activate_user' or 'wpmu_activate_blog' for events\n * that should happen only when users or sites are self-created (since\n * those actions are not called when users and sites are created\n * by a Super Admin).\n *\n * @since MU\n * @uses wp_generate_password()\n * @uses wpmu_welcome_user_notification()\n * @uses add_user_to_blog()\n * @uses add_new_user_to_blog()\n * @uses wpmu_create_user()\n * @uses wpmu_create_blog()\n * @uses wpmu_welcome_notification()\n *\n * @param string $key The activation key provided to the user.\n * @return array An array containing information about the activated user and\/or blog\n *\/","file":"ms-functions.php","line":831,"missingDoc":false,"filters":["'wpmu_activate_user'","'wpmu_activate_blog'"],"uses":{"get_row":[834],"prepare":[834],"__":[837,841,843,859,867],"maybe_unserialize":[846],"escape":[847,848],"wp_generate_password":[849],"username_exists":[851],"wpmu_create_user":[854],"current_time":[861],"update":[864,884,889],"wpmu_welcome_user_notification":[869],"add_new_user_to_blog":[871],"wpmu_create_blog":[876],"add_data":[883],"get_error_code":[882],"is_wp_error":[879],"wpmu_welcome_notification":[890]},"used_by":[]},"wpmu_create_user":{"doc":"\/**\n * Create a user.\n *\n * This function runs when a user self-registers as well as when\n * a Super Admin creates a new user. Hook to 'wpmu_new_user' for events\n * that should affect all new users, but only on Multisite (otherwise\n * use 'user_register').\n *\n * @since MU\n * @uses wp_create_user()\n *\n * @param string $user_name The new user's login name.\n * @param string $password The new user's password.\n * @param string $email The new user's email address.\n * @return mixed Returns false on failure, or int $user_id on success\n *\/","file":"ms-functions.php","line":912,"missingDoc":false,"filters":["'wpmu_new_user'"],"uses":{"preg_replace":[913],"sanitize_user":[913],"wp_create_user":[915],"is_wp_error":[916],"delete_user_option":[920,921]},"used_by":{"wpmu_activate_signup":[854]}},"wpmu_welcome_user_notification":{"doc":"\/**\n * Notify a user that her account activation has been successful.\n *\n * Filter 'wpmu_welcome_user_notification' to disable or bypass.\n *\n * Filter 'update_welcome_user_email' and 'update_welcome_user_subject' to\n * modify the content and subject line of the notification email.\n *\n * @since MU\n *\n * @param int $user_id\n * @param string $password\n * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization.\n * @return bool\n *\/","file":"ms-functions.php","line":1278,"missingDoc":false,"filters":["'wpmu_welcome_user_notification'","'update_welcome_user_email'","'update_welcome_user_subject'"],"uses":{"get_site_option":[1284,1294,1299,1299],"get_userdata":[1286],"str_replace":[1289,1290,1291,1292],"wp_login_url":[1292],"esc_html":[1299],"get_option":[1300],"sprintf":[1306],"__":[1306],"wp_mail":[1307]},"used_by":{"wpmu_activate_signup":[869]}},"add_new_user_to_blog":{"doc":"\/**\n * Add a newly created user to the appropriate blog\n *\n * @since MU\n *\n * @param int $user_id\n * @param string $email\n * @param array $meta\n *\/","file":"ms-functions.php","line":1718,"missingDoc":false,"filters":[],"uses":{"remove_user_from_blog":[1723],"add_user_to_blog":[1724],"update_user_meta":[1725]},"used_by":{"wpmu_activate_signup":[871]}},"wpmu_create_blog":{"doc":"\/**\n * Create a site.\n *\n * This function runs when a user self-registers a new site as well\n * as when a Super Admin creates a new site. Hook to 'wpmu_new_blog'\n * for events that should affect all new sites.\n *\n * On subdirectory installs, $domain is the same as the main site's\n * domain, and the path is the subdirectory name (eg 'example.com'\n * and '\/blog1\/'). On subdomain installs, $domain is the new subdomain +\n * root domain (eg 'blog1.example.com'), and $path is '\/'.\n *\n * @since MU\n * @uses domain_exists()\n * @uses insert_blog()\n * @uses wp_install_defaults()\n * @uses add_user_to_blog()\n *\n * @param string $domain The new site's domain.\n * @param string $path The new site's path.\n * @param string $title The new site's title.\n * @param int $user_id The user ID of the new site's admin.\n * @param array $meta Optional. Used to set initial site options.\n * @param int $site_id Optional. Only relevant on multi-network installs.\n * @return mixed Returns WP_Error object on failure, int $blog_id on success\n *\/","file":"ms-functions.php","line":954,"missingDoc":false,"filters":["'wpmu_new_blog'"],"uses":{"preg_replace":[955],"sanitize_user":[955],"str_replace":[958],"is_subdomain_install":[957],"strip_tags":[960],"__":[968,974],"domain_exists":[967],"define":[971],"defined":[970],"insert_blog":[973],"switch_to_blog":[976],"install_blog":[977],"wp_install_defaults":[978],"add_user_to_blog":[980],"update_blog_status":[984],"update_option":[986,990],"is_array":[982],"add_option":[989],"get_site_option":[989],"update_user_meta":[993],"is_super_admin":[992],"get_user_meta":[992],"restore_current_blog":[995]},"used_by":{"wpmu_activate_signup":[876]}},"wpmu_welcome_notification":{"doc":"\/**\n * Notify a user that her blog activation has been successful.\n *\n * Filter 'wpmu_welcome_notification' to disable or bypass.\n *\n * Filter 'update_welcome_email' and 'update_welcome_subject' to\n * modify the content and subject line of the notification email.\n *\n * @since MU\n *\n * @param int $blog_id\n * @param int $user_id\n * @param string $password\n * @param string $title The new blog's title\n * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization.\n * @return bool\n *\/","file":"ms-functions.php","line":1214,"missingDoc":false,"filters":["'wpmu_welcome_notification'","'update_welcome_email'","'update_welcome_subject'"],"uses":{"stripslashes":[1220,1222,1258],"get_site_option":[1220,1246,1251,1251],"__":[1222,1258],"get_blogaddress_by_id":[1236],"get_userdata":[1237],"str_replace":[1239,1240,1241,1242,1243],"esc_html":[1251],"get_option":[1252],"sprintf":[1258],"wp_mail":[1259]},"used_by":{"wpmu_activate_signup":[890]}},"delete_user_option":{"doc":"\/**\n * Delete user option with global blog capability.\n *\n * User options are just like user metadata except that they have support for\n * global blog options. If the 'global' parameter is false, which it is by default\n * it will prepend the WordPress table prefix to the option name.\n *\n * @since 3.0.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param int $user_id User ID\n * @param string $option_name User option name.\n * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).\n * @return unknown\n *\/","file":"user.php","line":302,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[307]},"used_by":{"wpmu_create_user":[920,921]}},"newblog_notify_siteadmin":{"doc":"\/**\n * Notifies the network admin that a new site has been activated.\n *\n * Filter 'newblog_notify_siteadmin' to change the content of\n * the notification email.\n *\n * @since MU\n *\n * @param int $blog_id The new site's ID.\n * @return bool\n *\/","file":"ms-functions.php","line":1012,"missingDoc":false,"filters":["'newblog_notify_siteadmin'"],"uses":{"get_site_option":[1013,1016],"is_email":[1017],"esc_url":[1020],"network_admin_url":[1020],"switch_to_blog":[1022],"get_option":[1023],"site_url":[1024],"restore_current_blog":[1025],"sprintf":[1027,1034],"__":[1027,1034],"wp_mail":[1034]},"used_by":[]},"newuser_notify_siteadmin":{"doc":"\/**\n * Notifies the network admin that a new user has been activated.\n *\n * Filter 'newuser_notify_siteadmin' to change the content of\n * the notification email.\n *\n * @since MU\n * @uses apply_filters() Filter newuser_notify_siteadmin to change the content of the email message\n *\n * @param int $user_id The new user's ID.\n * @return bool\n *\/","file":"ms-functions.php","line":1050,"missingDoc":false,"filters":["'newuser_notify_siteadmin'"],"uses":{"get_site_option":[1051,1054],"is_email":[1056],"get_userdata":[1059],"esc_url":[1061],"network_admin_url":[1061],"sprintf":[1062,1068],"__":[1062,1068],"wp_mail":[1068]},"used_by":[]},"install_blog_defaults":{"doc":"\/**\n * Set blog defaults.\n *\n * This function creates a row in the wp_blogs table.\n *\n * @since MU\n * @deprecated MU\n * @deprecated Use wp_install_defaults()\n * @uses wp_install_defaults()\n *\n * @param int $blog_id Ignored in this function.\n * @param int $user_id\n *\/","file":"ms-functions.php","line":1185,"missingDoc":false,"filters":[],"uses":{"suppress_errors":[1190,1194],"wp_install_defaults":[1192]},"used_by":[]},"get_current_site":{"doc":"\/**\n * Get the current site info.\n *\n * Returns an object containing the ID, domain, path, and site_name\n * of the site being viewed.\n *\n * @since MU\n *\n * @return object\n *\/","file":"ms-functions.php","line":1321,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_user_id_from_string":{"doc":"\/**\n * Get a numeric user ID from either an email address or a login.\n *\n * @since MU\n * @uses is_email()\n *\n * @param string $string\n * @return int\n *\/","file":"ms-functions.php","line":1335,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1338,1344],"is_numeric":[1341],"is_email":[1337]},"used_by":{"is_user_spammy":[1753]}},"get_most_recent_post_of_user":{"doc":"\/**\n * Get a user's most recent post.\n *\n * Walks through each of a user's blogs to find the post with\n * the most recent post_date_gmt.\n *\n * @since MU\n * @uses get_blogs_of_user()\n *\n * @param int $user_id\n * @return array Contains the blog_id, post_id, post_date_gmt, and post_gmt_ts\n *\/","file":"ms-functions.php","line":1364,"missingDoc":false,"filters":[],"uses":{"get_blogs_of_user":[1367],"get_blog_prefix":[1373],"get_row":[1374],"prepare":[1374],"strtotime":[1378]},"used_by":[]},"get_dirsize":{"doc":"\/**\n * Get the size of a directory.\n *\n * A helper function that is used primarily to check whether\n * a blog has exceeded its allowed upload space.\n *\n * @since MU\n * @uses recurse_dirsize()\n *\n * @param string $directory\n * @return int\n *\/","file":"ms-functions.php","line":1411,"missingDoc":false,"filters":[],"uses":{"get_transient":[1412],"is_array":[1413,1416],"recurse_dirsize":[1419],"set_transient":[1421]},"used_by":{"get_space_used":[1947]}},"recurse_dirsize":{"doc":"\/**\n * Get the size of a directory recursively.\n *\n * Used by get_dirsize() to get a directory's size when it contains\n * other directories.\n *\n * @since MU\n *\n * @param string $directory\n * @return int\n *\/","file":"ms-functions.php","line":1436,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[1439],"file_exists":[1441],"is_dir":[1441,1450],"is_readable":[1441],"readdir":[1445],"filesize":[1449],"recurse_dirsize":[1451],"is_file":[1448],"closedir":[1457],"opendir":[1444]},"used_by":{"get_dirsize":[1419],"recurse_dirsize":[1451]}},"check_upload_mimes":{"doc":"\/**\n * Check an array of MIME types against a whitelist.\n *\n * WordPress ships with a set of allowed upload filetypes,\n * which is defined in wp-includes\/functions.php in\n * get_allowed_mime_types(). This function is used to filter\n * that list against the filetype whitelist provided by Multisite\n * Super Admins at wp-admin\/network\/settings.php.\n *\n * @since MU\n *\n * @param array $mimes\n * @return array\n *\/","file":"ms-functions.php","line":1476,"missingDoc":false,"filters":[],"uses":{"explode":[1477],"get_site_option":[1477],"strpos":[1480]},"used_by":[]},"update_posts_count":{"doc":"\/**\n * Update a blog's post count.\n *\n * WordPress MS stores a blog's post count as an option so as\n * to avoid extraneous COUNTs when a blog's details are fetched\n * with get_blog_details(). This function is called when posts\n * are published to make sure the count stays current.\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1497,"missingDoc":false,"filters":[],"uses":{"update_option":[1499],"get_var":[1499]},"used_by":[]},"wpmu_log_new_registrations":{"doc":"\/**\n * Logs user registrations.\n *\n * @since MU\n *\n * @param int $blog_id\n * @param int $user_id\n *\/","file":"ms-functions.php","line":1510,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1512],"insert":[1513],"preg_replace":[1513],"current_time":[1513]},"used_by":[]},"global_terms":{"doc":"\/**\n * Maintains a canonical list of terms by syncing terms created for each blog with the global terms table.\n *\n * @since 3.0.0\n *\n * @see term_id_filter\n *\n * @param int $term_id An ID for a term on the current blog.\n * @return int An ID from the global terms table mapped from $term_id.\n *\/","file":"ms-functions.php","line":1526,"missingDoc":false,"filters":[],"uses":{"global_terms_enabled":[1530],"intval":[1542],"get_row":[1543,1561],"prepare":[1543,1545,1547,1561],"get_var":[1545,1547,1554,1555],"insert":[1549,1557],"max":[1556],"mt_rand":[1556],"global_terms":[1563],"update_option":[1570],"get_option":[1569],"update":[1572,1573,1574],"clean_term_cache":[1576]},"used_by":{"global_terms":[1563]}},"redirect_this_site":{"doc":"\/**\n * Ensure that the current site's domain is listed in the allowed redirect host list.\n *\n * @see wp_validate_redirect()\n * @since MU\n *\n * @return array The current site's domain\n *\/","file":"ms-functions.php","line":1592,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"upload_is_file_too_big":{"doc":"\/**\n * Check whether an upload is too big.\n *\n * @since MU\n *\n * @param array $upload\n * @return mixed If the upload is under the size limit, $upload is returned. Otherwise returns an error message.\n *\/","file":"ms-functions.php","line":1605,"missingDoc":false,"filters":[],"uses":{"is_array":[1606],"defined":[1606],"get_site_option":[1606,1610,1609],"sprintf":[1610],"__":[1610],"strlen":[1609]},"used_by":[]},"signup_nonce_fields":{"doc":"\/**\n * Add a nonce field to the signup page.\n *\n * @since MU\n * @uses wp_nonce_field()\n *\/","file":"ms-functions.php","line":1621,"missingDoc":false,"filters":[],"uses":{"mt_rand":[1622],"wp_nonce_field":[1624]},"used_by":[]},"signup_nonce_check":{"doc":"\/**\n * Process the signup nonce created in signup_nonce_fields().\n *\n * @since MU\n * @uses wp_create_nonce()\n *\n * @param array $result\n * @return array\n *\/","file":"ms-functions.php","line":1636,"missingDoc":false,"filters":[],"uses":{"strpos":[1637],"wp_die":[1641],"__":[1641],"wp_create_nonce":[1640]},"used_by":[]},"maybe_redirect_404":{"doc":"\/**\n * Correct 404 redirects when NOBLOGREDIRECT is defined.\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1651,"missingDoc":false,"filters":["'blog_redirect_404'"],"uses":{"network_home_url":[1655],"wp_redirect":[1656],"is_main_site":[1653],"is_404":[1653],"defined":[1653]},"used_by":[]},"maybe_add_existing_user_to_blog":{"doc":"\/**\n * Add a new user to a blog by visiting \/newbloguser\/username\/.\n *\n * This will only work when the user's details are saved as an option\n * keyed as 'new_user_x', where 'x' is the username of the user to be\n * added, as when a user is invited through the regular WP Add User interface.\n *\n * @since MU\n * @uses add_existing_user_to_blog()\n *\/","file":"ms-functions.php","line":1671,"missingDoc":false,"filters":[],"uses":{"strpos":[1672],"explode":[1675],"array_pop":[1676,1679],"get_option":[1681],"delete_option":[1683],"wp_die":[1686,1688],"sprintf":[1686,1688],"__":[1686,1688,1688],"home_url":[1686,1688],"is_wp_error":[1685],"add_existing_user_to_blog":[1685],"admin_url":[1688]},"used_by":[]},"add_existing_user_to_blog":{"doc":"\/**\n * Add a user to a blog based on details from maybe_add_existing_user_to_blog().\n *\n * @since MU\n * @uses add_user_to_blog()\n *\n * @param array $details\n *\/","file":"ms-functions.php","line":1699,"missingDoc":false,"filters":["'added_existing_user'"],"uses":{"add_user_to_blog":[1703],"is_array":[1702]},"used_by":{"maybe_add_existing_user_to_blog":[1685]}},"fix_phpmailer_messageid":{"doc":"\/**\n * Correct From host on outgoing mail to match the site domain\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1734,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"is_user_spammy":{"doc":"\/**\n * Check to see whether a user is marked as a spammer, based on username\n *\n * @since MU\n * @uses get_current_user_id()\n * @uses get_user_id_from_string()\n *\n * @param string $username\n * @return bool\n *\/","file":"ms-functions.php","line":1749,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[1751],"get_user_id_from_string":[1753],"get_userdata":[1755]},"used_by":[]},"update_blog_public":{"doc":"\/**\n * Update this blog's 'public' setting in the global blogs table.\n *\n * Public blogs have a setting of 1, private blogs are 0.\n *\n * @since MU\n * @uses update_blog_status()\n *\n * @param int $old_value\n * @param int $value The new public value\n * @return bool\n *\/","file":"ms-functions.php","line":1772,"missingDoc":false,"filters":["'update_blog_public'"],"uses":{"update_blog_status":[1775]},"used_by":[]},"get_dashboard_blog":{"doc":"\/**\n * Get the \"dashboard blog\", the blog where users without a blog edit their profile data.\n *\n * @since MU\n * @uses get_blog_details()\n *\n * @return int\n *\/","file":"ms-functions.php","line":1787,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[1789,1791],"get_site_option":[1788]},"used_by":[]},"is_user_option_local":{"doc":"\/**\n * Check whether a usermeta key has to do with the current blog.\n *\n * @since MU\n * @uses wp_get_current_user()\n *\n * @param string $key\n * @param int $user_id Optional. Defaults to current user.\n * @param int $blog_id Optional. Defaults to current blog.\n * @return bool\n *\/","file":"ms-functions.php","line":1805,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1808],"get_blog_prefix":[1814]},"used_by":[]},"users_can_register_signup_filter":{"doc":"\/**\n * Check whether users can self-register, based on Network settings.\n *\n * @since MU\n *\n * @return bool\n *\/","file":"ms-functions.php","line":1829,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1830]},"used_by":[]},"welcome_user_msg_filter":{"doc":"\/**\n * Ensure that the welcome message is not empty. Currently unused.\n *\n * @since MU\n *\n * @param string $text\n * @return string\n *\/","file":"ms-functions.php","line":1846,"missingDoc":false,"filters":[],"uses":{"remove_filter":[1848],"__":[1849],"update_site_option":[1861]},"used_by":[]},"update_site_option":{"doc":"\/**\n * Update the value of a site option that was already added.\n *\n * @see update_option()\n * @since 2.8.0\n * @package WordPress\n * @subpackage Option\n *\n * @uses apply_filters() Calls 'pre_update_site_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'update_site_option_$option' and 'update_site_option' hooks on success.\n *\n * @param string $option Name of option. Expected to not be SQL-escaped.\n * @param mixed $value Option value. Expected to not be SQL-escaped.\n * @return bool False if value was not updated and true if value was updated.\n *\/","file":"option.php","line":898,"missingDoc":false,"filters":["'pre_update_site_option_' . $option","\"update_site_option_{$option}\"","'update_site_option'"],"uses":{"get_site_option":[901],"add_site_option":[908],"update_option":[911],"sanitize_option":[913],"wp_cache_set":[915],"maybe_serialize":[918],"update":[919],"is_multisite":[910]},"used_by":{"welcome_user_msg_filter":[1861],"wp_update_network_counts":[1929,1932],"set_site_transient":[1047,1048],"wp_salt":[1364,1373]}},"force_ssl_content":{"doc":"\/**\n * Whether to force SSL on content.\n *\n * @since 2.8.5\n *\n * @param string|bool $force\n * @return bool True if forced, false if not forced.\n *\/","file":"ms-functions.php","line":1875,"missingDoc":false,"filters":[],"uses":[],"used_by":{"filter_SSL":[1901]}},"filter_SSL":{"doc":"\/**\n * Formats a URL to use https.\n *\n * Useful as a filter.\n *\n * @since 2.8.5\n *\n * @param string URL\n * @return string URL with https as the scheme\n *\/","file":"ms-functions.php","line":1897,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1899],"is_string":[1898],"set_url_scheme":[1902],"force_ssl_content":[1901],"is_ssl":[1901]},"used_by":[]},"wp_schedule_update_network_counts":{"doc":"\/**\n * Schedule update of the network-wide counts for the current network.\n *\n * @since 3.1.0\n *\/","file":"ms-functions.php","line":1912,"missingDoc":false,"filters":[],"uses":{"is_main_site":[1913],"wp_schedule_event":[1917],"time":[1917],"wp_next_scheduled":[1916],"defined":[1916]},"used_by":[]},"wp_update_network_counts":{"doc":"\/**\n * Update the network-wide counts for the current network.\n *\n * @since 3.1.0\n *\/","file":"ms-functions.php","line":1925,"missingDoc":false,"filters":[],"uses":{"get_var":[1928,1931],"prepare":[1928],"update_site_option":[1929,1932]},"used_by":[]},"get_space_used":{"doc":"\/**\n * Returns the space used by the current blog.\n *\n * @since 3.5.0\n *\n * @return int Used space in megabytes\n *\/","file":"ms-functions.php","line":1942,"missingDoc":false,"filters":["'pre_get_space_used'"],"uses":{"wp_upload_dir":[1946],"get_dirsize":[1947]},"used_by":{"get_upload_space_available":[1984]}},"get_space_allowed":{"doc":"\/**\n * Returns the upload quota for the current blog.\n *\n * @since MU\n *\n * @return int Quota in megabytes\n *\/","file":"ms-functions.php","line":1960,"missingDoc":false,"filters":[],"uses":{"get_option":[1961],"get_site_option":[1964],"is_numeric":[1963,1966]},"used_by":{"get_upload_space_available":[1980]}},"get_upload_space_available":{"doc":"\/**\n * Determines if there is any upload space left in the current blog's quota.\n *\n * @since 3.0.0\n *\n * @return int of upload space available in bytes\n *\/","file":"ms-functions.php","line":1979,"missingDoc":false,"filters":[],"uses":{"get_space_allowed":[1980],"get_site_option":[1981],"get_space_used":[1984]},"used_by":{"is_upload_space_available":[2002],"upload_size_limit_filter":[2015]}},"upload_size_limit_filter":{"doc":"\/**\n * @since 3.0.0\n *\n * @return int of upload size limit in bytes\n *\/","file":"ms-functions.php","line":2010,"missingDoc":false,"filters":[],"uses":{"get_site_option":[2011,2012],"min":[2013,2015],"get_upload_space_available":[2015]},"used_by":[]},"ms_site_check":{"doc":"\/**\n * Checks status of current blog.\n *\n * Checks if the blog is deleted, inactive, archived, or spammed.\n *\n * Dies with a default message if the blog does not pass the check.\n *\n * To change the default message when a blog does not pass the check,\n * use the wp-content\/blog-deleted.php, blog-inactive.php and\n * blog-suspended.php drop-ins.\n *\n * @return bool|string Returns true on success, or drop-in file to include.\n *\/","file":"ms-load.php","line":71,"missingDoc":false,"filters":["'ms_site_check'"],"uses":{"get_blog_details":[74],"is_super_admin":[82],"wp_die":[89,96,103],"__":[89,96,103],"file_exists":[86,93,100],"sprintf":[96],"str_replace":[96],"get_site_option":[96]},"used_by":[]},"get_current_site_name":{"doc":"\/**\n * Sets current site name.\n *\n * @access private\n * @since 3.0.0\n * @return object $current_site object with site_name\n *\/","file":"ms-load.php","line":116,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[119],"get_var":[121],"prepare":[121],"ucfirst":[123],"wp_cache_set":[124]},"used_by":{"wpmu_current_site":[173],"__main":[114]}},"wpmu_current_site":{"doc":"\/**\n * Sets current_site object.\n *\n * @access private\n * @since 3.0.0\n * @return object $current_site object\n *\/","file":"ms-load.php","line":137,"missingDoc":false,"filters":[],"uses":{"defined":[144,149,147,143,143,210],"substr":[153,154,175,174,179,200],"wp_load_core_site_options":[158,170],"wp_cache_get":[163],"get_results":[167],"get_var":[172],"prepare":[172,182,184,188,190,201,207],"get_current_site_name":[173],"wp_cache_set":[176],"count":[168,218],"strpos":[179,200],"get_row":[182,184,188,190,201,207],"is_subdomain_install":[199],"wp_load_translations_early":[216],"wp_die":[219,221],"sprintf":[219],"__":[219,221]},"used_by":{"__main":[48]}},"wp_load_core_site_options":{"doc":"\/**\n * Loads and caches certain often requested site options if is_multisite() and a persistent cache is not being used.\n *\n * @since 3.0.0\n * @package WordPress\n * @subpackage Option\n *\n * @param int $site_id Optional site ID for which to query the options. Defaults to the current site.\n *\/","file":"option.php","line":168,"missingDoc":false,"filters":[],"uses":{"is_multisite":[171],"defined":[171],"implode":[179],"get_results":[180],"prepare":[180],"maybe_unserialize":[185],"wp_cache_set":[187]},"used_by":{"wpmu_current_site":[158,170]}},"ms_not_installed":{"doc":"\/**\n * Displays a failure message.\n *\n * Used when a blog's tables do not exist. Checks for a missing $wpdb->site table as well.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"ms-load.php","line":232,"missingDoc":false,"filters":[],"uses":{"wp_load_translations_early":[235],"__":[237,241,242,244,246,247,248,249],"is_admin":[239],"sprintf":[244,246],"rtrim":[246],"get_var":[243],"tables":[250],"wp_die":[257]},"used_by":{"__main":[104]}},"Walker_Nav_Menu::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n *\/","file":"nav-menu-template.php","line":40,"missingDoc":false,"filters":[],"uses":{"str_repeat":[41]},"used_by":[]},"Walker_Nav_Menu::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n *\/","file":"nav-menu-template.php","line":52,"missingDoc":false,"filters":[],"uses":{"str_repeat":[53]},"used_by":[]},"Walker_Nav_Menu::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $item Menu item data object.\n * @param int $depth Depth of menu item. Used for padding.\n * @param int $current_page Menu item ID.\n * @param object $args\n *\/","file":"nav-menu-template.php","line":67,"missingDoc":false,"filters":["'nav_menu_css_class'","'nav_menu_item_id'","'the_title'","'walker_nav_menu_start_el'"],"uses":{"str_repeat":[68],"join":[75],"array_filter":[75],"esc_attr":[76,79,83,84,85,86]},"used_by":[]},"Walker_Nav_Menu::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $item Page data object. Not used.\n * @param int $depth Depth of page. Not Used.\n *\/","file":"nav-menu-template.php","line":105,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_get_nav_menu_items":{"doc":"\/**\n * Returns all menu items of a navigation menu.\n *\n * @since 3.0.0\n *\n * @param string $menu menu name, id, or slug\n * @param string $args\n * @return mixed $items array of menu items, else false.\n *\/","file":"nav-menu.php","line":470,"missingDoc":false,"filters":["'wp_get_nav_menu_items'"],"uses":{"wp_get_nav_menu_object":[473],"get_objects_in_term":[480],"wp_parse_args":[487],"implode":[489],"count":[488],"get_posts":[493,516],"is_wp_error":[495],"is_array":[495],"get_post_meta":[504,505,506],"array_keys":[515,522],"get_terms":[523],"array_map":[529],"array_filter":[532],"is_admin":[531],"usort":[536]},"used_by":{"wp_nav_menu":[158,167],"wp_update_nav_menu_item":[304],"_wp_auto_add_pages_to_menu":[774]}},"_wp_menu_item_classes_by_context":{"doc":"\/**\n * Add the class property classes for the current context, if applicable.\n *\n * @access private\n * @since 3.0\n *\n * @param array $menu_items The current menu item objects to which to add the class property information.\n *\/","file":"nav-menu-template.php","line":253,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[256],"get_option":[265],"_get_term_hierarchy":[270,296],"wp_get_object_terms":[271],"array_merge":[273],"is_array":[272],"is_taxonomy_hierarchical":[269,295],"get_object_taxonomies":[268],"is_post_type_hierarchical":[267,424],"array_filter":[315,407,408,409],"home_url":[317,384,397],"get_post_meta":[348,378],"in_array":[349,379,384,372,329,425,433,444,448,452,457,459],"untrailingslashit":[366,369,370,384,384,397],"set_url_scheme":[367],"strpos":[368,368],"substr":[368],"preg_replace":[370],"is_front_page":[393],"array_unique":[405,407,408,409,463],"intval":[444]},"used_by":{"wp_nav_menu":[198]}},"walk_nav_menu_tree":{"doc":"\/**\n * Retrieve the HTML list content for nav menu items.\n *\n * @uses Walker_Nav_Menu to create HTML list content.\n * @since 3.0.0\n * @see Walker::walk() for parameters and return description.\n *\/","file":"nav-menu-template.php","line":474,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[478]},"used_by":{"wp_nav_menu":[208]}},"_get_term_hierarchy":{"doc":"\/**\n * Retrieves children of taxonomy as Term IDs.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n *\n * @uses update_option() Stores all of the children in \"$taxonomy_children\"\n *\t option. That is the name of the taxonomy, immediately followed by '_children'.\n *\n * @param string $taxonomy Taxonomy Name\n * @return array Empty if $taxonomy isn't hierarchical or returns children as Term IDs.\n *\/","file":"taxonomy.php","line":2763,"missingDoc":false,"filters":[],"uses":{"is_taxonomy_hierarchical":[2764],"get_option":[2766],"is_array":[2768],"get_terms":[2771],"update_option":[2776]},"used_by":{"_wp_menu_item_classes_by_context":[270,296],"get_term_children":[1013],"get_terms":[1229,1235,1413],"clean_term_cache":[2629],"_get_term_children":[2803],"_pad_term_counts":[2860]}},"_nav_menu_item_id_use_once":{"doc":"\/**\n * Prevents a menu item ID from being used more than once.\n *\n * @since 3.0.1\n * @access private\n *\/","file":"nav-menu-template.php","line":487,"missingDoc":false,"filters":[],"uses":{"in_array":[489]},"used_by":[]},"is_nav_menu":{"doc":"\/**\n * Check if the given ID is a navigation menu.\n *\n * Returns true if it is; false otherwise.\n *\n * @since 3.0.0\n *\n * @param int|string $menu The menu to check (id, slug, or name)\n * @return bool Whether the menu exists.\n *\/","file":"nav-menu.php","line":49,"missingDoc":false,"filters":[],"uses":{"wp_get_nav_menu_object":[53],"is_wp_error":[57]},"used_by":[]},"register_nav_menus":{"doc":"\/**\n * Register navigation menus for a theme.\n *\n * @since 3.0.0\n *\n * @param array $locations Associative array of menu location identifiers (like a slug) and descriptive text.\n *\/","file":"nav-menu.php","line":73,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[76],"array_merge":[78]},"used_by":{"register_nav_menu":[107]}},"unregister_nav_menu":{"doc":"\/**\n * Unregisters a navigation menu for a theme.\n *\n * @param array $location the menu location identifier\n *\n * @return bool True on success, false on failure.\n *\/","file":"nav-menu.php","line":88,"missingDoc":false,"filters":[],"uses":{"is_array":[91]},"used_by":[]},"register_nav_menu":{"doc":"\/**\n * Register a navigation menu for a theme.\n *\n * @since 3.0.0\n *\n * @param string $location Menu location identifier, like a slug.\n * @param string $description Menu location descriptive text.\n *\/","file":"nav-menu.php","line":106,"missingDoc":false,"filters":[],"uses":{"register_nav_menus":[107]},"used_by":[]},"has_nav_menu":{"doc":"\/**\n * Whether a registered nav menu location has a menu assigned to it.\n *\n * @since 3.0.0\n * @param string $location Menu location identifier.\n * @return bool Whether location has a menu.\n *\/","file":"nav-menu.php","line":140,"missingDoc":false,"filters":[],"uses":{"get_nav_menu_locations":[141]},"used_by":[]},"is_nav_menu_item":{"doc":"\/**\n * Determine whether the given ID is a nav menu item.\n *\n * @since 3.0.0\n *\n * @param int $menu_item_id The ID of the potential nav menu item.\n * @return bool Whether the given ID is that of a nav menu item.\n *\/","file":"nav-menu.php","line":153,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[154],"get_post_type":[154]},"used_by":{"wp_update_nav_menu_item":[274],"wp_get_associated_nav_menu_items":[694]}},"wp_create_nav_menu":{"doc":"\/**\n * Create a Navigation Menu.\n *\n * @since 3.0.0\n *\n * @param string $menu_name Menu Name\n * @return mixed Menu object on success|WP_Error on failure\n *\/","file":"nav-menu.php","line":165,"missingDoc":false,"filters":[],"uses":{"wp_update_nav_menu_object":[166]},"used_by":[]},"wp_update_nav_menu_object":{"doc":"\/**\n * Save the properties of a menu or create a new menu with those properties.\n *\n * @since 3.0.0\n *\n * @param int $menu_id The ID of the menu or \"0\" to create a new menu.\n * @param array $menu_data The array of menu data.\n * @return int|error object The menu's ID or WP_Error object.\n *\/","file":"nav-menu.php","line":206,"missingDoc":false,"filters":["'wp_create_nav_menu'","'wp_update_nav_menu'"],"uses":{"wp_get_nav_menu_object":[209],"get_term_by":[219,230],"sprintf":[226,233],"__":[226,233],"esc_html":[226,233],"is_wp_error":[222,237,229,252],"wp_insert_term":[235],"wp_update_term":[250]},"used_by":{"wp_create_nav_menu":[166]}},"wp_delete_nav_menu":{"doc":"\/**\n * Delete a Navigation Menu.\n *\n * @since 3.0.0\n *\n * @param string $menu name|id|slug\n * @return mixed Menu object on success|WP_Error on failure\n *\/","file":"nav-menu.php","line":177,"missingDoc":false,"filters":["'wp_delete_nav_menu'"],"uses":{"wp_get_nav_menu_object":[178],"get_objects_in_term":[182],"wp_delete_post":[185],"wp_delete_term":[189],"is_wp_error":[191]},"used_by":[]},"get_objects_in_term":{"doc":"\/**\n * Retrieve object_ids of valid taxonomy and term.\n *\n * The strings of $taxonomies must exist before this function will continue. On\n * failure of finding a valid taxonomy, it will return an WP_Error class, kind\n * of like Exceptions in PHP 5, except you can't catch them. Even so, you can\n * still test for the WP_Error class and get the error message.\n *\n * The $terms aren't checked the same as $taxonomies, but still need to exist\n * for $object_ids to be returned.\n *\n * It is possible to change the order that object_ids is returned by either\n * using PHP sort family functions or using the database by using $args with\n * either ASC or DESC array. The value should be in the key named 'order'.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses wp_parse_args() Creates an array from string $args.\n *\n * @param int|array $term_ids Term id or array of term ids of terms that will be used\n * @param string|array $taxonomies String of taxonomy name or Array of string values of taxonomy names\n * @param array|string $args Change the order of the object_ids, either ASC or DESC\n * @return WP_Error|array If the taxonomy does not exist, then WP_Error will be returned. On success\n *\tthe array can be empty meaning that there are no $object_ids found or it will return the $object_ids found.\n *\/","file":"taxonomy.php","line":507,"missingDoc":false,"filters":[],"uses":{"is_array":[510,513],"__":[518],"taxonomy_exists":[517],"wp_parse_args":[522],"extract":[523],"strtolower":[525],"array_map":[527],"implode":[529,530],"get_col":[532]},"used_by":{"wp_delete_nav_menu":[182],"wp_get_nav_menu_items":[480]}},"wp_update_nav_menu_item":{"doc":"\/**\n * Save the properties of a menu item or create a new one.\n *\n * @since 3.0.0\n *\n * @param int $menu_id The ID of the menu. Required. If \"0\", makes the menu item a draft orphan.\n * @param int $menu_item_db_id The ID of the menu item. If \"0\", creates a new menu item.\n * @param array $menu_item_data The menu item's data.\n * @return int The menu item's database ID or WP_Error object on failure.\n *\/","file":"nav-menu.php","line":269,"missingDoc":false,"filters":["'wp_update_nav_menu_item'"],"uses":{"__":[275],"is_nav_menu_item":[274],"wp_get_nav_menu_object":[277],"is_wp_error":[279,361],"wp_parse_args":[299],"wp_get_nav_menu_items":[304],"array_pop":[305],"count":[306],"get_post_field":[309],"get_term_field":[321,322],"get_post":[325],"intval":[354],"is_object_in_term":[353],"wp_insert_post":[360],"update_post_meta":[372,373,374,375,376,380,381,382,385],"sanitize_key":[372,375,376],"strval":[373,374],"array_map":[378,379],"explode":[378,379],"implode":[379],"esc_url_raw":[382],"time":[385],"get_post_meta":[386],"delete_post_meta":[387],"wp_update_post":[393]},"used_by":{"_wp_auto_add_pages_to_menu":[781]}},"_sort_nav_menu_items":{"doc":"\/**\n * Sort menu items by the desired key.\n *\n * @since 3.0.0\n * @access private\n *\n * @param object $a The first object to compare\n * @param object $b The second object to compare\n * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b.\n *\/","file":"nav-menu.php","line":425,"missingDoc":false,"filters":[],"uses":{"strcmp":[442]},"used_by":[]},"_is_valid_nav_menu_item":{"doc":"\/**\n * Returns if a menu item is valid. Bug #13958\n *\n * @since 3.2.0\n * @access private\n *\n * @param object $menu_item The menu item to check\n * @return bool false if invalid, else true.\n *\/","file":"nav-menu.php","line":454,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_setup_nav_menu_item":{"doc":"\/**\n * Decorates a menu item object with the shared navigation menu item properties.\n *\n * Properties:\n * - db_id: \t\tThe DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).\n * - object_id:\t\tThe DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.\n * - type:\t\tThe family of objects originally represented, such as \"post_type\" or \"taxonomy.\"\n * - object:\t\tThe type of object originally represented, such as \"category,\" \"post\", or \"attachment.\"\n * - type_label:\tThe singular label used to describe this type of menu item.\n * - post_parent:\tThe DB ID of the original object's parent object, if any (0 otherwise).\n * - menu_item_parent: \tThe DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.\n * - url:\t\tThe URL to which this menu item points.\n * - title:\t\tThe title of this menu item.\n * - target: \t\tThe target attribute of the link element for this menu item.\n * - attr_title:\tThe title attribute of the link element for this menu item.\n * - classes:\t\tThe array of class attribute values for the link element of this menu item.\n * - xfn:\t\tThe XFN relationship expressed in the link of this menu item.\n * - description:\tThe description of this menu item.\n *\n * @since 3.0.0\n *\n * @param object $menu_item The menu item to modify.\n * @return object $menu_item The menu item with standard menu item properties.\n *\/","file":"nav-menu.php","line":570,"missingDoc":false,"filters":["'nav_menu_attr_title'","'nav_menu_description'","'nav_menu_attr_title'","'nav_menu_description'","'wp_setup_nav_menu_item'"],"uses":{"get_post_meta":[574,575,576,577,614,617,624,625],"get_post_type_object":[580,632],"get_permalink":[588,637],"get_post":[590],"get_taxonomy":[595,653],"get_term_link":[603,658],"is_wp_error":[604,607],"get_term_field":[606,661],"__":[612],"wp_trim_words":[622]},"used_by":[]},"wp_get_associated_nav_menu_items":{"doc":"\/**\n * Get the menu items associated with a particular object.\n *\n * @since 3.0.0\n *\n * @param int $object_id The ID of the original object.\n * @param string $object_type The type of object, such as \"taxonomy\" or \"post_type.\"\n * @return array The array of menu item IDs; empty array if none;\n *\/","file":"nav-menu.php","line":679,"missingDoc":false,"filters":[],"uses":{"query":[684],"get_post_meta":[695],"is_nav_menu_item":[694],"array_unique":[702]},"used_by":{"_wp_delete_post_menu_item":[717],"_wp_delete_tax_menu_item":[736]}},"_wp_delete_post_menu_item":{"doc":"\/**\n * Callback for handling a menu item when its original object is deleted.\n *\n * @since 3.0.0\n * @access private\n *\n * @param int $object_id The ID of the original object being trashed.\n *\n *\/","file":"nav-menu.php","line":714,"missingDoc":false,"filters":[],"uses":{"wp_get_associated_nav_menu_items":[717],"wp_delete_post":[720]},"used_by":[]},"_wp_delete_tax_menu_item":{"doc":"\/**\n * Callback for handling a menu item when its original object is deleted.\n *\n * @since 3.0.0\n * @access private\n *\n * @param int $object_id The ID of the original object being trashed.\n *\n *\/","file":"nav-menu.php","line":733,"missingDoc":false,"filters":[],"uses":{"wp_get_associated_nav_menu_items":[736],"wp_delete_post":[739]},"used_by":[]},"_wp_auto_add_pages_to_menu":{"doc":"\/**\n * Automatically add newly published page objects to menus with that as an option.\n *\n * @since 3.0.0\n * @access private\n *\n * @param string $new_status The new status of the post object.\n * @param string $old_status The old status of the post object.\n * @param object $post The post object being transitioned from one status to another.\n * @return void\n *\/","file":"nav-menu.php","line":754,"missingDoc":false,"filters":[],"uses":{"get_option":[759],"is_array":[760,763,775],"wp_get_nav_menu_items":[774],"wp_update_nav_menu_item":[781]},"used_by":[]},"wp_protect_special_option":{"doc":"\/**\n * Protect WordPress special option from being modified.\n *\n * Will die if $option is in protected list. Protected options are 'alloptions'\n * and 'notoptions' options.\n *\n * @since 2.2.0\n * @package WordPress\n * @subpackage Option\n *\n * @param string $option Option name.\n *\/","file":"option.php","line":106,"missingDoc":false,"filters":[],"uses":{"wp_die":[109],"sprintf":[109],"__":[109],"esc_html":[109],"in_array":[108]},"used_by":{"update_option":[222],"add_option":[303],"delete_option":[363]}},"form_option":{"doc":"\/**\n * Print option value after sanitizing for forms.\n *\n * @uses attr Sanitizes value.\n * @since 1.5.0\n * @package WordPress\n * @subpackage Option\n *\n * @param string $option Option name.\n *\/","file":"option.php","line":122,"missingDoc":false,"filters":[],"uses":{"esc_attr":[123],"get_option":[123]},"used_by":[]},"wp_user_settings":{"doc":"\/**\n * Saves and restores user interface settings stored in a cookie.\n *\n * Checks if the current user-settings cookie is updated and stores it. When no\n * cookie exists (different browser used), adds the last saved cookie restoring\n * the settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\/","file":"option.php","line":532,"missingDoc":false,"filters":[],"uses":{"is_admin":[534],"defined":[537],"wp_get_current_user":[540],"is_super_admin":[543],"in_array":[544],"get_current_blog_id":[544],"array_keys":[544],"get_blogs_of_user":[544],"get_user_option":[548,557],"preg_replace":[551,558],"update_user_option":[561,562],"time":[562,568,569,569],"strpos":[553],"setcookie":[568,569]},"used_by":[]},"update_user_option":{"doc":"\/**\n * Update user option with global blog capability.\n *\n * User options are just like user metadata except that they have support for\n * global blog options. If the 'global' parameter is false, which it is by default\n * it will prepend the WordPress table prefix to the option name.\n *\n * Deletes the user option if $newvalue is empty.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param int $user_id User ID\n * @param string $option_name User option name.\n * @param mixed $newvalue User option value.\n * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).\n * @return unknown\n *\/","file":"user.php","line":273,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[282],"is_null":[281],"is_scalar":[281],"update_user_meta":[284]},"used_by":{"wp_user_settings":[561,562],"wp_set_all_user_settings":[719,720],"delete_all_user_settings":[736]}},"get_all_user_settings":{"doc":"\/**\n * Retrieve all user interface settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @return array the last saved user settings or empty array.\n *\/","file":"option.php","line":664,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[667],"is_array":[670],"preg_replace":[675],"parse_str":[678,683],"strpos":[677],"get_user_option":[681],"is_string":[682]},"used_by":{"get_user_setting":[586],"set_user_setting":[610],"delete_user_setting":[639]}},"set_user_setting":{"doc":"\/**\n * Add or update user interface setting.\n *\n * Both $name and $value can contain only ASCII letters, numbers and underscores.\n * This function has to be used before any output has started as it calls setcookie().\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @param string $name The name of the setting.\n * @param string $value The value for the setting.\n * @return bool true if set successfully\/false if not.\n *\/","file":"option.php","line":605,"missingDoc":false,"filters":[],"uses":{"headers_sent":[607],"get_all_user_settings":[610],"preg_replace":[611],"wp_set_all_user_settings":[618]},"used_by":[]},"wp_set_all_user_settings":{"doc":"\/**\n * Private. Set all user interface settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @param unknown $all\n * @return bool\n *\/","file":"option.php","line":699,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[702],"is_super_admin":[705],"in_array":[706],"get_current_blog_id":[706],"array_keys":[706],"get_blogs_of_user":[706],"preg_replace":[713],"rtrim":[717],"update_user_option":[719,720],"time":[720]},"used_by":{"set_user_setting":[618],"delete_user_setting":[650]}},"delete_user_setting":{"doc":"\/**\n * Delete user interface settings.\n *\n * Deleting settings would reset them to the defaults.\n * This function has to be used before any output has started as it calls setcookie().\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @param mixed $names The name or array of names of the setting to be deleted.\n * @return bool true if deleted successfully\/false if not.\n *\/","file":"option.php","line":634,"missingDoc":false,"filters":[],"uses":{"headers_sent":[636],"get_all_user_settings":[639],"wp_set_all_user_settings":[650]},"used_by":[]},"delete_all_user_settings":{"doc":"\/**\n * Delete the user settings of the current user.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\/","file":"option.php","line":732,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[733],"update_user_option":[736],"setcookie":[737],"time":[737]},"used_by":[]},"delete_site_option":{"doc":"\/**\n * Removes site option by name.\n *\n * @see delete_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses do_action() Calls 'pre_delete_site_option_$option' hook before option is deleted.\n * @uses do_action() Calls 'delete_site_option' and 'delete_site_option_$option'\n * \thooks on success.\n *\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if succeed. False, if failure.\n *\/","file":"option.php","line":855,"missingDoc":false,"filters":["'pre_delete_site_option_' . $option","\"delete_site_option_{$option}\"","'delete_site_option'"],"uses":{"delete_option":[863],"get_row":[865],"prepare":[865],"is_null":[866],"wp_cache_delete":[869],"delete":[871],"is_multisite":[862]},"used_by":{"delete_site_transient":[953,955],"get_site_transient":[999,1000]}},"delete_site_transient":{"doc":"\/**\n * Delete a site transient.\n *\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses do_action() Calls 'delete_site_transient_$transient' hook before transient is deleted.\n * @uses do_action() Calls 'deleted_site_transient' hook on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return bool True if successful, false otherwise\n *\/","file":"option.php","line":944,"missingDoc":false,"filters":["'delete_site_transient_' . $transient","'deleted_site_transient'"],"uses":{"wp_cache_delete":[949],"delete_site_option":[953,955]},"used_by":{"wp_clean_themes_cache":[115]}},"get_site_transient":{"doc":"\/**\n * Get the value of a site transient.\n *\n * If the transient does not exist or does not have a value, then the return value\n * will be false.\n *\n * @see get_transient()\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_site_transient_$transient' hook before checking the transient.\n * \tAny value other than false will \"short-circuit\" the retrieval of the transient\n *\tand return the returned value.\n * @uses apply_filters() Calls 'site_transient_$option' hook, after checking the transient, with\n * \tthe transient value.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return mixed Value of transient\n *\/","file":"option.php","line":982,"missingDoc":false,"filters":["'pre_site_transient_' . $transient","'site_transient_' . $transient"],"uses":{"wp_cache_get":[990],"get_site_option":[997,1005],"delete_site_option":[999,1000],"time":[998],"in_array":[995]},"used_by":{"get_theme_roots":[288,291],"search_theme_directories":[352,426],"wp_version_check":[30],"wp_update_plugins":[148],"wp_update_themes":[240],"wp_get_update_data":[337,343],"_maybe_update_core":[371],"_maybe_update_plugins":[392],"_maybe_update_themes":[408]}},"set_site_transient":{"doc":"\/**\n * Set\/update the value of a site transient.\n *\n * You do not need to serialize values, if the value needs to be serialize, then\n * it will be serialized before it is set.\n *\n * @see set_transient()\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_set_site_transient_$transient' hook to allow overwriting the\n * \ttransient value to be stored.\n * @uses do_action() Calls 'set_site_transient_$transient' and 'setted_site_transient' hooks on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @param mixed $value Transient value. Expected to not be SQL-escaped.\n * @param int $expiration Time until expiration in seconds, default 0\n * @return bool False if value was not set and true if value was set.\n *\/","file":"option.php","line":1031,"missingDoc":false,"filters":["'pre_set_site_transient_' . $transient","'set_site_transient_' . $transient","'setted_site_transient'"],"uses":{"wp_cache_set":[1037],"add_site_option":[1043,1044],"time":[1043,1047],"update_site_option":[1047,1048],"get_site_option":[1041]},"used_by":{"search_theme_directories":[427],"wp_version_check":[47,120],"wp_update_plugins":[195,217],"wp_update_themes":[302,323]}},"set_current_user":{"doc":"\/**\n * Changes the current user by ID or name.\n *\n * Set $id to null and specify a name if you do not know a user's ID.\n *\n * @since 2.0.1\n * @see wp_set_current_user() An alias of wp_set_current_user()\n * @deprecated 3.0.0\n * @deprecated Use wp_set_current_user()\n *\n * @param int|null $id User ID.\n * @param string $name Optional. The user's username\n * @return object returns wp_set_current_user()\n *\/","file":"pluggable-deprecated.php","line":33,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[34],"wp_set_current_user":[35]},"used_by":[]},"get_userdatabylogin":{"doc":"\/**\n * Retrieve user info by login name.\n *\n * @since 0.71\n * @deprecated 3.3.0\n * @deprecated Use get_user_by('login')\n *\n * @param string $user_login User's username\n * @return bool|object False on failure, User DB row object\n *\/","file":"pluggable-deprecated.php","line":50,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[51],"get_user_by":[52]},"used_by":[]},"get_user_by_email":{"doc":"\/**\n * Retrieve user info by email.\n *\n * @since 2.5\n * @deprecated 3.3.0\n * @deprecated Use get_user_by('email')\n *\n * @param string $email User's email address\n * @return bool|object False on failure, User DB row object\n *\/","file":"pluggable-deprecated.php","line":67,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[68],"get_user_by":[69]},"used_by":[]},"wp_setcookie":{"doc":"\/**\n * Sets a cookie for a user who just logged in. This function is deprecated.\n *\n * @since 1.5\n * @deprecated 2.5\n * @deprecated Use wp_set_auth_cookie()\n * @see wp_set_auth_cookie()\n *\n * @param string $username The user's username\n * @param string $password Optional. The user's password\n * @param bool $already_md5 Optional. Whether the password has already been through MD5\n * @param string $home Optional. Will be used instead of COOKIEPATH if set\n * @param string $siteurl Optional. Will be used instead of SITECOOKIEPATH if set\n * @param bool $remember Optional. Remember that the user is logged in\n *\/","file":"pluggable-deprecated.php","line":89,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[90],"get_user_by":[91],"wp_set_auth_cookie":[92]},"used_by":[]},"wp_set_auth_cookie":{"doc":"\/**\n * Sets the authentication cookies based User ID.\n *\n * The $remember parameter increases the time that the cookie will be kept. The\n * default the cookie is kept without remembering is two days. When $remember is\n * set, the cookies will be kept for 14 days or two weeks.\n *\n * @since 2.5\n *\n * @param int $user_id User ID\n * @param bool $remember Whether to remember the user\n *\/","file":"pluggable.php","line":652,"missingDoc":false,"filters":["'auth_cookie_expiration'","'auth_cookie_expiration'","'secure_auth_cookie'","'secure_logged_in_cookie'","'set_auth_cookie'","'set_logged_in_cookie'"],"uses":{"time":[654,656],"is_ssl":[661],"wp_generate_auth_cookie":[674,675],"setcookie":[680,681,682,684]},"used_by":{"wp_setcookie":[92],"wp_signon":[63],"wp_update_user":[1485]}},"wp_clearcookie":{"doc":"\/**\n * Clears the authentication cookie, logging the user out. This function is deprecated.\n *\n * @since 1.5\n * @deprecated 2.5\n * @deprecated Use wp_clear_auth_cookie()\n * @see wp_clear_auth_cookie()\n *\/","file":"pluggable-deprecated.php","line":107,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[108],"wp_clear_auth_cookie":[109]},"used_by":[]},"wp_clear_auth_cookie":{"doc":"\/**\n * Removes all of the cookies associated with authentication.\n *\n * @since 2.5\n *\/","file":"pluggable.php","line":694,"missingDoc":false,"filters":["'clear_auth_cookie'"],"uses":{"setcookie":[697,698,699,700,701,702,705,706,707,708,711,712,713,714],"time":[697,698,699,700,701,702,705,706,707,708,711,712,713,714]},"used_by":{"wp_clearcookie":[109],"wp_logout":[499],"wp_update_user":[1484]}},"wp_get_cookie_login":{"doc":"\/**\n * Gets the user cookie login. This function is deprecated.\n *\n * This function is deprecated and should no longer be extended as it won't be\n * used anywhere in WordPress. Also, plugins shouldn't use it either.\n *\n * @since 2.0.3\n * @deprecated 2.5\n * @deprecated No alternative\n *\n * @return bool Always returns false\n *\/","file":"pluggable-deprecated.php","line":128,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[129]},"used_by":[]},"wp_login":{"doc":"\/**\n * Checks a users login information and logs them in if it checks out. This function is deprecated.\n *\n * Use the global $error to get the reason why the login failed. If the username\n * is blank, no error will be set, so assume blank username on that case.\n *\n * Plugins extending this function should also provide the global $error and set\n * what the error is, so that those checking the global for why there was a\n * failure can utilize it later.\n *\n * @since 1.2.2\n * @deprecated Use wp_signon()\n * @global string $error Error when false is returned\n *\n * @param string $username User's username\n * @param string $password User's password\n * @param bool $deprecated Not used\n * @return bool False on login failure, true on successful check\n *\/","file":"pluggable-deprecated.php","line":156,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[157],"wp_authenticate":[160],"is_wp_error":[162],"get_error_message":[165]},"used_by":[]},"wp_atom_server::__call":{"doc":"","file":"pluggable-deprecated.php","line":184,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[185]},"used_by":[]},"wp_atom_server::__callStatic":{"doc":"","file":"pluggable-deprecated.php","line":188,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[189]},"used_by":[]},"setup_userdata":{"doc":"\/**\n * Set up global user vars.\n *\n * Used by wp_set_current_user() for back compat. Might be deprecated in the future.\n *\n * @since 2.0.4\n * @global string $userdata User description.\n * @global string $user_login The user username for logging in\n * @global int $user_level The level of the user\n * @global int $user_ID The ID of the user\n * @global string $user_email The email address of the user\n * @global string $user_url The url in the user's profile\n * @global string $user_identity The display name of the user\n *\n * @param int $for_user_id Optional. User ID to set up global data.\n *\/","file":"user.php","line":960,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[964],"get_userdata":[965]},"used_by":{"wp_set_current_user":[35]}},"get_currentuserinfo":{"doc":"\/**\n * Populate global variables with information about the currently logged in user.\n *\n * Will set the current user, if the current user is not set. The current user\n * will be set to the logged in person. If no user is logged in, then it will\n * set the current user to 0, which is invalid and won't have any permissions.\n *\n * @since 0.71\n * @uses $current_user Checks if the current user is set\n * @uses wp_validate_auth_cookie() Retrieves current logged in user.\n *\n * @return bool|null False on XMLRPC Request and invalid auth cookie. Null when current user set\n *\/","file":"pluggable.php","line":74,"missingDoc":false,"filters":[],"uses":{"wp_set_current_user":[85,91,96,102,107],"is_object":[82],"defined":[95],"is_blog_admin":[101],"is_network_admin":[101],"wp_validate_auth_cookie":[101,100]},"used_by":{"wp_get_current_user":[54]}},"wp_validate_auth_cookie":{"doc":"\/**\n * Validates authentication cookie.\n *\n * The checks include making sure that the authentication cookie is set and\n * pulling in the contents (if $cookie is not used).\n *\n * Makes sure the cookie is not expired. Verifies the hash in cookie is what is\n * should be and compares the two.\n *\n * @since 2.5\n *\n * @param string $cookie Optional. If used, will validate contents instead of cookie's\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return bool|int False if invalid cookie, User ID if valid.\n *\/","file":"pluggable.php","line":520,"missingDoc":false,"filters":["'auth_cookie_malformed'","'auth_cookie_expired'","'auth_cookie_bad_username'","'auth_cookie_bad_hash'","'auth_cookie_valid'"],"uses":{"wp_parse_auth_cookie":[521],"extract":[526],"defined":[531],"time":[535,556],"get_user_by":[540],"substr":[546],"wp_hash":[548],"hash_hmac":[549]},"used_by":{"get_currentuserinfo":[101,100],"auth_redirect":[765],"wp_authenticate_cookie":[123]}},"cache_users":{"doc":"\/**\n * Retrieve info for user lists to prevent multiple queries by get_userdata()\n *\n * @since 3.0.0\n *\n * @param array $user_ids User ID numbers list\n *\/","file":"pluggable.php","line":156,"missingDoc":false,"filters":[],"uses":{"_get_non_cached_ids":[159],"implode":[164],"get_results":[166],"update_user_caches":[170],"update_meta_cache":[173]},"used_by":{"WP_User_Query::query":[556]}},"wp_logout":{"doc":"\/**\n * Log the current user out.\n *\n * @since 2.5.0\n *\/","file":"pluggable.php","line":498,"missingDoc":false,"filters":["'wp_logout'"],"uses":{"wp_clear_auth_cookie":[499]},"used_by":[]},"wp_parse_auth_cookie":{"doc":"\/**\n * Parse a cookie into its components\n *\n * @since 2.7\n *\n * @param string $cookie\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return array Authentication cookie components\n *\/","file":"pluggable.php","line":602,"missingDoc":false,"filters":[],"uses":{"is_ssl":[615],"explode":[629],"count":[630],"compact":[635]},"used_by":{"wp_validate_auth_cookie":[521]}},"wp_hash":{"doc":"\/**\n * Get hash of given string.\n *\n * @since 2.0.3\n * @uses wp_salt() Get WordPress salt\n *\n * @param string $data Plain text to hash\n * @return string Hash of $data\n *\/","file":"pluggable.php","line":1394,"missingDoc":false,"filters":[],"uses":{"wp_salt":[1395],"hash_hmac":[1397]},"used_by":{"wp_validate_auth_cookie":[548],"wp_generate_auth_cookie":[583],"wp_verify_nonce":[1265,1268],"wp_create_nonce":[1292]}},"wp_generate_auth_cookie":{"doc":"\/**\n * Generate authentication cookie contents.\n *\n * @since 2.5\n * @uses apply_filters() Calls 'auth_cookie' hook on $cookie contents, User ID\n *\t\tand expiration of cookie.\n *\n * @param int $user_id User ID\n * @param int $expiration Cookie expiration in seconds\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return string Authentication cookie contents\n *\/","file":"pluggable.php","line":578,"missingDoc":false,"filters":["'auth_cookie'"],"uses":{"get_userdata":[579],"substr":[581],"wp_hash":[583],"hash_hmac":[584]},"used_by":{"wp_set_auth_cookie":[674,675]}},"check_admin_referer":{"doc":"\/**\n * Makes sure that a user was referred from another admin page.\n *\n * To avoid security exploits.\n *\n * @since 1.2.0\n * @uses do_action() Calls 'check_admin_referer' on $action.\n *\n * @param string $action Action nonce\n * @param string $query_arg where to look for nonce in $_REQUEST (since 2.5)\n *\/","file":"pluggable.php","line":806,"missingDoc":false,"filters":["'check_admin_referer'"],"uses":{"_doing_it_wrong":[808],"__":[808],"strtolower":[810,811],"admin_url":[810],"wp_get_referer":[811],"wp_verify_nonce":[812],"wp_nonce_ays":[814],"strpos":[813]},"used_by":[]},"wp_verify_nonce":{"doc":"\/**\n * Verify that correct nonce was used with time limit.\n *\n * The user is given an amount of time to use the token, so therefore, since the\n * UID and $action remain the same, the independent variable is the time.\n *\n * @since 2.0.3\n *\n * @param string $nonce Nonce that was used in the form to verify\n * @param string|int $action Should give context to what is taking place and be the same when nonce was created.\n * @return bool Whether the nonce check passed or failed.\n *\/","file":"pluggable.php","line":1256,"missingDoc":false,"filters":["'nonce_user_logged_out'"],"uses":{"wp_get_current_user":[1257],"wp_nonce_tick":[1262],"substr":[1265,1268],"wp_hash":[1265,1268]},"used_by":{"check_admin_referer":[812],"check_ajax_referer":[837],"_show_post_preview":[5250]}},"wp_sanitize_redirect":{"doc":"\/**\n * Sanitizes a URL for use in a redirect.\n *\n * @since 2.3\n *\n * @return string redirect-sanitized URL\n **\/","file":"pluggable.php","line":889,"missingDoc":false,"filters":[],"uses":{"preg_replace":[890],"wp_kses_no_null":[891],"_deep_replace":[895]},"used_by":{"wp_redirect":[872],"wp_safe_redirect":[920]}},"wp_safe_redirect":{"doc":"\/**\n * Performs a safe (local) redirect, using wp_redirect().\n *\n * Checks whether the $location is using an allowed host, if it has an absolute\n * path. A plugin can therefore set or remove allowed host(s) to or from the\n * list.\n *\n * If the host is not allowed, then the redirect is to wp-admin on the siteurl\n * instead. This prevents malicious redirects which redirect to another host,\n * but only used in a few places.\n *\n * @since 2.3\n * @uses wp_validate_redirect() To validate the redirect is to an allowed host.\n *\n * @return void Does not return anything\n **\/","file":"pluggable.php","line":917,"missingDoc":false,"filters":[],"uses":{"wp_sanitize_redirect":[920],"wp_validate_redirect":[922],"admin_url":[922],"wp_redirect":[924]},"used_by":[]},"wp_validate_redirect":{"doc":"\/**\n * Validates a URL for use in a redirect.\n *\n * Checks whether the $location is using an allowed host, if it has an absolute\n * path. A plugin can therefore set or remove allowed host(s) to or from the\n * list.\n *\n * If the host is not allowed, then the redirect is to $default supplied\n *\n * @since 2.8.1\n * @uses apply_filters() Calls 'allowed_redirect_hosts' on an array containing\n *\t\tWordPress host string and $location host string.\n *\n * @param string $location The redirect to validate\n * @param string $default The value to return if $location is not allowed\n * @return string redirect-sanitized URL\n **\/","file":"pluggable.php","line":946,"missingDoc":false,"filters":["'allowed_redirect_hosts'"],"uses":{"substr":[948,952],"strpos":[952],"parse_url":[954,968],"home_url":[968],"in_array":[972],"strtolower":[972]},"used_by":{"wp_safe_redirect":[922]}},"wp_password_change_notification":{"doc":"\/**\n * Notify the blog admin of a user changing password, normally via email.\n *\n * @since 2.7\n *\n * @param object $user User Object\n *\/","file":"pluggable.php","line":1175,"missingDoc":false,"filters":[],"uses":{"sprintf":[1179,1183],"__":[1179,1183],"wp_specialchars_decode":[1182],"get_option":[1182,1183,1178],"wp_mail":[1183]},"used_by":[]},"wp_new_user_notification":{"doc":"\/**\n * Notify the blog admin of a new user, normally via email.\n *\n * @since 2.0\n *\n * @param int $user_id User ID\n * @param string $plaintext_pass Optional. The user's plaintext password\n *\/","file":"pluggable.php","line":1197,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1198],"stripslashes":[1200,1201],"wp_specialchars_decode":[1205],"get_option":[1205,1211],"sprintf":[1207,1208,1209,1211,1216,1217,1220],"__":[1207,1208,1209,1211,1216,1217,1220],"wp_mail":[1211,1220],"wp_login_url":[1218]},"used_by":[]},"wp_nonce_tick":{"doc":"\/**\n * Get the time-dependent variable for nonce creation.\n *\n * A nonce has a lifespan of two ticks. Nonces in their second tick may be\n * updated, e.g. by autosave.\n *\n * @since 2.5\n *\n * @return int\n *\/","file":"pluggable.php","line":1236,"missingDoc":false,"filters":["'nonce_life'"],"uses":{"ceil":[1239],"time":[1239]},"used_by":{"wp_verify_nonce":[1262],"wp_create_nonce":[1290]}},"wp_salt":{"doc":"\/**\n * Get salt to add to hashes.\n *\n * Salts are created using secret keys. Secret keys are located in two places:\n * in the database and in the wp-config.php file. The secret key in the database\n * is randomly generated and will be appended to the secret keys in wp-config.php.\n *\n * The secret keys in wp-config.php should be updated to strong, random keys to maximize\n * security. Below is an example of how the secret key constants are defined.\n * Do not paste this example directly into wp-config.php. Instead, have a\n * {@link https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ secret key created} just\n * for you.\n *\n * <code>\n * define('AUTH_KEY', ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON');\n * define('SECURE_AUTH_KEY', 'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%\/U^O~');\n * define('LOGGED_IN_KEY', '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$\/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM');\n * define('NONCE_KEY', '%:R{[P|,s.KuMltH5}cI;\/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|');\n * define('AUTH_SALT', 'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');\n * define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H `}`L|9\/^4-3 STz},T(w}W<I`.JjPi)<Bmf1v,HpGe}T1:Xt7n');\n * define('LOGGED_IN_SALT', '+XSqHc;@Q*K_b|Z?NC[3H!!EONbh.n<+=uKR:>*c(u`g~EJBf#8u#R{mUEZrozmm');\n * define('NONCE_SALT', 'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT');\n * <\/code>\n *\n * Salting passwords helps against tools which has stored hashed values of\n * common dictionary strings. The added values makes it harder to crack.\n *\n * @since 2.5\n *\n * @link https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ Create secrets for wp-config.php\n *\n * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce)\n * @return string Salt value\n *\/","file":"pluggable.php","line":1331,"missingDoc":false,"filters":["'salt'","'salt'"],"uses":{"defined":[1341,1350,1352,1358],"constant":[1343,1359,1358,1358],"strtoupper":[1357],"get_site_option":[1361,1370],"wp_generate_password":[1363,1372],"update_site_option":[1364,1373],"hash_hmac":[1376],"in_array":[1355]},"used_by":{"wp_hash":[1395]}},"wp_hash_password":{"doc":"\/**\n * Create a hash (encrypt) of a plain text password.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @global object $wp_hasher PHPass object\n * @uses PasswordHash::HashPassword\n *\n * @param string $password Plain text user password to hash\n * @return string The hash string of the password\n *\/","file":"pluggable.php","line":1415,"missingDoc":false,"filters":[],"uses":{"HashPassword":[1424]},"used_by":{"wp_check_password":[1458],"wp_set_password":[1571],"wp_insert_user":[1300],"wp_update_user":[1471]}},"wp_check_password":{"doc":"\/**\n * Checks the plaintext password against the encrypted Password.\n *\n * Maintains compatibility between old version and the new cookie authentication\n * protocol using PHPass library. The $hash parameter is the encrypted password\n * and the function compares the plain text password when encrypted similarly\n * against the already encrypted password to see if they match.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @global object $wp_hasher PHPass object used for checking the password\n *\tagainst the $hash + $password\n * @uses PasswordHash::CheckPassword\n *\n * @param string $password Plaintext user's password\n * @param string $hash Hash of the user's password to check against.\n * @return bool False, if the $password does not match the hashed password\n *\/","file":"pluggable.php","line":1449,"missingDoc":false,"filters":["'check_password'","'check_password'"],"uses":{"md5":[1454],"wp_set_password":[1457],"wp_hash_password":[1458],"strlen":[1453],"CheckPassword":[1472]},"used_by":{"wp_authenticate_username_password":[109]}},"wp_set_password":{"doc":"\/**\n * Updates the user's password with a new encrypted one.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @uses $wpdb WordPress database object for queries\n * @uses wp_hash_password() Used to encrypt the user's password before passing to the database\n *\n * @param string $password The plaintext new user password\n * @param int $user_id User ID\n *\/","file":"pluggable.php","line":1568,"missingDoc":false,"filters":[],"uses":{"wp_hash_password":[1571],"update":[1572],"wp_cache_delete":[1574]},"used_by":{"wp_check_password":[1457]}},"wp_rand":{"doc":"\/**\n * Generates a random number\n *\n * @since 2.6.2\n *\n * @param int $min Lower limit for the generated number\n * @param int $max Upper limit for the generated number\n * @return int A random number between min and max\n *\/","file":"pluggable.php","line":1517,"missingDoc":false,"filters":[],"uses":{"get_transient":[1526],"defined":[1523,1531],"md5":[1527,1530],"uniqid":[1527],"microtime":[1527],"mt_rand":[1527],"sha1":[1528,1529],"set_transient":[1532],"strlen":[1522],"substr":[1536,1539],"abs":[1541,1550],"hexdec":[1541],"intval":[1550]},"used_by":{"wp_generate_password":[1499]}},"wp_text_diff":{"doc":"\/**\n * Displays a human readable HTML representation of the difference between two strings.\n *\n * The Diff is available for getting the changes between versions. The output is\n * HTML, so the primary use is for displaying the changes. If the two strings\n * are equivalent, then an empty string will be returned.\n *\n * The arguments supported and can be changed are listed below.\n *\n * 'title' : Default is an empty string. Titles the diff in a manner compatible\n *\t\twith the output.\n * 'title_left' : Default is an empty string. Change the HTML to the left of the\n *\t\ttitle.\n * 'title_right' : Default is an empty string. Change the HTML to the right of\n *\t\tthe title.\n *\n * @since 2.6\n * @see wp_parse_args() Used to change defaults to user defined settings.\n * @uses Text_Diff\n * @uses WP_Text_Diff_Renderer_Table\n *\n * @param string $left_string \"old\" (left) version of string\n * @param string $right_string \"new\" (right) version of string\n * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults.\n * @return string Empty string if strings are equivalent or HTML with differences.\n *\/","file":"pluggable.php","line":1704,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1706],"class_exists":[1708],"normalize_whitespace":[1711,1712],"explode":[1714,1715],"render":[1719]},"used_by":[]},"_wp_filter_build_unique_id":{"doc":"\/**\n * Build Unique ID for storage and retrieval.\n *\n * The old way to serialize the callback caused issues and this function is the\n * solution. It works by checking for objects and creating an a new property in\n * the class to keep track of the object and new objects of the same class that\n * need to be added.\n *\n * It also allows for the removal of actions and filters for objects after they\n * change class properties. It is possible to include the property $wp_filter_id\n * in your class and set it to \"null\" or a number to bypass the workaround.\n * However this will prevent you from adding new classes and any new classes\n * will overwrite the previous hook by the same class.\n *\n * Functions and static method callbacks are just returned as strings and\n * shouldn't have any speed penalty.\n *\n * @package WordPress\n * @subpackage Plugin\n * @access private\n * @since 2.2.3\n * @link http:\/\/trac.wordpress.org\/ticket\/3875\n *\n * @global array $wp_filter Storage for all of the filters and actions\n * @param string $tag Used in counting how many hooks were applied\n * @param callback $function Used for creating unique id\n * @param int|bool $priority Used in counting how many hooks were applied. If === false and $function is an object reference, we return the unique id only if it already has one, false otherwise.\n * @return string|bool Unique ID for usage as array key or false if $priority === false and $function is an object reference, and it does not already have a unique id.\n *\/","file":"plugin.php","line":753,"missingDoc":false,"filters":[],"uses":{"is_string":[757,785],"is_object":[760,767],"spl_object_hash":[770],"get_class":[772],"count":[776],"function_exists":[769]},"used_by":{"add_filter":[68],"has_filter":[96],"remove_filter":[261]}},"apply_filters":{"doc":"\/**\n * Call the functions added to a filter hook.\n *\n * The callback functions attached to filter hook $tag are invoked by calling\n * this function. This function can be used to create a new filter hook by\n * simply calling this function with the name of the new hook specified using\n * the $tag parameter.\n *\n * The function allows for additional arguments to be added and passed to hooks.\n * <code>\n * function example_hook($string, $arg1, $arg2)\n * {\n *\t\t\/\/Do stuff\n *\t\treturn $string;\n * }\n * $value = apply_filters('example_filter', 'filter me', 'arg1', 'arg2');\n * <\/code>\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 0.71\n * @global array $wp_filter Stores all of the filters\n * @global array $merged_filters Merges the filter hooks using this function.\n * @global array $wp_current_filter stores the list of current filters with the current one last\n *\n * @param string $tag The name of the filter hook.\n * @param mixed $value The value on which the filters hooked to <tt>$tag<\/tt> are applied on.\n * @param mixed $var,... Additional variables passed to the functions hooked to <tt>$tag<\/tt>.\n * @return mixed The filtered value after all hooked functions are applied to it.\n *\/","file":"plugin.php","line":137,"missingDoc":false,"filters":[],"uses":{"func_get_args":[145,167],"_wp_call_all_hook":[146],"array_pop":[151,178],"ksort":[160],"reset":[164],"next":[176],"call_user_func_array":[173],"array_slice":[173],"is_null":[171],"current":[170]},"used_by":[]},"_wp_call_all_hook":{"doc":"\/**\n * Calls the 'all' hook, which will process the functions hooked into it.\n *\n * The 'all' hook passes all of the arguments or parameters that were used for\n * the hook, which this function was called for.\n *\n * This function is used internally for apply_filters(), do_action(), and\n * do_action_ref_array() and is not meant to be used from outside those\n * functions. This function does not check for the existence of the all hook, so\n * it will fail unless the all hook exists prior to this function call.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @access private\n *\n * @uses $wp_filter Used to process all of the functions in the 'all' hook\n *\n * @param array $args The collected parameters from the hook that was called.\n * @param string $hook Optional. The hook name that was used to call the 'all' hook.\n *\/","file":"plugin.php","line":712,"missingDoc":false,"filters":[],"uses":{"reset":[715],"next":[721],"call_user_func_array":[719],"is_null":[718],"current":[717]},"used_by":{"apply_filters":[146],"apply_filters_ref_array":[207],"do_action":[375],"do_action_ref_array":[464]}},"remove_all_filters":{"doc":"\/**\n * Remove all of the hooks from a filter.\n *\n * @since 2.7\n *\n * @param string $tag The filter to remove hooks from.\n * @param int $priority The priority number to remove.\n * @return bool True when finished.\n *\/","file":"plugin.php","line":284,"missingDoc":false,"filters":[],"uses":[],"used_by":{"remove_all_actions":[543]}},"do_action":{"doc":"\/**\n * Execute functions hooked on a specific action hook.\n *\n * This function invokes all functions attached to action hook $tag. It is\n * possible to create new action hooks by simply calling this function,\n * specifying the name of the new hook using the <tt>$tag<\/tt> parameter.\n *\n * You can pass extra arguments to the hooks, much like you can with\n * apply_filters().\n *\n * @see apply_filters() This function works similar with the exception that\n * nothing is returned and only the functions or methods are called.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n * @global array $wp_filter Stores all of the filters\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action to be executed.\n * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action.\n * @return null Will return null if $tag does not exist in $wp_filter array\n *\/","file":"plugin.php","line":360,"missingDoc":false,"filters":[],"uses":{"func_get_args":[374],"_wp_call_all_hook":[375],"array_pop":[380,410],"is_array":[388],"count":[388],"is_object":[388],"func_num_args":[392],"func_get_arg":[393],"ksort":[397],"reset":[401],"next":[408],"call_user_func_array":[406],"array_slice":[406],"is_null":[405],"current":[404]},"used_by":[]},"do_action_ref_array":{"doc":"\/**\n * Execute functions hooked on a specific action hook, specifying arguments in an array.\n *\n * @see do_action() This function is identical, but the arguments passed to the\n * functions hooked to <tt>$tag<\/tt> are supplied using an array.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.1\n * @global array $wp_filter Stores all of the filters\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action to be executed.\n * @param array $args The arguments supplied to the functions hooked to <tt>$tag<\/tt>\n * @return null Will return null if $tag does not exist in $wp_filter array\n *\/","file":"plugin.php","line":449,"missingDoc":false,"filters":[],"uses":{"func_get_args":[463],"_wp_call_all_hook":[464],"array_pop":[469,491],"ksort":[478],"reset":[482],"next":[489],"call_user_func_array":[487],"array_slice":[487],"is_null":[486],"current":[485]},"used_by":[]},"remove_all_actions":{"doc":"\/**\n * Remove all of the hooks from an action.\n *\n * @since 2.7\n *\n * @param string $tag The action to remove hooks from.\n * @param int $priority The priority number to remove them from.\n * @return bool True when finished.\n *\/","file":"plugin.php","line":542,"missingDoc":false,"filters":[],"uses":{"remove_all_filters":[543]},"used_by":[]},"plugin_dir_path":{"doc":"\/**\n * Gets the filesystem directory path (with trailing slash) for the plugin __FILE__ passed in\n * @package WordPress\n * @subpackage Plugin\n * @since 2.8\n *\n * @param string $file The filename of the plugin (__FILE__)\n * @return string the filesystem path of the directory that contains the plugin\n *\/","file":"plugin.php","line":586,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[587],"dirname":[587]},"used_by":[]},"plugin_dir_url":{"doc":"\/**\n * Gets the URL directory path (with trailing slash) for the plugin __FILE__ passed in\n * @package WordPress\n * @subpackage Plugin\n * @since 2.8\n *\n * @param string $file The filename of the plugin (__FILE__)\n * @return string the URL path of the directory that contains the plugin\n *\/","file":"plugin.php","line":599,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[600],"plugins_url":[600]},"used_by":[]},"register_activation_hook":{"doc":"\/**\n * Set the activation hook for a plugin.\n *\n * When a plugin is activated, the action 'activate_PLUGINNAME' hook is\n * activated. In the name of this hook, PLUGINNAME is replaced with the name of\n * the plugin, including the optional subdirectory. For example, when the plugin\n * is located in wp-content\/plugins\/sampleplugin\/sample.php, then the name of\n * this hook will become 'activate_sampleplugin\/sample.php'. When the plugin\n * consists of only one file and is (as by default) located at\n * wp-content\/plugins\/sample.php the name of this hook will be\n * 'activate_sample.php'.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.0\n *\n * @param string $file The filename of the plugin including the path.\n * @param callback $function the function hooked to the 'activate_PLUGIN' action.\n *\/","file":"plugin.php","line":622,"missingDoc":false,"filters":[],"uses":{"plugin_basename":[623],"add_action":[624]},"used_by":[]},"register_deactivation_hook":{"doc":"\/**\n * Set the deactivation hook for a plugin.\n *\n * When a plugin is deactivated, the action 'deactivate_PLUGINNAME' hook is\n * deactivated. In the name of this hook, PLUGINNAME is replaced with the name\n * of the plugin, including the optional subdirectory. For example, when the\n * plugin is located in wp-content\/plugins\/sampleplugin\/sample.php, then\n * the name of this hook will become 'activate_sampleplugin\/sample.php'.\n *\n * When the plugin consists of only one file and is (as by default) located at\n * wp-content\/plugins\/sample.php the name of this hook will be\n * 'activate_sample.php'.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.0\n *\n * @param string $file The filename of the plugin including the path.\n * @param callback $function the function hooked to the 'activate_PLUGIN' action.\n *\/","file":"plugin.php","line":647,"missingDoc":false,"filters":[],"uses":{"plugin_basename":[648],"add_action":[649]},"used_by":[]},"register_uninstall_hook":{"doc":"\/**\n * Set the uninstallation hook for a plugin.\n *\n * Registers the uninstall hook that will be called when the user clicks on the\n * uninstall link that calls for the plugin to uninstall itself. The link won't\n * be active unless the plugin hooks into the action.\n *\n * The plugin should not run arbitrary code outside of functions, when\n * registering the uninstall hook. In order to run using the hook, the plugin\n * will have to be included, which means that any code laying outside of a\n * function will be run during the uninstall process. The plugin should not\n * hinder the uninstall process.\n *\n * If the plugin can not be written without running code within the plugin, then\n * the plugin should create a file named 'uninstall.php' in the base plugin\n * folder. This file will be called, if it exists, during the uninstall process\n * bypassing the uninstall hook. The plugin, when using the 'uninstall.php'\n * should always check for the 'WP_UNINSTALL_PLUGIN' constant, before\n * executing.\n *\n * @since 2.7\n *\n * @param string $file\n * @param callback $callback The callback to run when the hook is called. Must be a static method or function.\n *\/","file":"plugin.php","line":677,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[679],"__":[679],"is_array":[678],"is_object":[678],"get_option":[686],"plugin_basename":[687],"update_option":[688]},"used_by":[]},"Translation_Entry::Translation_Entry":{"doc":"\/**\n * @param array $args associative array, support following keys:\n * \t- singular (string) -- the string to translate, if omitted and empty entry will be created\n * \t- plural (string) -- the plural form of the string, setting this will set {@link $is_plural} to true\n * \t- translations (array) -- translations of the string and possibly -- its plural forms\n * \t- context (string) -- a string differentiating two equal strings used in different contexts\n * \t- translator_comments (string) -- comments left by translators\n * \t- extracted_comments (string) -- comments left by developers\n * \t- references (array) -- places in the code this strings is used, in relative_to_root_path\/file.php:linenum form\n * \t- flags (array) -- flags like php-format\n *\/","file":"pomo\/entry.php","line":43,"missingDoc":false,"filters":[],"uses":{"is_array":[53,54,55]},"used_by":[]},"Translation_Entry::key":{"doc":"\/**\n * Generates a unique key for this entry\n *\n * @return string|bool the key or false if the entry is empty\n *\/","file":"pomo\/entry.php","line":63,"missingDoc":false,"filters":[],"uses":{"is_null":[64,66],"chr":[66]},"used_by":[]},"Translation_Entry::merge_with":{"doc":"","file":"pomo\/entry.php","line":69,"missingDoc":true,"filters":[],"uses":{"array_unique":[70,71],"array_merge":[70,71]},"used_by":[]},"MO::import_from_file":{"doc":"\/**\n * Fills up with the entries from MO file $filename\n *\n * @param string $filename MO file to load\n *\/","file":"pomo\/mo.php","line":23,"missingDoc":false,"filters":[],"uses":{"is_resource":[25],"import_from_reader":[27]},"used_by":[]},"MO::export_to_file":{"doc":"","file":"pomo\/mo.php","line":30,"missingDoc":true,"filters":[],"uses":{"fopen":[31],"export_to_file_handle":[33],"fclose":[34]},"used_by":[]},"MO::export":{"doc":"","file":"pomo\/mo.php","line":38,"missingDoc":true,"filters":[],"uses":{"fopen":[39],"export_to_file_handle":[41],"rewind":[42],"stream_get_contents":[43]},"used_by":[]},"MO::is_entry_good_for_export":{"doc":"","file":"pomo\/mo.php","line":46,"missingDoc":true,"filters":[],"uses":{"array_filter":[51]},"used_by":[]},"MO::export_to_file_handle":{"doc":"","file":"pomo\/mo.php","line":58,"missingDoc":true,"filters":[],"uses":{"array_filter":[59],"ksort":[60],"count":[63],"fwrite":[69,74,81,86,93,97,98],"pack":[69,74,81,86,93],"fseek":[71],"chr":[76,79,88,91],"export_original":[79,80],"strlen":[80,86,87,92],"export_headers":[85],"export_translations":[91,92]},"used_by":[]},"MO::export_original":{"doc":"","file":"pomo\/mo.php","line":102,"missingDoc":true,"filters":[],"uses":{"chr":[105,106],"is_null":[106]},"used_by":[]},"MO::export_translations":{"doc":"","file":"pomo\/mo.php","line":110,"missingDoc":true,"filters":[],"uses":{"implode":[112],"chr":[112]},"used_by":[]},"MO::export_headers":{"doc":"","file":"pomo\/mo.php","line":115,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MO::get_byteorder":{"doc":"","file":"pomo\/mo.php","line":123,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MO::import_from_reader":{"doc":"","file":"pomo\/mo.php","line":140,"missingDoc":true,"filters":[],"uses":{"readint32":[141],"setEndian":[145],"read":[149,172,181],"strlen":[150,173,182],"unpack":[154,198,199],"is_array":[155],"extract":[158],"seekto":[165,192],"str_split":[186,187],"read_all":[194],"close":[195],"substr":[206,207],"set_headers":[210],"make_headers":[210],"make_entry":[212],"key":[213]},"used_by":[]},"MO::make_entry":{"doc":"\/**\n * Build a Translation_Entry from original string and translation strings,\n * found in a MO file\n *\n * @static\n * @param string $original original string to translate from MO file. Might contain\n * \t0x04 as context separator or 0x00 as singular\/plural separator\n * @param string $translation translation string from MO file. Might contain\n * \t0x00 as a plural translations separator\n *\/","file":"pomo\/mo.php","line":229,"missingDoc":false,"filters":[],"uses":{"explode":[232,238,245],"chr":[232,238,245]},"used_by":[]},"MO::select_plural_form":{"doc":"","file":"pomo\/mo.php","line":249,"missingDoc":true,"filters":[],"uses":{"gettext_select_plural_form":[250]},"used_by":[]},"MO::get_plural_forms_count":{"doc":"","file":"pomo\/mo.php","line":253,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PO::export_headers":{"doc":"\/**\n * Exports headers to a PO entry\n *\n * @return string msgid\/msgstr PO entry for this PO file headers, doesn't contain newline at the end\n *\/","file":"pomo\/po.php","line":29,"missingDoc":false,"filters":[],"uses":{"prepend_each_line":[36],"rtrim":[36,39]},"used_by":[]},"PO::export_entries":{"doc":"\/**\n * Exports all entries to PO format\n *\n * @return string sequence of mgsgid\/msgstr PO strings, doesn't containt newline at the end\n *\/","file":"pomo\/po.php","line":47,"missingDoc":false,"filters":[],"uses":{"implode":[49],"array_map":[49]},"used_by":[]},"PO::export":{"doc":"\/**\n * Exports the whole PO file as a string\n *\n * @param bool $include_headers whether to include the headers in the export\n * @return string ready for inclusion in PO file string for headers and all the enrtries\n *\/","file":"pomo\/po.php","line":58,"missingDoc":false,"filters":[],"uses":{"export_headers":[61],"export_entries":[64]},"used_by":[]},"PO::export_to_file":{"doc":"\/**\n * Same as {@link export}, but writes the result to a file\n *\n * @param string $filename where to write the PO string\n * @param bool $include_headers whether to include tje headers in the export\n * @return bool true on success, false on error\n *\/","file":"pomo\/po.php","line":75,"missingDoc":false,"filters":[],"uses":{"fopen":[76],"export":[78],"fwrite":[79],"fclose":[81]},"used_by":[]},"PO::set_comment_before_headers":{"doc":"\/**\n * Text to include as a comment before the start of the PO contents\n *\n * Doesn't need to include # in the beginning of lines, these are added automatically\n *\/","file":"pomo\/po.php","line":89,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PO::poify":{"doc":"\/**\n * Formats a string in PO-style\n *\n * @static\n * @param string $string the string to format\n * @return string the poified string\n *\/","file":"pomo\/po.php","line":100,"missingDoc":false,"filters":[],"uses":{"str_replace":[111,120],"array_keys":[111],"array_values":[111],"implode":[113],"explode":[113],"strpos":[115],"substr_count":[116],"substr":[116],"strlen":[116]},"used_by":[]},"PO::unpoify":{"doc":"\/**\n * Gives back the original string from a PO-formatted string\n *\n * @static\n * @param string $string PO-formatted string\n * @return string enascaped string\n *\/","file":"pomo\/po.php","line":131,"missingDoc":false,"filters":[],"uses":{"array_map":[133,134],"explode":[133],"preg_match_all":[138]},"used_by":[]},"PO::prepend_each_line":{"doc":"\/**\n * Inserts $with in the beginning of every new line of $string and\n * returns the modified string\n *\n * @static\n * @param string $string prepend lines in this string\n * @param string $with prepend lines with this string\n *\/","file":"pomo\/po.php","line":163,"missingDoc":false,"filters":[],"uses":{"var_export":[164],"explode":[165],"count":[167],"substr":[167,170],"implode":[168],"array_map":[168],"create_function":[168]},"used_by":[]},"PO::comment_block":{"doc":"\/**\n * Prepare a text as a comment -- wraps the lines and prepends #\n * and a special character to each line\n *\n * @access private\n * @param string $text the comment text\n * @param string $char character to denote a special PO comment,\n * \tlike :, default is a space\n *\/","file":"pomo\/po.php","line":183,"missingDoc":false,"filters":[],"uses":{"wordwrap":[184]},"used_by":[]},"PO::export_entry":{"doc":"\/**\n * Builds a string from the entry for inclusion in PO file\n *\n * @static\n * @param object &$entry the entry to convert to po string\n * @return string|bool PO-style formatted string for the entry or\n * \tfalse if the entry is empty\n *\/","file":"pomo\/po.php","line":196,"missingDoc":false,"filters":[],"uses":{"is_null":[197,203],"implode":[201,202,215]},"used_by":[]},"PO::import_from_file":{"doc":"","file":"pomo\/po.php","line":218,"missingDoc":true,"filters":[],"uses":{"fopen":[219],"read_entry":[223],"set_headers":[226],"make_headers":[226],"add_entry":[228]},"used_by":[]},"PO::read_entry":{"doc":"","file":"pomo\/po.php","line":241,"missingDoc":true,"filters":[],"uses":{"create_function":[247,340],"feof":[252],"trim":[264],"add_comment_to_entry":[277],"preg_match":[278,289,300,307,313,320,265],"array_filter":[340]},"used_by":[]},"PO::read_line":{"doc":"","file":"pomo\/po.php","line":346,"missingDoc":true,"filters":[],"uses":{"fgets":[357],"substr":[358],"rtrim":[358]},"used_by":[]},"PO::add_comment_to_entry":{"doc":"","file":"pomo\/po.php","line":364,"missingDoc":true,"filters":[],"uses":{"substr":[365,366],"trim":[366,370,374],"array_merge":[368,372],"preg_split":[368,372]},"used_by":[]},"PO::trim_quotes":{"doc":"","file":"pomo\/po.php","line":378,"missingDoc":true,"filters":[],"uses":{"substr":[379,379,380,380]},"used_by":[]},"POMO_Reader::POMO_Reader":{"doc":"","file":"pomo\/streams.php","line":17,"missingDoc":true,"filters":[],"uses":{"ini_get":[18],"function_exists":[18]},"used_by":[]},"POMO_Reader::setEndian":{"doc":"\/**\n * Sets the endianness of the file.\n *\n * @param $endian string 'big' or 'little'\n *\/","file":"pomo\/streams.php","line":27,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::readint32":{"doc":"\/**\n * Reads a 32bit Integer from the Stream\n *\n * @return mixed The integer, corresponding to the next 32 bits from\n * \tthe stream of false if there are not enough bytes or on error\n *\/","file":"pomo\/streams.php","line":37,"missingDoc":false,"filters":[],"uses":{"read":[38],"strlen":[39],"unpack":[42],"array_shift":[43]},"used_by":[]},"POMO_Reader::readint32array":{"doc":"\/**\n * Reads an array of 32-bit Integers from the Stream\n *\n * @param integer count How many elements should be read\n * @return mixed Array of integers or false if there isn't\n * \tenough data or on error\n *\/","file":"pomo\/streams.php","line":53,"missingDoc":false,"filters":[],"uses":{"read":[54],"strlen":[55],"unpack":[58]},"used_by":[]},"POMO_Reader::substr":{"doc":"","file":"pomo\/streams.php","line":62,"missingDoc":true,"filters":[],"uses":{"mb_substr":[64],"substr":[66]},"used_by":[]},"POMO_Reader::strlen":{"doc":"","file":"pomo\/streams.php","line":70,"missingDoc":true,"filters":[],"uses":{"mb_strlen":[72],"strlen":[74]},"used_by":[]},"POMO_Reader::str_split":{"doc":"","file":"pomo\/streams.php","line":78,"missingDoc":true,"filters":[],"uses":{"strlen":[80],"substr":[83],"str_split":[86],"function_exists":[79]},"used_by":[]},"POMO_Reader::pos":{"doc":"","file":"pomo\/streams.php","line":91,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::is_resource":{"doc":"","file":"pomo\/streams.php","line":95,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::close":{"doc":"","file":"pomo\/streams.php","line":99,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_FileReader::POMO_FileReader":{"doc":"","file":"pomo\/streams.php","line":107,"missingDoc":true,"filters":[],"uses":{"fopen":[109]},"used_by":[]},"POMO_FileReader::read":{"doc":"","file":"pomo\/streams.php","line":112,"missingDoc":true,"filters":[],"uses":{"fread":[113]},"used_by":[]},"POMO_FileReader::seekto":{"doc":"","file":"pomo\/streams.php","line":116,"missingDoc":true,"filters":[],"uses":{"fseek":[117]},"used_by":[]},"POMO_FileReader::is_resource":{"doc":"","file":"pomo\/streams.php","line":124,"missingDoc":true,"filters":[],"uses":{"is_resource":[125]},"used_by":[]},"POMO_FileReader::feof":{"doc":"","file":"pomo\/streams.php","line":128,"missingDoc":true,"filters":[],"uses":{"feof":[129]},"used_by":[]},"POMO_FileReader::close":{"doc":"","file":"pomo\/streams.php","line":132,"missingDoc":true,"filters":[],"uses":{"fclose":[133]},"used_by":[]},"POMO_FileReader::read_all":{"doc":"","file":"pomo\/streams.php","line":136,"missingDoc":true,"filters":[],"uses":{"feof":[138],"read":[139]},"used_by":[]},"POMO_StringReader::POMO_StringReader":{"doc":"","file":"pomo\/streams.php","line":154,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_StringReader::read":{"doc":"","file":"pomo\/streams.php","line":161,"missingDoc":true,"filters":[],"uses":{"substr":[162],"strlen":[164,164]},"used_by":[]},"POMO_StringReader::seekto":{"doc":"","file":"pomo\/streams.php","line":168,"missingDoc":true,"filters":[],"uses":{"strlen":[170,170]},"used_by":[]},"POMO_StringReader::length":{"doc":"","file":"pomo\/streams.php","line":174,"missingDoc":true,"filters":[],"uses":{"strlen":[175]},"used_by":[]},"POMO_StringReader::read_all":{"doc":"","file":"pomo\/streams.php","line":178,"missingDoc":true,"filters":[],"uses":{"substr":[179],"strlen":[179]},"used_by":[]},"POMO_CachedFileReader::POMO_CachedFileReader":{"doc":"","file":"pomo\/streams.php","line":190,"missingDoc":true,"filters":[],"uses":{"file_get_contents":[192]},"used_by":[]},"POMO_CachedIntFileReader::POMO_CachedIntFileReader":{"doc":"","file":"pomo\/streams.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::add_entry":{"doc":"\/**\n * Add entry to the PO structure\n *\n * @param object &$entry\n * @return bool true on success, false if the entry doesn't have a key\n *\/","file":"pomo\/translations.php","line":23,"missingDoc":false,"filters":[],"uses":{"is_array":[24],"key":[27]},"used_by":[]},"Translations::add_entry_or_merge":{"doc":"","file":"pomo\/translations.php","line":33,"missingDoc":true,"filters":[],"uses":{"is_array":[34],"key":[37],"merge_with":[40]},"used_by":[]},"Translations::set_header":{"doc":"\/**\n * Sets $header PO header to $value\n *\n * If the header already exists, it will be overwritten\n *\n * TODO: this should be out of this class, it is gettext specific\n *\n * @param string $header header name, without trailing :\n * @param string $value header value, without trailing \\n\n *\/","file":"pomo\/translations.php","line":56,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Translations::set_headers":{"doc":"","file":"pomo\/translations.php","line":60,"missingDoc":true,"filters":[],"uses":{"set_header":[62]},"used_by":[]},"Translations::get_header":{"doc":"","file":"pomo\/translations.php","line":66,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::translate_entry":{"doc":"","file":"pomo\/translations.php","line":70,"missingDoc":true,"filters":[],"uses":{"key":[71]},"used_by":[]},"Translations::translate":{"doc":"","file":"pomo\/translations.php","line":75,"missingDoc":true,"filters":[],"uses":{"translate_entry":[77]},"used_by":[]},"Translations::select_plural_form":{"doc":"\/**\n * Given the number of items, returns the 0-based index of the plural form to use\n *\n * Here, in the base Translations class, the common logic for English is implemented:\n * \t0 if there is one element, 1 otherwise\n *\n * This function should be overrided by the sub-classes. For example MO\/PO can derive the logic\n * from their headers.\n *\n * @param integer $count number of items\n *\/","file":"pomo\/translations.php","line":92,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Translations::get_plural_forms_count":{"doc":"","file":"pomo\/translations.php","line":96,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::translate_plural":{"doc":"","file":"pomo\/translations.php","line":100,"missingDoc":true,"filters":[],"uses":{"translate_entry":[102],"select_plural_form":[103],"get_plural_forms_count":[104],"is_array":[106]},"used_by":[]},"Translations::merge_with":{"doc":"\/**\n * Merge $other in the current object.\n *\n * @param Object &$other Another Translation object, whose translations will be merged in this one\n * @return void\n **\/","file":"pomo\/translations.php","line":119,"missingDoc":false,"filters":[],"uses":{"key":[121]},"used_by":[]},"Translations::merge_originals_with":{"doc":"","file":"pomo\/translations.php","line":125,"missingDoc":true,"filters":[],"uses":{"key":[128,130,127],"merge_with":[130]},"used_by":[]},"Gettext_Translations::gettext_select_plural_form":{"doc":"\/**\n * The gettext implementation of select_plural_form.\n *\n * It lives in this class, because there are more than one descendand, which will use it and\n * they can't share it effectively.\n *\n *\/","file":"pomo\/translations.php","line":143,"missingDoc":false,"filters":[],"uses":{"nplurals_and_expression_from_header":[145],"get_header":[145],"make_plural_form_function":[147],"is_null":[144],"call_user_func":[149]},"used_by":[]},"Gettext_Translations::nplurals_and_expression_from_header":{"doc":"","file":"pomo\/translations.php","line":152,"missingDoc":true,"filters":[],"uses":{"trim":[155],"parenthesize_plural_exression":[155],"preg_match":[153]},"used_by":[]},"Gettext_Translations::make_plural_form_function":{"doc":"\/**\n * Makes a function, which will return the right translation index, according to the\n * plural forms header\n *\/","file":"pomo\/translations.php","line":166,"missingDoc":false,"filters":[],"uses":{"str_replace":[167],"create_function":[171]},"used_by":[]},"Gettext_Translations::parenthesize_plural_exression":{"doc":"\/**\n * Adds parantheses to the inner parts of ternary operators in\n * plural expressions, because PHP evaluates ternary oerators from left to right\n *\n * @param string $expression the expression without parentheses\n * @return string the expression with parentheses added\n *\/","file":"pomo\/translations.php","line":181,"missingDoc":false,"filters":[],"uses":{"strlen":[185],"str_repeat":[196],"rtrim":[203]},"used_by":[]},"Gettext_Translations::make_headers":{"doc":"","file":"pomo\/translations.php","line":206,"missingDoc":true,"filters":[],"uses":{"str_replace":[209],"explode":[210,212],"trim":[214,214]},"used_by":[]},"Gettext_Translations::set_header":{"doc":"","file":"pomo\/translations.php","line":219,"missingDoc":true,"filters":[],"uses":{"nplurals_and_expression_from_header":[222],"get_header":[222],"make_plural_form_function":[224]},"used_by":[]},"NOOP_Translations::add_entry":{"doc":"","file":"pomo\/translations.php","line":238,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::set_header":{"doc":"","file":"pomo\/translations.php","line":242,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::set_headers":{"doc":"","file":"pomo\/translations.php","line":245,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::get_header":{"doc":"","file":"pomo\/translations.php","line":248,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate_entry":{"doc":"","file":"pomo\/translations.php","line":252,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate":{"doc":"","file":"pomo\/translations.php","line":256,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::select_plural_form":{"doc":"","file":"pomo\/translations.php","line":260,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::get_plural_forms_count":{"doc":"","file":"pomo\/translations.php","line":264,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate_plural":{"doc":"","file":"pomo\/translations.php","line":268,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::merge_with":{"doc":"","file":"pomo\/translations.php","line":272,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"the_content":{"doc":"\/**\n * Display the post content.\n *\n * @since 0.71\n *\n * @param string $more_link_text Optional. Content for when there is more text.\n * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.\n *\/","file":"post-template.php","line":164,"missingDoc":false,"filters":["'the_content'"],"uses":{"get_the_content":[165],"str_replace":[167]},"used_by":[]},"_convert_urlencoded_to_entities":{"doc":"\/**\n * Preview fix for javascript bug with foreign languages\n *\n * @since 3.1.0\n * @access private\n * @param array $match Match array from preg_replace_callback\n * @return string\n *\/","file":"post-template.php","line":238,"missingDoc":false,"filters":[],"uses":{"base_convert":[239]},"used_by":[]},"the_excerpt":{"doc":"\/**\n * Display the post excerpt.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.\n *\/","file":"post-template.php","line":248,"missingDoc":false,"filters":["'the_excerpt'"],"uses":{"get_the_excerpt":[249]},"used_by":[]},"has_excerpt":{"doc":"\/**\n * Whether post has excerpt.\n *\n * @since 2.3.0\n *\n * @param int $id Optional. Post ID.\n * @return bool\n *\/","file":"post-template.php","line":281,"missingDoc":false,"filters":[],"uses":{"get_post":[282]},"used_by":[]},"post_class":{"doc":"\/**\n * Display the classes for the post div.\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @param int $post_id An optional post ID.\n *\/","file":"post-template.php","line":294,"missingDoc":false,"filters":[],"uses":{"join":[296],"get_post_class":[296]},"used_by":[]},"get_post_class":{"doc":"\/**\n * Retrieve the classes for the post div as an array.\n *\n * The class names are add are many. If the post is a sticky, then the 'sticky'\n * class name. The class 'hentry' is always added to each post. For each\n * category, the class will be added with 'category-' with category slug is\n * added. The tags are the same way as the categories with 'tag-' before the tag\n * slug. All classes are passed through the filter, 'post_class' with the list\n * of classes, followed by $class parameter value, with the post ID as the last\n * parameter.\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @param int $post_id An optional post ID.\n * @return array Array of classes.\n *\/","file":"post-template.php","line":316,"missingDoc":false,"filters":["'post_class'"],"uses":{"get_post":[317],"is_admin":[325],"get_post_format":[332],"sanitize_html_class":[335,356,365],"is_wp_error":[334],"post_type_supports":[331],"post_password_required":[341],"is_sticky":[345],"is_home":[345],"is_paged":[345],"get_the_category":[353],"is_object_in_taxonomy":[352,361],"get_the_tags":[362],"preg_split":[371],"is_array":[370],"array_merge":[372],"array_map":[375]},"used_by":{"post_class":[296]}},"body_class":{"doc":"\/**\n * Display the classes for the body element.\n *\n * @since 2.8.0\n *\n * @param string|array $class One or more classes to add to the class list.\n *\/","file":"post-template.php","line":387,"missingDoc":false,"filters":[],"uses":{"join":[389],"get_body_class":[389]},"used_by":{"__main":[40]}},"get_body_class":{"doc":"\/**\n * Retrieve the classes for the body element as an array.\n *\n * @since 2.8.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @return array Array of classes.\n *\/","file":"post-template.php","line":400,"missingDoc":false,"filters":["'body_class'"],"uses":{"is_rtl":[405],"is_front_page":[408],"is_home":[410],"is_archive":[412,453],"is_date":[414,537],"is_search":[416,541],"is_paged":[420],"is_attachment":[422,447],"is_404":[424],"get_queried_object_id":[428,489],"get_queried_object":[429,458,465,472,479],"sanitize_html_class":[433,441,456,461,468,475,481,482,504],"get_post_format":[438],"is_wp_error":[440],"post_type_supports":[437],"get_post_mime_type":[448],"str_replace":[451,504],"get_query_var":[456],"is_category":[464,533],"is_tag":[471,535],"is_tax":[478],"is_author":[457,539],"is_post_type_archive":[454,543],"is_page":[486,531],"get_post":[491],"get_var":[495],"prepare":[495],"get_page_template_slug":[504],"is_page_template":[502],"is_single":[427,529],"is_user_logged_in":[510],"is_admin_bar_showing":[513],"get_theme_mod":[518],"get_background_image":[518],"get":[521,524],"preg_split":[549],"is_array":[548],"array_merge":[550],"array_map":[556]},"used_by":{"body_class":[389]}},"is_date":{"doc":"\/**\n * Is the query for an existing date archive?\n *\n * @see WP_Query::is_date()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":321,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[325],"__":[325],"is_date":[329]},"used_by":{"get_body_class":[414,537],"is_date":[329],"__main":[39]}},"get_post_mime_type":{"doc":"\/**\n * Retrieve the mime type of an attachment based on the ID.\n *\n * This function can be used with any post type, but it makes more sense with\n * attachments.\n *\n * @since 2.0.0\n *\n * @param int $ID Optional. Post ID.\n * @return bool|string False on failure or returns the mime type\n *\/","file":"post.php","line":747,"missingDoc":false,"filters":[],"uses":{"get_post":[748],"is_object":[750]},"used_by":{"get_body_class":[448]}},"is_page_template":{"doc":"\/**\n * Whether currently in a page template.\n *\n * This template tag allows you to determine if you are in a page template.\n * You can optionally provide a template name and then the check will be\n * specific to that template.\n *\n * @since 2.5.0\n * @uses $wp_query\n *\n * @param string $template The specific template name if specific matching is required.\n * @return bool False on failure, true if success.\n *\/","file":"post-template.php","line":1246,"missingDoc":false,"filters":[],"uses":{"is_page":[1247],"get_page_template_slug":[1250],"get_queried_object_id":[1250]},"used_by":{"get_body_class":[502]}},"get_background_image":{"doc":"\/**\n * Retrieve background image for custom background.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"theme.php","line":1108,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[1109],"get_theme_support":[1109]},"used_by":{"get_body_class":[518],"background_image":[1118],"_custom_background_cb":[1149],"_delete_attachment_theme_mod":[1592]}},"_wp_link_page":{"doc":"\/**\n * Helper function for wp_link_pages().\n *\n * @since 3.1.0\n * @access private\n *\n * @param int $i Page number.\n * @return string Link.\n *\/","file":"post-template.php","line":694,"missingDoc":false,"filters":[],"uses":{"get_post":[696],"get_permalink":[699,702,704,706],"add_query_arg":[702],"get_option":[703,703,701],"trailingslashit":[704,706],"user_trailingslashit":[704,706],"in_array":[701],"esc_url":[709]},"used_by":{"wp_link_pages":[654,666,671]}},"post_custom":{"doc":"\/**\n * Retrieve post custom meta data field.\n *\n * @since 1.5.0\n *\n * @param string $key Meta data key name.\n * @return bool|string|array Array of values or single value, if only one element exists. False will be returned if key does not exist.\n *\/","file":"post-template.php","line":724,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[725],"count":[729]},"used_by":[]},"the_meta":{"doc":"\/**\n * Display list of post custom fields.\n *\n * @internal This will probably change at some point...\n * @since 1.2.0\n * @uses apply_filters() Calls 'the_meta_key' on list item HTML content, with key and value as separate parameters.\n *\/","file":"post-template.php","line":742,"missingDoc":false,"filters":["'the_meta_key'"],"uses":{"trim":[746],"is_protected_meta":[747],"array_map":[749],"get_post_custom_values":[749],"implode":[750],"get_post_custom_keys":[743]},"used_by":[]},"get_post_custom_values":{"doc":"\/**\n * Retrieve values for a custom post field.\n *\n * The parameters must not be considered optional. All of the post meta fields\n * will be retrieved and only the meta field key values returned.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom_values\n *\n * @param string $key Meta field key.\n * @param int $post_id Post ID\n * @return array Meta field values.\n *\/","file":"post.php","line":1892,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[1896]},"used_by":{"the_meta":[749]}},"get_pages":{"doc":"\/**\n * Retrieve a list of pages.\n *\n * The defaults that can be overridden are the following: 'child_of',\n * 'sort_order', 'sort_column', 'post_title', 'hierarchical', 'exclude',\n * 'include', 'meta_key', 'meta_value','authors', 'number', and 'offset'.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param mixed $args Optional. Array or string of options that overrides defaults.\n * @return array List of pages matching defaults or $args\n *\/","file":"post.php","line":3621,"missingDoc":false,"filters":["'get_pages'","'get_pages'","'get_pages'"],"uses":{"wp_parse_args":[3636],"extract":[3637],"get_post_types":[3642],"in_array":[3643,3759,3787,3825],"explode":[3648,3757],"is_array":[3647,3655,3655,3663],"array_diff":[3649],"get_post_stati":[3649],"md5":[3653],"serialize":[3653],"compact":[3653],"array_keys":[3653],"array_map":[3657,3834],"wp_cache_get":[3654],"wp_parse_id_list":[3674,3689],"prepare":[3678,3680,3693,3695,3719,3721,3737,3739,3744,3747,3750],"preg_split":[3704],"get_user_by":[3710],"intval":[3709],"stripslashes":[3734,3735],"array_shift":[3747],"implode":[3749,3784],"count":[3746,3805,3823],"trim":[3758],"strpos":[3775],"strtoupper":[3786],"get_results":[3797],"sanitize_post":[3807],"update_post_cache":[3811],"get_page_children":[3814,3818],"wp_cache_set":[3831]},"used_by":{"wp_dropdown_pages":[781],"wp_list_pages":[838]}},"walk_page_dropdown_tree":{"doc":"\/**\n * Retrieve HTML dropdown (select) content for page list.\n *\n * @uses Walker_PageDropdown to create HTML dropdown content.\n * @since 2.1.0\n * @see Walker_PageDropdown::walk() for parameters and return description.\n *\/","file":"post-template.php","line":960,"missingDoc":false,"filters":[],"uses":{"func_get_args":[961],"call_user_func_array":[967]},"used_by":{"wp_dropdown_pages":[793]}},"walk_page_tree":{"doc":"\/**\n * Retrieve HTML list content for page list.\n *\n * @uses Walker_Page to create HTML list content.\n * @since 2.1.0\n * @see Walker_Page::walk() for parameters and return description.\n *\/","file":"post-template.php","line":943,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[950]},"used_by":{"wp_list_pages":[847]}},"wp_page_menu":{"doc":"\/**\n * Display or retrieve list of pages with optional home link.\n *\n * The arguments are listed below and part of the arguments are for {@link\n * wp_list_pages()} function. Check that function for more info on those\n * arguments.\n *\n * <ul>\n * <li><strong>sort_column<\/strong> - How to sort the list of pages. Defaults\n * to page title. Use column for posts table.<\/li>\n * <li><strong>menu_class<\/strong> - Class to use for the div ID which contains\n * the page list. Defaults to 'menu'.<\/li>\n * <li><strong>echo<\/strong> - Whether to echo list or return it. Defaults to\n * echo.<\/li>\n * <li><strong>link_before<\/strong> - Text before show_home argument text.<\/li>\n * <li><strong>link_after<\/strong> - Text after show_home argument text.<\/li>\n * <li><strong>show_home<\/strong> - If you set this argument, then it will\n * display the link to the home page. The show_home argument really just needs\n * to be set to the value of the text of the link.<\/li>\n * <\/ul>\n *\n * @since 2.7.0\n *\n * @param array|string $args\n * @return string html menu\n *\/","file":"post-template.php","line":887,"missingDoc":false,"filters":["'wp_page_menu_args'","'wp_page_menu'"],"uses":{"wp_parse_args":[889],"__":[899],"is_front_page":[903],"is_paged":[903],"home_url":[905],"esc_attr":[905,924],"get_option":[913,907],"str_replace":[919],"wp_list_pages":[919]},"used_by":[]},"Walker_Page::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n * @param array $args\n *\/","file":"post-template.php","line":1001,"missingDoc":false,"filters":[],"uses":{"str_repeat":[1002]},"used_by":[]},"Walker_Page::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n * @param array $args\n *\/","file":"post-template.php","line":1014,"missingDoc":false,"filters":[],"uses":{"str_repeat":[1015]},"used_by":[]},"Walker_Page::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object.\n * @param int $depth Depth of page. Used for padding.\n * @param int $current_page Page ID.\n * @param array $args\n *\/","file":"post-template.php","line":1029,"missingDoc":false,"filters":["'page_css_class'","'the_title'"],"uses":{"str_repeat":[1031],"extract":[1035],"get_post":[1038],"in_array":[1039],"get_option":[1045],"implode":[1049],"get_permalink":[1051],"mysql2date":[1059]},"used_by":[]},"Walker_Page::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object. Not used.\n * @param int $depth Depth of page. Not Used.\n * @param array $args\n *\/","file":"post-template.php","line":1072,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_PageDropdown::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object.\n * @param int $depth Depth of page in reference to parent pages. Used for padding.\n * @param array $args Uses 'selected' argument for selected page to set selected HTML attribute for option element.\n * @param int $id\n *\/","file":"post-template.php","line":1111,"missingDoc":false,"filters":["'list_pages'"],"uses":{"str_repeat":[1112],"esc_html":[1119]},"used_by":[]},"the_attachment_link":{"doc":"\/**\n * Display an attachment page link using an image or icon.\n *\n * @since 2.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default is false. Whether to use full size.\n * @param bool $deprecated Deprecated. Not used.\n * @param bool $permalink Optional, default is false. Whether to include permalink.\n *\/","file":"post-template.php","line":1138,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1140],"wp_get_attachment_link":[1143,1145]},"used_by":[]},"prepend_attachment":{"doc":"\/**\n * Wrap attachment in <<p>> element before content.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'prepend_attachment' hook on HTML content.\n *\n * @param string $content\n * @return string\n *\/","file":"post-template.php","line":1195,"missingDoc":false,"filters":["'prepend_attachment'"],"uses":{"get_post":[1196],"wp_get_attachment_link":[1203]},"used_by":[]},"wp_post_revision_title":{"doc":"\/**\n * Retrieve formatted date timestamp of a revision (linked to that revisions's page).\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses date_i18n()\n *\n * @param int|object $revision Revision ID or revision object.\n * @param bool $link Optional, default is true. Link to revisions's page?\n * @return string i18n formatted datetimestamp or localized 'Current Revision'.\n *\/","file":"post-template.php","line":1296,"missingDoc":false,"filters":[],"uses":{"get_post":[1297],"in_array":[1300],"_x":[1304],"__":[1306,1308],"date_i18n":[1310],"strtotime":[1310],"current_user_can":[1311],"get_edit_post_link":[1311],"sprintf":[1315,1317],"wp_is_post_autosave":[1316],"wp_is_post_revision":[1314]},"used_by":{"wp_list_post_revisions":[1388]}},"wp_is_post_revision":{"doc":"\/**\n * Determines if the specified post is a revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int|object $post Post ID or post object.\n * @return bool|int False if not a revision, ID of revision's parent otherwise.\n *\/","file":"post.php","line":5030,"missingDoc":false,"filters":[],"uses":{"wp_get_post_revision":[5031]},"used_by":{"wp_post_revision_title":[1314],"add_post_meta":[1752],"delete_post_meta":[1776],"update_post_meta":[1819]}},"wp_list_post_revisions":{"doc":"\/**\n * Display list of a post's revisions.\n *\n * Can output either a UL with edit links or a TABLE with diff interface, and\n * restore action links.\n *\n * Second argument controls parameters:\n * (bool) parent : include the parent (the \"Current Revision\") in the list.\n * (string) format : 'list' or 'form-table'. 'list' outputs UL, 'form-table'\n * outputs TABLE with UI.\n * (int) right : what revision is currently being viewed - used in\n * form-table format.\n * (int) left : what revision is currently being diffed against right -\n * used in form-table format.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revisions()\n * @uses wp_post_revision_title()\n * @uses get_edit_post_link()\n * @uses get_the_author_meta()\n *\n * @todo split into two functions (list, form-table) ?\n *\n * @param int|object $post_id Post ID or post object.\n * @param string|array $args See description {@link wp_parse_args()}.\n * @return null\n *\/","file":"post-template.php","line":1352,"missingDoc":false,"filters":[],"uses":{"get_post":[1353],"extract":[1357],"wp_parse_args":[1357],"wp_get_post_autosave":[1361],"wp_get_post_revisions":[1368],"_x":[1374],"array_unshift":[1377],"current_user_can":[1381,1383],"wp_is_post_autosave":[1385],"wp_post_revision_title":[1388],"get_the_author_meta":[1389],"wp_nonce_url":[1401],"add_query_arg":[1401],"__":[1401],"sprintf":[1413],"esc_attr_e":[1424],"esc_attr":[1426],"_ex":[1440,1441,1442],"_e":[1443,1444]},"used_by":[]},"wp_get_post_autosave":{"doc":"\/**\n * Retrieve the autosaved data of the specified post.\n *\n * Returns a post object containing the information that was autosaved for the\n * specified post.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int $post_id The post ID.\n * @return object|bool The autosaved data or false on failure or when no autosave exists.\n *\/","file":"post.php","line":4982,"missingDoc":false,"filters":[],"uses":{"get_post":[4984],"add_action":[4997],"query":[4998],"remove_action":[4999],"is_array":[5001],"is_object":[5001]},"used_by":{"wp_list_post_revisions":[1361],"_set_preview":[5231]}},"has_post_thumbnail":{"doc":"\/**\n * Check if post has an image attached.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @return bool Whether post has an image attached.\n *\/","file":"post-thumbnail-template.php","line":20,"missingDoc":false,"filters":[],"uses":{"get_post_thumbnail_id":[21]},"used_by":[]},"the_post_thumbnail":{"doc":"\/**\n * Display Post Thumbnail.\n *\n * @since 2.9.0\n *\n * @param string|array $size Optional. Image size. Defaults to 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, $crop_flag );.\n * @param string|array $attr Optional. Query string or array of attributes.\n *\/","file":"post-thumbnail-template.php","line":45,"missingDoc":false,"filters":[],"uses":{"get_the_post_thumbnail":[46]},"used_by":[]},"get_the_post_thumbnail":{"doc":"\/**\n * Retrieve Post Thumbnail.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @param string $size Optional. Image size. Defaults to 'post-thumbnail'.\n * @param string|array $attr Optional. Query string or array of attributes.\n *\/","file":"post-thumbnail-template.php","line":85,"missingDoc":false,"filters":["'post_thumbnail_size'","'begin_fetch_post_thumbnail_html'","'end_fetch_post_thumbnail_html'","'post_thumbnail_html'"],"uses":{"get_the_ID":[86],"get_post_thumbnail_id":[87],"update_post_thumbnail_cache":[92],"in_the_loop":[91],"wp_get_attachment_image":[93]},"used_by":{"the_post_thumbnail":[46]}},"update_post_thumbnail_cache":{"doc":"\/**\n * Update cache for thumbnails in the current loop\n *\n * @since 3.2\n *\n * @param object $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global.\n *\/","file":"post-thumbnail-template.php","line":56,"missingDoc":false,"filters":[],"uses":{"get_post_thumbnail_id":[65],"_prime_post_caches":[70]},"used_by":{"get_the_post_thumbnail":[92]}},"in_the_loop":{"doc":"\/**\n * Whether the caller is in the Loop.\n *\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool True if caller is within loop, false if loop hasn't started or ended.\n *\/","file":"query.php","line":754,"missingDoc":false,"filters":[],"uses":[],"used_by":{"get_the_post_thumbnail":[91]}},"create_initial_post_types":{"doc":"\/**\n * Creates the initial post types when 'init' action is fired.\n *\n * @since 2.9.0\n *\/","file":"post.php","line":19,"missingDoc":false,"filters":[],"uses":{"register_post_type":[20,36,53,78,96],"_x":[22,38,55,56,57,110,117,124,131,138,145],"__":[58,59,80,81,98,99],"register_post_status":[109,116,123,130,137,144,152,158],"_n_noop":[113,120,127,134,141,148]},"used_by":[]},"register_post_type":{"doc":"\/**\n * Register a post type. Do not use before init.\n *\n * A function for creating or modifying a post type based on the\n * parameters given. The function will accept an array (second optional\n * parameter), along with a string for the post type name.\n *\n * Optional $args contents:\n *\n * - label - Name of the post type shown in the menu. Usually plural. If not set, labels['name'] will be used.\n * - labels - An array of labels for this post type.\n * * If not set, post labels are inherited for non-hierarchical types and page labels for hierarchical ones.\n * * You can see accepted values in {@link get_post_type_labels()}.\n * - description - A short descriptive summary of what the post type is. Defaults to blank.\n * - public - Whether a post type is intended for use publicly either via the admin interface or by front-end users.\n * * Defaults to false.\n * * While the default settings of exclude_from_search, publicly_queryable, show_ui, and show_in_nav_menus are\n * inherited from public, each does not rely on this relationship and controls a very specific intention.\n * - exclude_from_search - Whether to exclude posts with this post type from front end search results.\n * * If not set, the the opposite of public's current value is used.\n * - publicly_queryable - Whether queries can be performed on the front end for the post type as part of parse_request().\n * * ?post_type={post_type_key}\n * * ?{post_type_key}={single_post_slug}\n * * ?{post_type_query_var}={single_post_slug}\n * * If not set, the default is inherited from public.\n * - show_ui - Whether to generate a default UI for managing this post type in the admin.\n * * If not set, the default is inherited from public.\n * - show_in_nav_menus - Makes this post type available for selection in navigation menus.\n * * If not set, the default is inherited from public.\n * - show_in_menu - Where to show the post type in the admin menu.\n * * If true, the post type is shown in its own top level menu.\n * * If false, no menu is shown\n * * If a string of an existing top level menu (eg. 'tools.php' or 'edit.php?post_type=page'), the post type will\n * be placed as a sub menu of that.\n * * show_ui must be true.\n * * If not set, the default is inherited from show_ui\n * - show_in_admin_bar - Makes this post type available via the admin bar.\n * * If not set, the default is inherited from show_in_menu\n * - menu_position - The position in the menu order the post type should appear.\n * * show_in_menu must be true\n * * Defaults to null, which places it at the bottom of its area.\n * - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon.\n * - capability_type - The string to use to build the read, edit, and delete capabilities. Defaults to 'post'.\n * * May be passed as an array to allow for alternative plurals when using this argument as a base to construct the\n * capabilities, e.g. array('story', 'stories').\n * - capabilities - Array of capabilities for this post type.\n * * By default the capability_type is used as a base to construct capabilities.\n * * You can see accepted values in {@link get_post_type_capabilities()}.\n * - map_meta_cap - Whether to use the internal default meta capability handling. Defaults to false.\n * - hierarchical - Whether the post type is hierarchical (e.g. page). Defaults to false.\n * - supports - An alias for calling add_post_type_support() directly. Defaults to title and editor.\n * * See {@link add_post_type_support()} for documentation.\n * - register_meta_box_cb - Provide a callback function that will be called when setting up the\n * meta boxes for the edit form. Do remove_meta_box() and add_meta_box() calls in the callback.\n * - taxonomies - An array of taxonomy identifiers that will be registered for the post type.\n * * Default is no taxonomies.\n * * Taxonomies can be registered later with register_taxonomy() or register_taxonomy_for_object_type().\n * - has_archive - True to enable post type archives. Default is false.\n * * Will generate the proper rewrite rules if rewrite is enabled.\n * - rewrite - Triggers the handling of rewrites for this post type. Defaults to true, using $post_type as slug.\n * * To prevent rewrite, set to false.\n * * To specify rewrite rules, an array can be passed with any of these keys\n * * 'slug' => string Customize the permastruct slug. Defaults to $post_type key\n * * 'with_front' => bool Should the permastruct be prepended with WP_Rewrite::$front. Defaults to true.\n * * 'feeds' => bool Should a feed permastruct be built for this post type. Inherits default from has_archive.\n * * 'pages' => bool Should the permastruct provide for pagination. Defaults to true.\n * * 'ep_mask' => const Assign an endpoint mask.\n * * If not specified and permalink_epmask is set, inherits from permalink_epmask.\n * * If not specified and permalink_epmask is not set, defaults to EP_PERMALINK\n * - query_var - Sets the query_var key for this post type. Defaults to $post_type key\n * * If false, a post type cannot be loaded at ?{query_var}={post_slug}\n * * If specified as a string, the query ?{query_var_string}={post_slug} will be valid.\n * - can_export - Allows this post type to be exported. Defaults to true.\n * - delete_with_user - Whether to delete posts of this type when deleting a user.\n * * If true, posts of this type belonging to the user will be moved to trash when then user is deleted.\n * * If false, posts of this type belonging to the user will *not* be trashed or deleted.\n * * If not set (the default), posts are trashed if post_type_supports('author'). Otherwise posts are not trashed or deleted.\n * - _builtin - true if this post type is a native or \"built-in\" post_type. THIS IS FOR INTERNAL USE ONLY!\n * - _edit_link - URL segement to use for edit link of this post type. THIS IS FOR INTERNAL USE ONLY!\n *\n * @since 2.9.0\n * @uses $wp_post_types Inserts new post type object into the list\n *\n * @param string $post_type Post type key, must not exceed 20 characters\n * @param array|string $args See optional args description above.\n * @return object|WP_Error the registered post type object, or an error object\n *\/","file":"post.php","line":1213,"missingDoc":false,"filters":["'registered_post_type'"],"uses":{"is_array":[1216,1274,1294],"wp_parse_args":[1231],"sanitize_key":[1234],"__":[1238],"strlen":[1237],"in_array":[1265],"get_post_type_capabilities":[1271],"add_post_type_support":[1278,1282],"sanitize_title_with_dashes":[1289],"add_query_var":[1290],"add_rewrite_tag":[1312,1314],"substr":[1319],"add_rewrite_rule":[1323,1326,1327,1330],"trim":[1325],"implode":[1325],"add_permastruct":[1333],"is_admin":[1293],"get_option":[1293],"add_action":[1337,1344],"get_post_type_labels":[1339],"register_taxonomy_for_object_type":[1347]},"used_by":{"create_initial_post_types":[20,36,53,78,96]}},"register_post_status":{"doc":"\/**\n * Register a post status. Do not use before init.\n *\n * A simple function for creating or modifying a post status based on the\n * parameters given. The function will accept an array (second optional\n * parameter), along with a string for the post status name.\n *\n *\n * Optional $args contents:\n *\n * label - A descriptive name for the post status marked for translation. Defaults to $post_status.\n * public - Whether posts of this status should be shown in the front end of the site. Defaults to true.\n * exclude_from_search - Whether to exclude posts with this post status from search results. Defaults to false.\n * show_in_admin_all_list - Whether to include posts in the edit listing for their post type\n * show_in_admin_status_list - Show in the list of statuses with post counts at the top of the edit\n * listings, e.g. All (12) | Published (9) | My Custom Status (2) ...\n *\n * Arguments prefixed with an _underscore shouldn't be used by plugins and themes.\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses Inserts new post status object into the list\n *\n * @param string $post_status Name of the post status.\n * @param array|string $args See above description.\n *\/","file":"post.php","line":922,"missingDoc":false,"filters":[],"uses":{"is_array":[925],"wp_parse_args":[942],"sanitize_key":[945]},"used_by":{"create_initial_post_types":[109,116,123,130,137,144,152,158]}},"update_attached_file":{"doc":"\/**\n * Update attachment file path based on attachment ID.\n *\n * Used to update the file path of the attachment, which uses post meta name\n * '_wp_attached_file' to store the path of the attachment.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'update_attached_file' on file path and attachment ID.\n *\n * @param int $attachment_id Attachment ID\n * @param string $file File path for the attachment\n * @return bool False on failure, true on success.\n *\/","file":"post.php","line":208,"missingDoc":false,"filters":["'update_attached_file'"],"uses":{"get_post":[209],"update_post_meta":[214],"delete_post_meta":[216],"_wp_relative_upload_path":[213]},"used_by":{"wp_insert_attachment":[4042]}},"_wp_relative_upload_path":{"doc":"\/**\n * Return relative path to an uploaded file.\n *\n * The path is relative to the current upload dir.\n *\n * @since 2.9.0\n * @uses apply_filters() Calls '_wp_relative_upload_path' on file path.\n *\n * @param string $path Full path to the file\n * @return string relative path on success, unchanged path on failure.\n *\/","file":"post.php","line":230,"missingDoc":false,"filters":["'_wp_relative_upload_path'"],"uses":{"wp_upload_dir":[233],"str_replace":[235],"ltrim":[236],"strpos":[234]},"used_by":{"update_attached_file":[213]}},"sanitize_post":{"doc":"\/**\n * Sanitize every post field.\n *\n * If the context is 'raw', then the post object or array will get minimal santization of the int fields.\n *\n * @since 2.3.0\n * @uses sanitize_post_field() Used to sanitize the fields.\n *\n * @param object|WP_Post|array $post The Post Object or Array\n * @param string $context Optional, default is 'display'. How to sanitize post fields.\n * @return object|WP_Post|array The now sanitized Post Object or Array (will be the same type as $post)\n *\/","file":"post.php","line":1941,"missingDoc":false,"filters":[],"uses":{"sanitize_post_field":[1949,1958],"array_keys":[1948,1957],"get_object_vars":[1948],"is_object":[1942]},"used_by":{"get_post":[394],"WP_Post::get_instance":[585,588],"WP_Post::filter":[660],"wp_insert_post":[2713],"get_pages":[3807],"wp_insert_attachment":[3921],"_set_preview":[5236]}},"WP_Post::get_instance":{"doc":"","file":"post.php","line":570,"missingDoc":true,"filters":[],"uses":{"wp_cache_get":[577],"get_row":[580],"prepare":[580],"sanitize_post":[585,588],"wp_cache_add":[586]},"used_by":[]},"WP_Post::__construct":{"doc":"","file":"post.php","line":594,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[595]},"used_by":[]},"WP_Post::__isset":{"doc":"","file":"post.php","line":599,"missingDoc":true,"filters":[],"uses":{"metadata_exists":[612]},"used_by":[]},"WP_Post::__get":{"doc":"","file":"post.php","line":615,"missingDoc":true,"filters":[],"uses":{"get_post_meta":[617,645],"__isset":[616],"get_the_terms":[622,632],"is_object_in_taxonomy":[621,631],"wp_list_pluck":[627,637],"get_post_ancestors":[643],"sanitize_post_field":[648]},"used_by":[]},"get_post_ancestors":{"doc":"\/**\n * Retrieve ancestors of a post.\n *\n * @since 2.5.0\n *\n * @param int|object $post Post ID or post object\n * @return array Ancestor IDs or empty array if none are found.\n *\/","file":"post.php","line":683,"missingDoc":false,"filters":[],"uses":{"get_post":[687,696],"in_array":[698]},"used_by":{"WP_Post::__get":[643],"get_ancestors":[3240]}},"sanitize_post_field":{"doc":"\/**\n * Sanitize post field based on context.\n *\n * Possible context values are: 'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The\n * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'\n * when calling filters.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'edit_$field' and '{$field_no_prefix}_edit_pre' passing $value and\n * $post_id if $context == 'edit' and field name prefix == 'post_'.\n *\n * @uses apply_filters() Calls 'edit_post_$field' passing $value and $post_id if $context == 'db'.\n * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db' and field name prefix == 'post_'.\n * @uses apply_filters() Calls '{$field}_pre' passing $value if $context == 'db' and field name prefix != 'post_'.\n *\n * @uses apply_filters() Calls '$field' passing $value, $post_id and $context if $context == anything\n * other than 'raw', 'edit' and 'db' and field name prefix == 'post_'.\n * @uses apply_filters() Calls 'post_$field' passing $value if $context == anything other than 'raw',\n * 'edit' and 'db' and field name prefix != 'post_'.\n *\n * @param string $field The Post Object field name.\n * @param mixed $value The Post Object value.\n * @param int $post_id Post ID.\n * @param string $context How to sanitize post fields. Looks for 'raw', 'edit', 'db', 'display',\n * 'attribute' and 'js'.\n * @return mixed Sanitized value.\n *\/","file":"post.php","line":1991,"missingDoc":false,"filters":["\"edit_{$field}\"","\"{$field_no_prefix}_edit_pre\"","\"edit_post_{$field}\"","\"pre_{$field}\"","\"{$field_no_prefix}_save_pre\"","\"pre_post_{$field}\"","\"{$field}_pre\"","\"post_{$field}\""],"uses":{"in_array":[1993,1998,2023],"array_map":[1999],"str_replace":[2009],"strpos":[2007],"format_to_edit":[2025,2027],"user_can_richedit":[2025],"esc_attr":[2029,2048],"esc_js":[2050]},"used_by":{"WP_Post::__get":[648],"get_post_field":[733],"set_post_type":[1666],"sanitize_post":[1949,1958]}},"WP_Post::filter":{"doc":"","file":"post.php","line":653,"missingDoc":true,"filters":[],"uses":{"sanitize_post":[660]},"used_by":[]},"WP_Post::to_array":{"doc":"","file":"post.php","line":663,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[664],"__get":[668],"__isset":[667]},"used_by":[]},"has_post_format":{"doc":"\/**\n * Check if a post has a particular format\n *\n * @since 3.1.0\n * @uses has_term()\n *\n * @param string $format The format to check for\n * @param object|id $post The post to check. If not supplied, defaults to the current post if used in the loop.\n * @return bool True if the post has the format, false otherwise.\n *\/","file":"post.php","line":791,"missingDoc":false,"filters":[],"uses":{"has_term":[792],"sanitize_key":[792]},"used_by":[]},"get_post_format_slugs":{"doc":"\/**\n * Retrieves an array of post format slugs.\n *\n * @since 3.1.0\n *\n * @return array The array of post format slugs.\n *\/","file":"post.php","line":5346,"missingDoc":false,"filters":[],"uses":{"array_keys":[5347],"get_post_format_strings":[5347],"array_combine":[5348]},"used_by":{"set_post_format":[812],"_post_format_request":[5441],"add_theme_support":[1262]}},"wp_set_post_terms":{"doc":"\/**\n * Set the terms for a post.\n *\n * @since 2.8.0\n * @uses wp_set_object_terms() Sets the tags for the post.\n *\n * @param int $post_id Post ID.\n * @param string $tags The tags to set for the post, separated by commas.\n * @param string $taxonomy Taxonomy name. Defaults to 'post_tag'.\n * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags.\n * @return mixed Array of affected term IDs. WP_Error or false on failure.\n *\/","file":"post.php","line":3193,"missingDoc":false,"filters":[],"uses":{"_x":[3203],"str_replace":[3205],"explode":[3206],"trim":[3206],"is_array":[3202],"array_unique":[3212],"array_map":[3212],"is_taxonomy_hierarchical":[3211],"wp_set_object_terms":[3215]},"used_by":{"set_post_format":[818],"wp_insert_post":[2916],"wp_set_post_tags":[3178],"wp_set_post_categories":[3244],"wp_insert_attachment":[4037]}},"get_post_status":{"doc":"\/**\n * Retrieve the post status based on the Post ID.\n *\n * If the post ID is of an attachment, then the parent post status will be given\n * instead.\n *\n * @since 2.0.0\n *\n * @param int $ID Post ID\n * @return string|bool Post status or false on failure.\n *\/","file":"post.php","line":832,"missingDoc":false,"filters":[],"uses":{"get_post":[833],"is_object":[835],"get_post_status":[848]},"used_by":{"get_post_status":[848],"wp_delete_post":[2311],"wp_set_post_categories":[3233],"WP_Query::get_posts":[2700]}},"get_post_stati":{"doc":"\/**\n * Get a list of all registered post status objects.\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses\n * @see register_post_status\n * @see get_post_status_object\n *\n * @param array|string $args An array of key => value arguments to match against the post status objects.\n * @param string $output The type of output to return, either post status 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of post status names or objects\n *\/","file":"post.php","line":1024,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[1029]},"used_by":{"wp_count_posts":[2145],"get_pages":[3649],"WP_Query::get_posts":[2446,2449,2490,2499,2506]}},"get_post_type_capabilities":{"doc":"\/**\n * Builds an object with all post type capabilities out of a post type object\n *\n * Post type capabilities use the 'capability_type' argument as a base, if the\n * capability is not set in the 'capabilities' argument array or if the\n * 'capabilities' argument is not supplied.\n *\n * The capability_type argument can optionally be registered as an array, with\n * the first value being singular and the second plural, e.g. array('story, 'stories')\n * Otherwise, an 's' will be added to the value for the plural form. After\n * registration, capability_type will always be a string of the singular value.\n *\n * By default, seven keys are accepted as part of the capabilities array:\n *\n * - edit_post, read_post, and delete_post are meta capabilities, which are then\n * generally mapped to corresponding primitive capabilities depending on the\n * context, which would be the post being edited\/read\/deleted and the user or\n * role being checked. Thus these capabilities would generally not be granted\n * directly to users or roles.\n *\n * - edit_posts - Controls whether objects of this post type can be edited.\n * - edit_others_posts - Controls whether objects of this type owned by other users\n * can be edited. If the post type does not support an author, then this will\n * behave like edit_posts.\n * - publish_posts - Controls publishing objects of this post type.\n * - read_private_posts - Controls whether private objects can be read.\n *\n * These four primitive capabilities are checked in core in various locations.\n * There are also seven other primitive capabilities which are not referenced\n * directly in core, except in map_meta_cap(), which takes the three aforementioned\n * meta capabilities and translates them into one or more primitive capabilities\n * that must then be checked against the user or role, depending on the context.\n *\n * - read - Controls whether objects of this post type can be read.\n * - delete_posts - Controls whether objects of this post type can be deleted.\n * - delete_private_posts - Controls whether private objects can be deleted.\n * - delete_published_posts - Controls whether published objects can be deleted.\n * - delete_others_posts - Controls whether objects owned by other users can be\n * can be deleted. If the post type does not support an author, then this will\n * behave like delete_posts.\n * - edit_private_posts - Controls whether private objects can be edited.\n * - edit_published_posts - Controls whether published objects can be edited.\n *\n * These additional capabilities are only used in map_meta_cap(). Thus, they are\n * only assigned by default if the post type is registered with the 'map_meta_cap'\n * argument set to true (default is false).\n *\n * @see map_meta_cap()\n * @since 3.0.0\n *\n * @param object $args Post type registration arguments\n * @return object object with all the capabilities as member variables\n *\/","file":"post.php","line":1408,"missingDoc":false,"filters":[],"uses":{"is_array":[1409],"array_merge":[1438,1441],"_post_type_meta_capabilities":[1449]},"used_by":{"register_post_type":[1271]}},"add_post_type_support":{"doc":"\/**\n * Register support of certain features for a post type.\n *\n * All features are directly associated with a functional area of the edit screen, such as the\n * editor or a meta box: 'title', 'editor', 'comments', 'revisions', 'trackbacks', 'author',\n * 'excerpt', 'page-attributes', 'thumbnail', and 'custom-fields'.\n *\n * Additionally, the 'revisions' feature dictates whether the post type will store revisions,\n * and the 'comments' feature dictates whether the comments count will show on the edit screen.\n *\n * @since 3.0.0\n * @param string $post_type The post type for which to add the feature\n * @param string|array $feature the feature being added, can be an array of feature strings or a single string\n *\/","file":"post.php","line":1578,"missingDoc":false,"filters":[],"uses":{"array_slice":[1586],"func_get_args":[1586],"func_num_args":[1583]},"used_by":{"register_post_type":[1278,1282]}},"add_rewrite_tag":{"doc":"\/**\n * Add a new rewrite tag (like %postname%).\n *\n * The $query parameter is optional. If it is omitted you must ensure that\n * you call this on, or before, the 'init' hook. This is because $query defaults\n * to \"$tag=\", and for this to work a new query var has to be added.\n *\n * @see WP_Rewrite::add_rewrite_tag()\n * @since 2.1.0\n *\n * @param string $tag Name of the new rewrite tag.\n * @param string $regex Regular expression to substitute the tag for in rewrite rules.\n * @param string $query String to append to the rewritten query. Must end in '='. Optional.\n *\/","file":"rewrite.php","line":38,"missingDoc":false,"filters":[],"uses":{"strlen":[40,40],"trim":[46],"add_query_var":[47],"add_rewrite_tag":[51]},"used_by":{"register_post_type":[1312,1314],"add_rewrite_tag":[51],"WP_Rewrite::page_rewrite_rules":[864],"register_taxonomy":[358]}},"add_rewrite_rule":{"doc":"\/**\n * Add a straight rewrite rule.\n *\n * @see WP_Rewrite::add_rule() for long description.\n * @since 2.1.0\n *\n * @param string $regex Regular Expression to match request against.\n * @param string $redirect Page to redirect to.\n * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'.\n *\/","file":"rewrite.php","line":19,"missingDoc":false,"filters":[],"uses":{"add_rule":[21]},"used_by":{"register_post_type":[1323,1326,1327,1330]}},"add_permastruct":{"doc":"\/**\n * Add permalink structure.\n *\n * @see WP_Rewrite::add_permastruct()\n * @since 3.0.0\n *\n * @param string $name Name for permalink structure.\n * @param string $struct Permalink structure.\n * @param array $args Optional configuration for building the rules from the permalink structure,\n * see {@link WP_Rewrite::add_permastruct()} for full details.\n *\/","file":"rewrite.php","line":65,"missingDoc":false,"filters":[],"uses":{"is_array":[69],"func_get_arg":[72],"func_num_args":[71],"add_permastruct":[74]},"used_by":{"register_post_type":[1333],"add_permastruct":[74],"register_taxonomy":[359]}},"get_post_type_labels":{"doc":"\/**\n * Builds an object with all post type labels out of a post type object\n *\n * Accepted keys of the label array in the post type object:\n * - name - general name for the post type, usually plural. The same and overridden by $post_type_object->label. Default is Posts\/Pages\n * - singular_name - name for one object of this post type. Default is Post\/Page\n * - add_new - Default is Add New for both hierarchical and non-hierarchical types. When internationalizing this string, please use a {@link http:\/\/codex.wordpress.org\/I18n_for_WordPress_Developers#Disambiguation_by_context gettext context} matching your post type. Example: <code>_x('Add New', 'product');<\/code>\n * - add_new_item - Default is Add New Post\/Add New Page\n * - edit_item - Default is Edit Post\/Edit Page\n * - new_item - Default is New Post\/New Page\n * - view_item - Default is View Post\/View Page\n * - search_items - Default is Search Posts\/Search Pages\n * - not_found - Default is No posts found\/No pages found\n * - not_found_in_trash - Default is No posts found in Trash\/No pages found in Trash\n * - parent_item_colon - This string isn't used on non-hierarchical types. In hierarchical ones the default is Parent Page:\n * - all_items - String for the submenu. Default is All Posts\/All Pages\n * - menu_name - Default is the same as <code>name<\/code>\n *\n * Above, the first default value is for non-hierarchical post types (like posts) and the second one is for hierarchical post types (like pages).\n *\n * @since 3.0.0\n * @param object $post_type_object\n * @return object object with all the labels as member variables\n *\/","file":"post.php","line":1494,"missingDoc":false,"filters":["\"post_type_labels_{$post_type}\""],"uses":{"_x":[1496,1496,1497,1497,1498,1498],"__":[1499,1499,1500,1500,1501,1501,1502,1502,1503,1503,1504,1504,1505,1505,1506,1507,1507],"_get_custom_object_labels":[1511]},"used_by":{"register_post_type":[1339]}},"register_taxonomy_for_object_type":{"doc":"\/**\n * Add an already registered taxonomy to an object type.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n * @uses $wp_taxonomies Modifies taxonomy object\n *\n * @param string $taxonomy Name of taxonomy object\n * @param string $object_type Name of the object type\n * @return bool True if successful, false if not\n *\/","file":"taxonomy.php","line":460,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[466],"in_array":[469]},"used_by":{"register_post_type":[1347]}},"_get_custom_object_labels":{"doc":"\/**\n * Builds an object with custom-something object (post type, taxonomy) labels out of a custom-something object\n *\n * @access private\n * @since 3.0.0\n *\/","file":"post.php","line":1523,"missingDoc":false,"filters":[],"uses":{"array_merge":[1543]},"used_by":{"get_post_type_labels":[1511],"get_taxonomy_labels":[445]}},"_add_post_type_submenus":{"doc":"\/**\n * Adds submenus for post types.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":1553,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[1555],"add_submenu_page":[1559],"get_post_types":[1554]},"used_by":[]},"remove_post_type_support":{"doc":"\/**\n * Remove support for a feature from a post type.\n *\n * @since 3.0.0\n * @param string $post_type The post type for which to remove the feature\n * @param string $feature The feature being removed\n *\/","file":"post.php","line":1597,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"set_post_type":{"doc":"\/**\n * Updates the post type for the post ID.\n *\n * The page or post cache will be cleaned for the post ID.\n *\n * @since 2.5.0\n *\n * @uses $wpdb\n *\n * @param int $post_id Post ID to change post type. Not actually optional.\n * @param string $post_type Optional, default is post. Supported values are 'post' or 'page' to\n * name a few.\n * @return int Amount of rows changed. Should be 1 for success and 0 for failure.\n *\/","file":"post.php","line":1663,"missingDoc":false,"filters":[],"uses":{"sanitize_post_field":[1666],"update":[1667],"clean_post_cache":[1669]},"used_by":[]},"delete_post_meta_by_key":{"doc":"\/**\n * Delete everything from post meta matching meta key.\n *\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param string $post_meta_key Key to search for when deleting.\n * @return bool Whether the post meta key was deleted from the database\n *\/","file":"post.php","line":1834,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[1835]},"used_by":[]},"wp_count_posts":{"doc":"\/**\n * Count number of posts of a post type and is user has permissions to view.\n *\n * This function provides an efficient method of finding the amount of post's\n * type a blog has. Another method is to count the amount of items in\n * get_posts(), but that method has a lot of overhead with doing so. Therefore,\n * when developing for 2.5+, use this function instead.\n *\n * The $perm parameter checks for 'readable' value and if the user can read\n * private posts, it will display that for the user that is signed in.\n *\n * @since 2.5.0\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_count_posts\n *\n * @param string $type Optional. Post type to retrieve count\n * @param string $perm Optional. 'readable' or empty.\n * @return object Number of posts for each status\n *\/","file":"post.php","line":2121,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[2124],"get_post_type_object":[2130],"current_user_can":[2131],"is_user_logged_in":[2129],"wp_cache_get":[2138],"get_results":[2142],"prepare":[2142],"get_post_stati":[2145],"wp_cache_set":[2152]},"used_by":[]},"wp_count_attachments":{"doc":"\/**\n * Count number of attachments for the mime type(s).\n *\n * If you set the optional mime_type parameter, then an array will still be\n * returned, but will only have the item you are looking for. It does not give\n * you the number of attachments that are children of a post. You can get that\n * by counting the number of children that post has.\n *\n * @since 2.5.0\n *\n * @param string|array $mime_type Optional. Array or comma-separated list of MIME patterns.\n * @return array Number of posts for each mime type.\n *\/","file":"post.php","line":2170,"missingDoc":false,"filters":[],"uses":{"wp_post_mime_type_where":[2173],"get_results":[2174],"get_var":[2180]},"used_by":[]},"wp_post_mime_type_where":{"doc":"\/**\n * Convert MIME types into SQL.\n *\n * @since 2.5.0\n *\n * @param string|array $post_mime_types List of mime types or comma separated string of mime types.\n * @param string $table_alias Optional. Specify a table alias, if needed.\n * @return string The SQL AND clause for mime searching.\n *\/","file":"post.php","line":2249,"missingDoc":false,"filters":[],"uses":{"array_map":[2253],"explode":[2253],"is_string":[2252],"preg_replace":[2255,2258,2259,2266,2271],"strpos":[2256,2267,2276],"substr":[2258,2259],"str_replace":[2263],"in_array":[2273],"join":[2282]},"used_by":{"wp_count_attachments":[2173],"WP_Query::get_posts":[2332]}},"wp_match_mime_types":{"doc":"\/**\n * Check a MIME-Type against a list.\n *\n * If the wildcard_mime_types parameter is a string, it must be comma separated\n * list. If the real_mime_types is a string, it is also comma separated to\n * create the list.\n *\n * @since 2.5.0\n *\n * @param string|array $wildcard_mime_types e.g. audio\/mpeg or image (same as image\/*) or\n * flash (same as *flash*).\n * @param string|array $real_mime_types post_mime_type values\n * @return array array(wildcard=>array(real types))\n *\/","file":"post.php","line":2216,"missingDoc":false,"filters":[],"uses":{"array_map":[2219,2221],"explode":[2219,2221],"is_string":[2218,2220],"str_replace":[2224],"strpos":[2226],"asort":[2231],"preg_match":[2235],"array_search":[2235]},"used_by":{"wp_mime_type_icon":[4385]}},"wp_trash_post":{"doc":"\/**\n * Moves a post or page to the Trash\n *\n * If trash is disabled, the post or page is permanently deleted.\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_post' before trashing\n * @uses do_action() on 'trashed_post' after trashing\n * @uses wp_delete_post() if trash is disabled\n *\n * @param int $post_id Post ID.\n * @return mixed False on failure\n *\/","file":"post.php","line":2397,"missingDoc":false,"filters":["'wp_trash_post'","'trashed_post'"],"uses":{"wp_delete_post":[2399],"get_post":[2401],"add_post_meta":[2409,2410],"time":[2410],"wp_insert_post":[2413],"wp_trash_post_comments":[2415]},"used_by":{"wp_delete_post":[2312],"wp_delete_attachment":[4086]}},"wp_delete_object_term_relationships":{"doc":"\/**\n * Will unlink the object from the taxonomy or taxonomies.\n *\n * Will remove all relationships between the object and any terms in\n * a particular taxonomy or taxonomies. Does not remove the term or\n * taxonomy itself.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int $object_id The term Object Id that refers to the term\n * @param string|array $taxonomies List of Taxonomy Names or single Taxonomy name.\n *\/","file":"taxonomy.php","line":1720,"missingDoc":false,"filters":["'delete_term_relationships'","'deleted_term_relationships'"],"uses":{"is_array":[1725],"wp_get_object_terms":[1729],"implode":[1730],"query":[1732],"prepare":[1732],"wp_update_term_count":[1734]},"used_by":{"wp_delete_post":[2322],"wp_delete_attachment":[4106,4107]}},"wp_delete_post_revision":{"doc":"\/**\n * Deletes a revision.\n *\n * Deletes the row from the posts table corresponding to the specified revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revision()\n * @uses wp_delete_post()\n *\n * @param int|object $revision_id Revision ID or revision object.\n * @return mixed Null or WP_Error if error, deleted post if success.\n *\/","file":"post.php","line":5185,"missingDoc":false,"filters":["'wp_delete_post_revision'"],"uses":{"wp_get_post_revision":[5186],"wp_delete_post":[5189],"is_wp_error":[5190]},"used_by":{"wp_delete_post":[2353],"wp_save_post_revision":[4963]}},"wp_trash_post_comments":{"doc":"\/**\n * Moves comments for a post to the trash\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_post_comments' before trashing\n * @uses do_action() on 'trashed_post_comments' after trashing\n *\n * @param int $post Post ID or object.\n * @return mixed False on failure\n *\/","file":"post.php","line":2467,"missingDoc":false,"filters":["'trash_post_comments'","'trashed_post_comments'"],"uses":{"get_post":[2470],"get_results":[2478],"prepare":[2478],"add_post_meta":[2486],"update":[2489],"clean_comment_cache":[2491],"array_keys":[2491]},"used_by":{"wp_trash_post":[2415]}},"wp_untrash_post":{"doc":"\/**\n * Restores a post or page from the Trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_post' before undeletion\n * @uses do_action() on 'untrashed_post' after undeletion\n *\n * @param int $post_id Post ID.\n * @return mixed False on failure\n *\/","file":"post.php","line":2432,"missingDoc":false,"filters":["'untrash_post'","'untrashed_post'"],"uses":{"get_post":[2433],"get_post_meta":[2441],"delete_post_meta":[2445,2446],"wp_insert_post":[2448],"wp_untrash_post_comments":[2450]},"used_by":[]},"wp_untrash_post_comments":{"doc":"\/**\n * Restore comments for a post from the trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_post_comments' before trashing\n * @uses do_action() on 'untrashed_post_comments' after trashing\n *\n * @param int $post Post ID or object.\n * @return mixed False on failure\n *\/","file":"post.php","line":2508,"missingDoc":false,"filters":["'untrash_post_comments'","'untrashed_post_comments'"],"uses":{"get_post":[2511],"get_post_meta":[2517],"implode":[2533],"query":[2534],"clean_comment_cache":[2537],"array_keys":[2537],"delete_post_meta":[2539]},"used_by":{"wp_untrash_post":[2450]}},"wp_get_post_terms":{"doc":"\/**\n * Retrieve the terms for a post.\n *\n * There is only one default for this function, called 'fields' and by default\n * is set to 'all'. There are other defaults that can be overridden in\n * {@link wp_get_object_terms()}.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.8.0\n *\n * @uses wp_get_object_terms() Gets the tags for returning. Args can be found here\n *\n * @param int $post_id Optional. The Post ID\n * @param string $taxonomy The taxonomy for which to retrieve terms. Defaults to post_tag.\n * @param array $args Optional. Overwrite the defaults\n * @return array List of post tags.\n *\/","file":"post.php","line":2607,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2611],"wp_get_object_terms":[2613]},"used_by":{"wp_get_post_tags":[2586]}},"wp_unique_post_slug":{"doc":"\/**\n * Computes a unique slug for the post, when given the desired slug and some post details.\n *\n * @since 2.8.0\n *\n * @global wpdb $wpdb\n * @global WP_Rewrite $wp_rewrite\n * @param string $slug the desired slug (post_name)\n * @param integer $post_ID\n * @param string $post_status no uniqueness checks are made if the post is still draft or pending\n * @param string $post_type\n * @param integer $post_parent\n * @return string unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)\n *\/","file":"post.php","line":3086,"missingDoc":false,"filters":["'wp_unique_post_slug_is_bad_attachment_slug'","'wp_unique_post_slug_is_bad_hierarchical_slug'","'wp_unique_post_slug_is_bad_flat_slug'","'wp_unique_post_slug'"],"uses":{"in_array":[3087,3104,3113,3121,3135],"is_array":[3095],"get_post_types":[3098],"get_var":[3102,3108,3119,3125,3133,3139],"prepare":[3102,3108,3119,3125,3133,3139],"substr":[3107,3124,3138],"strlen":[3107,3124,3138],"implode":[3118],"esc_sql":[3118],"preg_match":[3121]},"used_by":{"wp_insert_post":[2860],"wp_insert_attachment":[3958]}},"wp_set_post_tags":{"doc":"\/**\n * Set the tags for a post.\n *\n * @since 2.3.0\n * @uses wp_set_object_terms() Sets the tags for the post.\n *\n * @param int $post_id Post ID.\n * @param string $tags The tags to set for the post, separated by commas.\n * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags.\n * @return mixed Array of affected term IDs. WP_Error or false on failure.\n *\/","file":"post.php","line":3177,"missingDoc":false,"filters":[],"uses":{"wp_set_post_terms":[3178]},"used_by":{"wp_insert_post":[2907],"wp_add_post_tags":[3163],"wp_insert_attachment":[4028]}},"wp_transition_post_status":{"doc":"\/**\n * Transition the post status of a post.\n *\n * Calls hooks to transition post status.\n *\n * The first is 'transition_post_status' with new status, old status, and post data.\n *\n * The next action called is 'OLDSTATUS_to_NEWSTATUS' the 'NEWSTATUS' is the\n * $new_status parameter and the 'OLDSTATUS' is $old_status parameter; it has the\n * post data.\n *\n * The final action is named 'NEWSTATUS_POSTTYPE', 'NEWSTATUS' is from the $new_status\n * parameter and POSTTYPE is post_type post data.\n *\n * @since 2.3.0\n * @link http:\/\/codex.wordpress.org\/Post_Status_Transitions\n *\n * @uses do_action() Calls 'transition_post_status' on $new_status, $old_status and\n * $post if there is a status change.\n * @uses do_action() Calls '{$old_status}_to_{$new_status}' on $post if there is a status change.\n * @uses do_action() Calls '{$new_status}_{$post->post_type}' on post ID and $post.\n *\n * @param string $new_status Transition to this post status.\n * @param string $old_status Previous post status.\n * @param object $post Post data.\n *\/","file":"post.php","line":3273,"missingDoc":false,"filters":["'transition_post_status'","\"{$old_status}_to_{$new_status}\"","\"{$new_status}_{$post->post_type}\""],"uses":[],"used_by":{"wp_insert_post":[2942],"wp_publish_post":[3033]}},"wp_publish_post":{"doc":"\/**\n * Publish a post by transitioning the post status.\n *\n * @since 2.1.0\n * @uses $wpdb\n * @uses do_action() Calls 'edit_post', 'save_post', and 'wp_insert_post' on post_id and post data.\n *\n * @param mixed $post Post ID or object.\n *\/","file":"post.php","line":3018,"missingDoc":false,"filters":["'edit_post'","'save_post'","'wp_insert_post'"],"uses":{"get_post":[3021],"update":[3027],"clean_post_cache":[3029],"wp_transition_post_status":[3033]},"used_by":{"check_and_publish_future_post":[3069]}},"check_and_publish_future_post":{"doc":"\/**\n * Publish future post and make sure post ID has future post status.\n *\n * Invoked by cron 'publish_future_post' event. This safeguard prevents cron\n * from publishing drafts, etc.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @return null Nothing is returned. Which can mean that no action is required or post was published.\n *\/","file":"post.php","line":3051,"missingDoc":false,"filters":[],"uses":{"get_post":[3053],"strtotime":[3061],"wp_clear_scheduled_hook":[3064],"wp_schedule_single_event":[3065],"time":[3063],"wp_publish_post":[3069]},"used_by":[]},"wp_add_post_tags":{"doc":"\/**\n * Adds tags to a post.\n *\n * @uses wp_set_post_tags() Same first two parameters, but the last parameter is always set to true.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.3.0\n *\n * @param int $post_id Post ID\n * @param string $tags The tags to set for the post, separated by commas.\n * @return bool|null Will return false if $post_id is not an integer or is 0. Will return null otherwise\n *\/","file":"post.php","line":3162,"missingDoc":false,"filters":[],"uses":{"wp_set_post_tags":[3163]},"used_by":[]},"wp_set_object_terms":{"doc":"\/**\n * Create Term and Taxonomy Relationships.\n *\n * Relates an object (post, link etc) to a term and taxonomy type. Creates the\n * term and taxonomy relationship if it doesn't already exist. Creates a term if\n * it doesn't exist (using the slug).\n *\n * A relationship means that the term is grouped in or belongs to the taxonomy.\n * A term has no meaning until it is given context by defining which taxonomy it\n * exists under.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int $object_id The object to relate to.\n * @param array|int|string $terms The slug or id of the term, will replace all existing\n * related terms in this taxonomy.\n * @param array|string $taxonomy The context in which to relate the term to the object.\n * @param bool $append If false will delete difference of terms.\n * @return array|WP_Error Affected Term IDs\n *\/","file":"taxonomy.php","line":2170,"missingDoc":false,"filters":["'add_term_relationship'","'added_term_relationship'","'delete_term_relationships'","'deleted_term_relationships'","'set_object_terms'"],"uses":{"__":[2176,2238],"taxonomy_exists":[2175],"is_array":[2178],"wp_get_object_terms":[2182,2232],"strlen":[2191],"trim":[2191],"is_int":[2196],"wp_insert_term":[2198],"term_exists":[2194],"is_wp_error":[2200],"get_var":[2206],"prepare":[2206,2222,2235],"insert":[2209],"wp_update_term_count":[2215,2224],"array_diff":[2218],"implode":[2220],"query":[2222,2237],"get_taxonomy":[2228],"in_array":[2234],"join":[2237],"wp_cache_delete":[2241]},"used_by":{"wp_set_post_terms":[3215],"wp_delete_term":[1817]}},"trackback_url_list":{"doc":"\/**\n * Do trackbacks for a list of URLs.\n *\n * @since 1.0.0\n *\n * @param string $tb_list Comma separated list of URLs\n * @param int $post_id Post ID\n *\/","file":"post.php","line":3377,"missingDoc":false,"filters":[],"uses":{"get_post":[3380],"extract":[3383],"strip_tags":[3386],"substr":[3389],"strlen":[3388],"explode":[3392],"trim":[3394],"trackback":[3395],"stripslashes":[3395]},"used_by":[]},"get_all_page_ids":{"doc":"\/**\n * Get a list of page IDs.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @return array List of page IDs.\n *\/","file":"post.php","line":3412,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[3415],"get_col":[3417],"wp_cache_add":[3418],"is_array":[3416]},"used_by":[]},"get_page":{"doc":"\/**\n * Retrieves page data given a page ID or page object.\n *\n * Use get_post() instead of get_page().\n *\n * @since 1.5.1\n * @deprecated 3.5.0\n *\n * @param mixed $page Page object or page ID. Passed by reference.\n * @param string $output What to output. OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter How the return value should be filtered.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3437,"missingDoc":false,"filters":[],"uses":{"get_post":[3438]},"used_by":[]},"get_page_by_title":{"doc":"\/**\n * Retrieve a page given its title.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $page_title Page title\n * @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.\n * @param string $post_type Optional. Post type. Default page.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3507,"missingDoc":false,"filters":[],"uses":{"get_var":[3509],"prepare":[3509],"get_post":[3511]},"used_by":[]},"get_page_children":{"doc":"\/**\n * Retrieve child pages from list of pages matching page ID.\n *\n * Matches against the pages parameter against the page ID. Also matches all\n * children for the same to retrieve all children of a page. Does not make any\n * SQL queries to get the children.\n *\n * @since 1.5.1\n *\n * @param int $page_id Page ID.\n * @param array $pages List of pages' objects.\n * @return array\n *\/","file":"post.php","line":3529,"missingDoc":false,"filters":[],"uses":{"array_merge":[3535],"get_page_children":[3534]},"used_by":{"get_page_children":[3534],"get_pages":[3814,3818]}},"get_page_hierarchy":{"doc":"\/**\n * Order the pages with children under parents in a flat list.\n *\n * It uses auxiliary structure to hold parent-children relationships and\n * runs in O(N) complexity\n *\n * @since 2.0.0\n *\n * @param array $pages Posts array.\n * @param int $page_id Parent page ID.\n * @return array A list arranged by hierarchy. Children immediately follow their parents.\n *\/","file":"post.php","line":3553,"missingDoc":false,"filters":[],"uses":{"intval":[3561],"_page_traverse_name":[3566]},"used_by":{"WP_Rewrite::page_uri_index":[825]}},"_page_traverse_name":{"doc":"\/**\n * function to traverse and return all the nested children post names of a root page.\n * $children contains parent-children relations\n *\n * @since 2.9.0\n *\/","file":"post.php","line":3577,"missingDoc":false,"filters":[],"uses":{"_page_traverse_name":[3581]},"used_by":{"get_page_hierarchy":[3566],"_page_traverse_name":[3581]}},"wp_check_for_changed_slugs":{"doc":"\/**\n * Checked for changed slugs for published post objects and save the old slug.\n *\n * The function is used when a post object of any type is updated,\n * by comparing the current and previous post objects.\n *\n * If the slug was changed and not already part of the old slugs then it will be\n * added to the post meta field ('_wp_old_slug') for storing old slugs for that\n * post.\n *\n * The most logically usage of this function is redirecting changed post objects, so\n * that those that linked to an changed post will be redirected to the new post.\n *\n * @since 2.1.0\n *\n * @param int $post_id Post ID.\n * @param object $post The Post Object\n * @param object $post_before The Previous Post Object\n * @return int Same as $post_id\n *\/","file":"post.php","line":4421,"missingDoc":false,"filters":[],"uses":{"is_post_type_hierarchical":[4427],"get_post_meta":[4430],"add_post_meta":[4434],"in_array":[4433,4437],"delete_post_meta":[4438]},"used_by":[]},"get_posts_by_author_sql":{"doc":"\/**\n * Retrieve the post SQL based on capability, author, and type.\n *\n * @see get_private_posts_cap_sql() for full description.\n *\n * @since 3.0.0\n * @param string $post_type Post type.\n * @param bool $full Optional. Returns a full WHERE statement instead of just an 'andalso' term.\n * @param int $post_author Optional. Query posts having a single author ID.\n * @param bool $public_only Optional. Only return public posts. Skips cap checks for $current_user. Default is false.\n * @return string SQL WHERE code that can be added to a query.\n *\/","file":"post.php","line":4472,"missingDoc":false,"filters":["'pub_priv_sql_capability'"],"uses":{"get_post_type_object":[4476],"prepare":[4486,4488],"is_user_logged_in":[4501],"current_user_can":[4498]},"used_by":{"get_private_posts_cap_sql":[4457],"count_user_posts":[155],"count_many_users_posts":[180],"WP_User_Query::prepare_query":[424]}},"get_lastpostdate":{"doc":"\/**\n * Retrieve the date that the last post was published.\n *\n * The server timezone is the default and is the difference between GMT and\n * server time. The 'blog' value is the date when the last post was posted. The\n * 'gmt' is when the last post was posted in GMT formatted date.\n *\n * @since 0.71\n *\n * @uses apply_filters() Calls 'get_lastpostdate' filter\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @return string The date of the last post.\n *\/","file":"post.php","line":4531,"missingDoc":false,"filters":["'get_lastpostdate'"],"uses":{"_get_last_post_time":[4532]},"used_by":{"get_lastpostmodified":[4551]}},"_get_last_post_time":{"doc":"\/**\n * Retrieve latest post date data based on timezone.\n *\n * @access private\n * @since 3.1.0\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @param string $field Field to check. Can be 'date' or 'modified'.\n * @return string The date.\n *\/","file":"post.php","line":4568,"missingDoc":false,"filters":[],"uses":{"in_array":[4571],"strtolower":[4574],"wp_cache_get":[4578],"date":[4581],"get_post_types":[4583],"array_walk":[4584],"implode":[4585],"get_var":[4589,4592,4595],"wp_cache_set":[4600]},"used_by":{"get_lastpostdate":[4532],"get_lastpostmodified":[4549]}},"update_post_caches":{"doc":"\/**\n * Call major cache updating functions for list of Post objects.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 1.5.0\n *\n * @uses $wpdb\n * @uses update_post_cache()\n * @uses update_object_term_cache()\n * @uses update_postmeta_cache()\n *\n * @param array $posts Array of Post objects\n * @param string $post_type The post type of the posts in $posts. Default is 'post'.\n * @param bool $update_term_cache Whether to update the term cache. Default is true.\n * @param bool $update_meta_cache Whether to update the meta cache. Default is true.\n *\/","file":"post.php","line":4685,"missingDoc":false,"filters":[],"uses":{"update_post_cache":[4690],"array_unique":[4706],"is_array":[4700],"update_object_term_cache":[4712],"update_postmeta_cache":[4716]},"used_by":{"_prime_post_caches":[5559],"WP_Query::get_posts":[2782]}},"update_object_term_cache":{"doc":"\/**\n * Updates the cache for Term ID(s).\n *\n * Will only update the cache for terms not already cached.\n *\n * The $object_ids expects that the ids be separated by commas, if it is a\n * string.\n *\n * It should be noted that update_object_term_cache() is very time extensive. It\n * is advised that the function is not called very often or at least not for a\n * lot of terms that exist in a lot of taxonomies. The amount of time increases\n * for each term and it also increases for each taxonomy the term belongs to.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses wp_get_object_terms() Used to get terms from the database to update\n *\n * @param string|array $object_ids Single or list of term object ID(s)\n * @param array|string $object_type The taxonomy object type\n * @return null|bool Null value is given with empty $object_ids. False if\n *\/","file":"taxonomy.php","line":2678,"missingDoc":false,"filters":[],"uses":{"explode":[2683],"is_array":[2682],"array_map":[2685],"get_object_taxonomies":[2687],"wp_cache_get":[2692],"wp_get_object_terms":[2702],"wp_cache_add":[2720]},"used_by":{"update_post_caches":[4712]}},"update_postmeta_cache":{"doc":"\/**\n * Updates metadata cache for list of post IDs.\n *\n * Performs SQL query to retrieve the metadata for the post IDs and updates the\n * metadata cache for the posts. Therefore, the functions, which call this\n * function, do not need to perform SQL queries on their own.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 2.1.0\n *\n * @uses $wpdb\n *\n * @param array $post_ids List of post IDs.\n * @return bool|array Returns false if there is nothing to update or an array of metadata.\n *\/","file":"post.php","line":4735,"missingDoc":false,"filters":[],"uses":{"update_meta_cache":[4736]},"used_by":{"update_post_caches":[4716]}},"clean_attachment_cache":{"doc":"\/**\n * Will clean the attachment in the cache.\n *\n * Cleaning means delete from the cache. Optionally will clean the term\n * object cache associated with the attachment ID.\n *\n * This function will not run if $_wp_suspend_cache_invalidation is not empty. See\n * wp_suspend_cache_invalidation().\n *\n * @package WordPress\n * @subpackage Cache\n * @since 3.0.0\n *\n * @uses do_action() Calls 'clean_attachment_cache' on $id.\n *\n * @param int $id The attachment ID in the cache to clean\n * @param bool $clean_terms optional. Whether to clean terms cache\n *\/","file":"post.php","line":4757,"missingDoc":false,"filters":["'clean_attachment_cache'"],"uses":{"wp_cache_delete":[4765,4766],"clean_object_term_cache":[4769]},"used_by":[]},"_transition_post_status":{"doc":"\/**\n * Hook for managing future post transitions to published.\n *\n * @since 2.3.0\n * @access private\n * @uses $wpdb\n * @uses do_action() Calls 'private_to_published' on post ID if this is a 'private_to_published' call.\n * @uses wp_clear_scheduled_hook() with 'publish_future_post' and post ID.\n *\n * @param string $new_status New post status\n * @param string $old_status Previous post status\n * @param object $post Object type containing the post information\n *\/","file":"post.php","line":4791,"missingDoc":false,"filters":["'private_to_published'"],"uses":{"update":[4797],"get_permalink":[4797],"get_the_guid":[4796],"wp_cache_delete":[4804,4805],"wp_clear_scheduled_hook":[4810]},"used_by":[]},"_future_post_hook":{"doc":"\/**\n * Hook used to schedule publication for a post marked for the future.\n *\n * The $post properties used and must exist are 'ID' and 'post_date_gmt'.\n *\n * @since 2.3.0\n * @access private\n *\n * @param int $deprecated Not used. Can be set to null. Never implemented.\n * Not marked as deprecated with _deprecated_argument() as it conflicts with\n * wp_transition_post_status() and the default filter for _future_post_hook().\n * @param object $post Object type containing the post information\n *\/","file":"post.php","line":4826,"missingDoc":false,"filters":[],"uses":{"wp_clear_scheduled_hook":[4827],"wp_schedule_single_event":[4828],"strtotime":[4828],"get_gmt_from_date":[4828]},"used_by":[]},"_publish_post_hook":{"doc":"\/**\n * Hook to schedule pings and enclosures when a post is published.\n *\n * @since 2.3.0\n * @access private\n * @uses $wpdb\n * @uses XMLRPC_REQUEST constant.\n * @uses do_action() Calls 'xmlprc_publish_post' on post ID if XMLRPC_REQUEST is defined.\n *\n * @param int $post_id The ID in the database table of the post being published\n *\/","file":"post.php","line":4842,"missingDoc":false,"filters":["'xmlrpc_publish_post'"],"uses":{"defined":[4845,4848],"add_post_meta":[4852,4853],"get_option":[4851],"wp_schedule_single_event":[4855],"time":[4855]},"used_by":[]},"_wp_post_revision_fields":{"doc":"\/**\n * Determines which fields of posts are to be saved in revisions.\n *\n * Does two things. If passed a post *array*, it will return a post array ready\n * to be inserted into the posts table as a post revision. Otherwise, returns\n * an array whose keys are the post fields to be saved for post revisions.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n * @access private\n * @uses apply_filters() Calls '_wp_post_revision_fields' on 'title', 'content' and 'excerpt' fields.\n *\n * @param array $post Optional a post array to be processed for insertion as a post revision.\n * @param bool $autosave optional Is the revision an autosave?\n * @return array Post array ready to be inserted as a post revision or array of fields that can be versioned.\n *\/","file":"post.php","line":4875,"missingDoc":false,"filters":["'_wp_post_revision_fields'"],"uses":{"__":[4881,4882,4883],"is_array":[4894],"array_intersect":[4898],"array_keys":[4898,4898]},"used_by":{"_wp_put_post_revision":[5078],"wp_restore_post_revision":[5147]}},"wp_save_post_revision":{"doc":"\/**\n * Saves an already existing post as a post revision.\n *\n * Typically used immediately prior to post updates.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses _wp_put_post_revision()\n *\n * @param int $post_id The ID of the post to save as a revision.\n * @return mixed Null or 0 if error, new revision ID, if success.\n *\/","file":"post.php","line":4925,"missingDoc":false,"filters":[],"uses":{"defined":[4927],"get_post":[4934],"post_type_supports":[4940],"_wp_put_post_revision":[4943],"is_numeric":[4946],"wp_get_post_revisions":[4950],"count":[4953],"array_slice":[4958],"strpos":[4961],"wp_delete_post_revision":[4963]},"used_by":[]},"_wp_put_post_revision":{"doc":"\/**\n * Inserts post data into the posts table as a post revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_insert_post()\n *\n * @param int|object|array $post Post ID, post object OR post array.\n * @param bool $autosave Optional. Is the revision an autosave?\n * @return mixed Null or 0 if error, new revision ID if success.\n *\/","file":"post.php","line":5067,"missingDoc":false,"filters":["'_wp_put_post_revision'"],"uses":{"get_object_vars":[5069],"is_array":[5070],"get_post":[5071],"is_object":[5068],"__":[5076],"_wp_post_revision_fields":[5078],"add_magic_quotes":[5079],"wp_insert_post":[5081],"is_wp_error":[5082]},"used_by":{"wp_save_post_revision":[4943]}},"_wp_get_post_autosave_hack":{"doc":"\/**\n * Internally used to hack WP_Query into submission.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param object $query WP_Query object\n *\/","file":"post.php","line":5016,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_set_preview":{"doc":"","file":"post.php","line":5226,"missingDoc":true,"filters":[],"uses":{"is_object":[5228,5233],"wp_get_post_autosave":[5231],"sanitize_post":[5236]},"used_by":[]},"_show_post_preview":{"doc":"","file":"post.php","line":5245,"missingDoc":true,"filters":[],"uses":{"wp_die":[5251],"__":[5251],"wp_verify_nonce":[5250],"add_filter":[5253]},"used_by":[]},"wp_get_post_parent_id":{"doc":"\/**\n * Returns the post's parent's post_ID\n *\n * @since 3.1.0\n *\n * @param int $post_id\n *\n * @return int|bool false on error\n *\/","file":"post.php","line":5266,"missingDoc":false,"filters":[],"uses":{"get_post":[5267],"is_wp_error":[5268]},"used_by":[]},"wp_check_post_hierarchy_for_loops":{"doc":"\/**\n * Checks the given subset of the post hierarchy for hierarchy loops.\n * Prevents loops from forming and breaks those that it finds.\n *\n * Attached to the wp_insert_post_parent filter.\n *\n * @since 3.1.0\n * @uses wp_find_hierarchy_loop()\n *\n * @param int $post_parent ID of the parent for the post we're checking.\n * @param int $post_ID ID of the post we're checking.\n *\n * @return int The new post_parent for the post.\n *\/","file":"post.php","line":5287,"missingDoc":false,"filters":[],"uses":{"wp_find_hierarchy_loop":[5302],"wp_update_post":[5311],"array_keys":[5310]},"used_by":[]},"get_post_format_string":{"doc":"\/**\n * Returns a pretty, translated version of a post format slug\n *\n * @since 3.1.0\n *\n * @param string $slug A post format slug\n * @return string The translated post format name\n *\/","file":"post.php","line":5359,"missingDoc":false,"filters":[],"uses":{"get_post_format_strings":[5360]},"used_by":{"_post_format_get_term":[5478],"_post_format_get_terms":[5494,5499],"_post_format_wp_get_object_terms":[5517]}},"get_post_format_link":{"doc":"\/**\n * Returns a link to a post format index.\n *\n * @since 3.1.0\n *\n * @param string $format Post format\n * @return string Link\n *\/","file":"post.php","line":5411,"missingDoc":false,"filters":[],"uses":{"get_term_by":[5412],"is_wp_error":[5413],"get_term_link":[5415]},"used_by":[]},"wp_delete_auto_drafts":{"doc":"\/**\n * Deletes auto-drafts for new posts that are > 7 days old\n *\n * @since 3.4.0\n *\/","file":"post.php","line":5423,"missingDoc":false,"filters":[],"uses":{"get_col":[5427],"wp_delete_post":[5429]},"used_by":[]},"_post_format_request":{"doc":"\/**\n * Filters the request to allow for the format prefix.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5438,"missingDoc":false,"filters":[],"uses":{"get_post_format_slugs":[5441],"get_taxonomy":[5444],"is_admin":[5445]},"used_by":[]},"_post_format_link":{"doc":"\/**\n * Filters the post format term link to remove the format prefix.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5457,"missingDoc":false,"filters":[],"uses":{"str_replace":[5462,5462,5465],"remove_query_arg":[5464],"add_query_arg":[5465],"get_extra_permastruct":[5461]},"used_by":[]},"_post_format_get_term":{"doc":"\/**\n * Remove the post format prefix from the name property of the term object created by get_term().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5476,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5478],"str_replace":[5478]},"used_by":[]},"_post_format_get_terms":{"doc":"\/**\n * Remove the post format prefix from the name property of the term objects created by get_terms().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5490,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5494,5499],"str_replace":[5494,5499],"in_array":[5491]},"used_by":[]},"_post_format_wp_get_object_terms":{"doc":"\/**\n * Remove the post format prefix from the name property of the term objects created by wp_get_object_terms().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5514,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5517],"str_replace":[5517]},"used_by":[]},"_update_term_count_on_transition_post_status":{"doc":"\/**\n * Update the custom taxonomies' term counts when a post's status is changed. For example, default posts term counts (for custom taxonomies) don't include private \/ draft posts.\n *\n * @access private\n * @param string $new_status\n * @param string $old_status\n * @param object $post\n * @since 3.3.0\n *\/","file":"post.php","line":5533,"missingDoc":false,"filters":[],"uses":{"wp_get_object_terms":[5536],"wp_update_term_count":[5537],"get_object_taxonomies":[5535]},"used_by":[]},"wp_update_term_count":{"doc":"\/**\n * Updates the amount of terms in taxonomy.\n *\n * If there is a taxonomy callback applied, then it will be called for updating\n * the count.\n *\n * The default action is to count what the amount of terms have the relationship\n * of term ID. Once that is done, then update the database.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $terms The term_taxonomy_id of the terms\n * @param string $taxonomy The context of the term.\n * @return bool If no terms will return false, and if successful will return true.\n *\/","file":"taxonomy.php","line":2479,"missingDoc":false,"filters":[],"uses":{"wp_update_term_count_now":[2484,2502],"array_keys":[2483],"is_array":[2492],"array_unique":[2498],"array_merge":[2498],"wp_defer_term_counting":[2495]},"used_by":{"_update_term_count_on_transition_post_status":[5537],"wp_delete_object_term_relationships":[1734],"wp_set_object_terms":[2215,2224],"wp_defer_term_counting":[2455]}},"wp_reset_query":{"doc":"\/**\n * Destroy the previous query and set up a new query.\n *\n * This should be used after {@link query_posts()} and before another {@link\n * query_posts()}. This will remove obscure bugs that occur when the previous\n * wp_query object is not destroyed properly before another is set up.\n *\n * @since 2.3.0\n * @uses $wp_query\n *\/","file":"query.php","line":104,"missingDoc":false,"filters":[],"uses":{"wp_reset_postdata":[106]},"used_by":[]},"is_comment_feed":{"doc":"\/**\n * Is the query for a comments feed?\n *\n * @see WP_Query::is_comments_feed()\n * @since 3.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":382,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[386],"__":[386],"is_comment_feed":[390]},"used_by":{"is_comment_feed":[390]}},"is_time":{"doc":"\/**\n * Is the query for a specific time?\n *\n * @see WP_Query::is_time()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":644,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[648],"__":[648],"is_time":[652]},"used_by":{"is_time":[652]}},"is_main_query":{"doc":"\/**\n * Is the query the main query?\n *\n * @since 3.3.0\n *\n * @return bool\n *\/","file":"query.php","line":722,"missingDoc":false,"filters":[],"uses":{"is_main_query":[724]},"used_by":{"is_main_query":[724],"WP_Query::get_posts":[2185]}},"WP_Query::init_query_flags":{"doc":"\/**\n * Resets query flags to false.\n *\n * The query flags are what page info WordPress was able to figure out.\n *\n * @since 2.0.0\n * @access private\n *\/","file":"query.php","line":1288,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::init":{"doc":"\/**\n * Initiates object properties and sets default values.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":1324,"missingDoc":false,"filters":[],"uses":{"init_query_flags":[1343]},"used_by":[]},"WP_Query::parse_query_vars":{"doc":"\/**\n * Reparse the query vars.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":1352,"missingDoc":false,"filters":[],"uses":{"parse_query":[1353]},"used_by":[]},"WP_Query::fill_query_vars":{"doc":"\/**\n * Fills in the query variables, which do not exist within the parameter.\n *\n * @since 2.1.0\n * @access public\n *\n * @param array $array Defined query variables.\n * @return array Complete query variables with undefined ones filled in empty.\n *\/","file":"query.php","line":1365,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::parse_query":{"doc":"\/**\n * Parse a query string and set query type booleans.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string|array $query Optional query.\n *\/","file":"query.php","line":1427,"missingDoc":false,"filters":["'parse_query'"],"uses":{"init":[1429],"wp_parse_args":[1430,1612],"fill_query_vars":[1435],"absint":[1442,1443,1444,1445,1446,1447,1448,1449,1453,1454,1455,1456,1464],"preg_replace":[1450,1661],"trim":[1451,1452],"strlen":[1529,1527,1525],"parse_tax_query":[1541],"get_post_type_object":[1569],"is_array":[1568,1651,1658],"intval":[1584],"is_admin":[1594],"str_replace":[1598],"strpos":[1597],"get_option":[1619,1611,1611,1635,1635,1643,1643],"array_diff":[1616],"array_keys":[1616],"get_page_by_path":[1629],"array_map":[1652,1659],"sanitize_key":[1654],"set_404":[1671],"md5":[1673],"serialize":[1673]},"used_by":[]},"WP_Query::parse_tax_query":{"doc":"","file":"query.php","line":1687,"missingDoc":true,"filters":[],"uses":{"is_array":[1688],"wp_basename":[1713],"preg_split":[1719,1727,1737,1790,1796],"array_merge":[1721,1726,1747,1750],"strpos":[1718,1789],"urldecode":[1735],"addslashes_gpc":[1736],"intval":[1741],"abs":[1744],"get_term_children":[1747,1750],"implode":[1753],"array_map":[1757,1767,1777,1816,1824,1833,1842,1851],"array_unique":[1757,1767,1777,1816,1824,1833,1842,1851],"sanitize_term_field":[1792,1798,1802],"preg_match":[1795],"absint":[1808]},"used_by":[]},"get_term_children":{"doc":"\/**\n * Merge all term children into a single array of their IDs.\n *\n * This recursive function will merge all of the children of $term into the same\n * array of term IDs. Only useful for taxonomies which are hierarchical.\n *\n * Will return an empty array if $term does not exist in $taxonomy.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses _get_term_hierarchy()\n * @uses get_term_children() Used to get the children of both $taxonomy and the parent $term\n *\n * @param string $term_id ID of Term to get children\n * @param string $taxonomy Taxonomy Name\n * @return array|WP_Error List of Term Objects. WP_Error returned if $taxonomy does not exist\n *\/","file":"taxonomy.php","line":1007,"missingDoc":false,"filters":[],"uses":{"__":[1009],"taxonomy_exists":[1008],"intval":[1011],"_get_term_hierarchy":[1013],"array_merge":[1022],"get_term_children":[1022]},"used_by":{"WP_Query::parse_tax_query":[1747,1750],"WP_Tax_Query::clean_query":[762],"get_term_children":[1022]}},"WP_Query::set_404":{"doc":"\/**\n * Sets the 404 property and saves whether query is feed.\n *\n * @since 2.0.0\n * @access public\n *\/","file":"query.php","line":1869,"missingDoc":false,"filters":[],"uses":{"init_query_flags":[1872]},"used_by":[]},"WP_Query::get":{"doc":"\/**\n * Retrieve query variable.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @return mixed\n *\/","file":"query.php","line":1887,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::set":{"doc":"\/**\n * Set query variable.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @param mixed $value Query variable value.\n *\/","file":"query.php","line":1903,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::get_posts":{"doc":"\/**\n * Retrieve the posts based on query variables.\n *\n * There are a few filters and actions that can be used to modify the post\n * database query.\n *\n * @since 1.5.0\n * @access public\n * @uses do_action_ref_array() Calls 'pre_get_posts' hook before retrieving posts.\n *\n * @return array List of posts.\n *\/","file":"query.php","line":1919,"missingDoc":false,"filters":["'pre_get_posts'","'posts_selection'","'split_the_query'","'posts_request_ids'"],"uses":{"parse_query":[1922],"fill_query_vars":[1930],"parse_query_vars":[1934],"md5":[1937],"serialize":[1937],"_deprecated_argument":[1958],"__":[1958],"get_option":[1990,2005,2015,2020,2017,2017,2131,2132,2175,2175,2559,2692,2731],"abs":[2010],"trim":[2024],"absint":[2025,2154,2158,2298,2306,2326,2529,2536],"preg_replace":[2050],"substr":[2051,2053,2055,2057,2059,2061],"strlen":[2052,2054,2056,2058,2060],"get_post_type_object":[2085,2113,2400,2413,2416,2419,2422],"strpos":[2089,2294,2314],"sanitize_title_for_query":[2105,2133,2145,2322],"get_page_by_path":[2117,2123],"wp_basename":[2133,2145],"get_post":[2136,2727],"is_object":[2137],"_wp_mysql_week":[2151],"intval":[2153],"implode":[2164,2167,2307,2389],"array_map":[2164,2167,2191,2679,2779],"prepare":[2172],"is_numeric":[2171],"stripslashes":[2184],"urldecode":[2186,2292,2354],"is_main_query":[2185],"preg_match_all":[2190],"esc_sql":[2196],"like_escape":[2196],"is_user_logged_in":[2203,2504,2704],"apply_filters_ref_array":[2209,2523,2524,2555,2556,2557,2558,2559,2585,2586,2587,2588,2589,2590,2591,2594,2604,2605,2606,2607,2608,2609,2610,2613,2630,2683,2686,2687,2688,2690,2692,2727,2772],"parse_tax_query":[2213],"get_sql":[2215,2515],"wp_list_pluck":[2225],"get_taxonomies_for_attachments":[2227],"get_object_taxonomies":[2227],"array_intersect":[2228],"get_post_types":[2226,2406],"in_array":[2235,2246,2360,2450,2445,2737],"wp_list_filter":[2242,2258,2270],"reset":[2260,2272,2784],"get_term_by":[2261,2273],"set":[2263,2264,2275],"addslashes_gpc":[2293,2355],"explode":[2297,2315,2358,2441],"preg_split":[2303],"count":[2317,2319,2316,2565,2635,2643,2695,2733,2777],"get_user_by":[2323],"wp_post_mime_type_where":[2332],"strtoupper":[2336,2336],"is_array":[2397,2409,2440,2732],"join":[2408,2410,2465,2469,2471,2475,2477,2572],"get_post_stati":[2446,2449,2490,2499,2506],"array_merge":[2460],"current_user_can":[2468,2474,2508,2710,2718,2726],"str_replace":[2482],"get_results":[2564,2642,2673,2694],"compact":[2594,2613],"get_col":[2634,2663],"set_found_posts":[2636,2644,2667,2674],"_prime_post_caches":[2668],"get_post_status":[2700],"get_post_status_object":[2701],"current_time":[2715],"array_splice":[2740,2742,2765],"array_search":[2746],"array_diff":[2753],"get_posts":[2757],"update_post_caches":[2782]},"used_by":[]},"WP_Query::set_found_posts":{"doc":"\/**\n * Set up the amount of found posts and the number of pages (if limit clause was used)\n * for the current query.\n *\n * @since 3.5.0\n * @access private\n *\/","file":"query.php","line":2800,"missingDoc":false,"filters":[],"uses":{"is_array":[2805],"get_var":[2809],"apply_filters_ref_array":[2809,2813],"count":[2811],"ceil":[2816]},"used_by":[]},"WP_Query::next_post":{"doc":"\/**\n * Set up the next post and iterate current post index.\n *\n * @since 1.5.0\n * @access public\n *\n * @return WP_Post Next post.\n *\/","file":"query.php","line":2827,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::the_post":{"doc":"\/**\n * Sets up the current post.\n *\n * Retrieves the next post, sets up the post, sets the 'in the loop'\n * property to true.\n *\n * @since 1.5.0\n * @access public\n * @uses $post\n * @uses do_action_ref_array() Calls 'loop_start' if loop has just started\n *\/","file":"query.php","line":2846,"missingDoc":false,"filters":["'loop_start'"],"uses":{"next_post":[2853],"setup_postdata":[2854]},"used_by":[]},"WP_Query::have_posts":{"doc":"\/**\n * Whether there are more posts available in the loop.\n *\n * Calls action 'loop_end', when the loop is complete.\n *\n * @since 1.5.0\n * @access public\n * @uses do_action_ref_array() Calls 'loop_end' if loop is ended\n *\n * @return bool True if posts are available, false if end of loop.\n *\/","file":"query.php","line":2868,"missingDoc":false,"filters":["'loop_end'"],"uses":{"rewind_posts":[2874]},"used_by":[]},"WP_Query::rewind_posts":{"doc":"\/**\n * Rewind the posts and reset post index.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":2887,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::next_comment":{"doc":"\/**\n * Iterate current comment index and return comment object.\n *\n * @since 2.2.0\n * @access public\n *\n * @return object Comment object.\n *\/","file":"query.php","line":2902,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::the_comment":{"doc":"\/**\n * Sets up the current comment.\n *\n * @since 2.2.0\n * @access public\n * @global object $comment Current comment.\n * @uses do_action() Calls 'comment_loop_start' hook when first comment is processed.\n *\/","file":"query.php","line":2917,"missingDoc":false,"filters":["'comment_loop_start'"],"uses":{"next_comment":[2920]},"used_by":[]},"WP_Query::have_comments":{"doc":"\/**\n * Whether there are more comments available.\n *\n * Automatically rewinds comments when finished.\n *\n * @since 2.2.0\n * @access public\n *\n * @return bool True, if more comments. False, if no more posts.\n *\/","file":"query.php","line":2937,"missingDoc":false,"filters":[],"uses":{"rewind_comments":[2941]},"used_by":[]},"WP_Query::rewind_comments":{"doc":"\/**\n * Rewind the comments, resets the comment index and comment to first.\n *\n * @since 2.2.0\n * @access public\n *\/","file":"query.php","line":2953,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::query":{"doc":"\/**\n * Sets up the WordPress query by parsing query string.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query URL query string.\n * @return array List of posts.\n *\/","file":"query.php","line":2969,"missingDoc":false,"filters":[],"uses":{"init":[2970],"wp_parse_args":[2971],"get_posts":[2972]},"used_by":[]},"WP_Query::get_queried_object":{"doc":"\/**\n * Retrieve queried object.\n *\n * If queried object is not set, then the queried object will be set from\n * the category, tag, taxonomy, posts page, single post, page, or author\n * query variable. After it is set up, it will be returned.\n *\n * @since 1.5.0\n * @access public\n *\n * @return object\n *\/","file":"query.php","line":2987,"missingDoc":false,"filters":[],"uses":{"wp_list_filter":[2995],"reset":[2997,3000,3002],"get_term":[3000],"get_term_by":[3002],"_make_cat_compat":[3009],"is_wp_error":[3004],"get_post_type_object":[3012],"get":[3012,3021],"get_option":[3014],"get_post":[3015],"is_null":[3017],"get_userdata":[3022]},"used_by":[]},"WP_Query::get_queried_object_id":{"doc":"\/**\n * Retrieve ID of the current queried object.\n *\n * @since 1.5.0\n * @access public\n *\n * @return int\n *\/","file":"query.php","line":3036,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3037]},"used_by":[]},"WP_Query::__construct":{"doc":"\/**\n * Constructor.\n *\n * Sets up the WordPress query, if parameter is not empty.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query URL query string.\n * @return WP_Query\n *\/","file":"query.php","line":3057,"missingDoc":false,"filters":[],"uses":{"query":[3059]},"used_by":[]},"WP_Query::is_archive":{"doc":"\/**\n * Is the query for an existing archive page?\n *\n * Month, Year, Category, Author, Post Type archive...\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3072,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_post_type_archive":{"doc":"\/**\n * Is the query for an existing post type archive page?\n *\n * @since 3.1.0\n *\n * @param mixed $post_types Optional. Post type or array of posts types to check against.\n * @return bool\n *\/","file":"query.php","line":3084,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3088],"in_array":[3090]},"used_by":[]},"WP_Query::is_attachment":{"doc":"\/**\n * Is the query for an existing attachment page?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3100,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_author":{"doc":"\/**\n * Is the query for an existing author archive page?\n *\n * If the $author parameter is specified, this function will additionally\n * check if the query is for one of the authors specified.\n *\n * @since 3.1.0\n *\n * @param mixed $author Optional. User ID, nickname, nicename, or array of User IDs, nicknames, and nicenames\n * @return bool\n *\/","file":"query.php","line":3115,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3122],"in_array":[3128,3130,3126]},"used_by":[]},"WP_Query::is_category":{"doc":"\/**\n * Is the query for an existing category archive page?\n *\n * If the $category parameter is specified, this function will additionally\n * check if the query is for one of the categories specified.\n *\n * @since 3.1.0\n *\n * @param mixed $category Optional. Category ID, name, slug, or array of Category IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":3147,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3154],"in_array":[3160,3162,3158]},"used_by":[]},"WP_Query::is_tag":{"doc":"\/**\n * Is the query for an existing tag archive page?\n *\n * If the $tag parameter is specified, this function will additionally\n * check if the query is for one of the tags specified.\n *\n * @since 3.1.0\n *\n * @param mixed $slug Optional. Tag slug or array of slugs.\n * @return bool\n *\/","file":"query.php","line":3179,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3186],"in_array":[3190]},"used_by":[]},"WP_Query::is_tax":{"doc":"\/**\n * Is the query for an existing taxonomy archive page?\n *\n * If the $taxonomy parameter is specified, this function will additionally\n * check if the query is for that specific $taxonomy.\n *\n * If the $term parameter is specified in addition to the $taxonomy parameter,\n * this function will additionally check if the query is for one of the terms\n * specified.\n *\n * @since 3.1.0\n *\n * @param mixed $taxonomy Optional. Taxonomy slug or slugs.\n * @param mixed $term. Optional. Term ID, name, slug or array of Term IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":3212,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3221],"array_intersect":[3222,3234],"array_keys":[3222],"count":[3226,3234],"in_array":[3226]},"used_by":[]},"WP_Query::is_comments_popup":{"doc":"\/**\n * Whether the current URL is within the comments popup window.\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3247,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_date":{"doc":"\/**\n * Is the query for an existing date archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3258,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_day":{"doc":"\/**\n * Is the query for an existing day archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3269,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_feed":{"doc":"\/**\n * Is the query for a feed?\n *\n * @since 3.1.0\n *\n * @param string|array $feeds Optional feed types to check.\n * @return bool\n *\/","file":"query.php","line":3281,"missingDoc":false,"filters":[],"uses":{"get":[3284],"get_default_feed":[3286],"in_array":[3287]},"used_by":[]},"WP_Query::is_comment_feed":{"doc":"\/**\n * Is the query for a comments feed?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3297,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_front_page":{"doc":"\/**\n * Is the query for the front page of the site?\n *\n * This is for what is displayed at your site's main URL.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_on_front'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true when viewing that page.\n *\n * Otherwise the same as @see WP_Query::is_home()\n *\n * @since 3.1.0\n * @uses is_home()\n * @uses get_option()\n *\n * @return bool True, if front of site.\n *\/","file":"query.php","line":3319,"missingDoc":false,"filters":[],"uses":{"get_option":[3323,3323,3323,3321],"is_page":[3323],"is_home":[3321]},"used_by":[]},"WP_Query::is_home":{"doc":"\/**\n * Is the query for the blog homepage?\n *\n * This is the page which shows the time based blog content of your site.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_for_posts'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true only on the page you set as the \"Posts page\".\n *\n * @see WP_Query::is_front_page()\n *\n * @since 3.1.0\n *\n * @return bool True if blog view homepage.\n *\/","file":"query.php","line":3345,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_month":{"doc":"\/**\n * Is the query for an existing month archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3356,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_page":{"doc":"\/**\n * Is the query for an existing single page?\n *\n * If the $page parameter is specified, this function will additionally\n * check if the query is for one of the pages specified.\n *\n * @see WP_Query::is_single()\n * @see WP_Query::is_singular()\n *\n * @since 3.1.0\n *\n * @param mixed $page Page ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":3374,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3381],"in_array":[3387,3389,3385]},"used_by":[]},"WP_Query::is_paged":{"doc":"\/**\n * Is the query for paged result and not for the first page?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3402,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_preview":{"doc":"\/**\n * Is the query for a post or page preview?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3413,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_robots":{"doc":"\/**\n * Is the query for the robots file?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3424,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_search":{"doc":"\/**\n * Is the query for a search?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3435,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_single":{"doc":"\/**\n * Is the query for an existing single post?\n *\n * Works for any post type, except attachments and pages\n *\n * If the $post parameter is specified, this function will additionally\n * check if the query is for one of the Posts specified.\n *\n * @see WP_Query::is_page()\n * @see WP_Query::is_singular()\n *\n * @since 3.1.0\n *\n * @param mixed $post Post ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":3455,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3462],"in_array":[3468,3470,3466]},"used_by":[]},"WP_Query::is_singular":{"doc":"\/**\n * Is the query for an existing single post of any post type (post, attachment, page, ... )?\n *\n * If the $post_types parameter is specified, this function will additionally\n * check if the query is for one of the Posts Types specified.\n *\n * @see WP_Query::is_page()\n * @see WP_Query::is_single()\n *\n * @since 3.1.0\n *\n * @param mixed $post_types Optional. Post Type or array of Post Types\n * @return bool\n *\/","file":"query.php","line":3490,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3494],"in_array":[3496]},"used_by":[]},"WP_Query::is_time":{"doc":"\/**\n * Is the query for a specific time?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3506,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_trackback":{"doc":"\/**\n * Is the query for a trackback endpoint call?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3517,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_year":{"doc":"\/**\n * Is the query for an existing year archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3528,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_404":{"doc":"\/**\n * Is the query a 404 (returns no results)?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3539,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_main_query":{"doc":"\/**\n * Is the query the main query?\n *\n * @since 3.3.0\n *\n * @return bool\n *\/","file":"query.php","line":3550,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_old_slug_redirect":{"doc":"\/**\n * Redirect old slugs to the correct permalink.\n *\n * Attempts to find the current slug from the past slugs.\n *\n * @since 2.1.0\n * @uses $wp_query\n * @uses $wpdb\n *\n * @return null If no link is found, null is returned.\n *\/","file":"query.php","line":3567,"missingDoc":false,"filters":[],"uses":{"get_query_var":[3574,3573],"count":[3581],"array_shift":[3583],"is_array":[3580],"is_post_type_hierarchical":[3587],"prepare":[3590,3595,3597,3599],"get_var":[3601],"get_permalink":[3606],"wp_redirect":[3611],"is_404":[3569]},"used_by":[]},"add_feed":{"doc":"\/**\n * Add a new feed type like \/atom1\/.\n *\n * @since 2.1.0\n *\n * @param string $feedname\n * @param callback $function Callback to run on feed display.\n * @return string Feed action name.\n *\/","file":"rewrite.php","line":86,"missingDoc":false,"filters":[],"uses":{"in_array":[88],"remove_action":[92],"add_action":[93]},"used_by":[]},"flush_rewrite_rules":{"doc":"\/**\n * Remove rewrite rules and then recreate rewrite rules.\n *\n * @see WP_Rewrite::flush_rules()\n * @since 3.0.0\n *\n * @param bool $hard Whether to update .htaccess (hard flush) or just update\n * \trewrite_rules transient (soft flush). Default is true (hard).\n *\/","file":"rewrite.php","line":106,"missingDoc":false,"filters":[],"uses":{"flush_rules":[108]},"used_by":[]},"add_rewrite_endpoint":{"doc":"\/**\n * Add an endpoint, like \/trackback\/.\n *\n * Adding an endpoint creates extra rewrite rules for each of the matching\n * places specified by the provided bitmask. For example:\n *\n * <code>\n * add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );\n * <\/code>\n *\n * will add a new rewrite rule ending with \"json(\/(.*))?\/?$\" for every permastruct\n * that describes a permalink (post) or page. This is rewritten to \"json=$match\"\n * where $match is the part of the URL matched by the endpoint regex (e.g. \"foo\" in\n * \"<permalink>\/json\/foo\/\").\n *\n * A new query var with the same name as the endpoint will also be created.\n *\n * When specifying $places ensure that you are using the EP_* constants (or a\n * combination of them using the bitwise OR operator) as their values are not\n * guaranteed to remain static (especially EP_ALL).\n *\n * Be sure to flush the rewrite rules - flush_rewrite_rules() - when your plugin gets\n * activated and deactivated.\n *\n * @since 2.1.0\n * @see WP_Rewrite::add_endpoint()\n * @global object $wp_rewrite\n *\n * @param string $name Name of the endpoint.\n * @param int $places Endpoint mask describing the places the endpoint should be added.\n *\/","file":"rewrite.php","line":247,"missingDoc":false,"filters":[],"uses":{"add_endpoint":[249]},"used_by":[]},"_wp_filter_taxonomy_base":{"doc":"\/**\n * Filter the URL base for taxonomies.\n *\n * To remove any manually prepended \/index.php\/.\n *\n * @access private\n * @since 2.6.0\n *\n * @param string $base The taxonomy base that we're going to filter\n * @return string\n *\/","file":"rewrite.php","line":263,"missingDoc":false,"filters":[],"uses":{"preg_replace":[265],"trim":[266]},"used_by":[]},"WP_Rewrite::using_permalinks":{"doc":"\/**\n * Whether permalinks are being used.\n *\n * This can be either rewrite module or permalink in the HTTP query string.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool True, if permalinks are enabled.\n *\/","file":"rewrite.php","line":740,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::using_index_permalinks":{"doc":"\/**\n * Whether permalinks are being used and rewrite module is not enabled.\n *\n * Means that permalink links are enabled and index.php is in the URL.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool\n *\/","file":"rewrite.php","line":754,"missingDoc":false,"filters":[],"uses":{"preg_match":[759]},"used_by":[]},"WP_Rewrite::using_mod_rewrite_permalinks":{"doc":"\/**\n * Whether permalinks are being used and rewrite module is enabled.\n *\n * Using permalinks and index.php is not in the URL.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool\n *\/","file":"rewrite.php","line":775,"missingDoc":false,"filters":[],"uses":{"using_permalinks":[776],"using_index_permalinks":[776]},"used_by":[]},"WP_Rewrite::preg_index":{"doc":"\/**\n * Index for matches for usage in preg_*() functions.\n *\n * The format of the string is, with empty matches property value, '$NUM'.\n * The 'NUM' will be replaced with the value in the $number parameter. With\n * the matches property not empty, the value of the returned string will\n * contain that value of the matches property. The format then will be\n * '$MATCHES[NUM]', with MATCHES as the value in the property and NUM the\n * value of the $number parameter.\n *\n * @since 1.5.0\n * @access public\n *\n * @param int $number Index number.\n * @return string\n *\/","file":"rewrite.php","line":798,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::page_uri_index":{"doc":"\/**\n * Retrieve all page and attachments for pages URIs.\n *\n * The attachments are for those that have pages as parents and will be\n * retrieved.\n *\n * @since 2.5.0\n * @access public\n *\n * @return array Array of page URIs as first element and attachment URIs as second element.\n *\/","file":"rewrite.php","line":821,"missingDoc":false,"filters":[],"uses":{"get_page_hierarchy":[825],"get_results":[825,840],"array_reverse":[832],"get_page_uri":[839,843],"prepare":[840]},"used_by":[]},"WP_Rewrite::page_rewrite_rules":{"doc":"\/**\n * Retrieve all of the rewrite rules for pages.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array\n *\/","file":"rewrite.php","line":862,"missingDoc":false,"filters":[],"uses":{"add_rewrite_tag":[864],"generate_rewrite_rules":[866],"get_page_permastruct":[866]},"used_by":[]},"WP_Rewrite::get_date_permastruct":{"doc":"\/**\n * Retrieve date permalink structure, with year, month, and day.\n *\n * The permalink structure for the date, if not set already depends on the\n * permalink structure. It can be one of three formats. The first is year,\n * month, day; the second is day, month, year; and the last format is month,\n * day, year. These are matched against the permalink structure for which\n * one is used. If none matches, then the default will be used, which is\n * year, month, day.\n *\n * Prevents post ID and date permalinks from overlapping. In the case of\n * post_id, the date permalink will be prepended with front permalink with\n * 'date\/' before the actual permalink to form the complete date permalink\n * structure.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on no permalink structure. Date permalink structure.\n *\/","file":"rewrite.php","line":889,"missingDoc":false,"filters":[],"uses":{"strpos":[905],"preg_match_all":[917]},"used_by":[]},"WP_Rewrite::get_year_permastruct":{"doc":"\/**\n * Retrieve the year permalink structure without month and day.\n *\n * Gets the date permalink structure and strips out the month and day\n * permalink structures.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year structure on success.\n *\/","file":"rewrite.php","line":943,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[944],"str_replace":[949,950],"preg_replace":[952]},"used_by":[]},"WP_Rewrite::get_month_permastruct":{"doc":"\/**\n * Retrieve the month permalink structure without day and with year.\n *\n * Gets the date permalink structure and strips out the day permalink\n * structures. Keeps the year permalink structure.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year\/Month structure on success.\n *\/","file":"rewrite.php","line":968,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[969],"str_replace":[974],"preg_replace":[976]},"used_by":[]},"WP_Rewrite::get_day_permastruct":{"doc":"\/**\n * Retrieve the day permalink structure with month and year.\n *\n * Keeps date permalink structure with all year, month, and day.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year\/Month\/Day structure on success.\n *\/","file":"rewrite.php","line":991,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[992]},"used_by":[]},"WP_Rewrite::get_category_permastruct":{"doc":"\/**\n * Retrieve the permalink structure for categories.\n *\n * If the category_base property has no value, then the category structure\n * will have the front property value, followed by 'category', and finally\n * '%category%'. If it does, then the root property will be used, along with\n * the category_base property value.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Category permalink structure.\n *\/","file":"rewrite.php","line":1008,"missingDoc":false,"filters":[],"uses":{"get_extra_permastruct":[1009]},"used_by":[]},"WP_Rewrite::get_tag_permastruct":{"doc":"\/**\n * Retrieve the permalink structure for tags.\n *\n * If the tag_base property has no value, then the tag structure will have\n * the front property value, followed by 'tag', and finally '%tag%'. If it\n * does, then the root property will be used, along with the tag_base\n * property value.\n *\n * @since 2.3.0\n * @access public\n *\n * @return bool|string False on failure. Tag permalink structure.\n *\/","file":"rewrite.php","line":1025,"missingDoc":false,"filters":[],"uses":{"get_extra_permastruct":[1026]},"used_by":[]},"WP_Rewrite::get_extra_permastruct":{"doc":"\/**\n * Retrieve extra permalink structure by name.\n *\n * @since 2.5.0\n * @access public\n *\n * @param string $name Permalink structure name.\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1038,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_author_permastruct":{"doc":"\/**\n * Retrieve the author permalink structure.\n *\n * The permalink structure is front property, author base, and finally\n * '\/%author%'. Will set the author_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1060,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_search_permastruct":{"doc":"\/**\n * Retrieve the search permalink structure.\n *\n * The permalink structure is root property, search base, and finally\n * '\/%search%'. Will set the search_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1086,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_page_permastruct":{"doc":"\/**\n * Retrieve the page permalink structure.\n *\n * The permalink structure is root property, and '%pagename%'. Will set the\n * page_structure property and then return it without attempting to set the\n * value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1112,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_feed_permastruct":{"doc":"\/**\n * Retrieve the feed permalink structure.\n *\n * The permalink structure is root property, feed base, and finally\n * '\/%feed%'. Will set the feed_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1138,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_comment_feed_permastruct":{"doc":"\/**\n * Retrieve the comment feed permalink structure.\n *\n * The permalink structure is root property, comment base property, feed\n * base and finally '\/%feed%'. Will set the comment_feed_structure property\n * and then return it without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1164,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::add_rewrite_tag":{"doc":"\/**\n * Add or update existing rewrite tags (e.g. %postname%).\n *\n * If the tag already exists, replace the existing pattern and query for\n * that tag, otherwise add the new tag.\n *\n * @see WP_Rewrite::$rewritecode\n * @see WP_Rewrite::$rewritereplace\n * @see WP_Rewrite::$queryreplace\n * @since 1.5.0\n * @access public\n *\n * @param string $tag Name of the rewrite tag to add or update.\n * @param string $regex Regular expression to substitute the tag for in rewrite rules.\n * @param string $query String to append to the rewritten query. Must end in '='.\n *\/","file":"rewrite.php","line":1194,"missingDoc":false,"filters":[],"uses":{"array_search":[1195]},"used_by":[]},"WP_Rewrite::generate_rewrite_rules":{"doc":"\/**\n * Generate rewrite rules from a permalink structure.\n *\n * The main WP_Rewrite function for building the rewrite rule list. The\n * contents of the function is a mix of black magic and regular expressions,\n * so best just ignore the contents and move to the parameters.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure The permalink structure.\n * @param int $ep_mask Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE.\n * @param bool $paged Should archive pagination rules be added for the structure? Default is true.\n * @param bool $feed Should feed rewrite rules be added for the structure? Default is true.\n * @param bool $forcomments Should the feed rules be a query for a comments feed? Default is false.\n * @param bool $walk_dirs Should the 'directories' making up the structure be walked over and rewrite rules\n * built for each in turn? Default is true.\n * @param bool $endpoints Should endpoints be applied to the generated rewrite rules? Default is true.\n * @return array Rewrite rule list.\n *\/","file":"rewrite.php","line":1226,"missingDoc":false,"filters":[],"uses":{"trim":[1231,1284],"substr":[1255],"strpos":[1255,1388,1382,1383,1384,1385,1385,1385,1385,1385,1385,1395],"preg_match_all":[1257,1303],"count":[1259,1286],"str_replace":[1272,1279,1300,1411],"preg_index":[1272,1325,1329,1334,1339,1343,1369,1429,1431,1432,1438,1439,1452],"explode":[1285],"preg_replace":[1289],"ltrim":[1297],"is_array":[1306],"get_option":[1334,1331,1361],"array_merge":[1356,1360,1362,1462,1467,1471,1472,1476],"is_post_type_hierarchical":[1397],"get_post_types":[1394],"rtrim":[1409]},"used_by":[]},"WP_Rewrite::generate_rewrite_rule":{"doc":"\/**\n * Generate Rewrite rules with permalink structure and walking directory only.\n *\n * Shorten version of {@link WP_Rewrite::generate_rewrite_rules()} that\n * allows for shorter list of parameters. See the method for longer\n * description of what generating rewrite rules does.\n *\n * @uses WP_Rewrite::generate_rewrite_rules() See for long description and rest of parameters.\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure The permalink structure to generate rules.\n * @param bool $walk_dirs Optional, default is false. Whether to create list of directories to walk over.\n * @return array\n *\/","file":"rewrite.php","line":1496,"missingDoc":false,"filters":[],"uses":{"generate_rewrite_rules":[1497]},"used_by":[]},"WP_Rewrite::rewrite_rules":{"doc":"\/**\n * Construct rewrite matches and queries from permalink structure.\n *\n * Runs the action 'generate_rewrite_rules' with the parameter that is an\n * reference to the current WP_Rewrite instance to further manipulate the\n * permalink structures and rewrite rules. Runs the 'rewrite_rules_array'\n * filter on the full rewrite rule array.\n *\n * There are two ways to manipulate the rewrite rules, one by hooking into\n * the 'generate_rewrite_rules' action and gaining full control of the\n * object or just manipulating the rewrite rule array before it is passed\n * from the function.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array An associate array of matches and queries.\n *\/","file":"rewrite.php","line":1518,"missingDoc":false,"filters":["'post_rewrite_rules'","'date_rewrite_rules'","'root_rewrite_rules'","'comments_rewrite_rules'","'search_rewrite_rules'","'author_rewrite_rules'","'page_rewrite_rules'","$permastructname . '_rewrite_rules'","'tag_rewrite_rules'","'generate_rewrite_rules'","'rewrite_rules_array'"],"uses":{"parse_url":[1525],"home_url":[1525],"is_multisite":[1536],"is_main_site":[1536],"generate_rewrite_rules":[1543,1547,1551,1555,1560,1564,1575,1577,1579],"get_date_permastruct":[1547],"get_search_permastruct":[1559],"get_author_permastruct":[1564],"page_rewrite_rules":[1568],"count":[1574],"is_array":[1573],"array_merge":[1586,1591,1593]},"used_by":[]},"WP_Rewrite::wp_rewrite_rules":{"doc":"\/**\n * Retrieve the rewrite rules.\n *\n * The difference between this method and {@link\n * WP_Rewrite::rewrite_rules()} is that this method stores the rewrite rules\n * in the 'rewrite_rules' option and retrieves it. This prevents having to\n * process all of the permalinks to get the rewrite rules in the form of\n * caching.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array Rewrite rules.\n *\/","file":"rewrite.php","line":1615,"missingDoc":false,"filters":[],"uses":{"get_option":[1616],"rewrite_rules":[1619],"update_option":[1620]},"used_by":[]},"WP_Rewrite::mod_rewrite_rules":{"doc":"\/**\n * Retrieve mod_rewrite formatted rewrite rules to write to .htaccess.\n *\n * Does not actually write to the .htaccess file, but creates the rules for\n * the process that will.\n *\n * Will add the non_wp_rules property rules to the .htaccess file before\n * the WordPress rewrite rules one.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string\n *\/","file":"rewrite.php","line":1640,"missingDoc":false,"filters":["'mod_rewrite_rules'","'rewrite_rules'"],"uses":{"using_permalinks":[1641],"parse_url":[1644,1648],"site_url":[1644],"trailingslashit":[1646,1650],"home_url":[1648],"str_replace":[1662,1683],"rewrite_rules":[1675],"count":[1676],"strpos":[1691]},"used_by":[]},"WP_Rewrite::iis7_url_rewrite_rules":{"doc":"\/**\n * Retrieve IIS7 URL Rewrite formatted rewrite rules to write to web.config file.\n *\n * Does not actually write to the web.config file, but creates the rules for\n * the process that will.\n *\n * @since 2.8.0\n * @access public\n *\n * @return string\n *\/","file":"rewrite.php","line":1721,"missingDoc":false,"filters":["'iis7_url_rewrite_rules'"],"uses":{"using_permalinks":[1723]},"used_by":[]},"WP_Rewrite::add_rule":{"doc":"\/**\n * Add a straight rewrite rule.\n *\n * Any value in the $after parameter that isn't 'bottom' will be placed at\n * the top of the rules.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $regex Regular expression to match against request.\n * @param string $redirect URL regex redirects to when regex matches request.\n * @param string $after Optional, default is bottom. Location to place rule.\n *\/","file":"rewrite.php","line":1769,"missingDoc":false,"filters":[],"uses":{"strpos":[1771,1771],"strlen":[1771],"substr":[1772],"add_external_rule":[1774],"array_merge":[1777,1779]},"used_by":[]},"WP_Rewrite::add_external_rule":{"doc":"\/**\n * Add a rule that doesn't redirect to index.php.\n *\n * Can redirect to any place.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $regex Regular expression to match against request.\n * @param string $redirect URL regex redirects to when regex matches request.\n *\/","file":"rewrite.php","line":1795,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::add_endpoint":{"doc":"\/**\n * Add an endpoint, like \/trackback\/.\n *\n * See {@link add_rewrite_endpoint()} for full documentation.\n *\n * @see add_rewrite_endpoint()\n * @since 2.1.0\n * @access public\n * @uses WP::add_query_var()\n *\n * @param string $name Name of the endpoint.\n * @param int $places Endpoint mask describing the places the endpoint should be added.\n *\/","file":"rewrite.php","line":1812,"missingDoc":false,"filters":[],"uses":{"add_query_var":[1815]},"used_by":[]},"WP_Rewrite::add_permastruct":{"doc":"\/**\n * Add a new permalink structure.\n *\n * A permalink structure (permastruct) is an abstract definition of a set of rewrite rules; it\n * is an easy way of expressing a set of regular expressions that rewrite to a set of query strings.\n * The new permastruct is added to the {@link WP_Rewrite::$extra_permastructs} array. When the\n * rewrite rules are built by {@link WP_Rewrite::rewrite_rules()} all of these extra permastructs\n * are passed to {@link WP_Rewrite::generate_rewrite_rules()} which transforms them into the\n * regular expressions that many love to hate.\n *\n * The $args parameter gives you control over how {@link WP_Rewrite::generate_rewrite_rules()}\n * works on the new permastruct.\n *\n * @since 2.5.0\n * @access public\n *\n * @param string $name Name for permalink structure.\n * @param string $struct Permalink structure (e.g. category\/%category%)\n * @param array $args Optional configuration for building the rules from the permalink structure:\n * - with_front (bool) - Should the structure be prepended with WP_Rewrite::$front? Default is true.\n * - ep_mask (int) - Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE.\n * - paged (bool) - Should archive pagination rules be added for the structure? Default is true.\n * - feed (bool) - Should feed rewrite rules be added for the structure? Default is true.\n * - forcomments (bool) - Should the feed rules be a query for a comments feed? Default is false.\n * - walk_dirs (bool) - Should the 'directories' making up the structure be walked over and rewrite\n * rules built for each in turn? Default is true.\n * - endpoints (bool) - Should endpoints be applied to the generated rewrite rules? Default is true.\n *\/","file":"rewrite.php","line":1846,"missingDoc":false,"filters":[],"uses":{"is_array":[1848],"func_get_arg":[1851],"func_num_args":[1850],"array_intersect_key":[1862],"wp_parse_args":[1863]},"used_by":[]},"WP_Rewrite::flush_rules":{"doc":"\/**\n * Remove rewrite rules and then recreate rewrite rules.\n *\n * Calls {@link WP_Rewrite::wp_rewrite_rules()} after removing the\n * 'rewrite_rules' option. If the function named 'save_mod_rewrite_rules'\n * exists, it will be called.\n *\n * @since 2.0.1\n * @access public\n * @param bool $hard Whether to update .htaccess (hard flush) or just update rewrite_rules option (soft flush). Default is true (hard).\n *\/","file":"rewrite.php","line":1885,"missingDoc":false,"filters":[],"uses":{"delete_option":[1886],"wp_rewrite_rules":[1887],"save_mod_rewrite_rules":[1889],"function_exists":[1888,1890],"iis7_save_url_rewrite_rules":[1891]},"used_by":[]},"WP_Rewrite::init":{"doc":"\/**\n * Sets up the object's properties.\n *\n * The 'use_verbose_page_rules' object property will be set to true if the\n * permalink structure begins with one of the following: '%postname%', '%category%',\n * '%tag%', or '%author%'.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"rewrite.php","line":1904,"missingDoc":false,"filters":[],"uses":{"get_option":[1906],"substr":[1907,1917],"strpos":[1907],"using_index_permalinks":[1909],"preg_match":[1920]},"used_by":[]},"WP_Rewrite::set_permalink_structure":{"doc":"\/**\n * Set the main permalink structure for the blog.\n *\n * Will update the 'permalink_structure' option, if there is a difference\n * between the current permalink structure and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * Fires the 'permalink_structure_changed' action once the init call has\n * processed passing the old and new values\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure Permalink structure.\n *\/","file":"rewrite.php","line":1941,"missingDoc":false,"filters":["'permalink_structure_changed'"],"uses":{"update_option":[1944],"init":[1945]},"used_by":[]},"WP_Rewrite::set_category_base":{"doc":"\/**\n * Set the category base for the category permalink.\n *\n * Will update the 'category_base' option, if there is a difference between\n * the current category base and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $category_base Category permalink structure base.\n *\/","file":"rewrite.php","line":1962,"missingDoc":false,"filters":[],"uses":{"update_option":[1964],"init":[1965],"get_option":[1963]},"used_by":[]},"WP_Rewrite::set_tag_base":{"doc":"\/**\n * Set the tag base for the tag permalink.\n *\n * Will update the 'tag_base' option, if there is a difference between the\n * current tag base and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * @since 2.3.0\n * @access public\n *\n * @param string $tag_base Tag permalink structure base.\n *\/","file":"rewrite.php","line":1981,"missingDoc":false,"filters":[],"uses":{"update_option":[1983],"init":[1984],"get_option":[1982]},"used_by":[]},"WP_Rewrite::__construct":{"doc":"\/**\n * Constructor - Calls init(), which runs setup.\n *\n * @since 1.5.0\n * @access public\n *\n * @return WP_Rewrite\n *\/","file":"rewrite.php","line":1996,"missingDoc":false,"filters":[],"uses":{"init":[1997]},"used_by":[]},"MagpieRSS::MagpieRSS":{"doc":"","file":"rss.php","line":54,"missingDoc":true,"filters":[],"uses":{"trigger_error":[59,64],"function_exists":[58],"xml_parser_create":[61],"is_resource":[63],"xml_set_object":[71],"xml_set_element_handler":[72],"xml_set_character_data_handler":[75],"xml_parse":[77],"xml_get_error_code":[80],"xml_error_string":[82],"xml_get_current_line_number":[83],"xml_get_current_column_number":[84],"error":[87],"xml_parser_free":[91],"normalize":[93]},"used_by":[]},"MagpieRSS::feed_start_element":{"doc":"","file":"rss.php","line":96,"missingDoc":true,"filters":[],"uses":{"strtolower":[97],"array_change_key_case":[98],"split":[103],"strpos":[102],"in_array":[160],"join":[175],"array_map":[176],"array_keys":[177],"array_values":[178],"append_content":[180],"array_unshift":[182,203],"append":[199]},"used_by":[]},"MagpieRSS::feed_cdata":{"doc":"","file":"rss.php","line":207,"missingDoc":true,"filters":[],"uses":{"append_content":[211],"join":[214],"array_reverse":[214],"append":[215]},"used_by":[]},"MagpieRSS::feed_end_element":{"doc":"","file":"rss.php","line":219,"missingDoc":true,"filters":[],"uses":{"strtolower":[220],"in_array":[236],"append_content":[249,252],"array_shift":[255,258]},"used_by":[]},"MagpieRSS::concat":{"doc":"","file":"rss.php","line":264,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::append_content":{"doc":"","file":"rss.php","line":271,"missingDoc":true,"filters":[],"uses":{"concat":[273,276]},"used_by":[]},"MagpieRSS::append":{"doc":"","file":"rss.php","line":281,"missingDoc":true,"filters":[],"uses":{"concat":[288,292,296,300,306,310,314,318]},"used_by":[]},"MagpieRSS::normalize":{"doc":"","file":"rss.php","line":325,"missingDoc":true,"filters":[],"uses":{"count":[329,341],"is_rss":[339],"is_atom":[327]},"used_by":[]},"MagpieRSS::is_rss":{"doc":"","file":"rss.php","line":353,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::is_atom":{"doc":"","file":"rss.php","line":362,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::map_attrs":{"doc":"","file":"rss.php","line":371,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::error":{"doc":"","file":"rss.php","line":375,"missingDoc":true,"filters":[],"uses":{"trigger_error":[381],"error_log":[383]},"used_by":[]},"fetch_rss":{"doc":"\/**\n * Build Magpie object based on RSS from URL.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL to retrieve feed\n * @return bool|MagpieRSS false on failure or MagpieRSS object on success.\n *\/","file":"rss.php","line":400,"missingDoc":false,"filters":[],"uses":{"init":[402],"_fetch_remote_file":[412,468],"_response_to_rss":[414,481],"is_success":[413,480],"debug":[432,451,474,484,513],"check_cache":[442],"get":[447,461],"set":[477,487],"substr":[496]},"used_by":{"wp_rss":[877],"get_rss":[918]}},"_fetch_remote_file":{"doc":"\/**\n * Retrieve URL headers and content using WP HTTP Request API.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL to retrieve\n * @param array $headers Optional. Headers to send to the URL.\n * @return Snoopy style response\n *\/","file":"rss.php","line":538,"missingDoc":false,"filters":[],"uses":{"wp_remote_request":[539],"array_shift":[541],"is_wp_error":[540],"is_array":[554],"wp_remote_retrieve_headers":[553],"wp_remote_retrieve_response_code":[563,564],"wp_remote_retrieve_body":[566]},"used_by":{"fetch_rss":[412,468]}},"_response_to_rss":{"doc":"\/**\n * Retrieve\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param unknown_type $resp\n * @return unknown\n *\/","file":"rss.php","line":581,"missingDoc":false,"filters":[],"uses":{"explode":[591],"strpos":[590]},"used_by":{"fetch_rss":[414,481]}},"is_success":{"doc":"","file":"rss.php","line":683,"missingDoc":true,"filters":[],"uses":[],"used_by":{"fetch_rss":[413,480]}},"is_info":{"doc":"","file":"rss.php","line":679,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_redirect":{"doc":"","file":"rss.php","line":687,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_error":{"doc":"","file":"rss.php","line":691,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_client_error":{"doc":"","file":"rss.php","line":695,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_server_error":{"doc":"","file":"rss.php","line":699,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"RSSCache::RSSCache":{"doc":"","file":"rss.php","line":708,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"RSSCache::set":{"doc":"","file":"rss.php","line":725,"missingDoc":true,"filters":[],"uses":{"file_name":[726],"set_transient":[728]},"used_by":[]},"RSSCache::get":{"doc":"","file":"rss.php","line":739,"missingDoc":true,"filters":[],"uses":{"file_name":[741],"debug":[744],"get_transient":[743]},"used_by":[]},"RSSCache::check_cache":{"doc":"","file":"rss.php","line":760,"missingDoc":true,"filters":[],"uses":{"file_name":[762],"get_transient":[764]},"used_by":[]},"RSSCache::serialize":{"doc":"","file":"rss.php","line":776,"missingDoc":true,"filters":[],"uses":{"serialize":[777]},"used_by":[]},"RSSCache::unserialize":{"doc":"","file":"rss.php","line":783,"missingDoc":true,"filters":[],"uses":{"unserialize":[784]},"used_by":[]},"RSSCache::file_name":{"doc":"","file":"rss.php","line":793,"missingDoc":true,"filters":[],"uses":{"md5":[794]},"used_by":[]},"RSSCache::error":{"doc":"","file":"rss.php","line":801,"missingDoc":true,"filters":[],"uses":{"trigger_error":[808],"error_log":[811]},"used_by":[]},"RSSCache::debug":{"doc":"","file":"rss.php","line":814,"missingDoc":true,"filters":[],"uses":{"error":[816]},"used_by":[]},"parse_w3cdtf":{"doc":"","file":"rss.php","line":822,"missingDoc":true,"filters":[],"uses":{"gmmktime":[832],"preg_match":[827]},"used_by":[]},"wp_rss":{"doc":"\/**\n * Display all RSS items in a HTML ordered list.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL of feed to display. Will not auto sense feed URL.\n * @param int $num_items Optional. Number of items to display, default is all.\n *\/","file":"rss.php","line":876,"missingDoc":false,"filters":[],"uses":{"array_slice":[881],"printf":[885],"esc_url":[887],"esc_attr":[888],"strip_tags":[888],"esc_html":[889],"_e":[895],"fetch_rss":[877]},"used_by":[]},"get_rss":{"doc":"\/**\n * Display RSS items in HTML list items.\n *\n * You have to specify which HTML list you want, either ordered or unordered\n * before using the function. You also have to specify how many items you wish\n * to display. You can't display all of them like you can with wp_rss()\n * function.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL of feed to display. Will not auto sense feed URL.\n * @param int $num_items Optional. Number of items to display, default is all.\n * @return bool False on failure.\n *\/","file":"rss.php","line":917,"missingDoc":false,"filters":[],"uses":{"fetch_rss":[918],"array_slice":[920],"esc_html":[924]},"used_by":[]},"wp_default_scripts":{"doc":"\/**\n * Register all WordPress scripts.\n *\n * Localizes some of them.\n * args order: $scripts->add( 'handle', 'url', 'dependencies', 'query-string', 1 );\n * when last arg === 1 queues the script for the footer\n *\n * @since 2.6.0\n *\n * @param object $scripts WP_Scripts object.\n *\/","file":"script-loader.php","line":50,"missingDoc":false,"filters":[],"uses":{"wp_guess_url":[53],"site_url":[52],"defined":[56,60,253],"get_bloginfo":[57],"add":[62,69,74,76,92,94,96,98,104,109,111,114,115,116,117,118,119,120,121,122,125,128,129,130,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,171,174,175,176,177,178,179,180,181,182,184,196,198,232,233,234,235,236,239,241,244,248,249,250,251,255,257,260,263,265,267,268,270,272,283,285,287,289,298,300,302,309,311,313,314,315,316,329,330,340,341,342,345,352,354,360,362,370,372,374,397,399,405,407,409,412,414,422,427,433,435,436,444,446,448,450,455,464,471,472,473],"did_action":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"localize":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"get_current_user_id":[65],"time":[66],"__":[71,78,79,80,81,82,83,84,85,86,87,88,89,100,101,106,186,187,188,189,190,191,204,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,274,275,276,279,280,291,292,293,294,295,318,319,320,321,322,323,326,348,349,356,357,366,367,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,402,416,417,418,424,429,430,438,439,440,441,452,457,458,459,460,467,468],"esc_attr":[79,80,81,82,87,88,89,348],"includes_url":[192,193],"ini_get":[201,201],"_x":[278,306,394,419,466],"admin_url":[333],"add_data":[346,400],"is_admin":[344]},"used_by":[]},"wp_default_styles":{"doc":"\/**\n * Assign default styles to $styles object.\n *\n * Nothing is returned, because the $styles parameter is passed by reference.\n * Meaning that whatever object is passed will be updated without having to\n * reassign the variable that was passed back to the same value. This saves\n * memory.\n *\n * Adding default styles is not the only task, it also assigns the base_url\n * property, the default version, and text direction for the object.\n *\n * @since 2.6.0\n *\n * @param object $styles\n *\/","file":"script-loader.php","line":492,"missingDoc":false,"filters":[],"uses":{"wp_guess_url":[495],"site_url":[494],"defined":[498,503],"get_bloginfo":[499],"function_exists":[500],"is_rtl":[500],"add":[509,511,515,518,519,521,522,523,524,525,526,527,528,529,530,531,532,533,534],"add_data":[512,537,539],"in_array":[538]},"used_by":[]},"wp_prototype_before_jquery":{"doc":"\/**\n * Reorder JavaScript scripts array to place prototype before jQuery.\n *\n * @since 2.3.1\n *\n * @param array $js_array JavaScript scripts array\n * @return array Reordered array, if needed.\n *\/","file":"script-loader.php","line":551,"missingDoc":false,"filters":[],"uses":{"array_search":[552,555],"array_splice":[563]},"used_by":[]},"wp_just_in_time_script_localization":{"doc":"\/**\n * Load localized data on print rather than initialization.\n *\n * These localizations require information that may not be loaded even by init.\n *\n * @since 2.5.0\n *\/","file":"script-loader.php","line":575,"missingDoc":false,"filters":[],"uses":{"wp_localize_script":[577],"__":[579,580]},"used_by":[]},"wp_style_loader_src":{"doc":"\/**\n * Administration Screen CSS for changing the styles.\n *\n * If installing the 'wp-admin\/' directory will be replaced with '.\/'.\n *\n * The $_wp_admin_css_colors global manages the Administration Screens CSS\n * stylesheet that is loaded. The option that is set is 'admin_color' and is the\n * color and key for the array. The value for the color key is an object with\n * a 'url' parameter that has the URL path to the CSS file.\n *\n * The query from $src parameter will be appended to the URL that is given from\n * the $_wp_admin_css_colors array value URL.\n *\n * @since 2.6.0\n * @uses $_wp_admin_css_colors\n *\n * @param string $src Source URL.\n * @param string $handle Either 'colors' or 'colors-rtl'.\n * @return string URL path to CSS stylesheet for Administration Screens.\n *\/","file":"script-loader.php","line":605,"missingDoc":false,"filters":[],"uses":{"preg_replace":[607,621],"defined":[606,620],"get_user_option":[611],"parse_url":[617],"wp_parse_str":[624],"add_query_arg":[625]},"used_by":[]},"print_head_scripts":{"doc":"\/**\n * Prints the script queue in the HTML head on admin pages.\n *\n * Postpones the scripts that were queued for the footer.\n * print_footer_scripts() is called in the footer to print these scripts.\n *\n * @since 2.8\n * @see wp_print_scripts()\n *\/","file":"script-loader.php","line":643,"missingDoc":false,"filters":["'wp_print_scripts'","'print_head_scripts'"],"uses":{"did_action":[646],"is_a":[649],"script_concat_settings":[652],"do_head_items":[654],"_print_scripts":[657],"reset":[659]},"used_by":{"wp_print_head_scripts":[733]}},"_print_scripts":{"doc":"\/**\n * @internal use\n *\/","file":"script-loader.php","line":688,"missingDoc":false,"filters":[],"uses":{"defined":[692],"str_split":[705],"implode":[706],"esc_attr":[709],"trim":[695]},"used_by":{"print_head_scripts":[657],"print_footer_scripts":[679]}},"print_footer_scripts":{"doc":"\/**\n * Prints the scripts that were queued for the footer or too late for the HTML head.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":668,"missingDoc":false,"filters":["'print_footer_scripts'"],"uses":{"is_a":[671],"script_concat_settings":[674],"do_footer_items":[676],"_print_scripts":[679],"reset":[681]},"used_by":{"_wp_footer_scripts":[743]}},"wp_print_head_scripts":{"doc":"\/**\n * Prints the script queue in the HTML head on the front end.\n *\n * Postpones the scripts that were queued for the footer.\n * wp_print_footer_scripts() is called in the footer to print these scripts.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":724,"missingDoc":false,"filters":["'wp_print_scripts'"],"uses":{"did_action":[725],"is_a":[730],"print_head_scripts":[733]},"used_by":[]},"_wp_footer_scripts":{"doc":"\/**\n * Private, for use in *_footer_scripts hooks\n *\n * @since 3.3.0\n *\/","file":"script-loader.php","line":741,"missingDoc":false,"filters":[],"uses":{"print_late_styles":[742],"print_footer_scripts":[743]},"used_by":[]},"print_late_styles":{"doc":"\/**\n * Prints the styles that were queued too late for the HTML head.\n *\n * @since 3.3.0\n *\/","file":"script-loader.php","line":798,"missingDoc":false,"filters":["'print_late_styles'"],"uses":{"is_a":[801],"do_footer_items":[805],"_print_styles":[808],"reset":[810]},"used_by":{"_wp_footer_scripts":[742]}},"wp_print_footer_scripts":{"doc":"\/**\n * Hooks to print the scripts and styles in the footer.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":751,"missingDoc":false,"filters":["'wp_print_footer_scripts'"],"uses":[],"used_by":[]},"wp_enqueue_scripts":{"doc":"\/**\n * Wrapper for do_action('wp_enqueue_scripts')\n *\n * Allows plugins to queue scripts for the front end using wp_enqueue_script().\n * Runs first in wp_head() where all is_home(), is_page(), etc. functions are available.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":763,"missingDoc":false,"filters":["'wp_enqueue_scripts'"],"uses":[],"used_by":[]},"print_admin_styles":{"doc":"\/**\n * Prints the styles queue in the HTML head on admin pages.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":772,"missingDoc":false,"filters":["'print_admin_styles'"],"uses":{"is_a":[775],"script_concat_settings":[778],"defined":[781],"do_items":[784],"_print_styles":[787],"reset":[789]},"used_by":[]},"_print_styles":{"doc":"\/**\n * @internal use\n *\/","file":"script-loader.php","line":817,"missingDoc":false,"filters":[],"uses":{"defined":[821],"trim":[827],"esc_attr":[828]},"used_by":{"print_admin_styles":[787],"print_late_styles":[808]}},"remove_shortcode":{"doc":"\/**\n * Removes hook for shortcode.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $tag shortcode tag to remove hook for.\n *\/","file":"shortcodes.php","line":108,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_shortcode_regex":{"doc":"\/**\n * Retrieve the shortcode regular expression for searching.\n *\n * The regular expression combines the shortcode tags in the regular expression\n * in a regex class.\n *\n * The regular expression contains 6 different sub matches to help with parsing.\n *\n * 1 - An extra [ to allow for escaping shortcodes with double [[]]\n * 2 - The shortcode name\n * 3 - The shortcode argument list\n * 4 - The self closing \/\n * 5 - The content of a shortcode when it wraps some content.\n * 6 - An extra ] to allow for escaping shortcodes with double [[]]\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @return string The shortcode search regular expression\n *\/","file":"shortcodes.php","line":174,"missingDoc":false,"filters":[],"uses":{"array_keys":[176],"join":[177],"array_map":[177]},"used_by":{"do_shortcode":[150],"strip_shortcodes":[321]}},"do_shortcode_tag":{"doc":"\/**\n * Regular Expression callable for do_shortcode() for calling shortcode hook.\n * @see get_shortcode_regex for details of the match array contents.\n *\n * @since 2.5\n * @access private\n * @uses $shortcode_tags\n *\n * @param array $m Regular expression match array\n * @return mixed False on failure.\n *\/","file":"shortcodes.php","line":223,"missingDoc":false,"filters":[],"uses":{"substr":[228],"shortcode_parse_atts":[232],"call_user_func":[236,239]},"used_by":[]},"strip_shortcode_tag":{"doc":"","file":"shortcodes.php","line":326,"missingDoc":true,"filters":[],"uses":{"substr":[329]},"used_by":[]},"SimplePie_Author::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * @param string $name\n * @param string $link\n * @param string $email\n *\/","file":"SimplePie\/Author.php","line":88,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Author.php","line":100,"missingDoc":false,"filters":[],"uses":{"md5":[103],"serialize":[103]},"used_by":[]},"SimplePie_Author::get_name":{"doc":"\/**\n * Author's name\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::get_link":{"doc":"\/**\n * Author's link\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::get_email":{"doc":"\/**\n * Author's email address\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache_DB::prepare_simplepie_object_for_cache":{"doc":"\/**\n * Helper for database conversion\n *\n * Converts a given {@see SimplePie} object into data to be stored\n *\n * @param SimplePie $data\n * @return array First item is the serialized data for storage, second item is the unique ID for this item\n *\/","file":"SimplePie\/Cache\/DB.php","line":61,"missingDoc":false,"filters":[],"uses":{"get_items":[63],"get_id":[70,78],"count":[73,73],"serialize":[135]},"used_by":[]},"SimplePie_Cache_File::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/File.php","line":89,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache_File::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/File.php","line":103,"missingDoc":false,"filters":[],"uses":{"serialize":[112],"file_put_contents":[113],"file_exists":[105,105],"is_writeable":[105,105]},"used_by":[]},"SimplePie_Cache_File::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/File.php","line":123,"missingDoc":false,"filters":[],"uses":{"unserialize":[127],"file_get_contents":[127],"file_exists":[125],"is_readable":[125]},"used_by":[]},"SimplePie_Cache_File::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/File.php","line":137,"missingDoc":false,"filters":[],"uses":{"filemtime":[141],"file_exists":[139]},"used_by":[]},"SimplePie_Cache_File::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/File.php","line":151,"missingDoc":false,"filters":[],"uses":{"touch":[155],"file_exists":[153]},"used_by":[]},"SimplePie_Cache_File::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/File.php","line":165,"missingDoc":false,"filters":[],"uses":{"unlink":[169],"file_exists":[167]},"used_by":[]},"SimplePie_Cache_Memcache::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":88,"missingDoc":false,"filters":[],"uses":{"array_merge":[101],"md5":[102],"addServer":[105]},"used_by":[]},"SimplePie_Cache_Memcache::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":114,"missingDoc":false,"filters":[],"uses":{"set":[120],"serialize":[120]},"used_by":[]},"SimplePie_Cache_Memcache::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":128,"missingDoc":false,"filters":[],"uses":{"get":[130],"unserialize":[134]},"used_by":[]},"SimplePie_Cache_Memcache::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":144,"missingDoc":false,"filters":[],"uses":{"get":[146],"time":[151]},"used_by":[]},"SimplePie_Cache_Memcache::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":162,"missingDoc":false,"filters":[],"uses":{"get":[164],"set":[168]},"used_by":[]},"SimplePie_Cache_Memcache::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":179,"missingDoc":false,"filters":[],"uses":{"delete":[181]},"used_by":[]},"SimplePie_Cache_MySQL::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":87,"missingDoc":false,"filters":[],"uses":{"array_merge_recursive":[99],"substr":[102],"query":[116],"fetchColumn":[123],"exec":[130,139],"in_array":[128,137]},"used_by":[]},"SimplePie_Cache_MySQL::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":153,"missingDoc":false,"filters":[],"uses":{"prepare":[166,176,182,195,214,234,255,261,272],"bindValue":[167,177,185,186,187,196,197,198,199,215,235,236,237,238,256,262,263,264,273,274,275],"count":[172,197],"time":[186,199,231,263,275],"execute":[188,200,239,217,168,265,276,257],"fetchColumn":[170,220],"array_keys":[206],"quote":[211],"implode":[214],"array_diff":[225],"get_date":[229],"serialize":[237,262,274],"rowCount":[259]},"used_by":[]},"SimplePie_Cache_MySQL::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":291,"missingDoc":false,"filters":[],"uses":{"prepare":[298,344],"bindValue":[299,345],"unserialize":[302,350],"fetchColumn":[348],"execute":[346,300],"fetch":[300]},"used_by":[]},"SimplePie_Cache_MySQL::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":369,"missingDoc":false,"filters":[],"uses":{"prepare":[376],"bindValue":[377],"execute":[378],"fetchColumn":[378]},"used_by":[]},"SimplePie_Cache_MySQL::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":393,"missingDoc":false,"filters":[],"uses":{"prepare":[400],"bindValue":[401,402],"time":[401],"execute":[403],"rowCount":[403]},"used_by":[]},"SimplePie_Cache_MySQL::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":418,"missingDoc":false,"filters":[],"uses":{"prepare":[425,427],"bindValue":[426,428],"execute":[429,429]},"used_by":[]},"SimplePie_Cache::__construct":{"doc":"\/**\n * Don't call the constructor. Please.\n *\/","file":"SimplePie\/Cache.php","line":72,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache::get_handler":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @param string $location URL location (scheme is used to determine handler)\n * @param string $filename Unique identifier for cache object\n * @param string $extension 'spi' or 'spc'\n * @return SimplePie_Cache_Base Type of object depends on scheme of `$location`\n *\/","file":"SimplePie\/Cache.php","line":82,"missingDoc":false,"filters":[],"uses":{"explode":[84]},"used_by":[]},"SimplePie_Cache::create":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @deprecated Use {@see get_handler} instead\n *\/","file":"SimplePie\/Cache.php","line":100,"missingDoc":false,"filters":[],"uses":{"trigger_error":[102]},"used_by":[]},"SimplePie_Cache::register":{"doc":"\/**\n * Register a handler\n *\n * @param string $type DSN type to register for\n * @param string $class Name of handler class. Must implement SimplePie_Cache_Base\n *\/","file":"SimplePie\/Cache.php","line":112,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache::parse_URL":{"doc":"\/**\n * Parse a URL into an array\n *\n * @param string $url\n * @return array\n *\/","file":"SimplePie\/Cache.php","line":123,"missingDoc":false,"filters":[],"uses":{"parse_url":[125],"parse_str":[129]},"used_by":[]},"SimplePie_Caption::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Caption.php","line":104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Caption.php","line":118,"missingDoc":false,"filters":[],"uses":{"md5":[121],"serialize":[121]},"used_by":[]},"SimplePie_Caption::get_endtime":{"doc":"\/**\n * Get the end time\n *\n * @return string|null Time in the format 'hh:mm:ss.SSS'\n *\/","file":"SimplePie\/Caption.php","line":129,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_language":{"doc":"\/**\n * Get the language\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc3066\n * @return string|null Language code as per RFC 3066\n *\/","file":"SimplePie\/Caption.php","line":147,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_starttime":{"doc":"\/**\n * Get the start time\n *\n * @return string|null Time in the format 'hh:mm:ss.SSS'\n *\/","file":"SimplePie\/Caption.php","line":164,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_text":{"doc":"\/**\n * Get the text of the caption\n *\n * @return string|null\n *\/","file":"SimplePie\/Caption.php","line":181,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_type":{"doc":"\/**\n * Get the content type (not MIME type)\n *\n * @return string|null Either 'text' or 'html'\n *\/","file":"SimplePie\/Caption.php","line":198,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * @param string $term\n * @param string $scheme\n * @param string $label\n *\/","file":"SimplePie\/Category.php","line":88,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Category.php","line":100,"missingDoc":false,"filters":[],"uses":{"md5":[103],"serialize":[103]},"used_by":[]},"SimplePie_Category::get_term":{"doc":"\/**\n * Get the category identifier\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::get_scheme":{"doc":"\/**\n * Get the categorization scheme identifier\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::get_label":{"doc":"\/**\n * Get the human readable label\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":145,"missingDoc":false,"filters":[],"uses":{"get_term":[153]},"used_by":[]},"SimplePie_Content_Type_Sniffer::__construct":{"doc":"\/**\n * Create an instance of the class with the input file\n *\n * @param SimplePie_Content_Type_Sniffer $file Input file\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":74,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Content_Type_Sniffer::get_type":{"doc":"\/**\n * Get the Content-Type of the specified file\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":84,"missingDoc":false,"filters":[],"uses":{"text_or_binary":[94],"substr":[99,112,118],"strpos":[97],"trim":[105],"strtolower":[105],"unknown":[110,140],"image":[120],"feed_or_html":[131]},"used_by":[]},"SimplePie_Content_Type_Sniffer::text_or_binary":{"doc":"\/**\n * Sniff text or binary\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":149,"missingDoc":false,"filters":[],"uses":{"preg_match":[158],"substr":[151,152,153,154]},"used_by":[]},"SimplePie_Content_Type_Sniffer::unknown":{"doc":"\/**\n * Sniff unknown\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":173,"missingDoc":false,"filters":[],"uses":{"strspn":[175],"substr":[182,186,190,191,195,199,203,207,176,177,178],"text_or_binary":[213],"strtolower":[176,177,178]},"used_by":[]},"SimplePie_Content_Type_Sniffer::image":{"doc":"\/**\n * Sniff images\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":222,"missingDoc":false,"filters":[],"uses":{"substr":[229,233,237,241,224,225]},"used_by":[]},"SimplePie_Content_Type_Sniffer::feed_or_html":{"doc":"\/**\n * Sniff HTML\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":256,"missingDoc":false,"filters":[],"uses":{"strlen":[258],"strspn":[259,269],"strpos":[283,294,305],"substr":[292,303,314,315,319,280]},"used_by":[]},"SimplePie_Copyright::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Copyright.php","line":79,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Copyright::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Copyright.php","line":90,"missingDoc":false,"filters":[],"uses":{"md5":[93],"serialize":[93]},"used_by":[]},"SimplePie_Copyright::get_url":{"doc":"\/**\n * Get the copyright URL\n *\n * @return string|null URL to copyright information\n *\/","file":"SimplePie\/Copyright.php","line":101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Copyright::get_attribution":{"doc":"\/**\n * Get the attribution text\n *\n * @return string|null\n *\/","file":"SimplePie\/Copyright.php","line":118,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Credit.php","line":87,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Credit.php","line":99,"missingDoc":false,"filters":[],"uses":{"md5":[102],"serialize":[102]},"used_by":[]},"SimplePie_Credit::get_role":{"doc":"\/**\n * Get the role of the person receiving credit\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::get_scheme":{"doc":"\/**\n * Get the organizational scheme\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::get_name":{"doc":"\/**\n * Get the credited person\/entity's name\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @access public\n * @param string $data Input data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":86,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::parse":{"doc":"\/**\n * Parse the input data\n *\n * @access public\n * @return string Output data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":97,"missingDoc":false,"filters":[],"uses":{"strpos":[99],"consume":[101],"entity":[102]},"used_by":[]},"SimplePie_Decode_HTML_Entities::consume":{"doc":"\/**\n * Consume the next byte\n *\n * @access private\n * @return mixed The next byte, or false, if there is no more data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":114,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::consume_range":{"doc":"\/**\n * Consume a range of characters\n *\n * @access private\n * @param string $chars Characters to consume\n * @return mixed A series of characters that match the range, or false\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":134,"missingDoc":false,"filters":[],"uses":{"substr":[138],"strspn":[136]},"used_by":[]},"SimplePie_Decode_HTML_Entities::unconsume":{"doc":"\/**\n * Unconsume one byte\n *\n * @access private\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":154,"missingDoc":false,"filters":[],"uses":{"substr":[156]},"used_by":[]},"SimplePie_Decode_HTML_Entities::entity":{"doc":"\/**\n * Decode an entity\n *\n * @access private\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":165,"missingDoc":false,"filters":[],"uses":{"consume":[167,181,218,599],"unconsume":[192,220],"hexdec":[202],"intval":[206],"in_array":[218],"strlen":[223,225,610,610,611,611],"substr_replace":[224,610],"consume_range":[196],"substr":[601]},"used_by":[]},"SimplePie_Enclosure::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\n * @uses idna_convert If available, this will convert an IDN\n *\/","file":"SimplePie\/Enclosure.php","line":227,"missingDoc":false,"filters":[],"uses":{"encode":[259],"class_exists":[255],"get_handler":[261]},"used_by":[]},"SimplePie_Enclosure::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Enclosure.php","line":269,"missingDoc":false,"filters":[],"uses":{"md5":[272],"serialize":[272]},"used_by":[]},"SimplePie_Enclosure::get_bitrate":{"doc":"\/**\n * Get the bitrate\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":280,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_caption":{"doc":"\/**\n * Get a single caption\n *\n * @param int $key\n * @return SimplePie_Caption|null\n *\/","file":"SimplePie\/Enclosure.php","line":298,"missingDoc":false,"filters":[],"uses":{"get_captions":[300]},"used_by":[]},"SimplePie_Enclosure::get_captions":{"doc":"\/**\n * Get all captions\n *\n * @return array|null Array of {@see SimplePie_Caption} objects\n *\/","file":"SimplePie\/Enclosure.php","line":316,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_category":{"doc":"\/**\n * Get a single category\n *\n * @param int $key\n * @return SimplePie_Category|null\n *\/","file":"SimplePie\/Enclosure.php","line":334,"missingDoc":false,"filters":[],"uses":{"get_categories":[336]},"used_by":[]},"SimplePie_Enclosure::get_categories":{"doc":"\/**\n * Get all categories\n *\n * @return array|null Array of {@see SimplePie_Category} objects\n *\/","file":"SimplePie\/Enclosure.php","line":352,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_channels":{"doc":"\/**\n * Get the number of audio channels\n *\n * @return int|null\n *\/","file":"SimplePie\/Enclosure.php","line":369,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_copyright":{"doc":"\/**\n * Get the copyright information\n *\n * @return SimplePie_Copyright|null\n *\/","file":"SimplePie\/Enclosure.php","line":386,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_credit":{"doc":"\/**\n * Get a single credit\n *\n * @param int $key\n * @return SimplePie_Credit|null\n *\/","file":"SimplePie\/Enclosure.php","line":404,"missingDoc":false,"filters":[],"uses":{"get_credits":[406]},"used_by":[]},"SimplePie_Enclosure::get_credits":{"doc":"\/**\n * Get all credits\n *\n * @return array|null Array of {@see SimplePie_Credit} objects\n *\/","file":"SimplePie\/Enclosure.php","line":422,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_description":{"doc":"\/**\n * Get the description of the enclosure\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":439,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_duration":{"doc":"\/**\n * Get the duration of the enclosure\n *\n * @param string $convert Convert seconds into hh:mm:ss\n * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)\n *\/","file":"SimplePie\/Enclosure.php","line":457,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_expression":{"doc":"\/**\n * Get the expression\n *\n * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'\n *\/","file":"SimplePie\/Enclosure.php","line":482,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_extension":{"doc":"\/**\n * Get the file extension\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":499,"missingDoc":false,"filters":[],"uses":{"pathinfo":[506]},"used_by":[]},"SimplePie_Enclosure::get_framerate":{"doc":"\/**\n * Get the framerate (in frames-per-second)\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":517,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_handler":{"doc":"\/**\n * Get the preferred handler\n *\n * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'\n *\/","file":"SimplePie\/Enclosure.php","line":534,"missingDoc":false,"filters":[],"uses":{"get_real_type":[536]},"used_by":[]},"SimplePie_Enclosure::get_hash":{"doc":"\/**\n * Get a single hash\n *\n * @link http:\/\/www.rssboard.org\/media-rss#media-hash\n * @param int $key\n * @return string|null Hash as per `media:hash`, prefixed with \"$algo:\"\n *\/","file":"SimplePie\/Enclosure.php","line":546,"missingDoc":false,"filters":[],"uses":{"get_hashes":[548]},"used_by":[]},"SimplePie_Enclosure::get_hashes":{"doc":"\/**\n * Get all credits\n *\n * @return array|null Array of strings, see {@see get_hash()}\n *\/","file":"SimplePie\/Enclosure.php","line":564,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_height":{"doc":"\/**\n * Get the height\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":581,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_language":{"doc":"\/**\n * Get the language\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc3066\n * @return string|null Language code as per RFC 3066\n *\/","file":"SimplePie\/Enclosure.php","line":599,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_keyword":{"doc":"\/**\n * Get a single keyword\n *\n * @param int $key\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":617,"missingDoc":false,"filters":[],"uses":{"get_keywords":[619]},"used_by":[]},"SimplePie_Enclosure::get_keywords":{"doc":"\/**\n * Get all keywords\n *\n * @return array|null Array of strings\n *\/","file":"SimplePie\/Enclosure.php","line":635,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_length":{"doc":"\/**\n * Get length\n *\n * @return float Length in bytes\n *\/","file":"SimplePie\/Enclosure.php","line":652,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_link":{"doc":"\/**\n * Get the URL\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":669,"missingDoc":false,"filters":[],"uses":{"urldecode":[673]},"used_by":[]},"SimplePie_Enclosure::get_medium":{"doc":"\/**\n * Get the medium\n *\n * @link http:\/\/www.rssboard.org\/media-rss#media-content\n * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'\n *\/","file":"SimplePie\/Enclosure.php","line":687,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_player":{"doc":"\/**\n * Get the player URL\n *\n * Typically the same as {@see get_permalink()}\n * @return string|null Player URL\n *\/","file":"SimplePie\/Enclosure.php","line":705,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_rating":{"doc":"\/**\n * Get a single rating\n *\n * @param int $key\n * @return SimplePie_Rating|null\n *\/","file":"SimplePie\/Enclosure.php","line":723,"missingDoc":false,"filters":[],"uses":{"get_ratings":[725]},"used_by":[]},"SimplePie_Enclosure::get_ratings":{"doc":"\/**\n * Get all ratings\n *\n * @return array|null Array of {@see SimplePie_Rating} objects\n *\/","file":"SimplePie\/Enclosure.php","line":741,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_restriction":{"doc":"\/**\n * Get a single restriction\n *\n * @param int $key\n * @return SimplePie_Restriction|null\n *\/","file":"SimplePie\/Enclosure.php","line":759,"missingDoc":false,"filters":[],"uses":{"get_restrictions":[761]},"used_by":[]},"SimplePie_Enclosure::get_restrictions":{"doc":"\/**\n * Get all restrictions\n *\n * @return array|null Array of {@see SimplePie_Restriction} objects\n *\/","file":"SimplePie\/Enclosure.php","line":777,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_sampling_rate":{"doc":"\/**\n * Get the sampling rate (in kHz)\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":794,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_size":{"doc":"\/**\n * Get the file size (in MiB)\n *\n * @return float|null File size in mebibytes (1048 bytes)\n *\/","file":"SimplePie\/Enclosure.php","line":811,"missingDoc":false,"filters":[],"uses":{"get_length":[813],"round":[816]},"used_by":[]},"SimplePie_Enclosure::get_thumbnail":{"doc":"\/**\n * Get a single thumbnail\n *\n * @param int $key\n * @return string|null Thumbnail URL\n *\/","file":"SimplePie\/Enclosure.php","line":830,"missingDoc":false,"filters":[],"uses":{"get_thumbnails":[832]},"used_by":[]},"SimplePie_Enclosure::get_thumbnails":{"doc":"\/**\n * Get all thumbnails\n *\n * @return array|null Array of thumbnail URLs\n *\/","file":"SimplePie\/Enclosure.php","line":848,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_title":{"doc":"\/**\n * Get the title\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":865,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_type":{"doc":"\/**\n * Get mimetype of the enclosure\n *\n * @see get_real_type()\n * @return string|null MIME type\n *\/","file":"SimplePie\/Enclosure.php","line":883,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_width":{"doc":"\/**\n * Get the width\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":900,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::native_embed":{"doc":"\/**\n * Embed the enclosure using `<embed>`\n *\n * @deprecated Use the second parameter to {@see embed} instead\n *\n * @param array|string $options See first paramter to {@see embed}\n * @return string HTML string to output\n *\/","file":"SimplePie\/Enclosure.php","line":920,"missingDoc":false,"filters":[],"uses":{"embed":[922]},"used_by":[]},"SimplePie_Enclosure::embed":{"doc":"\/**\n * Embed the enclosure using Javascript\n *\n * `$options` is an array or comma-separated key:value string, with the\n * following properties:\n *\n * - `alt` (string): Alternate content for when an end-user does not have\n * the appropriate handler installed or when a file type is\n * unsupported. Can be any text or HTML. Defaults to blank.\n * - `altclass` (string): If a file type is unsupported, the end-user will\n * see the alt text (above) linked directly to the content. That link\n * will have this value as its class name. Defaults to blank.\n * - `audio` (string): This is an image that should be used as a\n * placeholder for audio files before they're loaded (QuickTime-only).\n * Can be any relative or absolute URL. Defaults to blank.\n * - `bgcolor` (string): The background color for the media, if not\n * already transparent. Defaults to `#ffffff`.\n * - `height` (integer): The height of the embedded media. Accepts any\n * numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,\n * and it is recommended that you use this default.\n * - `loop` (boolean): Do you want the media to loop when its done?\n * Defaults to `false`.\n * - `mediaplayer` (string): The location of the included\n * `mediaplayer.swf` file. This allows for the playback of Flash Video\n * (`.flv`) files, and is the default handler for non-Odeo MP3's.\n * Defaults to blank.\n * - `video` (string): This is an image that should be used as a\n * placeholder for video files before they're loaded (QuickTime-only).\n * Can be any relative or absolute URL. Defaults to blank.\n * - `width` (integer): The width of the embedded media. Accepts any\n * numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,\n * and it is recommended that you use this default.\n * - `widescreen` (boolean): Is the enclosure widescreen or standard?\n * This applies only to video enclosures, and will automatically resize\n * the content appropriately. Defaults to `false`, implying 4:3 mode.\n *\n * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`\n * will default to 480x360 video resolution. Widescreen (16:9) mode with\n * `width` and `height` set to `auto` will default to 480x270 video resolution.\n *\n * @todo If the dimensions for media:content are defined, use them when width\/height are set to 'auto'.\n * @param array|string $options Comma-separated key:value list, or array\n * @param bool $native Use `<embed>`\n * @return string HTML string to output\n *\/","file":"SimplePie\/Enclosure.php","line":970,"missingDoc":false,"filters":[],"uses":{"get_handler":[983],"get_real_type":[984],"extract":[989],"explode":[993,996,1047],"trim":[999,1000],"is_array":[987],"round":[1061,1065,1095,1099],"intval":[1061,1065,1095,1099],"get_link":[1129,1133,1144,1148,1161,1165,1170,1180,1184,1189],"rawurlencode":[1144,1148],"get_extension":[1144,1148]},"used_by":[]},"SimplePie_Enclosure::get_real_type":{"doc":"\/**\n * Get the real media type\n *\n * Often, feeds lie to us, necessitating a bit of deeper inspection. This\n * converts types to their canonical representations based on the file\n * extension\n *\n * @see get_type()\n * @param bool $find_handler Internal use only, use {@see get_handler()} instead\n * @return string MIME type\n *\/","file":"SimplePie\/Enclosure.php","line":1205,"missingDoc":false,"filters":[],"uses":{"strtolower":[1216,1226],"get_type":[1214],"get_extension":[1226],"in_array":[1224,1353,1357,1361,1365,1349],"array_merge":[1224]},"used_by":[]},"SimplePie_File::__construct":{"doc":"","file":"SimplePie\/File.php","line":68,"missingDoc":true,"filters":[],"uses":{"encode":[74],"class_exists":[70],"ini_get":[82,110,110],"is_array":[85],"curl_init":[92],"curl_setopt":[100,102,103,104,105,106,107,108,109,112,113,119],"version_compare":[98,110],"curl_exec":[116,120],"curl_errno":[117,117,124,122],"curl_error":[124],"curl_getinfo":[129],"curl_close":[130],"explode":[131],"array_pop":[132],"__construct":[143,225],"in_array":[139,221],"parse":[134,235,216],"parse_url":[151],"strtolower":[153,230],"fsockopen":[162],"stream_set_timeout":[170],"extension_loaded":[189],"base64_encode":[196],"fwrite":[203],"stream_get_meta_data":[205,211],"fread":[210],"trim":[230],"function_exists":[255,89],"gzdecode":[255],"gzuncompress":[251],"gzinflate":[247],"fclose":[278],"file_get_contents":[285],"preg_match":[78]},"used_by":[]},"SimplePie_gzdecode::__set":{"doc":"\/**\n * Don't allow anything to be set\n *\n * @param string $name\n * @param mixed $value\n *\/","file":"SimplePie\/gzdecode.php","line":181,"missingDoc":false,"filters":[],"uses":{"trigger_error":[183]},"used_by":[]},"SimplePie_gzdecode::__construct":{"doc":"\/**\n * Set the compressed string and related properties\n *\n * @param string $data\n *\/","file":"SimplePie\/gzdecode.php","line":191,"missingDoc":false,"filters":[],"uses":{"strlen":[194]},"used_by":[]},"SimplePie_gzdecode::parse":{"doc":"\/**\n * Decode the GZIP stream\n *\n * @return bool Successfulness\n *\/","file":"SimplePie\/gzdecode.php","line":202,"missingDoc":false,"filters":[],"uses":{"substr":[207,225,254,262,282,302,319,322,338,348,356],"ord":[213,235,238],"strrev":[229],"current":[227,231,254,319,348,356],"unpack":[227,231,254,319,348,356],"strcspn":[275,295],"crc32":[322],"gzinflate":[338],"sprintf":[358,358],"strlen":[358]},"used_by":[]},"SimplePie_HTTP_Parser::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @param string $data Input data\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":136,"missingDoc":false,"filters":[],"uses":{"strlen":[139]},"used_by":[]},"SimplePie_HTTP_Parser::parse":{"doc":"\/**\n * Parse the input data\n *\n * @return bool true on success, false on failure\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":147,"missingDoc":false,"filters":[],"uses":{"has_data":[149]},"used_by":[]},"SimplePie_HTTP_Parser::has_data":{"doc":"\/**\n * Check whether there is data beyond the pointer\n *\n * @return bool true if there is further data, false if not\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":175,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::is_linear_whitespace":{"doc":"\/**\n * See if the next character is LWS\n *\n * @return bool true if the next character is LWS, false if not\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":185,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::http_version":{"doc":"\/**\n * Parse the HTTP version\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":197,"missingDoc":false,"filters":[],"uses":{"strspn":[201,207],"substr":[202,199],"substr_count":[204],"strpos":[199],"strtoupper":[199]},"used_by":[]},"SimplePie_HTTP_Parser::status":{"doc":"\/**\n * Parse the status code\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":224,"missingDoc":false,"filters":[],"uses":{"substr":[228],"strspn":[226]},"used_by":[]},"SimplePie_HTTP_Parser::reason":{"doc":"\/**\n * Parse the reason phrase\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":241,"missingDoc":false,"filters":[],"uses":{"strcspn":[243],"trim":[244],"substr":[244]},"used_by":[]},"SimplePie_HTTP_Parser::new_line":{"doc":"\/**\n * Deal with a new line, shifting data around as needed\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":252,"missingDoc":false,"filters":[],"uses":{"trim":[254],"strtolower":[257],"substr":[270]},"used_by":[]},"SimplePie_HTTP_Parser::name":{"doc":"\/**\n * Parse a header name\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":289,"missingDoc":false,"filters":[],"uses":{"strcspn":[291],"substr":[301]},"used_by":[]},"SimplePie_HTTP_Parser::linear_whitespace":{"doc":"\/**\n * Parse LWS, replacing consecutive LWS characters with a single space\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":315,"missingDoc":false,"filters":[],"uses":{"has_data":[328],"is_linear_whitespace":[328],"substr":[319],"strspn":[327]},"used_by":[]},"SimplePie_HTTP_Parser::value":{"doc":"\/**\n * See what state to move to while within non-quoted header values\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":335,"missingDoc":false,"filters":[],"uses":{"linear_whitespace":[339],"strtolower":[348],"is_linear_whitespace":[337]},"used_by":[]},"SimplePie_HTTP_Parser::value_char":{"doc":"\/**\n * Parse a header value while outside quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":374,"missingDoc":false,"filters":[],"uses":{"strcspn":[376],"substr":[377]},"used_by":[]},"SimplePie_HTTP_Parser::quote":{"doc":"\/**\n * See what state to move to while within quoted header values\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":385,"missingDoc":false,"filters":[],"uses":{"linear_whitespace":[389],"is_linear_whitespace":[387]},"used_by":[]},"SimplePie_HTTP_Parser::quote_char":{"doc":"\/**\n * Parse a header value while within quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":420,"missingDoc":false,"filters":[],"uses":{"strcspn":[422],"substr":[423]},"used_by":[]},"SimplePie_HTTP_Parser::quote_escaped":{"doc":"\/**\n * Parse an escaped character within quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":431,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::body":{"doc":"\/**\n * Parse the body\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":441,"missingDoc":false,"filters":[],"uses":{"substr":[443]},"used_by":[]},"SimplePie_HTTP_Parser::chunked":{"doc":"\/**\n * Parsed a \"Transfer-Encoding: chunked\" body\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":458,"missingDoc":false,"filters":[],"uses":{"preg_match":[460,471],"trim":[460,479,492],"hexdec":[479],"strlen":[488],"substr":[489,490]},"used_by":[]},"SimplePie_IRI::__toString":{"doc":"\/**\n * Return the entire IRI when you try and read the object as a string\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":138,"missingDoc":false,"filters":[],"uses":{"get_iri":[140]},"used_by":[]},"SimplePie_IRI::__set":{"doc":"\/**\n * Overload __set() to provide access via properties\n *\n * @param string $name Property name\n * @param mixed $value Property value\n *\/","file":"SimplePie\/IRI.php","line":149,"missingDoc":false,"filters":[],"uses":{"call_user_func":[153,164],"substr":[164],"method_exists":[151]},"used_by":[]},"SimplePie_IRI::__get":{"doc":"\/**\n * Overload __get() to provide access via properties\n *\n * @param string $name Property name\n * @return mixed\n *\/","file":"SimplePie\/IRI.php","line":174,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[178],"array_key_exists":[189,194,200],"substr":[200],"trigger_error":[207],"get_class":[207]},"used_by":[]},"SimplePie_IRI::__isset":{"doc":"\/**\n * Overload __isset() to provide access via properties\n *\n * @param string $name Property name\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":227,"missingDoc":false,"filters":[],"uses":{"method_exists":[229]},"used_by":[]},"SimplePie_IRI::__unset":{"doc":"\/**\n * Overload __unset() to provide access via properties\n *\n * @param string $name Property name\n *\/","file":"SimplePie\/IRI.php","line":244,"missingDoc":false,"filters":[],"uses":{"call_user_func":[248],"method_exists":[246]},"used_by":[]},"SimplePie_IRI::__construct":{"doc":"\/**\n * Create a new IRI object, from a specified string\n *\n * @param string $iri\n *\/","file":"SimplePie\/IRI.php","line":257,"missingDoc":false,"filters":[],"uses":{"set_iri":[259]},"used_by":[]},"SimplePie_IRI::absolutize":{"doc":"\/**\n * Create a new IRI object by resolving a relative IRI\n *\n * Returns false if $base is not absolute, otherwise an IRI.\n *\n * @param IRI|string $base (Absolute) Base IRI\n * @param IRI|string $relative Relative IRI\n * @return IRI|false\n *\/","file":"SimplePie\/IRI.php","line":271,"missingDoc":false,"filters":[],"uses":{"strrpos":[317],"substr":[319],"remove_dot_segments":[325],"get_iri":[293],"scheme_normalization":[348],"is_valid":[291,277]},"used_by":[]},"SimplePie_IRI::parse_iri":{"doc":"\/**\n * Parse an IRI into scheme\/authority\/path\/query\/fragment segments\n *\n * @param string $iri\n * @return array\n *\/","file":"SimplePie\/IRI.php","line":364,"missingDoc":false,"filters":[],"uses":{"trim":[366],"preg_match":[367]},"used_by":[]},"SimplePie_IRI::remove_dot_segments":{"doc":"\/**\n * Remove dot segments from a path\n *\n * @param string $input\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":404,"missingDoc":false,"filters":[],"uses":{"strpos":[407,407,414,419,428,444,410],"substr":[412,416,421,430,446],"substr_replace":[431,436,447],"strrpos":[431,436]},"used_by":[]},"SimplePie_IRI::replace_invalid_with_pct_encoding":{"doc":"\/**\n * Replace invalid character with percent encoding\n *\n * @param string $string Input string\n * @param string $extra_chars Valid characters not in iunreserved or\n * iprivate (this is ASCII-only)\n * @param bool $iprivate Allow iprivate\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":467,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[470],"preg_replace":[473],"strlen":[481],"strspn":[482],"ord":[484,528,583],"substr_replace":[583],"sprintf":[583]},"used_by":[]},"SimplePie_IRI::remove_iunreserved_percent_encoded":{"doc":"\/**\n * Callback function for preg_replace_callback.\n *\n * Removes sequences of percent encoded bytes that represent UTF-8\n * encoded characters in iunreserved\n *\n * @param array $match PCRE match\n * @return string Replacement\n *\/","file":"SimplePie\/IRI.php","line":603,"missingDoc":false,"filters":[],"uses":{"explode":[607],"count":[616],"hexdec":[618,716],"strtoupper":[709,728],"chr":[716]},"used_by":[]},"SimplePie_IRI::scheme_normalization":{"doc":"","file":"SimplePie\/IRI.php","line":735,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_IRI::is_valid":{"doc":"\/**\n * Check if the object represents a valid IRI. This needs to be done on each\n * call as some things change depending on another part of the IRI.\n *\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":769,"missingDoc":false,"filters":[],"uses":{"substr":[776],"strpos":[781,782,782,782]},"used_by":[]},"SimplePie_IRI::set_iri":{"doc":"\/**\n * Set the entire IRI. Returns true on success, false on failure (if there\n * are any invalid characters).\n *\n * @param string $iri\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":800,"missingDoc":false,"filters":[],"uses":{"parse_iri":[826],"set_scheme":[832],"set_authority":[833],"set_path":[834],"set_query":[835],"set_fragment":[836]},"used_by":[]},"SimplePie_IRI::set_scheme":{"doc":"\/**\n * Set the scheme. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $scheme\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":857,"missingDoc":false,"filters":[],"uses":{"preg_match":[863],"strtolower":[870]},"used_by":[]},"SimplePie_IRI::set_authority":{"doc":"\/**\n * Set the authority. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $authority\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":882,"missingDoc":false,"filters":[],"uses":{"substr":[909,910,918,922],"strrpos":[907],"strpos":[916,916],"set_userinfo":[929],"set_host":[930],"set_port":[931]},"used_by":[]},"SimplePie_IRI::set_userinfo":{"doc":"\/**\n * Set the iuserinfo.\n *\n * @param string $iuserinfo\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":948,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[956],"scheme_normalization":[957]},"used_by":[]},"SimplePie_IRI::set_host":{"doc":"\/**\n * Set the ihost. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $ihost\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":970,"missingDoc":false,"filters":[],"uses":{"substr":[977,977,981,979],"replace_invalid_with_pct_encoding":[991],"strlen":[997],"strcspn":[998],"strtolower":[1006],"scheme_normalization":[1014]},"used_by":[]},"SimplePie_IRI::set_port":{"doc":"\/**\n * Set the port. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $port\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1026,"missingDoc":false,"filters":[],"uses":{"strspn":[1033],"strlen":[1033],"scheme_normalization":[1036]},"used_by":[]},"SimplePie_IRI::set_path":{"doc":"\/**\n * Set the ipath.\n *\n * @param string $ipath\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1052,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1068],"remove_dot_segments":[1069],"scheme_normalization":[1075]},"used_by":[]},"SimplePie_IRI::set_query":{"doc":"\/**\n * Set the iquery.\n *\n * @param string $iquery\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1085,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1093],"scheme_normalization":[1094]},"used_by":[]},"SimplePie_IRI::set_fragment":{"doc":"\/**\n * Set the ifragment.\n *\n * @param string $ifragment\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1105,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1113],"scheme_normalization":[1114]},"used_by":[]},"SimplePie_IRI::to_uri":{"doc":"\/**\n * Convert an IRI to a URI (or parts thereof)\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1124,"missingDoc":false,"filters":[],"uses":{"implode":[1129],"range":[1129],"strlen":[1133],"strcspn":[1134],"substr_replace":[1136],"sprintf":[1136],"ord":[1136]},"used_by":[]},"SimplePie_IRI::get_iri":{"doc":"\/**\n * Get the complete IRI\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1149,"missingDoc":false,"filters":[],"uses":{"is_valid":[1151],"get_iauthority":[1161]},"used_by":[]},"SimplePie_IRI::get_uri":{"doc":"\/**\n * Get the complete URI\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1190,"missingDoc":false,"filters":[],"uses":{"to_uri":[1192],"get_iri":[1192]},"used_by":[]},"SimplePie_IRI::get_iauthority":{"doc":"\/**\n * Get the complete iauthority\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1200,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_IRI::get_authority":{"doc":"\/**\n * Get the complete authority\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1230,"missingDoc":false,"filters":[],"uses":{"get_iauthority":[1232],"to_uri":[1234],"is_string":[1233]},"used_by":[]},"SimplePie_Item::__construct":{"doc":"\/**\n * Create a new item object\n *\n * This is usually used by {@see SimplePie::get_items} and\n * {@see SimplePie::get_item}. Avoid creating this manually.\n *\n * @param SimplePie $feed Parent feed\n * @param array $data Raw data\n *\/","file":"SimplePie\/Item.php","line":91,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::set_registry":{"doc":"\/**\n * Set the registry handler\n *\n * This is usually used by {@see SimplePie_Registry::create}\n *\n * @since 1.3\n * @param SimplePie_Registry $registry\n *\/","file":"SimplePie\/Item.php","line":105,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::__toString":{"doc":"\/**\n * Get a string representation of the item\n *\n * @return string\n *\/","file":"SimplePie\/Item.php","line":115,"missingDoc":false,"filters":[],"uses":{"md5":[117],"serialize":[117]},"used_by":[]},"SimplePie_Item::__destruct":{"doc":"\/**\n * Remove items that link back to this before destroying this object\n *\/","file":"SimplePie\/Item.php","line":123,"missingDoc":false,"filters":[],"uses":{"version_compare":[125],"gc_enabled":[125],"ini_get":[125]},"used_by":[]},"SimplePie_Item::get_item_tags":{"doc":"\/**\n * Get data for an item-level element\n *\n * This method allows you to get access to ANY element\/attribute that is a\n * sub-element of the item\/entry tag.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"SimplePie\/Item.php","line":145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::get_base":{"doc":"\/**\n * Get the base URL value from the parent feed\n *\n * Uses `<xml:base>`\n *\n * @param array $element\n * @return string\n *\/","file":"SimplePie\/Item.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_base":[167]},"used_by":[]},"SimplePie_Item::sanitize":{"doc":"\/**\n * Sanitize feed data\n *\n * @access private\n * @see SimplePie::sanitize()\n * @param string $data Data to sanitize\n * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants\n * @param string $base Base URL to resolve URLs against\n * @return string Sanitized data\n *\/","file":"SimplePie\/Item.php","line":180,"missingDoc":false,"filters":[],"uses":{"sanitize":[182]},"used_by":[]},"SimplePie_Item::get_feed":{"doc":"\/**\n * Get the parent feed\n *\n * Note: this may not work as you think for multifeeds!\n *\n * @link http:\/\/simplepie.org\/faq\/typical_multifeed_gotchas#missing_data_from_feed\n * @since 1.0\n * @return SimplePie\n *\/","file":"SimplePie\/Item.php","line":194,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::get_id":{"doc":"\/**\n * Get the unique identifier for the item\n *\n * This is usually used when writing code to check for new items in a feed.\n *\n * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute\n * for RDF. If none of these are supplied (or `$hash` is true), creates an\n * MD5 hash based on the permalink and title. If either of those are not\n * supplied, creates a hash based on the full feed data.\n *\n * @since Beta 2\n * @param boolean $hash Should we force using a hash instead of the supplied ID?\n * @return string\n *\/","file":"SimplePie\/Item.php","line":213,"missingDoc":false,"filters":[],"uses":{"sanitize":[219,223,227,231,235,239],"get_item_tags":[221,225,229,233,217],"get_permalink":[241,252,250],"get_title":[245,252,250],"md5":[252,256],"serialize":[256]},"used_by":[]},"SimplePie_Item::get_title":{"doc":"\/**\n * Get the title of the item\n *\n * Uses `<atom:title>`, `<title>` or `<dc:title>`\n *\n * @since Beta 2 (previously called `get_item_title` since 0.8)\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":268,"missingDoc":false,"filters":[],"uses":{"sanitize":[274,278,282,286,290,294,298],"call":[274,278],"get_base":[274,278,282,286,290],"get_item_tags":[276,280,284,288,292,296,272]},"used_by":[]},"SimplePie_Item::get_description":{"doc":"\/**\n * Get the content for the item\n *\n * Prefers summaries over full content , but will return full content if a\n * summary does not exist.\n *\n * To prefer full content instead, use {@see get_content}\n *\n * Uses `<atom:summary>`, `<description>`, `<dc:description>` or\n * `<itunes:subtitle>`\n *\n * @since 0.8\n * @param boolean $description_only Should we avoid falling back to the content?\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":323,"missingDoc":false,"filters":[],"uses":{"sanitize":[327,331,335,339,343,347,351,355,359],"call":[327,331],"get_base":[327,331,335,339,351],"get_item_tags":[329,333,337,341,345,349,353,357,325],"get_content":[364]},"used_by":[]},"SimplePie_Item::get_content":{"doc":"\/**\n * Get the content for the item\n *\n * Prefers full content over summaries, but will return a summary if full\n * content does not exist.\n *\n * To prefer summaries instead, use {@see get_description}\n *\n * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)\n *\n * @since 1.0\n * @param boolean $content_only Should we avoid falling back to the description?\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":386,"missingDoc":false,"filters":[],"uses":{"sanitize":[390,394,398],"call":[390,394],"get_base":[390,394,398],"get_item_tags":[392,396,388],"get_description":[402]},"used_by":[]},"SimplePie_Item::get_category":{"doc":"\/**\n * Get a category for the item\n *\n * @since Beta 3 (previously called `get_categories()` since Beta 2)\n * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Category|null\n *\/","file":"SimplePie\/Item.php","line":417,"missingDoc":false,"filters":[],"uses":{"get_categories":[419]},"used_by":[]},"SimplePie_Item::get_categories":{"doc":"\/**\n * Get all categories for the item\n *\n * Uses `<atom:category>`, `<category>` or `<dc:subject>`\n *\n * @since Beta 3\n * @return array|null List of {@see SimplePie_Category} objects\n *\/","file":"SimplePie\/Item.php","line":438,"missingDoc":false,"filters":[],"uses":{"sanitize":[449,453,457,465,468,478,482],"create":[459,474,478,482],"get_item_tags":[442,461,476,480],"array_unique":[487]},"used_by":[]},"SimplePie_Item::get_author":{"doc":"\/**\n * Get an author for the item\n *\n * @since Beta 2\n * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"SimplePie\/Item.php","line":502,"missingDoc":false,"filters":[],"uses":{"get_authors":[504]},"used_by":[]},"SimplePie_Item::get_contributor":{"doc":"\/**\n * Get a contributor for the item\n *\n * @since 1.1\n * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"SimplePie\/Item.php","line":522,"missingDoc":false,"filters":[],"uses":{"get_contributors":[524]},"used_by":[]},"SimplePie_Item::get_contributors":{"doc":"\/**\n * Get all contributors for the item\n *\n * Uses `<atom:contributor>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"SimplePie\/Item.php","line":543,"missingDoc":false,"filters":[],"uses":{"sanitize":[553,557,561,575,579,583],"get_base":[557,579],"create":[565,587],"get_item_tags":[546,568],"array_unique":[593]},"used_by":[]},"SimplePie_Item::get_authors":{"doc":"\/**\n * Get all authors for the item\n *\n * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`\n *\n * @since Beta 2\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"SimplePie\/Item.php","line":609,"missingDoc":false,"filters":[],"uses":{"sanitize":[619,623,627,641,645,649,658,662,666,670],"get_base":[623,645],"create":[631,653,658,662,666,670],"get_item_tags":[612,634,656,660,664,668],"array_unique":[675],"get_source":[677],"get_authors":[677,681]},"used_by":[]},"SimplePie_Item::get_copyright":{"doc":"\/**\n * Get the copyright info for the item\n *\n * Uses `<atom:rights>` or `<dc:rights>`\n *\n * @since 1.1\n * @return string\n *\/","file":"SimplePie\/Item.php","line":699,"missingDoc":false,"filters":[],"uses":{"sanitize":[703,707,711],"call":[703],"get_base":[703],"get_item_tags":[705,709,701]},"used_by":[]},"SimplePie_Item::get_date":{"doc":"\/**\n * Get the posting date\/time for the item\n *\n * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,\n * `<atom:modified>`, `<pubDate>` or `<dc:date>`\n *\n * Note: obeys PHP's timezone setting. To get a UTC date\/time, use\n * {@see get_gmdate}\n *\n * @since Beta 2 (previously called `get_item_date` since 0.8)\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":733,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[741,745,749,753,757,761,765,737],"call":[772],"parse":[773],"sanitize":[786],"date":[792]},"used_by":[]},"SimplePie_Item::get_updated_date":{"doc":"\/**\n * Get the update date\/time for the item\n *\n * Uses `<atom:updated>`\n *\n * Note: obeys PHP's timezone setting. To get a UTC date\/time, use\n * {@see get_gmdate}\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":812,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[816],"call":[823],"parse":[824],"sanitize":[837],"date":[843]},"used_by":[]},"SimplePie_Item::get_local_date":{"doc":"\/**\n * Get the localized posting date\/time for the item\n *\n * Returns the date formatted in the localized language. To display in\n * languages other than the server's default, you need to change the locale\n * with {@link http:\/\/php.net\/setlocale setlocale()}. The available\n * localizations depend on which ones are installed on your web server.\n *\n * @since 1.0\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/strftime} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":865,"missingDoc":false,"filters":[],"uses":{"sanitize":[869],"get_date":[869,871],"strftime":[873]},"used_by":[]},"SimplePie_Item::get_gmdate":{"doc":"\/**\n * Get the posting date\/time for the item (UTC time)\n *\n * @see get_date\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date}\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":888,"missingDoc":false,"filters":[],"uses":{"get_date":[890],"gmdate":[896]},"used_by":[]},"SimplePie_Item::get_updated_gmdate":{"doc":"\/**\n * Get the update date\/time for the item (UTC time)\n *\n * @see get_updated_date\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date}\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":906,"missingDoc":false,"filters":[],"uses":{"get_updated_date":[908],"gmdate":[914]},"used_by":[]},"SimplePie_Item::get_permalink":{"doc":"\/**\n * Get the permalink for the item\n *\n * Returns the first link available with a relationship of \"alternate\".\n * Identical to {@see get_link()} with key 0\n *\n * @see get_link\n * @since 0.8\n * @return string|null Permalink URL\n *\/","file":"SimplePie\/Item.php","line":927,"missingDoc":false,"filters":[],"uses":{"get_link":[929,937],"get_enclosure":[930]},"used_by":[]},"SimplePie_Item::get_link":{"doc":"\/**\n * Get a single link for the item\n *\n * @since Beta 3\n * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1\n * @param string $rel The relationship of the link to return\n * @return string|null Link URL\n *\/","file":"SimplePie\/Item.php","line":953,"missingDoc":false,"filters":[],"uses":{"get_links":[955]},"used_by":[]},"SimplePie_Item::get_links":{"doc":"\/**\n * Get all links for the item\n *\n * Uses `<atom:link>`, `<link>` or `<guid>`\n *\n * @since Beta 2\n * @param string $rel The relationship of links to return\n * @return array|null Links found for the item (strings)\n *\/","file":"SimplePie\/Item.php","line":975,"missingDoc":false,"filters":[],"uses":{"sanitize":[985,994,999,1003,1007,1013],"get_base":[985,994,999,1003,1007,1013],"get_item_tags":[980,989,997,1001,1005,1009],"strtolower":[1011],"trim":[1011],"array_keys":[1017],"array_merge":[1024],"substr":[1032,1034],"call":[1020],"array_unique":[1036]},"used_by":[]},"SimplePie_Item::get_enclosure":{"doc":"\/**\n * Get an enclosure from the item\n *\n * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.\n *\n * @since Beta 2\n * @todo Add ability to prefer one type of content over another (in a media group).\n * @param int $key The enclosure that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Enclosure|null\n *\/","file":"SimplePie\/Item.php","line":1059,"missingDoc":false,"filters":[],"uses":{"get_enclosures":[1061]},"used_by":[]},"SimplePie_Item::get_enclosures":{"doc":"\/**\n * Get all available enclosures (podcasts, etc.)\n *\n * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.\n *\n * At this point, we're pretty much assuming that all enclosures for an item\n * are the same content. Anything else is too complicated to\n * properly support.\n *\n * @since Beta 2\n * @todo Add support for end-user defined sorting of enclosures by type\/handler (so we can prefer the faster-loading FLV over MP4).\n * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).\n * @return array|null List of SimplePie_Enclosure items\n *\/","file":"SimplePie\/Item.php","line":1086,"missingDoc":false,"filters":[],"uses":{"get_feed":[1108],"sanitize":[1122,1126,1130,1134,1138,1154,1158,1162,1166,1170,1188,1192,1200,1211,1215,1223,1234,1244,1262,1266,1276,1280,1295,1299,1307,1321,1325,1333,1348,1355,1367,1396,1400,1417,1421,1440,1452,1464,1476,1494,1501,1514,1522,1535,1548,1556,1569,1589,1593,1597,1625,1629,1633,1668,1678,1688,1695,1775,1779,1783,1791,1795,1799,1803,1811,1815,1819,1823,1825,1841,1845,1849,1853,1857,1877,1881,1885,1889,1893,1917,1921,1929,1943,1947,1955,1980,1984,1994,1998,2017,2021,2029,2047,2051,2059,2076,2080,2096,2100,2121,2125,2148,2164,2184,2188,2204,2212,2229,2237,2261,2265,2269,2287,2291,2295,2314,2325,2340,2344,2397,2401,2405,2413,2417,2421,2425,2433,2437,2441,2445,2449,2465,2469,2473,2477,2481,2505,2509,2517,2546,2550,2569,2573,2581,2598,2614,2618,2641,2661,2677,2685,2709,2713,2717,2736,2751,2783,2786,2818,2821,2853,2856],"create":[1140,1172,1202,1225,1236,1246,1268,1282,1309,1335,1524,1537,1558,1571,1599,1613,1635,1649,1859,1895,1931,1957,1986,2000,2031,2061,2214,2239,2271,2297,2351,2483,2519,2552,2583,2687,2719,2758,2794,2829,2864,2871],"get_channel_tags":[1143,1204,1227,1270,1312,1351,1409,1460,1472,1497,1540,1561,1616,1638,1672,1691],"get_item_tags":[1111,1181,1256,1286,1344,1360,1388,1448,1436,1490,1527,1506,1602,1580,1662,1684,1733,2763,2798,2833],"array_values":[1177,1252,1340,1432,1486,1576,1654,1863,1899,1962,1966,1970,2035,2065,2110,2135,2157,2173,2218,2243,2275,2301,2318,2329,2487,2524,2528,2532,2587,2628,2650,2691,2723,2740,2874],"array_unique":[1177,1252,1340,1432,1486,1576,1654,1863,1899,1962,1966,1970,2035,2065,2110,2135,2157,2173,2218,2243,2275,2301,2318,2329,2487,2524,2528,2532,2587,2628,2650,2691,2723,2740,2874],"is_array":[1175,1250,1338,1430,1484,1574,1652,1861,1897,1964,1968,1960,1960,2033,2063,2108,2133,2155,2171,2216,2241,2273,2299,2316,2327,2485,2526,2530,2522,2522,2585,2626,2648,2689,2721,2738],"explode":[1367,1440,1452,1464,1476,2148,2164,2641],"array_pop":[1370,1374,1379],"sizeof":[1368,1372,1377,2868],"trim":[1443,1455,1467,1479,2151,2167,2644],"strtolower":[1609,1645],"ceil":[1807,2429,2790,2825,2860],"array_merge":[1962,2524],"get_base":[2783,2818,2853]},"used_by":[]},"SimplePie_Item::get_latitude":{"doc":"\/**\n * Get the latitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:lat>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":2898,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[2904,2900],"preg_match":[2904],"trim":[2904]},"used_by":[]},"SimplePie_Item::get_longitude":{"doc":"\/**\n * Get the longitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":2926,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[2932,2936,2928],"preg_match":[2936],"trim":[2936]},"used_by":[]},"SimplePie_Item::get_source":{"doc":"\/**\n * Get the `<atom:source>` for the item\n *\n * @since 1.1\n * @return SimplePie_Source|null\n *\/","file":"SimplePie\/Item.php","line":2952,"missingDoc":false,"filters":[],"uses":{"create":[2956],"get_item_tags":[2954]},"used_by":[]},"SimplePie_Locator::__construct":{"doc":"","file":"SimplePie\/Locator.php","line":68,"missingDoc":true,"filters":[],"uses":{"set_error_handler":[79],"loadHTML":[80],"restore_error_handler":[81],"class_exists":[75]},"used_by":[]},"SimplePie_Locator::set_registry":{"doc":"","file":"SimplePie\/Locator.php","line":89,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Locator::find":{"doc":"","file":"SimplePie\/Locator.php","line":94,"missingDoc":true,"filters":[],"uses":{"is_feed":[96],"create":[103],"get_type":[104],"get_base":[112],"autodiscovery":[115],"extension":[122,132],"body":[127,137],"get_links":[120]},"used_by":[]},"SimplePie_Locator::is_feed":{"doc":"","file":"SimplePie\/Locator.php","line":145,"missingDoc":true,"filters":[],"uses":{"create":[149],"get_type":[150],"in_array":[151]},"used_by":[]},"SimplePie_Locator::get_base":{"doc":"","file":"SimplePie\/Locator.php","line":170,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[178],"call":[183],"trim":[183],"getAttribute":[183],"method_exists":[189],"getLineNo":[189],"hasAttribute":[181]},"used_by":[]},"SimplePie_Locator::autodiscovery":{"doc":"","file":"SimplePie\/Locator.php","line":195,"missingDoc":true,"filters":[],"uses":{"array_merge":[199,200,201],"search_elements_by_tag":[199,200,201],"array_values":[205]},"used_by":[]},"SimplePie_Locator::search_elements_by_tag":{"doc":"","file":"SimplePie\/Locator.php","line":213,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[220],"array_unique":[229],"call":[229,234,238,245],"strtolower":[229,245],"getAttribute":[229,234,238,245],"method_exists":[230],"getLineNo":[230],"trim":[234,238],"create":[251],"is_feed":[252],"in_array":[245,245,245,245,245],"hasAttribute":[245,227,227]},"used_by":[]},"SimplePie_Locator::get_links":{"doc":"","file":"SimplePie\/Locator.php","line":264,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[271],"trim":[276,282,286],"getAttribute":[276,282,286],"call":[277,282,286,293],"method_exists":[280],"getLineNo":[280],"preg_match":[278],"hasAttribute":[274],"array_unique":[306,307]},"used_by":[]},"SimplePie_Locator::extension":{"doc":"","file":"SimplePie\/Locator.php","line":315,"missingDoc":true,"filters":[],"uses":{"create":[330],"is_feed":[331],"in_array":[323],"strtolower":[323],"strrchr":[323]},"used_by":[]},"SimplePie_Locator::body":{"doc":"","file":"SimplePie\/Locator.php","line":344,"missingDoc":true,"filters":[],"uses":{"create":[358],"is_feed":[359],"preg_match":[352]},"used_by":[]},"SimplePie_Misc::time_hms":{"doc":"","file":"SimplePie\/Misc.php","line":52,"missingDoc":true,"filters":[],"uses":{"floor":[56,63]},"used_by":[]},"SimplePie_Misc::absolutize_url":{"doc":"","file":"SimplePie\/Misc.php","line":80,"missingDoc":true,"filters":[],"uses":{"get_uri":[87]},"used_by":[]},"SimplePie_Misc::get_element":{"doc":"\/**\n * Get a HTML\/XML element from a HTML string\n *\n * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!)\n * @param string $realname Element name (including namespace prefix if applicable)\n * @param string $string HTML document\n * @return array\n *\/","file":"SimplePie\/Misc.php","line":98,"missingDoc":false,"filters":[],"uses":{"preg_quote":[101],"count":[104,121,123],"strlen":[109],"strtolower":[127],"end":[127],"preg_match_all":[119,102]},"used_by":[]},"SimplePie_Misc::element_implode":{"doc":"","file":"SimplePie\/Misc.php","line":135,"missingDoc":true,"filters":[],"uses":{"strtolower":[140],"htmlspecialchars":[141]},"used_by":[]},"SimplePie_Misc::error":{"doc":"","file":"SimplePie\/Misc.php","line":154,"missingDoc":true,"filters":[],"uses":{"function_exists":[175],"ini_get":[180,156],"is_writable":[181],"error_log":[188]},"used_by":[]},"SimplePie_Misc::fix_protocol":{"doc":"","file":"SimplePie\/Misc.php","line":195,"missingDoc":true,"filters":[],"uses":{"file_exists":[204],"strtolower":[213,217],"substr_replace":[215,219]},"used_by":[]},"SimplePie_Misc::parse_url":{"doc":"","file":"SimplePie\/Misc.php","line":227,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Misc::compress_parse_url":{"doc":"","file":"SimplePie\/Misc.php","line":239,"missingDoc":true,"filters":[],"uses":{"get_uri":[247]},"used_by":[]},"SimplePie_Misc::normalize_url":{"doc":"","file":"SimplePie\/Misc.php","line":250,"missingDoc":true,"filters":[],"uses":{"get_uri":[253]},"used_by":[]},"SimplePie_Misc::percent_encoding_normalization":{"doc":"","file":"SimplePie\/Misc.php","line":256,"missingDoc":true,"filters":[],"uses":{"hexdec":[258],"chr":[261],"strtoupper":[265]},"used_by":[]},"SimplePie_Misc::windows_1252_to_utf8":{"doc":"\/**\n * Converts a Windows-1252 encoded string to a UTF-8 encoded string\n *\n * @static\n * @param string $string Windows-1252 encoded string\n * @return string UTF-8 encoded string\n *\/","file":"SimplePie\/Misc.php","line":276,"missingDoc":false,"filters":[],"uses":{"strtr":[280]},"used_by":[]},"SimplePie_Misc::change_encoding":{"doc":"\/**\n * Change a string from one encoding to another\n *\n * @param string $data Raw data in $input encoding\n * @param string $input Encoding of $data\n * @param string $output Encoding you want\n * @return string|boolean False if we can't convert it\n *\/","file":"SimplePie\/Misc.php","line":291,"missingDoc":false,"filters":[],"uses":{"chr":[304],"substr":[307],"strcspn":[307],"function_exists":[316,321]},"used_by":[]},"SimplePie_Misc::change_encoding_mbstring":{"doc":"","file":"SimplePie\/Misc.php","line":332,"missingDoc":true,"filters":[],"uses":{"mb_convert_encoding":[352,362],"in_array":[356],"mb_list_encodings":[356]},"used_by":[]},"SimplePie_Misc::change_encoding_iconv":{"doc":"","file":"SimplePie\/Misc.php","line":370,"missingDoc":true,"filters":[],"uses":{"iconv":[372]},"used_by":[]},"SimplePie_Misc::encoding":{"doc":"\/**\n * Normalize an encoding name\n *\n * This is automatically generated by create.php\n *\n * To generate it, run `php create.php` on the command line, and copy the\n * output to replace this function.\n *\n * @param string $charset Character set to standardise\n * @return string Standardised name\n *\/","file":"SimplePie\/Misc.php","line":386,"missingDoc":false,"filters":[],"uses":{"strtolower":[389],"preg_replace":[389]},"used_by":[]},"SimplePie_Misc::get_curl_version":{"doc":"","file":"SimplePie\/Misc.php","line":1699,"missingDoc":true,"filters":[],"uses":{"substr":[1705,1707,1709,1711],"strcspn":[1707,1711],"is_array":[1701],"curl_version":[1701]},"used_by":[]},"SimplePie_Misc::strip_comments":{"doc":"\/**\n * Strip HTML comments\n *\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Misc.php","line":1726,"missingDoc":false,"filters":[],"uses":{"strpos":[1729,1732],"substr":[1731],"substr_replace":[1734]},"used_by":[]},"SimplePie_Misc::parse_date":{"doc":"","file":"SimplePie\/Misc.php","line":1744,"missingDoc":true,"filters":[],"uses":{"parse":[1747]},"used_by":[]},"SimplePie_Misc::entities_decode":{"doc":"\/**\n * Decode HTML entities\n *\n * @deprecated Use DOMDocument instead\n * @param string $data Input data\n * @return string Output data\n *\/","file":"SimplePie\/Misc.php","line":1757,"missingDoc":false,"filters":[],"uses":{"parse":[1760]},"used_by":[]},"SimplePie_Misc::uncomment_rfc822":{"doc":"\/**\n * Remove RFC822 comments\n *\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Misc.php","line":1769,"missingDoc":false,"filters":[],"uses":{"strlen":[1773],"strpos":[1778],"substr":[1780,1818],"strcspn":[1787]},"used_by":[]},"SimplePie_Misc::parse_mime":{"doc":"","file":"SimplePie\/Misc.php","line":1823,"missingDoc":true,"filters":[],"uses":{"trim":[1827,1831],"substr":[1831],"strpos":[1825]},"used_by":[]},"SimplePie_Misc::atom_03_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1835,"missingDoc":true,"filters":[],"uses":{"strtolower":[1837,1847],"trim":[1837,1847]},"used_by":[]},"SimplePie_Misc::atom_10_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1871,"missingDoc":true,"filters":[],"uses":{"strtolower":[1875],"trim":[1875]},"used_by":[]},"SimplePie_Misc::atom_10_content_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1893,"missingDoc":true,"filters":[],"uses":{"strtolower":[1897],"trim":[1897],"in_array":[1909],"substr":[1909,1909]},"used_by":[]},"SimplePie_Misc::is_isegment_nz_nc":{"doc":"","file":"SimplePie\/Misc.php","line":1924,"missingDoc":true,"filters":[],"uses":{"preg_match":[1926]},"used_by":[]},"SimplePie_Misc::space_seperated_tokens":{"doc":"","file":"SimplePie\/Misc.php","line":1929,"missingDoc":true,"filters":[],"uses":{"strlen":[1932],"strspn":[1934,1942],"strcspn":[1939],"substr":[1940]},"used_by":[]},"SimplePie_Misc::codepoint_to_utf8":{"doc":"\/**\n * Converts a unicode codepoint to a UTF-8 character\n *\n * @static\n * @param int $codepoint Unicode codepoint\n * @return string UTF-8 character\n *\/","file":"SimplePie\/Misc.php","line":1955,"missingDoc":false,"filters":[],"uses":{"chr":[1964,1968,1968,1972,1972,1972,1976,1976,1976,1976]},"used_by":[]},"SimplePie_Misc::parse_str":{"doc":"\/**\n * Similar to parse_str()\n *\n * Returns an associative array of name\/value pairs, where the value is an\n * array of values that have used the same name\n *\n * @static\n * @param string $str The input string.\n * @return array\n *\/","file":"SimplePie\/Misc.php","line":1995,"missingDoc":false,"filters":[],"uses":{"explode":[1998,2004],"urldecode":[2005,2005,2009],"strpos":[2002]},"used_by":[]},"SimplePie_Misc::xml_encoding":{"doc":"\/**\n * Detect XML encoding, as per XML 1.0 Appendix F.1\n *\n * @todo Add support for EBCDIC\n * @param string $data XML data\n * @param SimplePie_Registry $registry Class registry\n * @return array Possible encodings\n *\/","file":"SimplePie\/Misc.php","line":2024,"missingDoc":false,"filters":[],"uses":{"substr":[2032,2037,2042,2047,2052,2056,2065,2069,2078,2082,2091,2095,2104,2108,2027],"create":[2056,2069,2082,2095,2108],"parse":[2057,2070,2083,2096,2109],"strpos":[2054,2067,2080,2093,2106]},"used_by":[]},"SimplePie_Misc::output_javascript":{"doc":"","file":"SimplePie\/Misc.php","line":2124,"missingDoc":true,"filters":[],"uses":{"ob_start":[2128],"function_exists":[2126],"header":[2130,2131,2132],"gmdate":[2132],"time":[2132]},"used_by":[]},"SimplePie_Misc::get_build":{"doc":"\/**\n * Get the SimplePie build timestamp\n *\n * Uses the git index if it exists, otherwise uses the modification time\n * of the newest file.\n *\/","file":"SimplePie\/Misc.php","line":2163,"missingDoc":false,"filters":[],"uses":{"dirname":[2165,2165,2182,2184],"filemtime":[2168,2175,2184,2188],"file_exists":[2170,2182,2166],"glob":[2173]},"used_by":[]},"SimplePie_Misc::debug":{"doc":"\/**\n * Format debugging information\n *\/","file":"SimplePie\/Misc.php","line":2195,"missingDoc":false,"filters":[],"uses":{"error":[2201,2199],"curl_version":[2220],"mb_get_info":[2224],"extension_loaded":[2211]},"used_by":[]},"SimplePie_Misc::silence_errors":{"doc":"","file":"SimplePie\/Misc.php","line":2242,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Net_IPv6::uncompress":{"doc":"\/**\n * Uncompresses an IPv6 address\n *\n * RFC 4291 allows you to compress concecutive zero pieces in an address to\n * '::'. This method expects a valid IPv6 address and expands the '::' to\n * the required number of zero pieces.\n *\n * Example: FF01::101 -> FF01:0:0:0:0:0:0:101\n * ::1 -> 0:0:0:0:0:0:0:1\n *\n * @author Alexander Merz <alexander.merz@web.de>\n * @author elfrink at introweb dot nl\n * @author Josh Peck <jmp at joshpeck dot org>\n * @copyright 2003-2005 The PHP Group\n * @license http:\/\/www.opensource.org\/licenses\/bsd-license.php\n * @param string $ip An IPv6 address\n * @return string The uncompressed IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":79,"missingDoc":false,"filters":[],"uses":{"explode":[85],"substr_count":[92,100,83],"strpos":[102],"str_repeat":[114,120,126],"str_replace":[115,121,127]},"used_by":[]},"SimplePie_Net_IPv6::compress":{"doc":"\/**\n * Compresses an IPv6 address\n *\n * RFC 4291 allows you to compress concecutive zero pieces in an address to\n * '::'. This method expects a valid IPv6 address and compresses consecutive\n * zero pieces to '::'.\n *\n * Example: FF01:0:0:0:0:0:0:101 -> FF01::101\n * 0:0:0:0:0:0:0:1 -> ::1\n *\n * @see uncompress()\n * @param string $ip An IPv6 address\n * @return string The compressed IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":147,"missingDoc":false,"filters":[],"uses":{"preg_replace":[154],"strlen":[165,163],"substr_replace":[170],"preg_match_all":[157],"implode":[175]},"used_by":[]},"SimplePie_Net_IPv6::split_v6_v4":{"doc":"\/**\n * Splits an IPv6 address into the IPv6 and IPv4 representation parts\n *\n * RFC 4291 allows you to represent the last two parts of an IPv6 address\n * using the standard IPv4 representation\n *\n * Example: 0:0:0:0:0:0:13.1.68.3\n * 0:0:0:0:0:FFFF:129.144.52.38\n *\n * @param string $ip An IPv6 address\n * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part\n *\/","file":"SimplePie\/Net\/IPv6.php","line":195,"missingDoc":false,"filters":[],"uses":{"strrpos":[199],"substr":[200,201],"strpos":[197]},"used_by":[]},"SimplePie_Net_IPv6::check_ipv6":{"doc":"\/**\n * Checks an IPv6 address\n *\n * Checks if the given IP is a valid IPv6 address\n *\n * @param string $ip An IPv6 address\n * @return bool true if $ip is a valid IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":218,"missingDoc":false,"filters":[],"uses":{"explode":[222,223],"strlen":[233],"ltrim":[237],"hexdec":[242],"dechex":[243],"strtolower":[243],"count":[246,224,224,224,224]},"used_by":[]},"SimplePie_Net_IPv6::checkIPv6":{"doc":"\/**\n * Checks if the given IP is a valid IPv6 address\n *\n * @codeCoverageIgnore\n * @deprecated Use {@see SimplePie_Net_IPv6::check_ipv6()} instead\n * @see check_ipv6\n * @param string $ip An IPv6 address\n * @return bool true if $ip is a valid IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parse_Date::__construct":{"doc":"\/**\n * Create new SimplePie_Parse_Date object, and set self::day_pcre,\n * self::month_pcre, and self::built_in\n *\n * @access private\n *\/","file":"SimplePie\/Parse\/Date.php","line":542,"missingDoc":false,"filters":[],"uses":{"implode":[544,545],"array_keys":[544,545],"get_class_methods":[550],"get_class":[556,548,561],"strtolower":[554],"substr":[554]},"used_by":[]},"SimplePie_Parse_Date::get":{"doc":"\/**\n * Get the object\n *\n * @access public\n *\/","file":"SimplePie\/Parse\/Date.php","line":572,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parse_Date::parse":{"doc":"\/**\n * Parse a date\n *\n * @final\n * @access public\n * @param string $date Date to parse\n * @return int Timestamp corresponding to date string, or false on failure\n *\/","file":"SimplePie\/Parse\/Date.php","line":590,"missingDoc":false,"filters":[],"uses":{"call_user_func":[594,602]},"used_by":[]},"SimplePie_Parse_Date::add_callback":{"doc":"\/**\n * Add a callback method to parse a date\n *\n * @final\n * @access public\n * @param callback $callback\n *\/","file":"SimplePie\/Parse\/Date.php","line":618,"missingDoc":false,"filters":[],"uses":{"trigger_error":[626],"is_callable":[620]},"used_by":[]},"SimplePie_Parse_Date::date_w3cdtf":{"doc":"\/**\n * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as\n * well as allowing any of upper or lower case \"T\", horizontal tabs, or\n * spaces to be used as the time seperator (including more than one))\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":638,"missingDoc":false,"filters":[],"uses":{"count":[667,672],"round":[693],"pow":[693],"strlen":[693],"gmmktime":[695],"preg_match":[649]},"used_by":[]},"SimplePie_Parse_Date::remove_rfc2822_comments":{"doc":"\/**\n * Remove RFC822 comments\n *\n * @access protected\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Parse\/Date.php","line":710,"missingDoc":false,"filters":[],"uses":{"strlen":[714],"strpos":[719],"substr":[721,759],"strcspn":[728]},"used_by":[]},"SimplePie_Parse_Date::date_rfc2822":{"doc":"\/**\n * Parse RFC2822's date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":770,"missingDoc":false,"filters":[],"uses":{"strtolower":[806],"strtoupper":[819,821],"gmmktime":[849],"preg_match":[788],"remove_rfc2822_comments":[788]},"used_by":[]},"SimplePie_Parse_Date::date_rfc850":{"doc":"\/**\n * Parse RFC850's date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":863,"missingDoc":false,"filters":[],"uses":{"strtolower":[891],"strtoupper":[896,894],"gmmktime":[914],"preg_match":[876]},"used_by":[]},"SimplePie_Parse_Date::date_asctime":{"doc":"\/**\n * Parse C99's asctime()'s date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":928,"missingDoc":false,"filters":[],"uses":{"strtolower":[955],"gmmktime":[956],"preg_match":[942]},"used_by":[]},"SimplePie_Parse_Date::date_strtotime":{"doc":"\/**\n * Parse dates using strtotime()\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":970,"missingDoc":false,"filters":[],"uses":{"strtotime":[972]},"used_by":[]},"SimplePie_Parser::set_registry":{"doc":"","file":"SimplePie\/Parser.php","line":73,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::parse":{"doc":"","file":"SimplePie\/Parser.php","line":78,"missingDoc":true,"filters":[],"uses":{"strtoupper":[81],"substr":[94,97,99,102,104,107,109,112,114,92,119,122,117,117],"create":[119],"parse":[120],"strspn":[117],"strpos":[117],"xml_parser_create":[137],"xml_parse_into_struct":[138],"xml_parser_free":[139,163],"xml_parser_create_ns":[146],"xml_parser_set_option":[147,148],"xml_set_object":[149],"xml_set_character_data_handler":[150],"xml_set_element_handler":[151],"xml_get_error_code":[156],"xml_error_string":[157],"xml_parse":[154],"xml_get_current_line_number":[160],"xml_get_current_column_number":[161],"xml_get_current_byte_index":[162],"libxml_clear_errors":[168],"xml":[170],"read":[171],"constant":[176,187,216,218],"tag_close":[185,213],"moveToNextAttribute":[198],"tag_open":[210],"cdata":[219],"libxml_get_last_error":[223]},"used_by":[]},"SimplePie_Parser::get_error_code":{"doc":"","file":"SimplePie\/Parser.php","line":238,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_error_string":{"doc":"","file":"SimplePie\/Parser.php","line":243,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_line":{"doc":"","file":"SimplePie\/Parser.php","line":248,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_column":{"doc":"","file":"SimplePie\/Parser.php","line":253,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_byte":{"doc":"","file":"SimplePie\/Parser.php","line":258,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_data":{"doc":"","file":"SimplePie\/Parser.php","line":263,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::tag_open":{"doc":"","file":"SimplePie\/Parser.php","line":268,"missingDoc":true,"filters":[],"uses":{"split_ns":[270,275],"call":[281],"end":[281,290,291,300,308,306,322,322,323,323,323,324,324,325,325,326,326,327,327,328,328],"htmlspecialchars":[313],"in_array":[324,325,326,327,328]},"used_by":[]},"SimplePie_Parser::cdata":{"doc":"","file":"SimplePie\/Parser.php","line":335,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[339]},"used_by":[]},"SimplePie_Parser::tag_close":{"doc":"","file":"SimplePie\/Parser.php","line":347,"missingDoc":true,"filters":[],"uses":{"end":[354,352,352],"in_array":[352],"count":[359],"array_pop":[360,363,364,365,366,367]},"used_by":[]},"SimplePie_Parser::split_ns":{"doc":"","file":"SimplePie\/Parser.php","line":370,"missingDoc":true,"filters":[],"uses":{"strlen":[380],"substr":[382,383],"strtolower":[384],"strpos":[375]},"used_by":[]},"SimplePie_Rating::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Rating.php","line":79,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Rating::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Rating.php","line":90,"missingDoc":false,"filters":[],"uses":{"md5":[93],"serialize":[93]},"used_by":[]},"SimplePie_Rating::get_scheme":{"doc":"\/**\n * Get the organizational scheme for the rating\n *\n * @return string|null\n *\/","file":"SimplePie\/Rating.php","line":101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Rating::get_value":{"doc":"\/**\n * Get the value of the rating\n *\n * @return string|null\n *\/","file":"SimplePie\/Rating.php","line":118,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::__construct":{"doc":"\/**\n * Constructor\n *\n * No-op\n *\/","file":"SimplePie\/Registry.php","line":104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::register":{"doc":"\/**\n * Register a class\n *\n * @param string $type See {@see $default} for names\n * @param string $class Class name, must subclass the corresponding default\n * @param bool $legacy Whether to enable legacy support for this class\n * @return bool Successfulness\n *\/","file":"SimplePie\/Registry.php","line":114,"missingDoc":false,"filters":[],"uses":{"is_subclass_of":[116]},"used_by":[]},"SimplePie_Registry::get_class":{"doc":"\/**\n * Get the class registered for a type\n *\n * Where possible, use {@see create()} or {@see call()} instead\n *\n * @param string $type\n * @return string|null\n *\/","file":"SimplePie\/Registry.php","line":139,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::create":{"doc":"\/**\n * Create a new instance of a given type\n *\n * @param string $type\n * @param array $parameters Parameters to pass to the constructor\n * @return object Instance of class\n *\/","file":"SimplePie\/Registry.php","line":160,"missingDoc":false,"filters":[],"uses":{"get_class":[162,171,171],"array_splice":[172],"in_array":[164],"newInstanceArgs":[184],"method_exists":[177,187],"set_registry":[189]},"used_by":[]},"SimplePie_Registry::call":{"doc":"\/**\n * Call a static method for a type\n *\n * @param string $type\n * @param string $method\n * @param array $parameters\n * @return mixed\n *\/","file":"SimplePie\/Registry.php","line":202,"missingDoc":false,"filters":[],"uses":{"get_class":[204],"call_user_func_array":[215,222],"in_array":[206]},"used_by":[]},"SimplePie_Restriction::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Restriction.php","line":87,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Restriction.php","line":99,"missingDoc":false,"filters":[],"uses":{"md5":[102],"serialize":[102]},"used_by":[]},"SimplePie_Restriction::get_relationship":{"doc":"\/**\n * Get the relationship\n *\n * @return string|null Either 'allow' or 'deny'\n *\/","file":"SimplePie\/Restriction.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::get_type":{"doc":"\/**\n * Get the type\n *\n * @return string|null\n *\/","file":"SimplePie\/Restriction.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::get_value":{"doc":"\/**\n * Get the list of restricted things\n *\n * @return string|null\n *\/","file":"SimplePie\/Restriction.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::__construct":{"doc":"","file":"SimplePie\/Sanitize.php","line":75,"missingDoc":true,"filters":[],"uses":{"set_url_replacements":[78]},"used_by":[]},"SimplePie_Sanitize::remove_div":{"doc":"","file":"SimplePie\/Sanitize.php","line":81,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_image_handler":{"doc":"","file":"SimplePie\/Sanitize.php","line":86,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_registry":{"doc":"","file":"SimplePie\/Sanitize.php","line":98,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::pass_cache_data":{"doc":"","file":"SimplePie\/Sanitize.php","line":103,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::pass_file_data":{"doc":"","file":"SimplePie\/Sanitize.php","line":121,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::strip_htmltags":{"doc":"","file":"SimplePie\/Sanitize.php","line":139,"missingDoc":true,"filters":[],"uses":{"explode":[149],"is_array":[143]},"used_by":[]},"SimplePie_Sanitize::encode_instead_of_strip":{"doc":"","file":"SimplePie\/Sanitize.php","line":158,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::strip_attributes":{"doc":"","file":"SimplePie\/Sanitize.php","line":163,"missingDoc":true,"filters":[],"uses":{"explode":[173],"is_array":[167]},"used_by":[]},"SimplePie_Sanitize::strip_comments":{"doc":"","file":"SimplePie\/Sanitize.php","line":182,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_output_encoding":{"doc":"","file":"SimplePie\/Sanitize.php","line":187,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_url_replacements":{"doc":"\/**\n * Set element\/attribute key\/value pairs of HTML attributes\n * containing URLs that need to be resolved relative to the feed\n *\n * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,\n * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,\n * |q|@cite\n *\n * @since 1.0\n * @param array|null $element_attribute Element\/attribute key\/value pairs, null for default\n *\/","file":"SimplePie\/Sanitize.php","line":203,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::sanitize":{"doc":"","file":"SimplePie\/Sanitize.php","line":225,"missingDoc":true,"filters":[],"uses":{"trim":[227,349],"preg_match":[232],"base64_decode":[244],"call":[252,310,364,378],"class_exists":[250],"preprocess":[257],"set_error_handler":[259],"loadHTML":[260],"restore_error_handler":[261],"query":[267],"removeChild":[271,341],"strip_tag":[282],"strip_attr":[290],"replace_urls":[298],"getElementsByTagName":[304,345],"call_user_func":[309],"getAttribute":[309],"setAttribute":[314,325],"create":[318],"trigger_error":[329],"save":[323],"load":[312],"hasAttribute":[307],"item":[345,345],"replaceChild":[346],"saveHTML":[349],"preg_replace":[353,354,358],"htmlspecialchars":[373]},"used_by":[]},"SimplePie_Sanitize::preprocess":{"doc":"","file":"SimplePie\/Sanitize.php","line":384,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::replace_urls":{"doc":"","file":"SimplePie\/Sanitize.php","line":407,"missingDoc":true,"filters":[],"uses":{"is_array":[409,414],"getElementsByTagName":[416],"call":[423],"getAttribute":[423],"setAttribute":[426],"hasAttribute":[421],"in_array":[414]},"used_by":[]},"SimplePie_Sanitize::do_strip_htmltags":{"doc":"","file":"SimplePie\/Sanitize.php","line":434,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[440,441,446],"in_array":[438,449],"strtolower":[438,449]},"used_by":[]},"SimplePie_Sanitize::strip_tag":{"doc":"","file":"SimplePie\/Sanitize.php","line":459,"missingDoc":true,"filters":[],"uses":{"query":[462],"createDocumentFragment":[467,531],"implode":[495],"hasAttributes":[473],"appendChild":[498,505,510,536],"in_array":[470,508,518],"item":[504,535],"replaceChild":[513,539],"removeChild":[522]},"used_by":[]},"SimplePie_Sanitize::strip_attr":{"doc":"","file":"SimplePie\/Sanitize.php","line":544,"missingDoc":true,"filters":[],"uses":{"query":[547],"removeAttribute":[551]},"used_by":[]},"SimplePie_Source::__construct":{"doc":"","file":"SimplePie\/Source.php","line":61,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::set_registry":{"doc":"","file":"SimplePie\/Source.php","line":67,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::__toString":{"doc":"","file":"SimplePie\/Source.php","line":72,"missingDoc":true,"filters":[],"uses":{"md5":[74],"serialize":[74]},"used_by":[]},"SimplePie_Source::get_source_tags":{"doc":"","file":"SimplePie\/Source.php","line":77,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::get_base":{"doc":"","file":"SimplePie\/Source.php","line":89,"missingDoc":true,"filters":[],"uses":{"get_base":[91]},"used_by":[]},"SimplePie_Source::sanitize":{"doc":"","file":"SimplePie\/Source.php","line":94,"missingDoc":true,"filters":[],"uses":{"sanitize":[96]},"used_by":[]},"SimplePie_Source::get_item":{"doc":"","file":"SimplePie\/Source.php","line":99,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::get_title":{"doc":"","file":"SimplePie\/Source.php","line":104,"missingDoc":true,"filters":[],"uses":{"sanitize":[108,112,116,120,124,128,132],"call":[108,112],"get_base":[108,112,116,120,124],"get_source_tags":[110,114,118,122,126,130,106]},"used_by":[]},"SimplePie_Source::get_category":{"doc":"","file":"SimplePie\/Source.php","line":140,"missingDoc":true,"filters":[],"uses":{"get_categories":[142]},"used_by":[]},"SimplePie_Source::get_categories":{"doc":"","file":"SimplePie\/Source.php","line":153,"missingDoc":true,"filters":[],"uses":{"sanitize":[164,168,172,180,183,193,197],"create":[174,189,193,197],"get_source_tags":[157,176,191,195],"array_unique":[202]},"used_by":[]},"SimplePie_Source::get_author":{"doc":"","file":"SimplePie\/Source.php","line":210,"missingDoc":true,"filters":[],"uses":{"get_authors":[212]},"used_by":[]},"SimplePie_Source::get_authors":{"doc":"","file":"SimplePie\/Source.php","line":223,"missingDoc":true,"filters":[],"uses":{"sanitize":[233,237,241,255,259,263,272,276,280],"get_base":[237,259],"create":[245,267,272,276,280],"get_source_tags":[226,248,270,274,278],"array_unique":[285]},"used_by":[]},"SimplePie_Source::get_contributor":{"doc":"","file":"SimplePie\/Source.php","line":293,"missingDoc":true,"filters":[],"uses":{"get_contributors":[295]},"used_by":[]},"SimplePie_Source::get_contributors":{"doc":"","file":"SimplePie\/Source.php","line":306,"missingDoc":true,"filters":[],"uses":{"sanitize":[316,320,324,338,342,346],"get_base":[320,342],"create":[328,350],"get_source_tags":[309,331],"array_unique":[356]},"used_by":[]},"SimplePie_Source::get_link":{"doc":"","file":"SimplePie\/Source.php","line":364,"missingDoc":true,"filters":[],"uses":{"get_links":[366]},"used_by":[]},"SimplePie_Source::get_permalink":{"doc":"\/**\n * Added for parity between the parent-level and the item\/entry-level.\n *\/","file":"SimplePie\/Source.php","line":380,"missingDoc":false,"filters":[],"uses":{"get_link":[382]},"used_by":[]},"SimplePie_Source::get_links":{"doc":"","file":"SimplePie\/Source.php","line":385,"missingDoc":true,"filters":[],"uses":{"sanitize":[397,408,415,419,423],"get_base":[397,408,415,419,423],"get_source_tags":[390,401,413,417,421],"array_keys":[426],"array_merge":[433],"substr":[441,443],"call":[429],"array_unique":[445]},"used_by":[]},"SimplePie_Source::get_description":{"doc":"","file":"SimplePie\/Source.php","line":459,"missingDoc":true,"filters":[],"uses":{"sanitize":[463,467,471,475,479,483,487,491,495],"call":[463,467],"get_base":[463,467,471,475,479,491,495],"get_source_tags":[465,469,473,477,481,485,489,493,461]},"used_by":[]},"SimplePie_Source::get_copyright":{"doc":"","file":"SimplePie\/Source.php","line":503,"missingDoc":true,"filters":[],"uses":{"sanitize":[507,511,515,519,523],"call":[507,511],"get_base":[507,511],"get_source_tags":[509,513,517,521,505]},"used_by":[]},"SimplePie_Source::get_language":{"doc":"","file":"SimplePie\/Source.php","line":531,"missingDoc":true,"filters":[],"uses":{"sanitize":[535,539,543,547],"get_source_tags":[537,541,533]},"used_by":[]},"SimplePie_Source::get_latitude":{"doc":"","file":"SimplePie\/Source.php","line":555,"missingDoc":true,"filters":[],"uses":{"get_source_tags":[561,557],"preg_match":[561],"trim":[561]},"used_by":[]},"SimplePie_Source::get_longitude":{"doc":"","file":"SimplePie\/Source.php","line":571,"missingDoc":true,"filters":[],"uses":{"get_source_tags":[577,581,573],"preg_match":[581],"trim":[581]},"used_by":[]},"SimplePie_Source::get_image_url":{"doc":"","file":"SimplePie\/Source.php","line":591,"missingDoc":true,"filters":[],"uses":{"sanitize":[595,599,603],"get_source_tags":[597,601,593],"get_base":[599,603]},"used_by":[]},"SimplePie_XML_Declaration_Parser::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @access public\n * @param string $data Input data\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":116,"missingDoc":false,"filters":[],"uses":{"strlen":[119]},"used_by":[]},"SimplePie_XML_Declaration_Parser::parse":{"doc":"\/**\n * Parse the input data\n *\n * @access public\n * @return bool true on success, false on failure\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":128,"missingDoc":false,"filters":[],"uses":{"has_data":[130]},"used_by":[]},"SimplePie_XML_Declaration_Parser::has_data":{"doc":"\/**\n * Check whether there is data beyond the pointer\n *\n * @access private\n * @return bool true if there is further data, false if not\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":155,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_XML_Declaration_Parser::skip_whitespace":{"doc":"\/**\n * Advance past any whitespace\n *\n * @return int Number of whitespace characters passed\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":165,"missingDoc":false,"filters":[],"uses":{"strspn":[167]},"used_by":[]},"SimplePie_XML_Declaration_Parser::get_value":{"doc":"\/**\n * Read value\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":175,"missingDoc":false,"filters":[],"uses":{"substr":[177,184],"strcspn":[181],"has_data":[182]},"used_by":[]},"SimplePie_XML_Declaration_Parser::before_version_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":192,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[194]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":204,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[209],"substr":[206]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":218,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[223],"substr":[220]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":232,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[236],"has_data":[237],"get_value":[234]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":252,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[257],"substr":[254]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":266,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[271],"substr":[268]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":280,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[284],"has_data":[285],"get_value":[282]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":300,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[305],"substr":[302]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":314,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[319],"substr":[316]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":328,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[347],"has_data":[348],"get_value":[330]},"used_by":[]},"create_initial_taxonomies":{"doc":"\/**\n * Creates the initial taxonomies.\n *\n * This function fires twice: in wp-settings.php before plugins are loaded (for\n * backwards compatibility reasons), and again on the 'init' action. We must avoid\n * registering rewrite rules before the 'init' action.\n *\/","file":"taxonomy.php","line":21,"missingDoc":false,"filters":["'post_format_rewrite_base'"],"uses":{"get_option":[31,31,32,36,36,37],"using_index_permalinks":[32,37],"did_action":[24],"register_taxonomy":[44,54,64,78,107],"__":[68,69,81,82,83,85,86,87,88,89],"_x":[111,112],"current_theme_supports":[118]},"used_by":[]},"register_taxonomy":{"doc":"\/**\n * Create or modify a taxonomy object. Do not use before init.\n *\n * A simple function for creating or modifying a taxonomy object based on the\n * parameters given. The function will accept an array (third optional\n * parameter), along with strings for the taxonomy name and another string for\n * the object type.\n *\n * Nothing is returned, so expect error maybe or use taxonomy_exists() to check\n * whether taxonomy exists.\n *\n * Optional $args contents:\n *\n * label - Name of the taxonomy shown in the menu. Usually plural. If not set, labels['name'] will be used.\n *\n * hierarchical - has some defined purpose at other parts of the API and is a\n * boolean value.\n *\n * update_count_callback - works much like a hook, in that it will be called when the count is updated.\n * \tDefaults to _update_post_term_count() for taxonomies attached to post types, which then confirms\n * \tthat the objects are published before counting them.\n * \tDefaults to _update_generic_term_count() for taxonomies attached to other object types, such as links.\n *\n * rewrite - false to prevent rewrite, or array('slug'=>$slug) to customize\n * permastruct; default will use $taxonomy as slug.\n *\n * query_var - false to prevent queries, or string to customize query var\n * (?$query_var=$term); default will use $taxonomy as query var.\n *\n * public - If the taxonomy should be publicly queryable; \/\/@TODO not implemented.\n * defaults to true.\n *\n * show_ui - If the WordPress UI admin tags UI should apply to this taxonomy;\n * defaults to public.\n *\n * show_in_nav_menus - true makes this taxonomy available for selection in navigation menus.\n * Defaults to public.\n *\n * show_tagcloud - false to prevent the taxonomy being listed in the Tag Cloud Widget;\n * defaults to show_ui which defaults to public.\n *\n * labels - An array of labels for this taxonomy. You can see accepted values in {@link get_taxonomy_labels()}. By default tag labels are used for non-hierarchical types and category labels for hierarchical ones.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wp_taxonomies Inserts new taxonomy object into the list\n * @uses $wp Adds query vars\n *\n * @param string $taxonomy Name of taxonomy object\n * @param array|string $object_type Name of the object type for the taxonomy object.\n * @param array|string $args See above description for the two keys values.\n * @return null|WP_Error WP_Error if errors, otherwise null.\n *\/","file":"taxonomy.php","line":314,"missingDoc":false,"filters":["'registered_taxonomy'"],"uses":{"is_array":[317],"wp_parse_args":[332,346],"__":[335],"strlen":[334],"sanitize_title_with_dashes":[341,347],"add_query_var":[342],"add_rewrite_tag":[358],"add_permastruct":[359],"is_admin":[345],"get_option":[345],"is_null":[362,369],"array_merge":[378],"array_unique":[382],"get_taxonomy_labels":[384],"add_filter":[390]},"used_by":{"create_initial_taxonomies":[44,54,64,78,107]}},"get_taxonomy_labels":{"doc":"\/**\n * Builds an object with all taxonomy labels out of a taxonomy object\n *\n * Accepted keys of the label array in the taxonomy object:\n * - name - general name for the taxonomy, usually plural. The same as and overridden by $tax->label. Default is Tags\/Categories\n * - singular_name - name for one object of this taxonomy. Default is Tag\/Category\n * - search_items - Default is Search Tags\/Search Categories\n * - popular_items - This string isn't used on hierarchical taxonomies. Default is Popular Tags\n * - all_items - Default is All Tags\/All Categories\n * - parent_item - This string isn't used on non-hierarchical taxonomies. In hierarchical ones the default is Parent Category\n * - parent_item_colon - The same as <code>parent_item<\/code>, but with colon <code>:<\/code> in the end\n * - edit_item - Default is Edit Tag\/Edit Category\n * - view_item - Default is View Tag\/View Category\n * - update_item - Default is Update Tag\/Update Category\n * - add_new_item - Default is Add New Tag\/Add New Category\n * - new_item_name - Default is New Tag Name\/New Category Name\n * - separate_items_with_commas - This string isn't used on hierarchical taxonomies. Default is \"Separate tags with commas\", used in the meta box.\n * - add_or_remove_items - This string isn't used on hierarchical taxonomies. Default is \"Add or remove tags\", used in the meta box when JavaScript is disabled.\n * - choose_from_most_used - This string isn't used on hierarchical taxonomies. Default is \"Choose from the most used tags\", used in the meta box.\n *\n * Above, the first default value is for non-hierarchical taxonomies (like tags) and the second one is for hierarchical taxonomies (like categories).\n *\n * @since 3.0.0\n * @param object $tax Taxonomy object\n * @return object object with all the labels as member variables\n *\/","file":"taxonomy.php","line":422,"missingDoc":false,"filters":[],"uses":{"_x":[427,427,428,428],"__":[429,429,430,431,431,432,433,434,434,435,435,436,436,437,437,438,438,439,440,441],"_get_custom_object_labels":[445]},"used_by":{"register_taxonomy":[384]}},"get_tax_sql":{"doc":"\/**\n * Given a taxonomy query, generates SQL to be appended to a main query.\n *\n * @since 3.1.0\n *\n * @see WP_Tax_Query\n *\n * @param array $tax_query A compact tax query\n * @param string $primary_table\n * @param string $primary_id_column\n * @return array\n *\/","file":"taxonomy.php","line":552,"missingDoc":false,"filters":[],"uses":{"get_sql":[554]},"used_by":[]},"WP_Tax_Query::__construct":{"doc":"\/**\n * Constructor.\n *\n * Parses a compact tax query and sets defaults.\n *\n * @since 3.1.0\n * @access public\n *\n * @param array $tax_query A compact tax query:\n * array(\n * 'relation' => 'OR',\n * array(\n * 'taxonomy' => 'tax1',\n * 'terms' => array( 'term1', 'term2' ),\n * 'field' => 'slug',\n * ),\n * array(\n * 'taxonomy' => 'tax2',\n * 'terms' => array( 'term-a', 'term-b' ),\n * 'field' => 'slug',\n * ),\n * )\n *\/","file":"taxonomy.php","line":624,"missingDoc":false,"filters":[],"uses":{"strtoupper":[625],"is_array":[640],"array_merge":[643]},"used_by":[]},"WP_Tax_Query::get_sql":{"doc":"\/**\n * Generates SQL clauses to be appended to a main query.\n *\n * @since 3.1.0\n * @access public\n *\n * @param string $primary_table\n * @param string $primary_id_column\n * @return array\n *\/","file":"taxonomy.php","line":661,"missingDoc":false,"filters":[],"uses":{"count":[667,715],"clean_query":[670],"is_wp_error":[672],"extract":[675],"implode":[689,703,717,731],"compact":[735]},"used_by":[]},"WP_Tax_Query::clean_query":{"doc":"\/**\n * Validates a single query.\n *\n * @since 3.2.0\n * @access private\n *\n * @param array &$query The single query\n *\/","file":"taxonomy.php","line":746,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[747],"array_unique":[752],"transform_query":[755,768],"is_wp_error":[757],"array_merge":[762],"get_term_children":[762],"is_taxonomy_hierarchical":[754]},"used_by":[]},"WP_Tax_Query::transform_query":{"doc":"\/**\n * Transforms a single query, from one field to another.\n *\n * @since 3.2.0\n *\n * @param array &$query The single query\n * @param string $resulting_field The resulting field\n *\/","file":"taxonomy.php","line":779,"missingDoc":false,"filters":[],"uses":{"esc_sql":[788],"implode":[793,803,811],"array_map":[793,803,811],"get_col":[794,804,812],"count":[820,820]},"used_by":[]},"get_term_to_edit":{"doc":"\/**\n * Sanitizes Term for editing.\n *\n * Return value is sanitize_term() and usage is for sanitizing the term for\n * editing. Function is for contextual and simplicity.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term() Passes the return value on success\n *\n * @param int|object $id Term ID or Object\n * @param string $taxonomy Taxonomy Name\n * @return mixed|null|WP_Error Will return empty string if $term is not an object.\n *\/","file":"taxonomy.php","line":1078,"missingDoc":false,"filters":[],"uses":{"get_term":[1079],"is_wp_error":[1081],"is_object":[1084],"sanitize_term":[1087]},"used_by":[]},"update_term_cache":{"doc":"\/**\n * Updates Terms to Taxonomy in cache.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @param array $terms List of Term objects to change\n * @param string $taxonomy Optional. Update Term to this taxonomy in cache\n *\/","file":"taxonomy.php","line":2735,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[2741]},"used_by":{"get_terms":[1403],"wp_get_object_terms":[1975]}},"_get_term_children":{"doc":"\/**\n * Get the subset of $terms that are descendants of $term_id.\n *\n * If $terms is an array of objects, then _get_term_children returns an array of objects.\n * If $terms is an array of IDs, then _get_term_children returns an array of IDs.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n *\n * @param int $term_id The ancestor term: all returned terms should be descendants of $term_id.\n * @param array $terms The set of terms---either an array of term objects or term IDs---from which those that are descendants of $term_id will be chosen.\n * @param string $taxonomy The taxonomy which determines the hierarchy of the terms.\n * @return array The subset of $terms that are descendants of $term_id.\n *\/","file":"taxonomy.php","line":2797,"missingDoc":false,"filters":[],"uses":{"_get_term_hierarchy":[2803],"get_term":[2811],"is_wp_error":[2812],"is_object":[2810],"array_merge":[2830],"_get_term_children":[2829]},"used_by":{"get_terms":[1415,1426],"_get_term_children":[2829]}},"_pad_term_counts":{"doc":"\/**\n * Add count of children to parent count.\n *\n * Recalculates term counts by including items from child terms. Assumes all\n * relevant children are already in the $terms argument.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term IDs\n * @param string $taxonomy Term Context\n * @return null Will break from function if conditions are not met.\n *\/","file":"taxonomy.php","line":2853,"missingDoc":false,"filters":[],"uses":{"is_taxonomy_hierarchical":[2857],"_get_term_hierarchy":[2860],"get_taxonomy":[2873],"esc_sql":[2874],"get_results":[2875],"implode":[2875,2875],"array_keys":[2875],"count":[2896]},"used_by":{"get_terms":[1420]}},"wp_count_terms":{"doc":"\/**\n * Count how many terms are in Taxonomy.\n *\n * Default $args is 'hide_empty' which can be 'hide_empty=true' or array('hide_empty' => true).\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses get_terms()\n * @uses wp_parse_args() Turns strings into arrays and merges defaults into an array.\n *\n * @param string $taxonomy Taxonomy name\n * @param array|string $args Overwrite defaults. See get_terms()\n * @return int|WP_Error How many terms are in $taxonomy. WP_Error if $taxonomy does not exist.\n *\/","file":"taxonomy.php","line":1690,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1692],"get_terms":[1702]},"used_by":[]},"wp_delete_category":{"doc":"\/**\n * Deletes one existing category.\n *\n * @since 2.0.0\n * @uses wp_delete_term()\n *\n * @param int $cat_ID\n * @return mixed Returns true if completes delete action; false if term doesn't exist;\n * \tZero on attempted deletion of default Category; WP_Error object is also a possibility.\n *\/","file":"taxonomy.php","line":1854,"missingDoc":false,"filters":[],"uses":{"wp_delete_term":[1855]},"used_by":[]},"wp_unique_term_slug":{"doc":"\/**\n * Will make slug unique, if it isn't already.\n *\n * The $slug has to be unique global to every taxonomy, meaning that one\n * taxonomy term can't have a matching slug with another taxonomy term. Each\n * slug has to be globally unique for every taxonomy.\n *\n * The way this works is that if the taxonomy that the term belongs to is\n * hierarchical and has a parent, it will append that parent to the $slug.\n *\n * If that still doesn't return an unique slug, then it try to append a number\n * until it finds a number that is truly unique.\n *\n * The only purpose for $term is for appending a parent, if one exists.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param string $slug The string that will be tried for a unique slug\n * @param object $term The term object that the $slug will belong too\n * @return string Will return a true unique slug.\n *\/","file":"taxonomy.php","line":2271,"missingDoc":false,"filters":[],"uses":{"term_exists":[2274,2286],"get_term":[2282],"is_wp_error":[2283],"is_taxonomy_hierarchical":[2279],"prepare":[2297,2299,2306],"get_var":[2306,2301]},"used_by":{"wp_insert_term":[2095,2102,2112],"wp_update_term":[2410]}},"wp_defer_term_counting":{"doc":"\/**\n * Enable or disable term counting.\n *\n * @since 2.5.0\n *\n * @param bool $defer Optional. Enable if true, disable if false.\n * @return bool Whether term counting is enabled or disabled.\n *\/","file":"taxonomy.php","line":2448,"missingDoc":false,"filters":[],"uses":{"wp_update_term_count":[2455],"is_bool":[2451]},"used_by":{"wp_update_term_count":[2495]}},"wp_update_term_count_now":{"doc":"\/**\n * Perform term count update immediately.\n *\n * @since 2.5.0\n *\n * @param array $terms The term_taxonomy_id of terms to update.\n * @param string $taxonomy The context of the term.\n * @return bool Always true when complete.\n *\/","file":"taxonomy.php","line":2514,"missingDoc":false,"filters":[],"uses":{"array_map":[2517],"get_taxonomy":[2519],"call_user_func":[2521],"explode":[2526],"strpos":[2525],"_update_post_term_count":[2531],"_update_generic_term_count":[2534],"array_filter":[2529],"clean_term_cache":[2538]},"used_by":{"wp_update_term_count":[2484,2502]}},"_update_post_term_count":{"doc":"\/**\n * Will update term count based on object types of the current taxonomy.\n *\n * Private function for the default callback for post_tag and category\n * taxonomies.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term taxonomy IDs\n * @param object $taxonomy Current taxonomy object of terms\n *\/","file":"taxonomy.php","line":2918,"missingDoc":false,"filters":["'edit_term_taxonomy'","'edited_term_taxonomy'"],"uses":{"explode":[2924],"array_unique":[2926],"array_search":[2928],"esc_sql":[2934],"array_filter":[2934],"get_var":[2941,2944],"prepare":[2941,2944],"implode":[2944],"update":[2947],"compact":[2947]},"used_by":{"wp_update_term_count_now":[2531]}},"_update_generic_term_count":{"doc":"\/**\n * Will update term count based on number of objects.\n *\n * Default callback for the link_category taxonomy.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term taxonomy IDs\n * @param object $taxonomy Current taxonomy object of terms\n *\/","file":"taxonomy.php","line":2965,"missingDoc":false,"filters":["'edit_term_taxonomy'","'edited_term_taxonomy'"],"uses":{"get_var":[2969],"prepare":[2969],"update":[2972],"compact":[2972]},"used_by":{"wp_update_term_count_now":[2534]}},"get_ancestors":{"doc":"\/**\n * Get an array of ancestor IDs for a given object.\n *\n * @param int $object_id The ID of the object\n * @param string $object_type The type of object for which we'll be retrieving ancestors.\n * @return array of ancestors from lowest to highest in the hierarchy.\n *\/","file":"taxonomy.php","line":3224,"missingDoc":false,"filters":["'get_ancestors'","'get_ancestors'"],"uses":{"get_term":[3234,3237],"is_wp_error":[3235],"in_array":[3235],"post_type_exists":[3239],"get_post_ancestors":[3240],"is_taxonomy_hierarchical":[3233]},"used_by":{"get_term_link":[3025]}},"the_taxonomies":{"doc":"\/**\n * Display the taxonomies of a post with available options.\n *\n * This function can be used within the loop to display the taxonomies for a\n * post without specifying the Post ID. You can also use it outside the Loop to\n * display the taxonomies for a specific post.\n *\n * The available defaults are:\n * 'post' : default is 0. The post ID to get taxonomies of.\n * 'before' : default is empty string. Display before taxonomies list.\n * 'sep' : default is empty string. Separate every taxonomy with value in this.\n * 'after' : default is empty string. Display this after the taxonomies list.\n * 'template' : The template to use for displaying the taxonomy terms.\n *\n * @since 2.5.0\n * @uses get_the_taxonomies()\n *\n * @param array $args Override the defaults.\n *\/","file":"taxonomy.php","line":3066,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[3075],"extract":[3076],"join":[3078],"get_the_taxonomies":[3078]},"used_by":[]},"get_the_taxonomies":{"doc":"\/**\n * Retrieve all taxonomies associated with a post.\n *\n * This function can be used within the loop. It will also return an array of\n * the taxonomies with links to the taxonomy and name.\n *\n * @since 2.5.0\n *\n * @param int $post Optional. Post ID or will use Global Post ID (in loop).\n * @param array $args Override the defaults.\n * @return array\n *\/","file":"taxonomy.php","line":3093,"missingDoc":false,"filters":[],"uses":{"get_post":[3094],"wp_parse_args":[3096],"extract":[3099],"get_taxonomy":[3107],"get_object_term_cache":[3115],"wp_get_object_terms":[3117],"esc_attr":[3122],"get_term_link":[3122],"wp_sprintf":[3125],"get_object_taxonomies":[3106]},"used_by":{"the_taxonomies":[3078]}},"get_post_taxonomies":{"doc":"\/**\n * Retrieve all taxonomies of a post with just the names.\n *\n * @since 2.5.0\n * @uses get_object_taxonomies()\n *\n * @param int $post Optional. Post ID\n * @return array\n *\/","file":"taxonomy.php","line":3139,"missingDoc":false,"filters":[],"uses":{"get_post":[3140],"get_object_taxonomies":[3142]},"used_by":[]},"wp_get_term_taxonomy_parent_id":{"doc":"\/**\n * Returns the term's parent's term_ID\n *\n * @since 3.1.0\n *\n * @param int $term_id\n * @param string $taxonomy\n *\n * @return int|bool false on error\n *\/","file":"taxonomy.php","line":3256,"missingDoc":false,"filters":[],"uses":{"get_term":[3257],"is_wp_error":[3258]},"used_by":[]},"wp_check_term_hierarchy_for_loops":{"doc":"\/**\n * Checks the given subset of the term hierarchy for hierarchy loops.\n * Prevents loops from forming and breaks those that it finds.\n *\n * Attached to the wp_update_term_parent filter.\n *\n * @since 3.1.0\n * @uses wp_find_hierarchy_loop()\n *\n * @param int $parent term_id of the parent for the term we're checking.\n * @param int $term_id The term we're checking.\n * @param string $taxonomy The taxonomy of the term we're checking.\n *\n * @return int The new parent for the term.\n *\/","file":"taxonomy.php","line":3278,"missingDoc":false,"filters":[],"uses":{"wp_find_hierarchy_loop":[3289],"wp_update_term":[3298],"array_keys":[3297]},"used_by":[]},"get_search_template":{"doc":"\/**\n * Retrieve path of search template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":277,"missingDoc":false,"filters":[],"uses":{"get_query_template":[278]},"used_by":{"__main":[28]}},"get_taxonomy_template":{"doc":"\/**\n * Retrieve path of taxonomy template in current or parent template.\n *\n * Retrieves the taxonomy and term, if term is available. The template is\n * prepended with 'taxonomy-' and followed by both the taxonomy string and\n * the taxonomy string followed by a dash and then followed by the term.\n *\n * The taxonomy and term template is checked and used first, if it exists.\n * Second, just the taxonomy template is checked, and then finally, taxonomy.php\n * template is used. If none of the files exist, then it will fall back on to\n * index.php.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'taxonomy_template' filter on found path.\n *\n * @return string\n *\/","file":"template.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[166],"get_query_template":[177]},"used_by":{"__main":[29]}},"get_front_page_template":{"doc":"\/**\n * Retrieve path of front-page template in current or parent template.\n *\n * Looks for 'front-page.php'.\n *\n * @since 3.0.0\n * @uses apply_filters() Calls 'front_page_template' on file path of template.\n *\n * @return string\n *\/","file":"template.php","line":219,"missingDoc":false,"filters":[],"uses":{"get_query_template":[222]},"used_by":{"__main":[30]}},"get_home_template":{"doc":"\/**\n * Retrieve path of home template in current or parent template.\n *\n * This is the template used for the page containing the blog posts\n *\n * Attempts to locate 'home.php' first before falling back to 'index.php'.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'home_template' on file path of home template.\n *\n * @return string\n *\/","file":"template.php","line":203,"missingDoc":false,"filters":[],"uses":{"get_query_template":[206]},"used_by":{"__main":[31]}},"get_attachment_template":{"doc":"\/**\n * Retrieve path of attachment template in current or parent template.\n *\n * The attachment path first checks if the first part of the mime type exists.\n * The second check is for the second part of the mime type. The last check is\n * for both types separated by an underscore. If neither are found then the file\n * 'attachment.php' is checked and returned.\n *\n * Some examples for the 'text\/plain' mime type are 'text.php', 'plain.php', and\n * finally 'text_plain.php'.\n *\n * @since 2.0.0\n *\n * @return string\n *\/","file":"template.php","line":315,"missingDoc":false,"filters":[],"uses":{"explode":[319],"get_query_template":[324,326,322,331]},"used_by":{"__main":[32]}},"get_single_template":{"doc":"\/**\n * Retrieve path of single template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":288,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[289],"get_query_template":[297]},"used_by":{"__main":[34]}},"get_page_template":{"doc":"\/**\n * Retrieve path of page template in current or parent template.\n *\n * Will first look for the specifically assigned page template\n * The will search for 'page-{slug}.php' followed by 'page-id.php'\n * and finally 'page.php'\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":236,"missingDoc":false,"filters":[],"uses":{"get_queried_object_id":[237],"get_page_template_slug":[238],"get_query_var":[239],"get_queried_object":[243],"validate_file":[248],"get_query_template":[256]},"used_by":{"__main":[35]}},"get_category_template":{"doc":"\/**\n * Retrieve path of category template in current or parent template.\n *\n * Works by first retrieving the current slug for example 'category-default.php' and then\n * trying category ID, for example 'category-1.php' and will finally fallback to category.php\n * template, if those files don't exist.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'category_template' on file path of category template.\n *\n * @return string\n *\/","file":"template.php","line":108,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[109],"get_query_template":[119]},"used_by":{"__main":[36]}},"get_tag_template":{"doc":"\/**\n * Retrieve path of tag template in current or parent template.\n *\n * Works by first retrieving the current tag name, for example 'tag-wordpress.php' and then\n * trying tag ID, for example 'tag-1.php' and will finally fallback to tag.php\n * template, if those files don't exist.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'tag_template' on file path of tag template.\n *\n * @return string\n *\/","file":"template.php","line":134,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[135],"get_query_template":[145]},"used_by":{"__main":[37]}},"get_author_template":{"doc":"\/**\n * Retrieve path of author template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":82,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[83],"get_query_template":[93]},"used_by":{"__main":[38]}},"get_date_template":{"doc":"\/**\n * Retrieve path of date template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":187,"missingDoc":false,"filters":[],"uses":{"get_query_template":[188]},"used_by":{"__main":[39]}},"get_archive_template":{"doc":"\/**\n * Retrieve path of archive template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":61,"missingDoc":false,"filters":[],"uses":{"array_filter":[62],"get_query_var":[62],"reset":[67],"count":[66],"get_query_template":[72]},"used_by":{"__main":[40]}},"get_comments_popup_template":{"doc":"\/**\n * Retrieve path of comment popup template in current or parent template.\n *\n * Checks for comment popup template in current template, if it exists or in the\n * parent template.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'comments_popup_template' filter on path.\n *\n * @return string\n *\/","file":"template.php","line":345,"missingDoc":false,"filters":[],"uses":{"get_query_template":[346]},"used_by":{"__main":[41]}},"get_paged_template":{"doc":"\/**\n * Retrieve path of paged template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":266,"missingDoc":false,"filters":[],"uses":{"get_query_template":[267]},"used_by":{"__main":[42]}},"get_index_template":{"doc":"\/**\n * Retrieve path of index template in current or parent template.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"template.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_query_template":[40]},"used_by":{"__main":[44]}},"get_404_template":{"doc":"\/**\n * Retrieve path of 404 template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":50,"missingDoc":false,"filters":[],"uses":{"get_query_template":[51]},"used_by":{"__main":[27]}},"get_query_template":{"doc":"\/**\n * Retrieve path to a template\n *\n * Used to quickly retrieve the path of a template without including the file\n * extension. It will also check the parent theme, if the file exists, with\n * the use of {@link locate_template()}. Allows for more generic template location\n * without the use of the other get_*_template() functions.\n *\n * @since 1.5.0\n *\n * @param string $type Filename without extension.\n * @param array $templates An optional list of template candidates\n * @return string Full path to file.\n *\/","file":"template.php","line":23,"missingDoc":false,"filters":["\"{$type}_template\""],"uses":{"preg_replace":[24],"locate_template":[29]},"used_by":{"get_index_template":[40],"get_404_template":[51],"get_archive_template":[72],"get_author_template":[93],"get_category_template":[119],"get_tag_template":[145],"get_taxonomy_template":[177],"get_date_template":[188],"get_home_template":[206],"get_front_page_template":[222],"get_page_template":[256],"get_paged_template":[267],"get_search_template":[278],"get_single_template":[297],"get_attachment_template":[324,326,322,331],"get_comments_popup_template":[346]}},"Text_Diff_Engine_native::diff":{"doc":"","file":"Text\/Diff\/Engine\/native.php","line":31,"missingDoc":true,"filters":[],"uses":{"array_walk":[33,34],"count":[36,37,86,86],"_compareseq":[86],"_shiftBoundaries":[89,90],"assert":[96,97]},"used_by":[]},"Text_Diff_Engine_native::_diag":{"doc":"\/**\n * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,\n * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized\n * segments.\n *\n * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an array of\n * NCHUNKS+1 (X, Y) indexes giving the diving points between sub\n * sequences. The first sub-sequence is contained in (X0, X1), (Y0, Y1),\n * the second in (X1, X2), (Y1, Y2) and so on. Note that (X0, Y0) ==\n * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).\n *\n * This function assumes that the first lines of the specified portions of\n * the two files do not match, and likewise that the last lines do not\n * match. The caller must trim matching lines from the beginning and end\n * of the portions it is going to specify.\n *\/","file":"Text\/Diff\/Engine\/native.php","line":149,"missingDoc":false,"filters":[],"uses":{"reset":[192],"each":[193,201],"_lcsPos":[195,210],"assert":[196,203,211]},"used_by":[]},"Text_Diff_Engine_native::_lcsPos":{"doc":"","file":"Text\/Diff\/Engine\/native.php","line":230,"missingDoc":true,"filters":[],"uses":{"assert":[249]},"used_by":[]},"Text_Diff_Engine_native::_compareseq":{"doc":"\/**\n * Finds LCS of two sequences.\n *\n * The results are recorded in the vectors $this->{x,y}changed[], by\n * storing a 1 in the element for each line that is an insertion or\n * deletion (ie. is not in the LCS).\n *\n * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.\n *\n * Note that XLIM, YLIM are exclusive bounds. All line numbers are\n * origin-0 and discarded lines are not counted.\n *\/","file":"Text\/Diff\/Engine\/native.php","line":269,"missingDoc":false,"filters":[],"uses":{"min":[291],"_diag":[293],"reset":[307],"next":[309],"_compareseq":[310]},"used_by":[]},"Text_Diff_Engine_native::_shiftBoundaries":{"doc":"\/**\n * Adjusts inserts\/deletes of identical lines to join changes as much as\n * possible.\n *\n * We do something when a run of changed lines include a line at one end\n * and has an excluded, identical line at the other. We are free to\n * choose which identical line is included. `compareseq' usually chooses\n * the one at the beginning, but usually it is cleaner to consider the\n * following identical line to be the \"change\".\n *\n * This is extracted verbatim from analyze.c (GNU diffutils-2.7).\n *\/","file":"Text\/Diff\/Engine\/native.php","line":328,"missingDoc":false,"filters":[],"uses":{"assert":[333,354,386,390,411,427,431],"count":[334,335]},"used_by":[]},"Text_Diff_Engine_shell::diff":{"doc":"\/**\n * Returns the array of differences.\n *\n * @param array $from_lines lines of text from old file\n * @param array $to_lines lines of text from new file\n *\n * @return array all changes made (array with Text_Diff_Op_* objects)\n *\/","file":"Text\/Diff\/Engine\/shell.php","line":34,"missingDoc":false,"filters":[],"uses":{"array_walk":[36,37],"tempnam":[42,43],"fopen":[44,47],"fwrite":[45,48],"implode":[45,48],"fclose":[46,49],"shell_exec":[50],"unlink":[51,52],"is_null":[54],"preg_match_all":[67],"assert":[86],"array_push":[87,96,104,112,122],"_getLines":[89,90,98,106,107,114,124,126],"count":[125,127]},"used_by":[]},"Text_Diff_Engine_shell::_getLines":{"doc":"\/**\n * Get lines from either the old or new text\n *\n * @access private\n *\n * @param array &$text_lines Either $from_lines or $to_lines\n * @param int &$line_no Current line number\n * @param int $end Optional end line, when we want to chop more\n * than one line.\n *\n * @return array The chopped lines\n *\/","file":"Text\/Diff\/Engine\/shell.php","line":145,"missingDoc":false,"filters":[],"uses":{"array_push":[151],"array_shift":[151,155]},"used_by":[]},"Text_Diff_Engine_string::diff":{"doc":"\/**\n * Parses a unified or context diff.\n *\n * First param contains the whole diff and the second can be used to force\n * a specific diff type. If the second parameter is 'autodetect', the\n * diff will be examined to find out which type of diff this is.\n *\n * @param string $diff The diff content.\n * @param string $mode The diff mode of the content in $diff. One of\n * 'context', 'unified', or 'autodetect'.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":38,"missingDoc":false,"filters":[],"uses":{"strpos":[44,42,58,59,71,72],"substr":[49],"strlen":[49],"explode":[70],"array_shift":[73,74],"parseContextDiff":[78],"parseUnifiedDiff":[80]},"used_by":[]},"Text_Diff_Engine_string::parseUnifiedDiff":{"doc":"\/**\n * Parses an array containing the unified diff.\n *\n * @param array $diff Array of lines.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":91,"missingDoc":false,"filters":[],"uses":{"count":[94,123],"substr":[97,101,100,109,108,118,117,120,121]},"used_by":[]},"Text_Diff_Engine_string::parseContextDiff":{"doc":"\/**\n * Parses an array containing the context diff.\n *\n * @param array $diff Array of lines.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":146,"missingDoc":false,"filters":[],"uses":{"count":[150,191],"substr":[155,158,161,164,173,179,182,186,189,197,205,201,203,202,212,211,219,218,227,231,230,238,237],"strcmp":[172]},"used_by":[]},"Text_Diff_Engine_xdiff::diff":{"doc":"\/**\n *\/","file":"Text\/Diff\/Engine\/xdiff.php","line":20,"missingDoc":false,"filters":[],"uses":{"array_walk":[22,23],"implode":[26,27],"xdiff_string_diff":[30],"count":[30],"explode":[31],"strlen":[43],"substr":[48,52,56]},"used_by":[]},"Text_Diff_Renderer_inline::_blockHeader":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":93,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer_inline::_startBlock":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":98,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer_inline::_lines":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":103,"missingDoc":true,"filters":[],"uses":{"array_walk":[106],"implode":[110,112]},"used_by":[]},"Text_Diff_Renderer_inline::_added":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":116,"missingDoc":true,"filters":[],"uses":{"array_walk":[118],"count":[120],"_lines":[121]},"used_by":[]},"Text_Diff_Renderer_inline::_deleted":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":124,"missingDoc":true,"filters":[],"uses":{"array_walk":[126],"count":[128],"_lines":[129]},"used_by":[]},"Text_Diff_Renderer_inline::_changed":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":132,"missingDoc":true,"filters":[],"uses":{"_deleted":[136,150],"_added":[137,150],"substr":[144,145,146,147,148],"implode":[153,154],"preg_split":[161,162],"_splitOnWords":[168,169],"array_merge":[174],"getParams":[174],"str_replace":[178],"render":[178]},"used_by":[]},"Text_Diff_Renderer_inline::_splitOnWords":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":181,"missingDoc":true,"filters":[],"uses":{"str_replace":[184,194],"strlen":[187],"strspn":[192],"substr":[192,193,194],"strcspn":[193]},"used_by":[]},"Text_Diff_Renderer_inline::_encode":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":201,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[203]},"used_by":[]},"Text_Diff_Renderer::Text_Diff_Renderer":{"doc":"\/**\n * Constructor.\n *\/","file":"Text\/Diff\/Renderer.php","line":36,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::getParams":{"doc":"\/**\n * Get any renderer parameters.\n *\n * @return array All parameters of this renderer object.\n *\/","file":"Text\/Diff\/Renderer.php","line":51,"missingDoc":false,"filters":[],"uses":{"substr":[56],"get_object_vars":[54]},"used_by":[]},"Text_Diff_Renderer::render":{"doc":"\/**\n * Renders a diff.\n *\n * @param Text_Diff $diff A Text_Diff object.\n *\n * @return string The formatted output.\n *\/","file":"Text\/Diff\/Renderer.php","line":70,"missingDoc":false,"filters":[],"uses":{"_startDiff":[79],"getDiff":[81],"count":[91,92,116,117,118,128,131],"array_slice":[100,116],"_block":[104,136],"is_array":[88,114,135],"is_a":[86],"_endDiff":[141]},"used_by":[]},"Text_Diff_Renderer::_block":{"doc":"","file":"Text\/Diff\/Renderer.php","line":144,"missingDoc":true,"filters":[],"uses":{"_startBlock":[146],"_blockHeader":[146],"strtolower":[149],"get_class":[149],"_context":[151],"_added":[155],"_deleted":[159],"_changed":[163],"_endBlock":[168]},"used_by":[]},"Text_Diff_Renderer::_startDiff":{"doc":"","file":"Text\/Diff\/Renderer.php","line":171,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_endDiff":{"doc":"","file":"Text\/Diff\/Renderer.php","line":176,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_blockHeader":{"doc":"","file":"Text\/Diff\/Renderer.php","line":181,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_startBlock":{"doc":"","file":"Text\/Diff\/Renderer.php","line":200,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_endBlock":{"doc":"","file":"Text\/Diff\/Renderer.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_lines":{"doc":"","file":"Text\/Diff\/Renderer.php","line":210,"missingDoc":true,"filters":[],"uses":{"implode":[212]},"used_by":[]},"Text_Diff_Renderer::_context":{"doc":"","file":"Text\/Diff\/Renderer.php","line":215,"missingDoc":true,"filters":[],"uses":{"_lines":[217]},"used_by":[]},"Text_Diff_Renderer::_added":{"doc":"","file":"Text\/Diff\/Renderer.php","line":220,"missingDoc":true,"filters":[],"uses":{"_lines":[222]},"used_by":[]},"Text_Diff_Renderer::_deleted":{"doc":"","file":"Text\/Diff\/Renderer.php","line":225,"missingDoc":true,"filters":[],"uses":{"_lines":[227]},"used_by":[]},"Text_Diff_Renderer::_changed":{"doc":"","file":"Text\/Diff\/Renderer.php","line":230,"missingDoc":true,"filters":[],"uses":{"_deleted":[232],"_added":[232]},"used_by":[]},"Text_Diff::Text_Diff":{"doc":"\/**\n * Computes diffs between sequences of strings.\n *\n * @param string $engine Name of the diffing engine to use. 'auto'\n * will automatically select the best.\n * @param array $params Parameters to pass to the diffing engine.\n * Normally an array of two arrays, each\n * containing the lines from a file.\n *\/","file":"Text\/Diff.php","line":36,"missingDoc":false,"filters":[],"uses":{"is_string":[39],"extension_loaded":[45],"basename":[47],"dirname":[51],"call_user_func_array":[55]},"used_by":[]},"Text_Diff::getDiff":{"doc":"\/**\n * Returns the array of differences.\n *\/","file":"Text\/Diff.php","line":61,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Text_Diff::countAddedLines":{"doc":"\/**\n * returns the number of new (added) lines in a given diff.\n *\n * @since Text_Diff 1.1.0\n *\n * @return integer The number of new lines\n *\/","file":"Text\/Diff.php","line":73,"missingDoc":false,"filters":[],"uses":{"nfinal":[79],"is_a":[77,78]},"used_by":[]},"Text_Diff::countDeletedLines":{"doc":"\/**\n * Returns the number of deleted (removed) lines in a given diff.\n *\n * @since Text_Diff 1.1.0\n *\n * @return integer The number of deleted lines\n *\/","file":"Text\/Diff.php","line":92,"missingDoc":false,"filters":[],"uses":{"norig":[98],"is_a":[96,97]},"used_by":[]},"Text_Diff::reverse":{"doc":"\/**\n * Computes a reversed diff.\n *\n * Example:\n * <code>\n * $diff = new Text_Diff($lines1, $lines2);\n * $rev = $diff->reverse();\n * <\/code>\n *\n * @return Text_Diff A Diff object representing the inverse of the\n * original diff. Note that we purposely don't return a\n * reference here, since this essentially is a clone()\n * method.\n *\/","file":"Text\/Diff.php","line":118,"missingDoc":false,"filters":[],"uses":{"version_compare":[120],"zend_version":[120],"reverse":[127]},"used_by":[]},"Text_Diff::isEmpty":{"doc":"\/**\n * Checks for an empty diff.\n *\n * @return boolean True if two sequences were identical.\n *\/","file":"Text\/Diff.php","line":137,"missingDoc":false,"filters":[],"uses":{"is_a":[140]},"used_by":[]},"Text_Diff::lcs":{"doc":"\/**\n * Computes the length of the Longest Common Subsequence (LCS).\n *\n * This is mostly for diagnostic purposes.\n *\n * @return integer The length of the LCS.\n *\/","file":"Text\/Diff.php","line":154,"missingDoc":false,"filters":[],"uses":{"count":[159],"is_a":[158]},"used_by":[]},"Text_Diff::getOriginal":{"doc":"\/**\n * Gets the original set of lines.\n *\n * This reconstructs the $from_lines parameter passed to the constructor.\n *\n * @return array The original sequence of strings.\n *\/","file":"Text\/Diff.php","line":172,"missingDoc":false,"filters":[],"uses":{"array_splice":[177],"count":[177]},"used_by":[]},"Text_Diff::getFinal":{"doc":"\/**\n * Gets the final set of lines.\n *\n * This reconstructs the $to_lines parameter passed to the constructor.\n *\n * @return array The sequence of strings.\n *\/","file":"Text\/Diff.php","line":190,"missingDoc":false,"filters":[],"uses":{"array_splice":[195],"count":[195]},"used_by":[]},"Text_Diff::trimNewlines":{"doc":"\/**\n * Removes trailing newlines from a line of text. This is meant to be used\n * with array_walk().\n *\n * @param string $line The line to trim.\n * @param integer $key The index of the line in the array. Not used.\n *\/","file":"Text\/Diff.php","line":208,"missingDoc":false,"filters":[],"uses":{"str_replace":[210]},"used_by":[]},"Text_Diff::_getTempDir":{"doc":"\/**\n * Determines the location of the system temporary directory.\n *\n * @static\n *\n * @access protected\n *\n * @return string A directory name which can be used for temp files.\n * Returns false if one could not be found.\n *\/","file":"Text\/Diff.php","line":223,"missingDoc":false,"filters":[],"uses":{"ini_get":[229],"getenv":[233],"strlen":[232,238,247],"count":[238],"array_shift":[239],"is_dir":[240]},"used_by":[]},"Text_Diff::_check":{"doc":"\/**\n * Checks a diff for validity.\n *\n * This is here only for debugging purposes.\n *\/","file":"Text\/Diff.php","line":255,"missingDoc":false,"filters":[],"uses":{"trigger_error":[258,261,266,269,275],"serialize":[257,257,260,260,265,265,268,268],"getOriginal":[257,265],"getFinal":[260,268],"reverse":[264],"get_class":[274,277]},"used_by":[]},"Text_MappedDiff::Text_MappedDiff":{"doc":"\/**\n * Computes a diff between sequences of strings.\n *\n * This can be used to compute things like case-insensitve diffs, or diffs\n * which ignore changes in white-space.\n *\n * @param array $from_lines An array of strings.\n * @param array $to_lines An array of strings.\n * @param array $mapped_from_lines This array should have the same size\n * number of elements as $from_lines. The\n * elements in $mapped_from_lines and\n * $mapped_to_lines are what is actually\n * compared when computing the diff.\n * @param array $mapped_to_lines This array should have the same number\n * of elements as $to_lines.\n *\/","file":"Text\/Diff.php","line":307,"missingDoc":false,"filters":[],"uses":{"assert":[310,311],"count":[310,310,311,311,316,319,320,325,326],"array_slice":[319,325],"is_array":[318,324]},"used_by":[]},"Text_Diff_Op::reverse":{"doc":"","file":"Text\/Diff.php","line":344,"missingDoc":true,"filters":[],"uses":{"trigger_error":[346]},"used_by":[]},"Text_Diff_Op::norig":{"doc":"","file":"Text\/Diff.php","line":349,"missingDoc":true,"filters":[],"uses":{"count":[351]},"used_by":[]},"Text_Diff_Op::nfinal":{"doc":"","file":"Text\/Diff.php","line":354,"missingDoc":true,"filters":[],"uses":{"count":[356]},"used_by":[]},"Text_Diff_Op_copy::Text_Diff_Op_copy":{"doc":"","file":"Text\/Diff.php","line":369,"missingDoc":true,"filters":[],"uses":{"is_array":[371]},"used_by":[]},"Text_Diff_Op_copy::reverse":{"doc":"","file":"Text\/Diff.php","line":378,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_delete::Text_Diff_Op_delete":{"doc":"","file":"Text\/Diff.php","line":394,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_delete::reverse":{"doc":"","file":"Text\/Diff.php","line":400,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_add::Text_Diff_Op_add":{"doc":"","file":"Text\/Diff.php","line":416,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_add::reverse":{"doc":"","file":"Text\/Diff.php","line":422,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_change::Text_Diff_Op_change":{"doc":"","file":"Text\/Diff.php","line":438,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_change::reverse":{"doc":"","file":"Text\/Diff.php","line":444,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"dynamic_sidebar":{"doc":"\/**\n * Display dynamic sidebar.\n *\n * By default it displays the default sidebar or 'sidebar-1'. The 'sidebar-1' is\n * not named by the theme, the actual name is '1', but 'sidebar-' is added to\n * the registered sidebars for the name. If you named your sidebar 'after-post',\n * then the parameter $index will still be 'after-post', but the lookup will be\n * for 'sidebar-after-post'.\n *\n * It is confusing for the $index parameter, but just know that it should just\n * work. When you register the sidebar in the theme, you will use the same name\n * for this function or \"Pay no heed to the man behind the curtain.\" Just accept\n * it as an oddity of WordPress sidebar register and display.\n *\n * @since 2.2.0\n *\n * @param int|string $index Optional, default is 1. Name or ID of dynamic sidebar.\n * @return bool True, if widget sidebar was found and called. False if not found or not called.\n *\/","file":"widgets.php","line":852,"missingDoc":false,"filters":["'dynamic_sidebar_params'","'dynamic_sidebar'"],"uses":{"sanitize_title":[858,860],"is_int":[855],"wp_get_sidebars_widgets":[867],"array_key_exists":[871],"is_array":[871],"array_merge":[881,882],"is_object":[891],"get_class":[892],"is_string":[889],"ltrim":[894],"sprintf":[895],"call_user_func_array":[904],"is_callable":[903]},"used_by":{"__main":[15]}},"wp_clean_themes_cache":{"doc":"\/**\n * Clears the cache held by get_theme_roots() and WP_Theme.\n *\n * @since 3.5.0\n *\/","file":"theme.php","line":114,"missingDoc":false,"filters":[],"uses":{"delete_site_transient":[115],"search_theme_directories":[116],"cache_delete":[118],"wp_get_themes":[117]},"used_by":[]},"get_locale_stylesheet_uri":{"doc":"\/**\n * Retrieve localized stylesheet URI.\n *\n * The stylesheet directory for the localized stylesheet files are located, by\n * default, in the base theme directory. The name of the locale file will be the\n * locale followed by '.css'. If that does not exist, then the text direction\n * stylesheet will be checked for existence, for example 'ltr.css'.\n *\n * The theme may change the location of the stylesheet directory by either using\n * the 'stylesheet_directory_uri' filter or the 'locale_stylesheet_uri' filter.\n * If you want to change the location of the stylesheet files for the entire\n * WordPress workflow, then change the former. If you just have the locale in a\n * separate folder, then change the latter.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'locale_stylesheet_uri' filter on stylesheet URI path and stylesheet directory URI.\n *\n * @return string\n *\/","file":"theme.php","line":217,"missingDoc":false,"filters":["'locale_stylesheet_uri'"],"uses":{"get_stylesheet_directory_uri":[219],"get_stylesheet_directory":[220],"get_locale":[221],"file_exists":[224,222]},"used_by":{"locale_stylesheet":[538]}},"get_theme_roots":{"doc":"\/**\n * Retrieve theme roots.\n *\n * @since 2.9.0\n *\n * @return array|string An array of theme roots keyed by template\/stylesheet or a single theme root if all themes have the same root.\n *\/","file":"theme.php","line":282,"missingDoc":false,"filters":[],"uses":{"count":[285],"get_site_transient":[288,291],"search_theme_directories":[290]},"used_by":{"get_raw_theme_root":[524]}},"register_theme_directory":{"doc":"\/**\n * Register a directory that contains themes.\n *\n * @since 2.9.0\n *\n * @param string $directory Either the full filesystem path to a theme folder or a folder within WP_CONTENT_DIR\n * @return bool\n *\/","file":"theme.php","line":304,"missingDoc":false,"filters":[],"uses":{"file_exists":[311,307]},"used_by":[]},"locale_stylesheet":{"doc":"\/**\n * Display localized stylesheet link element.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":537,"missingDoc":false,"filters":[],"uses":{"get_locale_stylesheet_uri":[538]},"used_by":[]},"preview_theme":{"doc":"\/**\n * Start preview theme output buffer.\n *\n * Will only preform task if the user has permissions and template and preview\n * query variables exist.\n *\n * @since 2.6.0\n *\/","file":"theme.php","line":552,"missingDoc":false,"filters":[],"uses":{"current_user_can":[556],"show_admin_bar":[561],"preg_replace":[563,571],"validate_file":[565,572],"add_filter":[568,574,578],"get_option":[578],"ob_start":[580]},"used_by":[]},"_preview_theme_template_filter":{"doc":"\/**\n * Private function to modify the current template when previewing a theme\n *\n * @since 2.9.0\n * @access private\n *\n * @return string\n *\/","file":"theme.php","line":592,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_preview_theme_stylesheet_filter":{"doc":"\/**\n * Private function to modify the current stylesheet when previewing a theme\n *\n * @since 2.9.0\n * @access private\n *\n * @return string\n *\/","file":"theme.php","line":604,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"preview_theme_ob_filter":{"doc":"\/**\n * Callback function for ob_start() to capture all links in the theme.\n *\n * @since 2.6.0\n * @access private\n *\n * @param string $content\n * @return string\n *\/","file":"theme.php","line":617,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[618]},"used_by":[]},"preview_theme_ob_filter_callback":{"doc":"\/**\n * Manipulates preview theme links in order to control and maintain location.\n *\n * Callback function for preg_replace_callback() to accept and filter matches.\n *\n * @since 2.6.0\n * @access private\n *\n * @param array $matches\n * @return string\n *\/","file":"theme.php","line":632,"missingDoc":false,"filters":[],"uses":{"preg_replace":[634],"strpos":[633,636,638,638,640,642,647],"home_url":[638],"add_query_arg":[646],"esc_attr":[649]},"used_by":[]},"get_theme_mods":{"doc":"\/**\n * Retrieve all theme modifications.\n *\n * @since 3.1.0\n *\n * @return array Theme modifications.\n *\/","file":"theme.php","line":746,"missingDoc":false,"filters":[],"uses":{"get_option":[747,749,752,748],"get":[751],"wp_get_theme":[751],"update_option":[754],"delete_option":[755],"is_admin":[753]},"used_by":{"get_theme_mod":[777],"set_theme_mod":[797],"remove_theme_mod":[817]}},"remove_theme_mods":{"doc":"\/**\n * Remove theme modifications option for current theme.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":836,"missingDoc":false,"filters":[],"uses":{"delete_option":[837,843],"get_option":[837,840],"get":[842],"wp_get_theme":[842]},"used_by":{"remove_theme_mod":[825]}},"get_header_textcolor":{"doc":"\/**\n * Retrieve text color for custom header.\n *\n * @since 2.1.0\n *\n * @return string\n *\/","file":"theme.php","line":853,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[854],"get_theme_support":[854]},"used_by":{"header_textcolor":[863]}},"header_textcolor":{"doc":"\/**\n * Display text color for custom header.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":862,"missingDoc":false,"filters":[],"uses":{"get_header_textcolor":[863]},"used_by":[]},"display_header_text":{"doc":"\/**\n * Whether to display the header text.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"theme.php","line":873,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[874],"get_theme_mod":[877],"get_theme_support":[877]},"used_by":[]},"get_header_image":{"doc":"\/**\n * Retrieve header image for custom header.\n *\n * @since 2.1.0\n *\n * @return string\n *\/","file":"theme.php","line":888,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[889],"get_theme_support":[889],"get_random_header_image":[895],"is_random_header_image":[894],"esc_url_raw":[897],"set_url_scheme":[897]},"used_by":{"header_image":[989],"_delete_attachment_theme_mod":[1591]}},"get_random_header_image":{"doc":"\/**\n * Get random header image url from registered images in theme.\n *\n * @since 3.2.0\n *\n * @return string Path to header image\n *\/","file":"theme.php","line":948,"missingDoc":false,"filters":[],"uses":{"_get_random_header_data":[949]},"used_by":{"get_header_image":[895],"is_random_header_image":[971,976]}},"is_random_header_image":{"doc":"\/**\n * Check if random header image is in use.\n *\n * Always true if user expressly chooses the option in Appearance > Header.\n * Also true if theme has multiple header images registered, no specific header image\n * is chosen, and theme turns on random headers with add_theme_support().\n *\n * @since 3.2.0\n *\n * @param string $type The random pool to use. any|default|uploaded\n * @return boolean\n *\/","file":"theme.php","line":967,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[968],"get_theme_support":[968],"get_random_header_image":[971,976]},"used_by":{"get_header_image":[894],"get_custom_header":[1033]}},"_get_random_header_data":{"doc":"\/**\n * Get random header image data from registered images in theme.\n *\n * @since 3.4.0\n *\n * @access private\n *\n * @return string Path to header image\n *\/","file":"theme.php","line":910,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[915],"get_uploaded_header_images":[919],"current_theme_supports":[924],"array_rand":[932],"sprintf":[934,935],"get_template_directory_uri":[934,935],"get_stylesheet_directory_uri":[934,935]},"used_by":{"get_random_header_image":[949],"get_custom_header":[1034]}},"header_image":{"doc":"\/**\n * Display header image path.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":988,"missingDoc":false,"filters":[],"uses":{"get_header_image":[989]},"used_by":[]},"get_custom_header":{"doc":"\/**\n * Get the header image data.\n *\n * @since 3.4.0\n *\n * @return object\n *\/","file":"theme.php","line":1030,"missingDoc":false,"filters":[],"uses":{"_get_random_header_data":[1034],"get_theme_mod":[1036],"get_template_directory_uri":[1038],"get_stylesheet_directory_uri":[1038],"vsprintf":[1040,1043,1047],"get_theme_support":[1040,1058,1059],"current_theme_supports":[1037],"is_random_header_image":[1033],"wp_parse_args":[1061]},"used_by":[]},"register_default_headers":{"doc":"\/**\n * Register a selection of default headers to be displayed by the custom header admin UI.\n *\n * @since 3.0.0\n *\n * @param array $headers Array of headers keyed by a string id. The ids point to arrays containing 'url', 'thumbnail_url', and 'description' keys.\n *\/","file":"theme.php","line":1071,"missingDoc":false,"filters":[],"uses":{"array_merge":[1074]},"used_by":[]},"unregister_default_headers":{"doc":"\/**\n * Unregister default headers.\n *\n * This function must be called after register_default_headers() has already added the\n * header you want to remove.\n *\n * @see register_default_headers()\n * @since 3.0.0\n *\n * @param string|array $header The header string id (key of array) to remove, or an array thereof.\n * @return True on success, false on failure.\n *\/","file":"theme.php","line":1089,"missingDoc":false,"filters":[],"uses":{"array_map":[1092],"is_array":[1091]},"used_by":[]},"background_image":{"doc":"\/**\n * Display background image path.\n *\n * @since 3.0.0\n *\/","file":"theme.php","line":1117,"missingDoc":false,"filters":[],"uses":{"get_background_image":[1118]},"used_by":[]},"get_background_color":{"doc":"\/**\n * Retrieve value for custom background color.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"theme.php","line":1128,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[1129],"get_theme_support":[1129]},"used_by":{"background_color":[1138]}},"background_color":{"doc":"\/**\n * Display background color value.\n *\n * @since 3.0.0\n *\/","file":"theme.php","line":1137,"missingDoc":false,"filters":[],"uses":{"get_background_color":[1138]},"used_by":[]},"_custom_background_cb":{"doc":"\/**\n * Default custom background callback.\n *\n * @since 3.0.0\n * @access protected\n *\/","file":"theme.php","line":1147,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[1149],"get_background_image":[1149],"get_theme_mod":[1153,1163,1168,1173],"in_array":[1164,1169,1174],"trim":[1182]},"used_by":[]},"add_editor_style":{"doc":"\/**\n * Add callback for custom TinyMCE editor stylesheets.\n *\n * The parameter $stylesheet is the name of the stylesheet, relative to\n * the theme root. It also accepts an array of stylesheets.\n * It is optional and defaults to 'editor-style.css'.\n *\n * This function automatically adds another stylesheet with -rtl prefix, e.g. editor-style-rtl.css.\n * If that file doesn't exist, it is removed before adding the stylesheet(s) to TinyMCE.\n * If an array of stylesheets is passed to add_editor_style(),\n * RTL is only added for the first stylesheet.\n *\n * Since version 3.4 the TinyMCE body has .rtl CSS class.\n * It is a better option to use that class and add any RTL styles to the main stylesheet.\n *\n * @since 3.0.0\n *\n * @param mixed $stylesheet Optional. Stylesheet name or array thereof, relative to theme root.\n * \tDefaults to 'editor-style.css'\n *\/","file":"theme.php","line":1207,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1209],"is_admin":[1211],"str_replace":[1218],"is_rtl":[1217],"array_merge":[1222]},"used_by":[]},"remove_editor_styles":{"doc":"\/**\n * Removes all visual editor stylesheets.\n *\n * @since 3.1.0\n *\n * @return bool True on success, false if there were no stylesheets to remove.\n *\/","file":"theme.php","line":1232,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1233],"_remove_theme_support":[1235],"is_admin":[1236]},"used_by":[]},"_remove_theme_support":{"doc":"\/**\n * Do not use. Removes theme support internally, ignorant of the blacklist.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"theme.php","line":1476,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1483],"did_action":[1492,1502],"get_theme_support":[1494,1504],"remove_action":[1496,1497,1505,1506]},"used_by":{"remove_editor_styles":[1235],"remove_theme_support":[1467]}},"_custom_header_background_just_in_time":{"doc":"\/**\n * Registers the internal custom header and background routines.\n *\n * @since 3.4.0\n * @access private\n *\/","file":"theme.php","line":1390,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1395,1409],"get_theme_support":[1397,1411],"add_action":[1399,1412],"is_admin":[1401,1414],"current_theme_supports":[1393,1407]},"used_by":[]},"require_if_theme_supports":{"doc":"\/**\n * Checks a theme's support for a given feature before loading the functions which implement it.\n *\n * @since 2.9.0\n * @param string $feature the feature being checked\n * @param string $include the file containing the functions that implement the feature\n *\/","file":"theme.php","line":1574,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1575]},"used_by":[]},"_delete_attachment_theme_mod":{"doc":"\/**\n * Checks an attachment being deleted to see if it's a header or background image.\n *\n * If true it removes the theme modification which would be pointing at the deleted\n * attachment\n *\n * @access private\n * @since 3.0.0\n * @param int $id the attachment id\n *\/","file":"theme.php","line":1589,"missingDoc":false,"filters":[],"uses":{"wp_get_attachment_url":[1590],"get_header_image":[1591],"get_background_image":[1592],"remove_theme_mod":[1595,1598]},"used_by":[]},"check_theme_switched":{"doc":"\/**\n * Checks if a theme has been changed and runs 'after_switch_theme' hook on the next WP load\n *\n * @since 3.3.0\n *\/","file":"theme.php","line":1608,"missingDoc":false,"filters":["'after_switch_theme'","'after_switch_theme'"],"uses":{"wp_get_theme":[1610],"get":[1613],"exists":[1612],"update_option":[1617],"get_option":[1609]},"used_by":[]},"_wp_customize_include":{"doc":"\/**\n * Includes and instantiates the WP_Customize_Manager class.\n *\n * Fires when ?wp_customize=on or on wp-admin\/customize.php.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1628,"missingDoc":false,"filters":[],"uses":{"is_admin":[1630],"basename":[1630]},"used_by":[]},"_wp_customize_loader_settings":{"doc":"\/**\n * Adds settings for the customize-loader script.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1645,"missingDoc":false,"filters":[],"uses":{"parse_url":[1648,1649],"admin_url":[1648,1658],"home_url":[1649],"strtolower":[1650,1650],"wp_is_mobile":[1653,1654],"preg_match":[1654],"esc_url":[1658],"json_encode":[1663],"get_data":[1665],"add_data":[1669]},"used_by":[]},"wp_customize_support_script":{"doc":"\/**\n * Prints a script to check whether or not the customizer is supported,\n * and apply either the no-customize-support or customize-support class\n * to the body.\n *\n * This function MUST be called inside the body tag.\n *\n * Ideally, call this function immediately after the body tag is opened.\n * This prevents a flash of unstyled content.\n *\n * It is also recommended that you add the \"no-customize-support\" class\n * to the body tag by default.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1703,"missingDoc":false,"filters":[],"uses":{"parse_url":[1704,1705],"admin_url":[1704],"home_url":[1705],"strtolower":[1706,1706]},"used_by":[]},"wp_version_check":{"doc":"\/**\n * Check WordPress version against the newest version.\n *\n * The WordPress version, PHP version, and Locale is sent. Checks against the\n * WordPress server at api.wordpress.org server. Will only check if WordPress\n * isn't installing.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_version Used to check against the newest WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":22,"missingDoc":false,"filters":["'core_version_check_locale'"],"uses":{"defined":[23,81],"phpversion":[28],"get_site_transient":[30],"is_object":[31],"time":[39,46,118],"get_locale":[43],"set_site_transient":[47,120],"preg_replace":[50],"db_version":[50],"method_exists":[49],"get_user_count":[55],"get_blog_count":[56],"network_site_url":[57],"count_users":[60],"home_url":[64,82,85],"is_multisite":[54],"http_build_query":[78],"wp_remote_get":[89],"is_wp_error":[91],"wp_remote_retrieve_response_code":[91],"trim":[94],"wp_remote_retrieve_body":[94],"maybe_unserialize":[95],"is_array":[97],"array_intersect_key":[105,112],"array_map":[105],"array_fill_keys":[106,112],"esc_url":[108],"esc_html":[110]},"used_by":{"_maybe_update_core":[379]}},"count_users":{"doc":"\/**\n * Count number of users who have each of the user roles.\n *\n * Assumes there are neither duplicated nor orphaned capabilities meta_values.\n * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query()\n * Using $strategy = 'time' this is CPU-intensive and should handle around 10^7 users.\n * Using $strategy = 'memory' this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257.\n *\n * @since 3.0.0\n * @param string $strategy 'time' or 'memory'\n * @return array Includes a grand total and an array of counts indexed by role strings.\n *\/","file":"user.php","line":874,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[878],"get_blog_prefix":[879],"get_names":[888],"like_escape":[893],"implode":[895],"get_row":[898],"get_col":[918],"maybe_unserialize":[921],"is_array":[922],"count":[933]},"used_by":{"wp_version_check":[60]}},"wp_update_plugins":{"doc":"\/**\n * Check plugin versions against the latest versions hosted on WordPress.org.\n *\n * The WordPress version, PHP version, and Locale is sent along with a list of\n * all plugins installed. Checks against the WordPress server at\n * api.wordpress.org. Will only check if WordPress isn't installing.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_version Used to notify the WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":136,"missingDoc":false,"filters":[],"uses":{"defined":[139,200],"function_exists":[143],"get_plugins":[146],"get_option":[147],"get_site_transient":[148],"is_object":[149],"time":[153,168,194],"current_filter":[156],"strval":[175,175],"is_array":[179,212],"set_site_transient":[195,217],"compact":[197],"serialize":[201],"get_bloginfo":[202],"wp_remote_post":[205],"is_wp_error":[207],"wp_remote_retrieve_response_code":[207],"maybe_unserialize":[210],"wp_remote_retrieve_body":[210]},"used_by":{"_maybe_update_plugins":[395]}},"wp_update_themes":{"doc":"\/**\n * Check theme versions against the latest versions hosted on WordPress.org.\n *\n * A list of all themes installed in sent to WP. Checks against the\n * WordPress server at api.wordpress.org. Will only check if WordPress isn't\n * installing.\n *\n * @package WordPress\n * @since 2.7.0\n * @uses $wp_version Used to notify the WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":233,"missingDoc":false,"filters":[],"uses":{"defined":[236,305],"wp_get_themes":[239],"get_site_transient":[240],"is_object":[241],"get_option":[248],"get_stylesheet":[251,253,260],"get":[251,254,255,256,257,258],"get_template":[259],"current_filter":[265],"time":[277,301,316],"strval":[282,282],"is_array":[286,320],"set_site_transient":[302,323],"serialize":[306],"get_bloginfo":[307],"wp_remote_post":[310],"is_wp_error":[312],"wp_remote_retrieve_response_code":[312],"maybe_unserialize":[319],"wp_remote_retrieve_body":[319]},"used_by":{"_maybe_update_themes":[412]}},"_maybe_update_core":{"doc":"","file":"update.php","line":368,"missingDoc":true,"filters":[],"uses":{"get_site_transient":[371],"time":[374],"wp_version_check":[379]},"used_by":[]},"_maybe_update_plugins":{"doc":"\/**\n * Check the last time plugins were run before checking plugin versions.\n *\n * This might have been backported to WordPress 2.6.1 for performance reasons.\n * This is used for the wp-admin to check only so often instead of every page\n * load.\n *\n * @since 2.7.0\n * @access private\n *\/","file":"update.php","line":391,"missingDoc":false,"filters":[],"uses":{"get_site_transient":[392],"time":[393],"wp_update_plugins":[395]},"used_by":[]},"_maybe_update_themes":{"doc":"\/**\n * Check themes versions only after a duration of time.\n *\n * This is for performance reasons to make sure that on the theme version\n * checker is not run on every page load.\n *\n * @since 2.7.0\n * @access private\n *\/","file":"update.php","line":407,"missingDoc":false,"filters":[],"uses":{"get_site_transient":[408],"time":[409],"wp_update_themes":[412]},"used_by":[]},"wp_schedule_update_checks":{"doc":"\/**\n * Schedule core, theme, and plugin update checks.\n *\n * @since 3.1.0\n *\/","file":"update.php","line":420,"missingDoc":false,"filters":[],"uses":{"wp_schedule_event":[422,425,428],"time":[422,425,428],"wp_next_scheduled":[421,424,427],"defined":[421,424,427]},"used_by":[]},"wp_signon":{"doc":"\/**\n * Authenticate user with remember capability.\n *\n * The credentials is an array that has 'user_login', 'user_password', and\n * 'remember' indices. If the credentials is not given, then the log in form\n * will be assumed and used if set.\n *\n * The various authentication cookies will be set by this function and will be\n * set for a longer period depending on if the 'remember' credential is set to\n * true.\n *\n * @since 2.5.0\n *\n * @param array $credentials Optional. User info in order to sign on.\n * @param bool $secure_cookie Optional. Whether to use secure cookie.\n * @return object Either WP_Error on failure, or WP_User on success.\n *\/","file":"user.php","line":25,"missingDoc":false,"filters":["'wp_authenticate'","'secure_signon_cookie'","'wp_login'"],"uses":{"is_ssl":[44],"add_filter":[51],"wp_authenticate":[53],"get_error_codes":[56],"is_wp_error":[55],"wp_set_auth_cookie":[63]},"used_by":[]},"wp_authenticate_username_password":{"doc":"","file":"user.php","line":72,"missingDoc":true,"filters":["'wp_authenticate_user'"],"uses":{"is_a":[73],"add":[79,82],"__":[79,82,90,95,101,110],"get_user_by":[87],"sprintf":[90,110],"wp_lostpassword_url":[90,111],"get_blog_details":[99],"is_object":[100],"is_super_admin":[98],"is_multisite":[92],"is_wp_error":[106],"wp_check_password":[109]},"used_by":[]},"wp_authenticate_cookie":{"doc":"\/**\n * Authenticate the user using the WordPress auth cookie.\n *\/","file":"user.php","line":119,"missingDoc":false,"filters":[],"uses":{"is_a":[120],"wp_validate_auth_cookie":[123],"__":[135]},"used_by":[]},"count_many_users_posts":{"doc":"\/**\n * Number of posts written by a list of users.\n *\n * @since 3.0.0\n *\n * @param array $users Array of user IDs.\n * @param string $post_type Optional. Post type to check. Defaults to post.\n * @param bool $public_only Optional. Only return counts for public posts. Defaults to false.\n * @return array Amount of posts each user has written.\n *\/","file":"user.php","line":172,"missingDoc":false,"filters":[],"uses":{"is_array":[176],"implode":[179],"array_map":[179],"get_posts_by_author_sql":[180],"get_results":[182]},"used_by":[]},"WP_User_Query::__construct":{"doc":"\/**\n * PHP5 constructor\n *\n * @since 3.1.0\n *\n * @param string|array $args The query variables\n * @return WP_User_Query\n *\/","file":"user.php","line":359,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[361],"prepare_query":[380],"query":[381]},"used_by":[]},"WP_User_Query::prepare_query":{"doc":"\/**\n * Prepare the query variables\n *\n * @since 3.1.0\n * @access private\n *\/","file":"user.php","line":391,"missingDoc":false,"filters":["'pre_user_query'"],"uses":{"array_unique":[397],"esc_sql":[401],"implode":[402,522,525],"is_array":[396],"in_array":[418,416],"get_posts_by_author_sql":[424],"strtoupper":[439],"prepare":[449,451],"trim":[454,467,495],"ltrim":[456],"rtrim":[457],"array_intersect":[471],"is_numeric":[475],"preg_match":[477],"wp_is_large_network":[477],"strpos":[473],"get_search_sql":[483],"absint":[486],"get_blog_prefix":[489,499],"is_multisite":[497],"parse_query_vars":[510],"get_sql":[513],"wp_parse_id_list":[522,525]},"used_by":[]},"WP_User_Query::query":{"doc":"\/**\n * Execute the query, with the current variables\n *\n * @since 3.1.0\n * @access private\n *\/","file":"user.php","line":538,"missingDoc":false,"filters":["'found_users_query'"],"uses":{"get_results":[544],"get_col":[546],"is_array":[543],"get_var":[550],"cache_users":[556]},"used_by":[]},"WP_User_Query::get":{"doc":"\/**\n * Retrieve query variable.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @return mixed\n *\/","file":"user.php","line":579,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::set":{"doc":"\/**\n * Set query variable.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @param mixed $value Query variable value.\n *\/","file":"user.php","line":595,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::get_search_sql":{"doc":"","file":"user.php","line":611,"missingDoc":true,"filters":[],"uses":{"esc_sql":[612],"like_escape":[621],"implode":[624]},"used_by":[]},"WP_User_Query::get_results":{"doc":"\/**\n * Return the list of users\n *\n * @since 3.1.0\n * @access public\n *\n * @return array\n *\/","file":"user.php","line":635,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::get_total":{"doc":"\/**\n * Return the total number of users for the current query\n *\n * @since 3.1.0\n * @access public\n *\n * @return array\n *\/","file":"user.php","line":647,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"add_user_meta":{"doc":"\/**\n * Add meta data field to a user.\n *\n * Post meta data is called \"Custom Fields\" on the Administration Screens.\n *\n * @since 3.0.0\n * @uses add_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"user.php","line":799,"missingDoc":false,"filters":[],"uses":{"add_metadata":[800]},"used_by":[]},"wp_dropdown_users":{"doc":"\/**\n * Create dropdown HTML content of users.\n *\n * The content can either be displayed, which it is by default or retrieved by\n * setting the 'echo' argument. The 'include' and 'exclude' arguments do not\n * need to be used; all users will be displayed in that case. Only one can be\n * used, either 'include' or 'exclude', but not both.\n *\n * The available arguments are as follows:\n * <ol>\n * <li>show_option_all - Text to show all and whether HTML option exists.<\/li>\n * <li>show_option_none - Text for show none and whether HTML option exists.<\/li>\n * <li>hide_if_only_one_author - Don't create the dropdown if there is only one user.<\/li>\n * <li>orderby - SQL order by clause for what order the users appear. Default is 'display_name'.<\/li>\n * <li>order - Default is 'ASC'. Can also be 'DESC'.<\/li>\n * <li>include - User IDs to include.<\/li>\n * <li>exclude - User IDs to exclude.<\/li>\n * <li>multi - Default is 'false'. Whether to skip the ID attribute on the 'select' element. A 'true' value is overridden when id argument is set.<\/li>\n * <li>show - Default is 'display_name'. User table column to display. If the selected item is empty then the user_login will be displayed in parentheses<\/li>\n * <li>echo - Default is '1'. Whether to display or retrieve content.<\/li>\n * <li>selected - Which User ID is selected.<\/li>\n * <li>include_selected - Always include the selected user ID in the dropdown. Default is false.<\/li>\n * <li>name - Default is 'user'. Name attribute of select element.<\/li>\n * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.<\/li>\n * <li>class - Class attribute of select element.<\/li>\n * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.<\/li>\n * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.<\/li>\n * <\/ol>\n *\n * @since 2.3.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param string|array $args Optional. Override defaults.\n * @return string|null Null on display. String of HTML content on retrieve.\n *\/","file":"user.php","line":1019,"missingDoc":false,"filters":["'wp_dropdown_users'"],"uses":{"is_author":[1029],"get_query_var":[1029],"wp_parse_args":[1031],"extract":[1032],"wp_array_slice_assoc":[1034],"get_users":[1036],"esc_attr":[1040,1044],"selected":[1052,1059,1068],"esc_html":[1063,1070],"get_userdata":[1067],"count":[1039]},"used_by":[]},"validate_username":{"doc":"\/**\n * Checks whether an username is valid.\n *\n * @since 2.0.1\n * @uses apply_filters() Calls 'validate_username' hook on $valid check and $username as parameters\n *\n * @param string $username Username.\n * @return bool Whether username given is valid\n *\/","file":"user.php","line":1230,"missingDoc":false,"filters":["'validate_username'"],"uses":{"sanitize_user":[1231]},"used_by":[]},"wp_insert_user":{"doc":"\/**\n * Insert an user into the database.\n *\n * Can update a current user or insert a new user based on whether the user's ID\n * is present.\n *\n * Can be used to update the user's info (see below), set the user's role, and\n * set the user's preference on whether they want the rich editor on.\n *\n * Most of the $userdata array fields have filters associated with the values.\n * The exceptions are 'rich_editing', 'role', 'jabber', 'aim', 'yim',\n * 'user_registered', and 'ID'. The filters have the prefix 'pre_user_' followed\n * by the field name. An example using 'description' would have the filter\n * called, 'pre_user_description' that can be hooked into.\n *\n * The $userdata array can contain the following fields:\n * 'ID' - An integer that will be used for updating an existing user.\n * 'user_pass' - A string that contains the plain text password for the user.\n * 'user_login' - A string that contains the user's username for logging in.\n * 'user_nicename' - A string that contains a URL-friendly name for the user.\n *\t\tThe default is the user's username.\n * 'user_url' - A string containing the user's URL for the user's web site.\n * 'user_email' - A string containing the user's email address.\n * 'display_name' - A string that will be shown on the site. Defaults to user's\n *\t\tusername. It is likely that you will want to change this, for appearance.\n * 'nickname' - The user's nickname, defaults to the user's username.\n * 'first_name' - The user's first name.\n * 'last_name' - The user's last name.\n * 'description' - A string containing content about the user.\n * 'rich_editing' - A string for whether to enable the rich editor. False\n *\t\tif not empty.\n * 'user_registered' - The date the user registered. Format is 'Y-m-d H:i:s'.\n * 'role' - A string used to set the user's role.\n * 'jabber' - User's Jabber account.\n * 'aim' - User's AOL IM account.\n * 'yim' - User's Yahoo IM account.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database layer.\n * @uses apply_filters() Calls filters for most of the $userdata fields with the prefix 'pre_user'. See note above.\n * @uses do_action() Calls 'profile_update' hook when updating giving the user's ID\n * @uses do_action() Calls 'user_register' hook when creating a new user giving the user's ID\n *\n * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.\n * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not be created.\n *\/","file":"user.php","line":1282,"missingDoc":false,"filters":["'pre_user_login'","'pre_user_nicename'","'pre_user_url'","'pre_user_email'","'pre_user_nickname'","'pre_user_first_name'","'pre_user_last_name'","'pre_user_display_name'","'pre_user_description'","'profile_update'","'user_register'"],"uses":{"get_object_vars":[1286],"is_a":[1287,1285],"to_array":[1288],"extract":[1290],"wp_hash_password":[1300],"sanitize_user":[1303],"trim":[1307],"__":[1310,1313,1328],"username_exists":[1312],"sanitize_title":[1316],"defined":[1327],"email_exists":[1327],"sprintf":[1347],"_x":[1347],"preg_replace":[1369],"gmdate":[1375],"get_var":[1380,1386],"prepare":[1380,1386],"compact":[1392,1396,1399],"stripslashes_deep":[1393],"update":[1396],"insert":[1399],"update_user_meta":[1407],"_get_additional_user_keys":[1405],"set_role":[1411,1413],"get_option":[1413],"wp_cache_delete":[1415,1416]},"used_by":{"wp_update_user":[1478],"wp_create_user":[1512]}},"_get_additional_user_keys":{"doc":"\/**\n * Return a list of meta keys that wp_insert_user() is supposed to set.\n *\n * @since 3.3.0\n * @access private\n *\n * @param object $user WP_User instance.\n * @return array\n *\/","file":"user.php","line":1524,"missingDoc":false,"filters":[],"uses":{"array_merge":[1526],"array_keys":[1526],"_wp_get_user_contactmethods":[1526]},"used_by":{"wp_insert_user":[1405],"wp_update_user":[1461]}},"_wp_get_user_contactmethods":{"doc":"\/**\n * Set up the default contact methods.\n *\n * @since 2.9.0\n * @access private\n *\n * @param object $user User data object (optional).\n * @return array $user_contactmethods Array of contact methods and their labels.\n *\/","file":"user.php","line":1538,"missingDoc":false,"filters":["'user_contactmethods'"],"uses":{"__":[1540,1541,1542]},"used_by":{"_get_additional_user_keys":[1526]}},"WP_Widget::widget":{"doc":"\/** Echo the widget content.\n *\n * Subclasses should over-ride this function to generate their widget code.\n *\n * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.\n * @param array $instance The settings for the particular instance of the widget\n *\/","file":"widgets.php","line":44,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::update":{"doc":"\/** Update a particular instance.\n *\n * This function should check that $new_instance is set correctly.\n * The newly calculated value of $instance should be returned.\n * If \"false\" is returned, the instance won't be saved\/updated.\n *\n * @param array $new_instance New settings for this instance as input by the user via form()\n * @param array $old_instance Old settings for this instance\n * @return array Settings to save or bool false to cancel saving\n *\/","file":"widgets.php","line":58,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::form":{"doc":"\/** Echo the settings update form\n *\n * @param array $instance Current settings\n *\/","file":"widgets.php","line":66,"missingDoc":false,"filters":[],"uses":{"__":[67]},"used_by":[]},"WP_Widget::WP_Widget":{"doc":"\/**\n * PHP4 constructor\n *\/","file":"widgets.php","line":76,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::__construct":{"doc":"\/**\n * PHP5 constructor\n *\n * @param string $id_base Optional Base ID for the widget, lower case,\n * if left empty a portion of the widget's class name will be used. Has to be unique.\n * @param string $name Name for the widget displayed on the configuration page.\n * @param array $widget_options Optional Passed to wp_register_sidebar_widget()\n *\t - description: shown on the configuration page\n *\t - classname\n * @param array $control_options Optional Passed to wp_register_widget_control()\n *\t - width: required if more than 250px\n *\t - height: currently not used but may be needed in the future\n *\/","file":"widgets.php","line":93,"missingDoc":false,"filters":[],"uses":{"preg_replace":[94],"strtolower":[94,94],"get_class":[94],"wp_parse_args":[97,98]},"used_by":[]},"WP_Widget::get_field_name":{"doc":"\/**\n * Constructs name attributes for use in form() fields\n *\n * This function should be used in form() methods to create name attributes for fields to be saved by update()\n *\n * @param string $field_name Field name\n * @return string Name attribute for $field_name\n *\/","file":"widgets.php","line":109,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::get_field_id":{"doc":"\/**\n * Constructs id attributes for use in form() fields\n *\n * This function should be used in form() methods to create id attributes for fields to be saved by update()\n *\n * @param string $field_name Field name\n * @return string ID attribute for $field_name\n *\/","file":"widgets.php","line":121,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_register":{"doc":"","file":"widgets.php","line":127,"missingDoc":true,"filters":[],"uses":{"get_settings":[128],"_set":[134,144],"_register_one":[135,145],"is_numeric":[133],"array_keys":[132],"is_array":[131]},"used_by":[]},"WP_Widget::_set":{"doc":"","file":"widgets.php","line":149,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_display_callback":{"doc":"","file":"widgets.php","line":154,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_update_callback":{"doc":"","file":"widgets.php","line":158,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_form_callback":{"doc":"","file":"widgets.php","line":162,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::display_callback":{"doc":"\/** Generate the actual widget content.\n *\tJust finds the instance and calls widget().\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":169,"missingDoc":false,"filters":["'widget_display_callback'"],"uses":{"is_numeric":[170],"wp_parse_args":[173],"_set":[174],"get_settings":[175],"widget":[182],"array_key_exists":[177]},"used_by":[]},"WP_Widget::update_callback":{"doc":"\/** Deal with changed settings.\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":188,"missingDoc":false,"filters":["'widget_update_callback'"],"uses":{"is_numeric":[191],"wp_parse_args":[194],"get_settings":[195],"wp_get_sidebars_widgets":[201],"is_array":[217],"stripslashes_deep":[227],"_set":[228],"update":[232],"save_settings":[243]},"used_by":[]},"wp_get_sidebars_widgets":{"doc":"\/**\n * Retrieve full list of sidebars and their widgets.\n *\n * Will upgrade sidebar widget list, if needed. Will also save updated list, if\n * needed.\n *\n * @since 2.2.0\n * @access private\n *\n * @param bool $deprecated Not used (deprecated).\n * @return array Upgraded list of widgets to version 3 array format when called from the admin.\n *\/","file":"widgets.php","line":1007,"missingDoc":false,"filters":["'sidebars_widgets'"],"uses":{"_deprecated_argument":[1009],"get_option":[1017,1021],"is_admin":[1015],"is_array":[1024]},"used_by":{"WP_Widget::update_callback":[201],"dynamic_sidebar":[867],"is_active_widget":[936],"is_active_sidebar":[986],"_wp_sidebars_changed":[1168]}},"WP_Widget::form_callback":{"doc":"\/** Generate the control form.\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":249,"missingDoc":false,"filters":["'widget_form_callback'","'in_widget_form'"],"uses":{"is_numeric":[250],"wp_parse_args":[253],"get_settings":[254],"_set":[258,261],"form":[270]},"used_by":[]},"WP_Widget::_register_one":{"doc":"\/** Helper function: Registers a single instance. *\/","file":"widgets.php","line":279,"missingDoc":false,"filters":[],"uses":{"wp_register_sidebar_widget":[280],"_get_display_callback":[280],"_register_widget_update_callback":[281],"_get_update_callback":[281],"_register_widget_form_callback":[282],"_get_form_callback":[282]},"used_by":[]},"wp_register_sidebar_widget":{"doc":"\/**\n * Register widget for use in sidebars.\n *\n * The default widget option is 'classname' that can be override.\n *\n * The function can also be used to unregister widgets when $output_callback\n * parameter is an empty string.\n *\n * @since 2.2.0\n *\n * @uses $wp_registered_widgets Uses stored registered widgets.\n * @uses $wp_register_widget_defaults Retrieves widget defaults.\n *\n * @param int|string $id Widget ID.\n * @param string $name Widget display title.\n * @param callback $output_callback Run when widget is called.\n * @param array|string $options Optional. Widget Options.\n * @param mixed $params,... Widget parameters to add to widget.\n * @return null Will return if $output_callback is empty after removing widget.\n *\/","file":"widgets.php","line":615,"missingDoc":false,"filters":["'wp_register_sidebar_widget'"],"uses":{"strtolower":[618],"_get_widget_id_base":[625],"in_array":[626],"is_callable":[626,646],"wp_parse_args":[637],"array_slice":[642],"func_get_args":[642],"array_merge":[644],"did_action":[646]},"used_by":{"WP_Widget::_register_one":[280],"wp_unregister_sidebar_widget":[705]}},"_register_widget_update_callback":{"doc":"","file":"widgets.php","line":774,"missingDoc":true,"filters":[],"uses":{"array_slice":[785],"func_get_args":[785],"array_merge":[788]},"used_by":{"WP_Widget::_register_one":[281]}},"_register_widget_form_callback":{"doc":"","file":"widgets.php","line":792,"missingDoc":true,"filters":[],"uses":{"strtolower":[795],"did_action":[802],"wp_parse_args":[806],"array_slice":[814],"func_get_args":[814],"array_merge":[816]},"used_by":{"WP_Widget::_register_one":[282]}},"WP_Widget::save_settings":{"doc":"","file":"widgets.php","line":285,"missingDoc":true,"filters":[],"uses":{"update_option":[287]},"used_by":[]},"WP_Widget::get_settings":{"doc":"","file":"widgets.php","line":290,"missingDoc":true,"filters":[],"uses":{"get_option":[291,294],"is_array":[296],"wp_convert_widget_settings":[301],"array_key_exists":[299]},"used_by":[]},"wp_convert_widget_settings":{"doc":"\/**\n * Convert the widget settings from single to multi-widget format.\n *\n * @since 2.8.0\n *\n * @return array\n *\/","file":"widgets.php","line":1071,"missingDoc":false,"filters":[],"uses":{"is_numeric":[1080],"array_keys":[1077],"get_option":[1092,1095],"is_admin":[1091,1111,1116],"is_array":[1100],"update_option":[1112,1117]},"used_by":{"WP_Widget::get_settings":[301]}},"WP_Widget_Factory::WP_Widget_Factory":{"doc":"","file":"widgets.php","line":319,"missingDoc":true,"filters":[],"uses":{"add_action":[320]},"used_by":[]},"WP_Widget_Factory::register":{"doc":"","file":"widgets.php","line":323,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget_Factory::unregister":{"doc":"","file":"widgets.php","line":327,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget_Factory::_register_widgets":{"doc":"","file":"widgets.php","line":332,"missingDoc":true,"filters":[],"uses":{"array_keys":[334,335],"array_map":[336],"in_array":[340],"_register":[345]},"used_by":[]},"unregister_widget":{"doc":"\/**\n * Unregister a widget\n *\n * Unregisters a WP_Widget widget. Useful for unregistering default widgets.\n * Run within a function hooked to the widgets_init action.\n *\n * @since 2.8.0\n *\n * @see WP_Widget\n * @see WP_Widget_Factory\n * @uses WP_Widget_Factory\n *\n * @param string $widget_class The name of a class that extends WP_Widget\n *\/","file":"widgets.php","line":448,"missingDoc":false,"filters":[],"uses":{"unregister":[451]},"used_by":[]},"register_sidebars":{"doc":"\/**\n * Creates multiple sidebars.\n *\n * If you wanted to quickly create multiple sidebars for a theme or internally.\n * This function will allow you to do so. If you don't pass the 'name' and\/or\n * 'id' in $args, then they will be built for you.\n *\n * The default for the name is \"Sidebar #\", with '#' being replaced with the\n * number the sidebar is currently when greater than one. If first sidebar, the\n * name will be just \"Sidebar\". The default for id is \"sidebar-\" followed by the\n * number the sidebar creation is currently at. If the id is provided, and multiple\n * sidebars are being defined, the id will have \"-2\" appended, and so on.\n *\n * @since 2.2.0\n *\n * @see register_sidebar() The second parameter is documented by register_sidebar() and is the same here.\n * @uses parse_str() Converts a string to an array to be used in the rest of the function.\n * @uses register_sidebar() Sends single sidebar information [name, id] to this\n *\tfunction to handle building the sidebar.\n *\n * @param int $number Number of sidebars to create.\n * @param string|array $args Builds Sidebar based off of 'name' and 'id' values.\n *\/","file":"widgets.php","line":477,"missingDoc":false,"filters":[],"uses":{"parse_str":[482],"is_string":[481],"sprintf":[488,488],"__":[488,490],"count":[500],"register_sidebar":[505]},"used_by":[]},"register_sidebar":{"doc":"\/**\n * Builds the definition for a single sidebar and returns the ID.\n *\n * Accepts either a string or an array and then parses that against a set\n * of default arguments for the new sidebar. WordPress will automatically\n * generate a sidebar ID and name based on the current number of registered\n * sidebars if those arguments are not included.\n *\n * When allowing for automatic generation of the name and ID parameters, keep\n * in mind that the incrementor for your sidebar can change over time depending\n * on what other plugins and themes are installed.\n *\n * If theme support for 'widgets' has not yet been added when this function is\n * called, it will be automatically enabled through the use of add_theme_support()\n *\n * Arguments passed as a string should be separated by '&':\n *\n * e.g. 'name=Sidebar&id=my_prefix_sidebar'\n *\n * The same arguments passed as an array:\n *\n * array(\n * 'name' => 'Sidebar',\n * 'id' => 'my_prefix_sidebar',\n * )\n *\n * Arguments:\n * name - The name or title of the sidebar displayed in the admin dashboard.\n * id - The unique identifier by which the sidebar will be called.\n * before_widget - HTML content that will be prepended to each widget's HTML output\n * when assigned to this sidebar.\n * after_widget - HTML content that will be appended to each widget's HTML output\n * when assigned to this sidebar.\n * before_title - HTML content that will be prepended to the sidebar title when displayed.\n * after_title - HTML content that will be appended to the sidebar title when displayed.\n *\n * @since 2.2.0\n * @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.\n * @uses add_theme_support() to ensure widget support has been added.\n *\n * @param string|array $args Arguments for the sidebar being registered.\n * @return string Sidebar ID added to $wp_registered_sidebars global.\n *\/","file":"widgets.php","line":552,"missingDoc":false,"filters":["'register_sidebar'"],"uses":{"count":[555],"sprintf":[558],"__":[558],"wp_parse_args":[568],"add_theme_support":[572]},"used_by":{"register_sidebars":[505]}},"unregister_sidebar":{"doc":"\/**\n * Removes a sidebar from the list.\n *\n * @since 2.2.0\n *\n * @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.\n *\n * @param string $name The ID of the sidebar when it was added.\n *\/","file":"widgets.php","line":588,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_get_widget_id_base":{"doc":"\/**\n * Private\n *\/","file":"widgets.php","line":1154,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1155]},"used_by":{"wp_register_sidebar_widget":[625],"wp_register_widget_control":[731],"is_active_widget":[945]}},"wp_widget_description":{"doc":"\/**\n * Retrieve description for widget.\n *\n * When registering widgets, the options can also include 'description' that\n * describes the widget for display on the widget administration panel or\n * in the theme.\n *\n * @since 2.5.0\n *\n * @param int|string $id Widget ID.\n * @return string Widget description, if available. Null on failure to retrieve description.\n *\/","file":"widgets.php","line":664,"missingDoc":false,"filters":[],"uses":{"is_scalar":[665],"esc_html":[671]},"used_by":[]},"wp_sidebar_description":{"doc":"\/**\n * Retrieve description for a sidebar.\n *\n * When registering sidebars a 'description' parameter can be included that\n * describes the sidebar for display on the widget administration panel.\n *\n * @since 2.9.0\n *\n * @param int|string $id sidebar ID.\n * @return string Sidebar description, if available. Null on failure to retrieve description.\n *\/","file":"widgets.php","line":685,"missingDoc":false,"filters":[],"uses":{"is_scalar":[686],"esc_html":[692]},"used_by":[]},"wp_register_widget_control":{"doc":"\/**\n * Registers widget control callback for customizing options.\n *\n * The options contains the 'height', 'width', and 'id_base' keys. The 'height'\n * option is never used. The 'width' option is the width of the fully expanded\n * control form, but try hard to use the default width. The 'id_base' is for\n * multi-widgets (widgets which allow multiple instances such as the text\n * widget), an id_base must be provided. The widget id will end up looking like\n * {$id_base}-{$unique_number}.\n *\n * @since 2.2.0\n *\n * @param int|string $id Sidebar ID.\n * @param string $name Sidebar display name.\n * @param callback $control_callback Run when sidebar is displayed.\n * @param array|string $options Optional. Widget options. See above long description.\n * @param mixed $params,... Optional. Additional parameters to add to widget.\n *\/","file":"widgets.php","line":727,"missingDoc":false,"filters":[],"uses":{"strtolower":[730],"_get_widget_id_base":[731],"in_array":[739],"is_callable":[739],"did_action":[746],"wp_parse_args":[750],"array_slice":[758],"func_get_args":[758],"array_merge":[760]},"used_by":{"wp_unregister_widget_control":[830]}},"is_dynamic_sidebar":{"doc":"\/**\n * Whether the dynamic sidebar is enabled and used by theme.\n *\n * @since 2.2.0\n *\n * @return bool True, if using widgets. False, if not using widgets.\n *\/","file":"widgets.php","line":963,"missingDoc":false,"filters":[],"uses":{"get_option":[965],"array_key_exists":[969],"count":[967]},"used_by":[]},"is_active_sidebar":{"doc":"\/**\n * Whether a sidebar is in use.\n *\n * @since 2.8\n *\n * @param mixed $index Sidebar name, id or number to check.\n * @return bool true if the sidebar is in use, false otherwise.\n *\/","file":"widgets.php","line":984,"missingDoc":false,"filters":[],"uses":{"is_int":[985],"sanitize_title":[985],"wp_get_sidebars_widgets":[986]},"used_by":[]},"wp_set_sidebars_widgets":{"doc":"\/**\n * Set the sidebar widget option to update sidebars.\n *\n * @since 2.2.0\n * @access private\n *\n * @param array $sidebars_widgets Sidebar widgets and their settings.\n *\/","file":"widgets.php","line":1039,"missingDoc":false,"filters":[],"uses":{"update_option":[1042]},"used_by":{"retrieve_widgets":[1267]}},"wp_get_widget_defaults":{"doc":"\/**\n * Retrieve default registered sidebars list.\n *\n * @since 2.2.0\n * @access private\n *\n * @return array\n *\/","file":"widgets.php","line":1053,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"the_widget":{"doc":"\/**\n * Output an arbitrary widget as a template tag\n *\n * @since 2.8\n *\n * @param string $widget the widget's PHP class name (see default-widgets.php)\n * @param array $instance the widget's instance settings\n * @param array $args the widget's sidebar args\n * @return void\n **\/","file":"widgets.php","line":1132,"missingDoc":false,"filters":["'the_widget'"],"uses":{"is_a":[1136],"sprintf":[1139],"wp_parse_args":[1142,1143],"_set":[1147],"widget":[1148]},"used_by":[]},"_wp_sidebars_changed":{"doc":"\/**\n * Handle sidebars config after theme change\n *\n * @access private\n * @since 3.3.0\n *\/","file":"widgets.php","line":1164,"missingDoc":false,"filters":[],"uses":{"wp_get_sidebars_widgets":[1168],"is_array":[1167],"retrieve_widgets":[1170]},"used_by":[]},"retrieve_widgets":{"doc":"","file":"widgets.php","line":1174,"missingDoc":true,"filters":[],"uses":{"array_keys":[1177,1201],"get_theme_mod":[1180],"remove_theme_mod":[1184],"substr":[1187],"in_array":[1190,1255],"sort":[1202,1203],"array_shift":[1216],"is_array":[1227,1181,1236],"array_merge":[1246,1266],"preg_replace":[1258],"wp_set_sidebars_widgets":[1267]},"used_by":{"_wp_sidebars_changed":[1170]}},"wpdb::__construct":{"doc":"\/**\n * Connects to the database server and selects a database\n *\n * PHP5 style constructor for compatibility with PHP5. Does\n * the actual setting up of the class properties and connection\n * to the database.\n *\n * @link http:\/\/core.trac.wordpress.org\/ticket\/3354\n * @since 2.0.8\n *\n * @param string $dbuser MySQL database user\n * @param string $dbpassword MySQL database password\n * @param string $dbname MySQL database name\n * @param string $dbhost MySQL database host\n *\/","file":"wp-db.php","line":536,"missingDoc":false,"filters":[],"uses":{"register_shutdown_function":[537],"show_errors":[540],"init_charset":[542],"db_connect":[549]},"used_by":[]},"wpdb::__destruct":{"doc":"\/**\n * PHP5 style destructor and will run when database object is destroyed.\n *\n * @see wpdb::__construct()\n * @since 2.0.8\n * @return bool true\n *\/","file":"wp-db.php","line":559,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__get":{"doc":"\/**\n * PHP5 style magic getter, used to lazy-load expensive data.\n *\n * @since 3.5.0\n *\n * @param string $name The private member to get, and optionally process\n * @return mixed The private member\n *\/","file":"wp-db.php","line":571,"missingDoc":false,"filters":[],"uses":{"load_col_info":[573]},"used_by":[]},"wpdb::__set":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to set\n * @param mixed $value The value to set\n *\/","file":"wp-db.php","line":586,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__isset":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to check\n *\n * @return bool If the member is set or not\n *\/","file":"wp-db.php","line":599,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__unset":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to unset\n *\/","file":"wp-db.php","line":610,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::init_charset":{"doc":"\/**\n * Set $this->charset and $this->collate\n *\n * @since 3.1.0\n *\/","file":"wp-db.php","line":619,"missingDoc":false,"filters":[],"uses":{"defined":[622,626,630],"function_exists":[620],"is_multisite":[620]},"used_by":[]},"wpdb::set_charset":{"doc":"\/**\n * Sets the connection's character set.\n *\n * @since 3.1.0\n *\n * @param resource $dbh The resource given by mysql_connect\n * @param string $charset The character set (optional)\n * @param string $collate The collation (optional)\n *\/","file":"wp-db.php","line":643,"missingDoc":false,"filters":[],"uses":{"mysql_set_charset":[650],"prepare":[653,655],"mysql_query":[656],"function_exists":[649],"has_cap":[649,648]},"used_by":[]},"wpdb::set_prefix":{"doc":"\/**\n * Sets the table prefix for the WordPress tables.\n *\n * @since 2.5.0\n *\n * @param string $prefix Alphanumeric name for the new prefix.\n * @param bool $set_table_names Optional. Whether the table names, e.g. wpdb::$posts, should be updated or not.\n * @return string|WP_Error Old prefix or WP_Error on error\n *\/","file":"wp-db.php","line":670,"missingDoc":false,"filters":[],"uses":{"preg_match":[672],"is_multisite":[675,686],"tables":[683,691,694],"get_blog_prefix":[689]},"used_by":[]},"wpdb::set_blog_id":{"doc":"\/**\n * Sets blog id.\n *\n * @since 3.0.0\n * @access public\n * @param int $blog_id\n * @param int $site_id Optional.\n * @return string previous blog id\n *\/","file":"wp-db.php","line":709,"missingDoc":false,"filters":[],"uses":{"get_blog_prefix":[716],"tables":[718,721]},"used_by":[]},"wpdb::get_blog_prefix":{"doc":"\/**\n * Gets blog prefix.\n *\n * @uses is_multisite()\n * @since 3.0.0\n * @param int $blog_id Optional.\n * @return string Blog prefix.\n *\/","file":"wp-db.php","line":735,"missingDoc":false,"filters":[],"uses":{"defined":[740],"is_multisite":[736]},"used_by":[]},"wpdb::tables":{"doc":"\/**\n * Returns an array of WordPress tables.\n *\n * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to\n * override the WordPress users and usermeta tables that would otherwise\n * be determined by the prefix.\n *\n * The scope argument can take one of the following:\n *\n * 'all' - returns 'all' and 'global' tables. No old tables are returned.\n * 'blog' - returns the blog-level tables for the queried blog.\n * 'global' - returns the global tables for the installation, returning multisite tables only if running multisite.\n * 'ms_global' - returns the multisite global tables, regardless if current installation is multisite.\n * 'old' - returns tables which are deprecated.\n *\n * @since 3.0.0\n * @uses wpdb::$tables\n * @uses wpdb::$old_tables\n * @uses wpdb::$global_tables\n * @uses wpdb::$ms_global_tables\n * @uses is_multisite()\n *\n * @param string $scope Optional. Can be all, global, ms_global, blog, or old tables. Defaults to all.\n * @param bool $prefix Optional. Whether to include table prefixes. Default true. If blog\n * \tprefix is requested, then the custom users and usermeta tables will be mapped.\n * @param int $blog_id Optional. The blog_id to prefix. Defaults to wpdb::$blogid. Used only when prefix is requested.\n * @return array Table names. When a prefix is requested, the key is the unprefixed table name.\n *\/","file":"wp-db.php","line":777,"missingDoc":false,"filters":[],"uses":{"array_merge":[780,782,790,808],"is_multisite":[781,789],"get_blog_prefix":[806],"in_array":[810],"defined":[817,820]},"used_by":[]},"wpdb::select":{"doc":"\/**\n * Selects a database using the current database connection.\n *\n * The database name will be changed based on the current database\n * connection. On failure, the execution will bail and display an DB error.\n *\n * @since 0.71\n *\n * @param string $db MySQL database name\n * @param resource $dbh Optional link identifier.\n * @return null Always null.\n *\/","file":"wp-db.php","line":839,"missingDoc":false,"filters":[],"uses":{"is_null":[840],"wp_load_translations_early":[845],"bail":[846],"sprintf":[846],"__":[846],"htmlspecialchars":[853,853],"mysql_select_db":[843]},"used_by":[]},"wpdb::_weak_escape":{"doc":"\/**\n * Weak escape, using addslashes()\n *\n * @see addslashes()\n * @since 2.8.0\n * @access private\n *\n * @param string $string\n * @return string\n *\/","file":"wp-db.php","line":868,"missingDoc":false,"filters":[],"uses":{"addslashes":[869]},"used_by":[]},"wpdb::_real_escape":{"doc":"\/**\n * Real escape, using mysql_real_escape_string() or addslashes()\n *\n * @see mysql_real_escape_string()\n * @see addslashes()\n * @since 2.8.0\n * @access private\n *\n * @param string $string to escape\n * @return string escaped\n *\/","file":"wp-db.php","line":883,"missingDoc":false,"filters":[],"uses":{"mysql_real_escape_string":[885],"addslashes":[887]},"used_by":[]},"wpdb::_escape":{"doc":"\/**\n * Escape data. Works on arrays.\n *\n * @uses wpdb::_escape()\n * @uses wpdb::_real_escape()\n * @since 2.8.0\n * @access private\n *\n * @param string|array $data\n * @return string|array escaped\n *\/","file":"wp-db.php","line":901,"missingDoc":false,"filters":[],"uses":{"_escape":[905],"_real_escape":[907,910],"is_array":[904,902]},"used_by":[]},"wpdb::escape":{"doc":"\/**\n * Escapes content for insertion into the database using addslashes(), for security.\n *\n * Works on arrays.\n *\n * @since 0.71\n * @param string|array $data to escape\n * @return string|array escaped as query safe string\n *\/","file":"wp-db.php","line":925,"missingDoc":false,"filters":[],"uses":{"escape":[929],"_weak_escape":[931,934],"is_array":[928,926]},"used_by":[]},"wpdb::escape_by_ref":{"doc":"\/**\n * Escapes content by reference for insertion into the database, for security\n *\n * @uses wpdb::_real_escape()\n * @since 2.3.0\n * @param string $string to escape\n * @return void\n *\/","file":"wp-db.php","line":948,"missingDoc":false,"filters":[],"uses":{"_real_escape":[950],"is_float":[949]},"used_by":[]},"wpdb::prepare":{"doc":"\/**\n * Prepares a SQL query for safe execution. Uses sprintf()-like syntax.\n *\n * The following directives can be used in the query format string:\n * %d (integer)\n * %f (float)\n * %s (string)\n * %% (literal percentage sign - no argument needed)\n *\n * All of %d, %f, and %s are to be left unquoted in the query string and they need an argument passed for them.\n * Literals (%) as parts of the query must be properly written as %%.\n *\n * This function only supports a small subset of the sprintf syntax; it only supports %d (integer), %f (float), and %s (string).\n * Does not support sign, padding, alignment, width or precision specifiers.\n * Does not support argument numbering\/swapping.\n *\n * May be called like {@link http:\/\/php.net\/sprintf sprintf()} or like {@link http:\/\/php.net\/vsprintf vsprintf()}.\n *\n * Both %d and %s should be left unquoted in the query string.\n *\n * <code>\n * wpdb::prepare( \"SELECT * FROM `table` WHERE `column` = %s AND `field` = %d\", 'foo', 1337 )\n * wpdb::prepare( \"SELECT DATE_FORMAT(`field`, '%%c') FROM `table` WHERE `column` = %s\", 'foo' );\n * <\/code>\n *\n * @link http:\/\/php.net\/sprintf Description of syntax.\n * @since 2.3.0\n *\n * @param string $query Query statement with sprintf()-like placeholders\n * @param array|mixed $args The array of variables to substitute into the query's placeholders if being called like\n * \t{@link http:\/\/php.net\/vsprintf vsprintf()}, or the first variable to substitute into the query's placeholders if\n * \tbeing called like {@link http:\/\/php.net\/sprintf sprintf()}.\n * @param mixed $args,... further variables to substitute into the query's placeholders if being called like\n * \t{@link http:\/\/php.net\/sprintf sprintf()}.\n * @return null|false|string Sanitized query string, null if there is no query, false if there is an error and string\n * \tif there was something to prepare\n *\/","file":"wp-db.php","line":990,"missingDoc":false,"filters":[],"uses":{"is_null":[991],"func_get_args":[994],"array_shift":[995],"is_array":[997],"str_replace":[999,1000],"preg_replace":[1001,1002],"array_walk":[1003],"vsprintf":[1004]},"used_by":[]},"wpdb::print_error":{"doc":"\/**\n * Print SQL\/DB error.\n *\n * @since 0.71\n * @global array $EZSQL_ERROR Stores error information of query and error string\n *\n * @param string $str The error to display\n * @return bool False if the showing of errors is disabled.\n *\/","file":"wp-db.php","line":1016,"missingDoc":false,"filters":[],"uses":{"mysql_error":[1020],"wp_load_translations_early":[1026],"sprintf":[1029,1031],"__":[1029,1031],"get_caller":[1028],"error_log":[1033,1043],"defined":[1042,1044],"wp_die":[1045],"htmlspecialchars":[1047,1048],"is_multisite":[1040]},"used_by":[]},"wpdb::show_errors":{"doc":"\/**\n * Enables showing of database errors.\n *\n * This function should be used only to enable showing of errors.\n * wpdb::hide_errors() should be used instead for hiding of errors. However,\n * this function can be used to enable and disable showing of database\n * errors.\n *\n * @since 0.71\n * @see wpdb::hide_errors()\n *\n * @param bool $show Whether to show or hide errors\n * @return bool Old value for showing errors.\n *\/","file":"wp-db.php","line":1071,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::hide_errors":{"doc":"\/**\n * Disables showing of database errors.\n *\n * By default database errors are not shown.\n *\n * @since 0.71\n * @see wpdb::show_errors()\n *\n * @return bool Whether showing of errors was active\n *\/","file":"wp-db.php","line":1087,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::suppress_errors":{"doc":"\/**\n * Whether to suppress database errors.\n *\n * By default database errors are suppressed, with a simple\n * call to this function they can be enabled.\n *\n * @since 2.5.0\n * @see wpdb::hide_errors()\n * @param bool $suppress Optional. New value. Defaults to true.\n * @return bool Old value\n *\/","file":"wp-db.php","line":1104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::flush":{"doc":"\/**\n * Kill cached query results.\n *\n * @since 0.71\n * @return void\n *\/","file":"wp-db.php","line":1116,"missingDoc":false,"filters":[],"uses":{"mysql_free_result":[1122],"is_resource":[1121]},"used_by":[]},"wpdb::db_connect":{"doc":"\/**\n * Connect to and select database\n *\n * @since 3.0.0\n *\/","file":"wp-db.php","line":1130,"missingDoc":false,"filters":[],"uses":{"defined":[1134,1135],"mysql_connect":[1138,1140],"wp_load_translations_early":[1144],"bail":[1145],"sprintf":[1145],"__":[1145],"htmlspecialchars":[1154],"set_charset":[1159],"select":[1163]},"used_by":[]},"wpdb::query":{"doc":"\/**\n * Perform a MySQL database query, using current database connection.\n *\n * More information can be found on the codex page.\n *\n * @since 0.71\n *\n * @param string $query Database query\n * @return int|false Number of rows affected\/selected or false on error\n *\/","file":"wp-db.php","line":1176,"missingDoc":false,"filters":["'query'"],"uses":{"flush":[1184],"timer_start":[1193],"defined":[1192,1198],"mysql_query":[1195],"timer_stop":[1199],"get_caller":[1199],"print_error":[1203],"mysql_error":[1202],"preg_match":[1209,1212,1207],"mysql_affected_rows":[1210],"mysql_insert_id":[1213],"mysql_fetch_object":[1219]},"used_by":[]},"wpdb::insert":{"doc":"\/**\n * Insert a row into a table.\n *\n * <code>\n * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 'bar' ) )\n * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) )\n * <\/code>\n *\n * @since 2.5.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows inserted, or false on error.\n *\/","file":"wp-db.php","line":1252,"missingDoc":false,"filters":[],"uses":{"_insert_replace_helper":[1253]},"used_by":[]},"wpdb::replace":{"doc":"\/**\n * Replace a row into a table.\n *\n * <code>\n * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 'bar' ) )\n * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) )\n * <\/code>\n *\n * @since 3.0.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows affected, or false on error.\n *\/","file":"wp-db.php","line":1275,"missingDoc":false,"filters":[],"uses":{"_insert_replace_helper":[1276]},"used_by":[]},"wpdb::_insert_replace_helper":{"doc":"\/**\n * Helper function for insert and replace.\n *\n * Runs an insert or replace query based on $type argument.\n *\n * @access private\n * @since 3.0.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT.\n * @return int|false The number of rows affected, or false on error.\n *\/","file":"wp-db.php","line":1297,"missingDoc":false,"filters":[],"uses":{"in_array":[1298],"strtoupper":[1298],"array_keys":[1301],"array_shift":[1305],"implode":[1312,1312],"query":[1313],"prepare":[1313]},"used_by":[]},"wpdb::update":{"doc":"\/**\n * Update a row in the table\n *\n * <code>\n * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 'bar' ), array( 'ID' => 1 ) )\n * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) )\n * <\/code>\n *\n * @since 2.5.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to update (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be \"raw\".\n * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings.\n * @return int|false The number of rows updated, or false on error.\n *\/","file":"wp-db.php","line":1337,"missingDoc":false,"filters":[],"uses":{"is_array":[1338,1338],"array_shift":[1345,1356],"array_keys":[1343,1354],"implode":[1364,1364],"query":[1365],"prepare":[1365],"array_merge":[1365],"array_values":[1365,1365]},"used_by":[]},"wpdb::delete":{"doc":"\/**\n * Delete a row in the table\n *\n * <code>\n * wpdb::delete( 'table', array( 'ID' => 1 ) )\n * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) )\n * <\/code>\n *\n * @since 3.4.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be \"raw\".\n * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows updated, or false on error.\n *\/","file":"wp-db.php","line":1386,"missingDoc":false,"filters":[],"uses":{"is_array":[1387],"array_shift":[1396],"array_keys":[1394],"implode":[1406],"query":[1407],"prepare":[1407]},"used_by":[]},"wpdb::get_var":{"doc":"\/**\n * Retrieve one variable from the database.\n *\n * Executes a SQL query and returns the value from the SQL result.\n * If the SQL result contains more than one column and\/or more than one row, this function returns the value in the column and row specified.\n * If $query is null, this function returns the value in the specified column and row from the previous SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query.\n * @param int $x Optional. Column of value to return. Indexed from 0.\n * @param int $y Optional. Row of value to return. Indexed from 0.\n * @return string|null Database query result (as string), or null on failure\n *\/","file":"wp-db.php","line":1425,"missingDoc":false,"filters":[],"uses":{"query":[1428],"array_values":[1432],"get_object_vars":[1432]},"used_by":[]},"wpdb::get_row":{"doc":"\/**\n * Retrieve one row from the database.\n *\n * Executes a SQL query and returns the row from the SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query SQL query.\n * @param string $output Optional. one of ARRAY_A | ARRAY_N | OBJECT constants. Return an associative array (column => value, ...),\n * \ta numerically indexed array (0 => value, ...) or an object ( ->column = value ), respectively.\n * @param int $y Optional. Row to return. Indexed from 0.\n * @return mixed Database query result in format specified by $output or null on failure\n *\/","file":"wp-db.php","line":1452,"missingDoc":false,"filters":[],"uses":{"query":[1455],"get_object_vars":[1465,1467],"array_values":[1467],"print_error":[1469]},"used_by":[]},"wpdb::get_col":{"doc":"\/**\n * Retrieve one column from the database.\n *\n * Executes a SQL query and returns the column from the SQL result.\n * If the SQL result contains more than one column, this function returns the column specified.\n * If $query is null, this function returns the specified column from the previous SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query Optional. SQL query. Defaults to previous query.\n * @param int $x Optional. Column to return. Indexed from 0.\n * @return array Database query result. Array indexed from 0 by SQL result row number.\n *\/","file":"wp-db.php","line":1486,"missingDoc":false,"filters":[],"uses":{"query":[1488],"count":[1492],"get_var":[1493]},"used_by":[]},"wpdb::get_results":{"doc":"\/**\n * Retrieve an entire SQL result set from the database (i.e., many rows)\n *\n * Executes a SQL query and returns the entire SQL result.\n *\n * @since 0.71\n *\n * @param string $query SQL query.\n * @param string $output Optional. Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants. With one of the first three, return an array of rows indexed from 0 by SQL result row number.\n * \tEach row is an associative array (column => value, ...), a numerically indexed array (0 => value, ...), or an object. ( ->column = value ), respectively.\n * \tWith OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded.\n * @return mixed Database query results\n *\/","file":"wp-db.php","line":1511,"missingDoc":false,"filters":[],"uses":{"query":[1515],"get_object_vars":[1527,1539,1542],"array_shift":[1528],"array_values":[1539]},"used_by":[]},"wpdb::load_col_info":{"doc":"\/**\n * Load the column metadata from the last query.\n *\n * @since 3.5.0\n *\n * @access protected\n *\/","file":"wp-db.php","line":1558,"missingDoc":false,"filters":[],"uses":{"mysql_num_fields":[1562],"mysql_fetch_field":[1563]},"used_by":[]},"wpdb::get_col_info":{"doc":"\/**\n * Retrieve column metadata from the last query.\n *\n * @since 0.71\n *\n * @param string $info_type Optional. Type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill\n * @param int $col_offset Optional. 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type\n * @return mixed Column Results\n *\/","file":"wp-db.php","line":1576,"missingDoc":false,"filters":[],"uses":{"load_col_info":[1577]},"used_by":[]},"wpdb::timer_start":{"doc":"\/**\n * Starts the timer, for debugging purposes.\n *\n * @since 1.5.0\n *\n * @return true\n *\/","file":"wp-db.php","line":1601,"missingDoc":false,"filters":[],"uses":{"microtime":[1602]},"used_by":[]},"wpdb::timer_stop":{"doc":"\/**\n * Stops the debugging timer.\n *\n * @since 1.5.0\n *\n * @return float Total time spent on the query, in seconds\n *\/","file":"wp-db.php","line":1613,"missingDoc":false,"filters":[],"uses":{"microtime":[1614]},"used_by":[]},"wpdb::bail":{"doc":"\/**\n * Wraps errors in a nice header and footer and dies.\n *\n * Will not die if wpdb::$show_errors is false.\n *\n * @since 1.5.0\n *\n * @param string $message The Error message\n * @param string $error_code Optional. A Computer readable string to identify the error.\n * @return false|void\n *\/","file":"wp-db.php","line":1628,"missingDoc":false,"filters":[],"uses":{"class_exists":[1630],"wp_die":[1636]},"used_by":[]},"wpdb::check_database_version":{"doc":"\/**\n * Whether MySQL database is at least the required minimum version.\n *\n * @since 2.5.0\n * @uses $wp_version\n * @uses $required_mysql_version\n *\n * @return WP_Error\n *\/","file":"wp-db.php","line":1648,"missingDoc":false,"filters":[],"uses":{"sprintf":[1652],"__":[1652],"version_compare":[1651],"db_version":[1651]},"used_by":[]},"wpdb::supports_collation":{"doc":"\/**\n * Whether the database supports collation.\n *\n * Called when WordPress is generating the table scheme.\n *\n * @since 2.5.0\n * @deprecated 3.5.0\n * @deprecated Use wpdb::has_cap( 'collation' )\n *\n * @return bool True if collation is supported, false if version does not\n *\/","file":"wp-db.php","line":1666,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1667],"has_cap":[1668]},"used_by":[]},"wpdb::get_charset_collate":{"doc":"\/**\n * The database character collate.\n *\n * @since 3.5.0\n *\n * @return string The database character collate.\n *\/","file":"wp-db.php","line":1678,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::has_cap":{"doc":"\/**\n * Determine if a database supports a particular feature\n *\n * @since 2.7.0\n * @see wpdb::db_version()\n *\n * @param string $db_cap the feature\n * @return bool\n *\/","file":"wp-db.php","line":1698,"missingDoc":false,"filters":[],"uses":{"db_version":[1699],"strtolower":[1701],"version_compare":[1705,1707]},"used_by":[]},"wpdb::get_caller":{"doc":"\/**\n * Retrieve the name of the function that called wpdb.\n *\n * Searches up the list of functions until it reaches\n * the one that would most logically had called this method.\n *\n * @since 2.5.0\n *\n * @return string The name of the calling function\n *\/","file":"wp-db.php","line":1723,"missingDoc":false,"filters":[],"uses":{"wp_debug_backtrace_summary":[1724]},"used_by":[]},"wpdb::db_version":{"doc":"\/**\n * The database version number.\n *\n * @since 2.7.0\n *\n * @return false|string false on failure, version number on success\n *\/","file":"wp-db.php","line":1734,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1735],"mysql_get_server_info":[1735]},"used_by":[]},"WP_Text_Diff_Renderer_Table::__construct":{"doc":"\/**\n * Constructor - Call parent constructor with params array.\n *\n * This will set class properties based on the key value pairs in the array.\n *\n * @since 2.6.0\n *\n * @param array $params\n *\/","file":"wp-diff.php","line":71,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_startBlock":{"doc":"\/**\n * @ignore\n *\n * @param string $header\n * @return string\n *\/","file":"wp-diff.php","line":81,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_lines":{"doc":"\/**\n * @ignore\n *\n * @param array $lines\n * @param string $prefix\n *\/","file":"wp-diff.php","line":91,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::addedLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":100,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::deletedLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::contextLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":120,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::emptyLine":{"doc":"\/**\n * @ignore\n *\n * @return string\n *\/","file":"wp-diff.php","line":129,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_added":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":141,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[145],"emptyLine":[146],"addedLine":[146]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_deleted":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":159,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[163],"deletedLine":[164],"emptyLine":[164]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_context":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":177,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[181],"contextLine":[183,183]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_changed":{"doc":"\/**\n * Process changed lines to do word-by-word diffs for extra highlighting.\n *\n * (TRAC style) sometimes these lines can actually be deleted or added rows.\n * We do additional processing to figure that out\n *\n * @access private\n * @since 2.6.0\n *\n * @param array $orig\n * @param array $final\n * @return string\n *\/","file":"wp-diff.php","line":201,"missingDoc":false,"filters":[],"uses":{"interleave_changed_lines":[211],"render":[222],"strlen":[227,230],"strip_tags":[227,230],"join":[227],"preg_match_all":[225],"preg_replace":[237,238],"is_numeric":[219,219],"htmlspecialchars":[251,258],"_added":[263],"_deleted":[265],"deletedLine":[267],"addedLine":[267],"array_keys":[242]},"used_by":[]},"WP_Text_Diff_Renderer_Table::interleave_changed_lines":{"doc":"\/**\n * Takes changed blocks and matches which rows in orig turned into which rows in final.\n *\n * Returns\n *\t*_matches ( which rows match with which )\n *\t*_rows ( order of rows in each column interleaved with blank rows as\n *\t\tnecessary )\n *\n * @since 2.6.0\n *\n * @param unknown_type $orig\n * @param unknown_type $final\n * @return unknown\n *\/","file":"wp-diff.php","line":288,"missingDoc":false,"filters":[],"uses":{"compute_string_distance":[294],"array_keys":[293,292,332,333],"asort":[297],"explode":[303],"ksort":[328,329],"array_search":[338,339],"array_splice":[342,346,350],"count":[355,355],"array_push":[358,362]},"used_by":[]},"WP_Text_Diff_Renderer_Table::compute_string_distance":{"doc":"\/**\n * Computes a number that is intended to reflect the \"distance\" between two strings.\n *\n * @since 2.6.0\n *\n * @param string $string1\n * @param string $string2\n * @return int\n *\/","file":"wp-diff.php","line":419,"missingDoc":false,"filters":[],"uses":{"count_chars":[421,422],"array_sum":[425],"array_map":[425],"strlen":[432]},"used_by":[]},"WP_Text_Diff_Renderer_Table::difference":{"doc":"\/**\n * @ignore\n * @since 2.6.0\n *\n * @param int $a\n * @param int $b\n * @return int\n *\/","file":"wp-diff.php","line":443,"missingDoc":false,"filters":[],"uses":{"abs":[444]},"used_by":[]},"WP_Text_Diff_Renderer_inline::_splitOnWords":{"doc":"\/**\n * @ignore\n * @since 2.6.0\n *\n * @param string $string\n * @param string $newlineEscape\n * @return string\n *\/","file":"wp-diff.php","line":465,"missingDoc":false,"filters":[],"uses":{"str_replace":[466,468],"preg_split":[467]},"used_by":[]}} \ No newline at end of file diff --git a/test.php b/test.php new file mode 100755 index 000000000..ee8d22da5 --- /dev/null +++ b/test.php @@ -0,0 +1,150 @@ +<?php + +require dirname(__FILE__) . '/PHP-Parser/lib/PHPParser/Autoloader.php'; +PHPParser_Autoloader::register(); +require dirname(__FILE__) . '/library/QP/NodeVisitor.php'; + +$wp_dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'trunk-git' . DIRECTORY_SEPARATOR . 'wp-includes'; + +class QP_CallingCard { + public $caller = array(); + public $callee = ''; + public $line = 0; + public $code = ''; + public $filterName = ''; + public $filterParts = array(); + public $args = array(); +} + +class QP_Filter { + public $name = ''; + + public $callers = array(); + + public function __construct($name) { + $this->name = $name; + } +} + +class QP_Caller { + public $name = ''; + public $file = ''; + public $line = 0; + public $type = 'unknown'; +} + +class QP_Function { + public $doc = ''; + public $file = ''; + public $line = 0; + + public $missingDoc = false; + + public $filters = array(); + public $uses = array(); + public $used_by = array(); +} + +class QP_Repo_Functions implements ArrayAccess { + public function offsetGet($name) { + if (!isset($this->functions[$name])) + $this->functions[$name] = new QP_Function($name); + + return $this->functions[$name]; + } + + public function offsetExists($name) { + return true; + } + + public function offsetSet($name, $value) { + throw new Exception('Cannot set function'); + } + + public function offsetUnset($name) { + unset($this->functions[$name]); + } +} + +class QP_Repo_Filters implements ArrayAccess { + public function offsetGet($name) { + if (!isset($this->filters[$name])) + $this->filters[$name] = new QP_Filter($name); + + return $this->filters[$name]; + } + + public function offsetExists($name) { + return true; + } + + public function offsetSet($name, $value) { + throw new Exception('Cannot set function'); + } + + public function offsetUnset($name) { + unset($this->filters[$name]); + } +} + + +function get_wp_files($directory) { + $iterableFiles = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($directory) + ); + $files = array(); + try { + foreach( $iterableFiles as $file ) { + if ($file->getExtension() !== 'php') + continue; + + if ($file->getFilename() === 'class-wp-json-server.php') + continue; + + $files[] = $file->getPathname(); + } + } + catch (UnexpectedValueException $e) { + printf("Directory [%s] contained a directory we can not recurse into", $directory); + } + + return $files; +} +header('Content-Type: text/plain'); + +$parser = new PHPParser_Parser(new PHPParser_Lexer); +$repository = new QP_Repo_Functions; +$filters = new QP_Repo_Filters; +$files = get_wp_files($wp_dir); + +foreach ($files as $file) { + $code = file_get_contents($file); + $file = str_replace($wp_dir . DIRECTORY_SEPARATOR, '', $file); + $file = str_replace(DIRECTORY_SEPARATOR, '/', $file); + try { + $stmts = $parser->parse($code); + } + catch (PHPParser_Error $e) { + echo $file . "\n"; + echo $e->getMessage(); + die(); + } + + $traverser = new PHPParser_NodeTraverser; + $visitor = new QP_NodeVisitor($file, $repository, $filters); + $traverser->addVisitor($visitor); + $stmts = $traverser->traverse($stmts); +} + +$functions = array_filter($repository->functions, function ($details) { + // Built-in function + return !empty($details->file) || !empty($details->uses); +}); + +try { + file_put_contents('output.json', json_encode($functions)); + file_put_contents('filters.json', json_encode($filters->filters)); +} +catch (PHPParser_Error $e) { + echo $e->getMessage(); +} \ No newline at end of file From d73cead78462d41eee8ecf0a40a415121e265e8a Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 31 Jan 2013 10:03:06 +1000 Subject: [PATCH 002/402] QP -> WP --- library/{QP => WP}/NodeVisitor.php | 2 +- test.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) rename library/{QP => WP}/NodeVisitor.php (98%) diff --git a/library/QP/NodeVisitor.php b/library/WP/NodeVisitor.php similarity index 98% rename from library/QP/NodeVisitor.php rename to library/WP/NodeVisitor.php index a44f0b306..5f660d875 100755 --- a/library/QP/NodeVisitor.php +++ b/library/WP/NodeVisitor.php @@ -1,6 +1,6 @@ <?php -class QP_NodeVisitor extends PHPParser_NodeVisitorAbstract { +class WP_NodeVisitor extends PHPParser_NodeVisitorAbstract { protected $file = ''; protected $location = array(); protected $printer = null; diff --git a/test.php b/test.php index ee8d22da5..c129ac79a 100755 --- a/test.php +++ b/test.php @@ -2,11 +2,11 @@ require dirname(__FILE__) . '/PHP-Parser/lib/PHPParser/Autoloader.php'; PHPParser_Autoloader::register(); -require dirname(__FILE__) . '/library/QP/NodeVisitor.php'; +require dirname(__FILE__) . '/library/WP/NodeVisitor.php'; $wp_dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'trunk-git' . DIRECTORY_SEPARATOR . 'wp-includes'; -class QP_CallingCard { +class WP_CallingCard { public $caller = array(); public $callee = ''; public $line = 0; @@ -16,7 +16,7 @@ class QP_CallingCard { public $args = array(); } -class QP_Filter { +class WP_Filter { public $name = ''; public $callers = array(); @@ -26,14 +26,14 @@ public function __construct($name) { } } -class QP_Caller { +class WP_Caller { public $name = ''; public $file = ''; public $line = 0; public $type = 'unknown'; } -class QP_Function { +class WP_Function { public $doc = ''; public $file = ''; public $line = 0; @@ -45,10 +45,10 @@ class QP_Function { public $used_by = array(); } -class QP_Repo_Functions implements ArrayAccess { +class WP_Repo_Functions implements ArrayAccess { public function offsetGet($name) { if (!isset($this->functions[$name])) - $this->functions[$name] = new QP_Function($name); + $this->functions[$name] = new WP_Function($name); return $this->functions[$name]; } @@ -66,10 +66,10 @@ public function offsetUnset($name) { } } -class QP_Repo_Filters implements ArrayAccess { +class WP_Repo_Filters implements ArrayAccess { public function offsetGet($name) { if (!isset($this->filters[$name])) - $this->filters[$name] = new QP_Filter($name); + $this->filters[$name] = new WP_Filter($name); return $this->filters[$name]; } From 2ec978dde5c33cd577ab4aae16852172bb58a7ef Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 31 Jan 2013 10:05:27 +1000 Subject: [PATCH 003/402] Split into one-class-per-file --- library/WP/Caller.php | 8 ++ library/WP/CallingCard.php | 11 +++ library/WP/Filter.php | 11 +++ library/WP/Function.php | 13 +++ library/WP/Repo/Filters.php | 22 +++++ library/WP/Repo/Functions.php | 22 +++++ parse.php | 70 ++++++++++++++++ test.php | 150 ---------------------------------- 8 files changed, 157 insertions(+), 150 deletions(-) create mode 100755 library/WP/Caller.php create mode 100755 library/WP/CallingCard.php create mode 100755 library/WP/Filter.php create mode 100755 library/WP/Function.php create mode 100755 library/WP/Repo/Filters.php create mode 100755 library/WP/Repo/Functions.php create mode 100755 parse.php delete mode 100755 test.php diff --git a/library/WP/Caller.php b/library/WP/Caller.php new file mode 100755 index 000000000..38354b629 --- /dev/null +++ b/library/WP/Caller.php @@ -0,0 +1,8 @@ +<?php + +class WP_Caller { + public $name = ''; + public $file = ''; + public $line = 0; + public $type = 'unknown'; +} \ No newline at end of file diff --git a/library/WP/CallingCard.php b/library/WP/CallingCard.php new file mode 100755 index 000000000..e1bcbe0b1 --- /dev/null +++ b/library/WP/CallingCard.php @@ -0,0 +1,11 @@ +<?php + +class WP_CallingCard { + public $caller = array(); + public $callee = ''; + public $line = 0; + public $code = ''; + public $filterName = ''; + public $filterParts = array(); + public $args = array(); +} \ No newline at end of file diff --git a/library/WP/Filter.php b/library/WP/Filter.php new file mode 100755 index 000000000..d72d64a6f --- /dev/null +++ b/library/WP/Filter.php @@ -0,0 +1,11 @@ +<?php + +class WP_Filter { + public $name = ''; + + public $callers = array(); + + public function __construct($name) { + $this->name = $name; + } +} \ No newline at end of file diff --git a/library/WP/Function.php b/library/WP/Function.php new file mode 100755 index 000000000..44b298645 --- /dev/null +++ b/library/WP/Function.php @@ -0,0 +1,13 @@ +<?php + +class WP_Function { + public $doc = ''; + public $file = ''; + public $line = 0; + + public $missingDoc = false; + + public $filters = array(); + public $uses = array(); + public $used_by = array(); +} \ No newline at end of file diff --git a/library/WP/Repo/Filters.php b/library/WP/Repo/Filters.php new file mode 100755 index 000000000..48936072b --- /dev/null +++ b/library/WP/Repo/Filters.php @@ -0,0 +1,22 @@ +<?php + +class WP_Repo_Filters implements ArrayAccess { + public function offsetGet($name) { + if (!isset($this->filters[$name])) + $this->filters[$name] = new WP_Filter($name); + + return $this->filters[$name]; + } + + public function offsetExists($name) { + return true; + } + + public function offsetSet($name, $value) { + throw new Exception('Cannot set function'); + } + + public function offsetUnset($name) { + unset($this->filters[$name]); + } +} \ No newline at end of file diff --git a/library/WP/Repo/Functions.php b/library/WP/Repo/Functions.php new file mode 100755 index 000000000..8abbb5a1b --- /dev/null +++ b/library/WP/Repo/Functions.php @@ -0,0 +1,22 @@ +<?php + +class WP_Repo_Functions implements ArrayAccess { + public function offsetGet($name) { + if (!isset($this->functions[$name])) + $this->functions[$name] = new WP_Function($name); + + return $this->functions[$name]; + } + + public function offsetExists($name) { + return true; + } + + public function offsetSet($name, $value) { + throw new Exception('Cannot set function'); + } + + public function offsetUnset($name) { + unset($this->functions[$name]); + } +} \ No newline at end of file diff --git a/parse.php b/parse.php new file mode 100755 index 000000000..82ad5026a --- /dev/null +++ b/parse.php @@ -0,0 +1,70 @@ +<?php + +require dirname(__FILE__) . '/PHP-Parser/lib/PHPParser/Autoloader.php'; +PHPParser_Autoloader::register(); +require dirname(__FILE__) . '/library/WP/NodeVisitor.php'; + +$wp_dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'trunk-git' . DIRECTORY_SEPARATOR . 'wp-includes'; + +function get_wp_files($directory) { + $iterableFiles = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($directory) + ); + $files = array(); + try { + foreach( $iterableFiles as $file ) { + if ($file->getExtension() !== 'php') + continue; + + if ($file->getFilename() === 'class-wp-json-server.php') + continue; + + $files[] = $file->getPathname(); + } + } + catch (UnexpectedValueException $e) { + printf("Directory [%s] contained a directory we can not recurse into", $directory); + } + + return $files; +} + +function parse_files($files) { + header('Content-Type: text/plain'); + + $parser = new PHPParser_Parser(new PHPParser_Lexer); + $repository = new QP_Repo_Functions; + $filters = new QP_Repo_Filters; + + foreach ($files as $file) { + $code = file_get_contents($file); + $file = str_replace($wp_dir . DIRECTORY_SEPARATOR, '', $file); + $file = str_replace(DIRECTORY_SEPARATOR, '/', $file); + try { + $stmts = $parser->parse($code); + } + catch (PHPParser_Error $e) { + echo $file . "\n"; + echo $e->getMessage(); + die(); + } + + $traverser = new PHPParser_NodeTraverser; + $visitor = new QP_NodeVisitor($file, $repository, $filters); + $traverser->addVisitor($visitor); + $stmts = $traverser->traverse($stmts); + } + + $functions = array_filter($repository->functions, function ($details) { + // Built-in function + return !empty($details->file) || !empty($details->uses); + }); + + return array('functions' => $functions, 'filters' => $filters->filters); +} + +$files = get_wp_files($wp_dir); +list($functions, $filters) = parse_files($files); + +file_put_contents('output.json', json_encode($functions)); +file_put_contents('filters.json', json_encode($filters)); \ No newline at end of file diff --git a/test.php b/test.php deleted file mode 100755 index c129ac79a..000000000 --- a/test.php +++ /dev/null @@ -1,150 +0,0 @@ -<?php - -require dirname(__FILE__) . '/PHP-Parser/lib/PHPParser/Autoloader.php'; -PHPParser_Autoloader::register(); -require dirname(__FILE__) . '/library/WP/NodeVisitor.php'; - -$wp_dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'trunk-git' . DIRECTORY_SEPARATOR . 'wp-includes'; - -class WP_CallingCard { - public $caller = array(); - public $callee = ''; - public $line = 0; - public $code = ''; - public $filterName = ''; - public $filterParts = array(); - public $args = array(); -} - -class WP_Filter { - public $name = ''; - - public $callers = array(); - - public function __construct($name) { - $this->name = $name; - } -} - -class WP_Caller { - public $name = ''; - public $file = ''; - public $line = 0; - public $type = 'unknown'; -} - -class WP_Function { - public $doc = ''; - public $file = ''; - public $line = 0; - - public $missingDoc = false; - - public $filters = array(); - public $uses = array(); - public $used_by = array(); -} - -class WP_Repo_Functions implements ArrayAccess { - public function offsetGet($name) { - if (!isset($this->functions[$name])) - $this->functions[$name] = new WP_Function($name); - - return $this->functions[$name]; - } - - public function offsetExists($name) { - return true; - } - - public function offsetSet($name, $value) { - throw new Exception('Cannot set function'); - } - - public function offsetUnset($name) { - unset($this->functions[$name]); - } -} - -class WP_Repo_Filters implements ArrayAccess { - public function offsetGet($name) { - if (!isset($this->filters[$name])) - $this->filters[$name] = new WP_Filter($name); - - return $this->filters[$name]; - } - - public function offsetExists($name) { - return true; - } - - public function offsetSet($name, $value) { - throw new Exception('Cannot set function'); - } - - public function offsetUnset($name) { - unset($this->filters[$name]); - } -} - - -function get_wp_files($directory) { - $iterableFiles = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($directory) - ); - $files = array(); - try { - foreach( $iterableFiles as $file ) { - if ($file->getExtension() !== 'php') - continue; - - if ($file->getFilename() === 'class-wp-json-server.php') - continue; - - $files[] = $file->getPathname(); - } - } - catch (UnexpectedValueException $e) { - printf("Directory [%s] contained a directory we can not recurse into", $directory); - } - - return $files; -} -header('Content-Type: text/plain'); - -$parser = new PHPParser_Parser(new PHPParser_Lexer); -$repository = new QP_Repo_Functions; -$filters = new QP_Repo_Filters; -$files = get_wp_files($wp_dir); - -foreach ($files as $file) { - $code = file_get_contents($file); - $file = str_replace($wp_dir . DIRECTORY_SEPARATOR, '', $file); - $file = str_replace(DIRECTORY_SEPARATOR, '/', $file); - try { - $stmts = $parser->parse($code); - } - catch (PHPParser_Error $e) { - echo $file . "\n"; - echo $e->getMessage(); - die(); - } - - $traverser = new PHPParser_NodeTraverser; - $visitor = new QP_NodeVisitor($file, $repository, $filters); - $traverser->addVisitor($visitor); - $stmts = $traverser->traverse($stmts); -} - -$functions = array_filter($repository->functions, function ($details) { - // Built-in function - return !empty($details->file) || !empty($details->uses); -}); - -try { - file_put_contents('output.json', json_encode($functions)); - file_put_contents('filters.json', json_encode($filters->filters)); -} -catch (PHPParser_Error $e) { - echo $e->getMessage(); -} \ No newline at end of file From a7e1b3eedeb4220ef7111d9f334d74120fbb86e5 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 31 Jan 2013 13:34:17 +1000 Subject: [PATCH 004/402] Fix up some useless stuff --- library/WP/CallingCard.php | 11 ----------- library/WP/NodeVisitor.php | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) delete mode 100755 library/WP/CallingCard.php diff --git a/library/WP/CallingCard.php b/library/WP/CallingCard.php deleted file mode 100755 index e1bcbe0b1..000000000 --- a/library/WP/CallingCard.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php - -class WP_CallingCard { - public $caller = array(); - public $callee = ''; - public $line = 0; - public $code = ''; - public $filterName = ''; - public $filterParts = array(); - public $args = array(); -} \ No newline at end of file diff --git a/library/WP/NodeVisitor.php b/library/WP/NodeVisitor.php index 5f660d875..be1d30f2b 100755 --- a/library/WP/NodeVisitor.php +++ b/library/WP/NodeVisitor.php @@ -97,7 +97,7 @@ protected function processFilter(PHPParser_Node $node) { return false; } - $caller = new QP_Caller; + $caller = new WP_Caller; $caller->name = $this->getLocation(); $caller->file = $this->file; $caller->line = $node->getLine(); From b5fd6ceaf44532b379b86a4634fdec5afd69fc61 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 31 Jan 2013 12:50:11 +0000 Subject: [PATCH 005/402] Remove PHP-Parser submodule --- .gitmodules | 3 --- PHP-Parser | 1 - 2 files changed, 4 deletions(-) delete mode 100644 .gitmodules delete mode 160000 PHP-Parser diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 56cfa1ddd..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "PHP-Parser"] - path = PHP-Parser - url = https://github.com/nikic/PHP-Parser.git diff --git a/PHP-Parser b/PHP-Parser deleted file mode 160000 index 81d20bf10..000000000 --- a/PHP-Parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 81d20bf10e33b9fca0ddf082322a74df1f71c9f8 From cbc371d7ec68252bea2c34a84c8e42a0c61d58a9 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 31 Jan 2013 12:50:28 +0000 Subject: [PATCH 006/402] Install dependencies (PHP-Parser, phpdocumentor/reflection) with composer --- .gitignore | 1 + composer.json | 7 ++ composer.lock | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 .gitignore create mode 100644 composer.json create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..57872d0f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/vendor/ diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..3e6f41e75 --- /dev/null +++ b/composer.json @@ -0,0 +1,7 @@ +{ + "require": { + "php": ">=5.3.3", + "phpdocumentor/reflection": "dev-master" + }, + "minimum-stability": "dev" +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..1988d03ab --- /dev/null +++ b/composer.lock @@ -0,0 +1,200 @@ +{ + "hash": "5e6728e3d489c530b924fda581cebb7e", + "packages": [ + { + "name": "dflydev/markdown", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-markdown.git", + "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc" + }, + "dist": { + "type": "zip", + "url": "https://github.com/dflydev/dflydev-markdown/archive/11f8faa2d17f717a038b4d372abd22a6ac4a15dc.zip", + "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "time": "2012-07-15 16:31:27", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "dflydev\\markdown": "src" + } + }, + "notification-url": "http://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Michel Fortin", + "homepage": "http://michelf.com" + }, + { + "name": "John Gruber", + "homepage": "http://daringfireball.net" + } + ], + "description": "PHP Markdown & Extra", + "homepage": "http://github.com/dflydev/dflydev-markdown", + "keywords": [ + "markdown" + ] + }, + { + "name": "nikic/php-parser", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser", + "reference": "81d20bf10e33b9fca0ddf082322a74df1f71c9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/81d20bf10e33b9fca0ddf082322a74df1f71c9f8", + "reference": "81d20bf10e33b9fca0ddf082322a74df1f71c9f8", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "time": "2013-01-15 17:21:42", + "type": "library", + "autoload": { + "psr-0": { + "PHPParser": "lib/" + } + }, + "notification-url": "http://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "php", + "parser" + ] + }, + { + "name": "phpdocumentor/reflection", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection", + "reference": "0.1.3" + }, + "dist": { + "type": "zip", + "url": "https://github.com/phpDocumentor/Reflection/archive/0.1.3.zip", + "reference": "0.1.3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "nikic/php-parser": "dev-master", + "phpdocumentor/reflection-docblock": "2.0.0a2" + }, + "require-dev": { + "behat/behat": ">=2.4@stable", + "phpunit/phpunit": "3.7.*@stable", + "mockery/mockery": ">=0.7.0@stable" + }, + "time": "2012-12-22 19:11:10", + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "http://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpdoc", + "reflection", + "static analysis", + "phpDocumentor" + ] + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.0a2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock", + "reference": "2.0.0a2" + }, + "dist": { + "type": "zip", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", + "reference": "2.0.0a2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "dflydev/markdown": "1.0.*" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@stable" + }, + "time": "2012-12-02 20:26:45", + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "http://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ] + } + ], + "packages-dev": null, + "aliases": [ + + ], + "minimum-stability": "dev", + "stability-flags": { + "phpdocumentor/reflection": 20 + } +} From f9f59ffb61936ce5c43b109f74b0adaa8abd57a0 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 31 Jan 2013 20:11:48 +0000 Subject: [PATCH 007/402] Use phpdocumentor/reflection to parse files --- display.php | 109 --------------------------------------------------- filters.json | 1 - filters.php | 46 ---------------------- output.json | 1 - parse.php | 61 ++++++++++++---------------- 5 files changed, 26 insertions(+), 192 deletions(-) delete mode 100755 display.php delete mode 100755 filters.json delete mode 100755 filters.php delete mode 100755 output.json mode change 100755 => 100644 parse.php diff --git a/display.php b/display.php deleted file mode 100755 index 80ac5528d..000000000 --- a/display.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php -define('QP_INCLUDE_BUILTIN', false); -require dirname(__FILE__) . '/library/class-utility.php'; -require dirname(__FILE__) . '/library/class-phpdoc-parser.php'; - -$data = json_decode(file_get_contents('output.json')); -$filters = json_decode(file_get_contents('filters.json')); -?> -<html> -<head> - <link href="http://localhost/work/Renku/cosmonaut/store/content/themes/roscosmos/bootstrap/css/bootstrap.css" rel="stylesheet" /> -</head> -<body> - <div class="container"> -<?php - -function esc_id($name) { - $name = str_replace(array('"', "'"), '', $name); - $name = str_replace(array('{', '}', '$', ' ', '.', '[', ']'), '_', $name); - return $name; -} - -$data->__main->doc = 'This is a placeholder for the global scope.'; - -echo '<h1>' . count((array) $data) . ' functions and methods</h1>'; - -foreach ($data as $name => $function): - $doc = Codex_Generator_Phpdoc_Parser::parse_doc($function->doc); -?> - <article id="<?php echo esc_id($name) ?>" class="row"> - <h2><?php echo $name ?>()</h2> - <div> - <div class="well"> - <p><?php echo $doc['short_desc'] ?></p> - <p><?php echo htmlspecialchars($doc['long_desc']) ?></p> - </div> - <ul> -<?php - foreach ($doc['tags'] as $tag => $value): - if (empty($value)) - continue; -?> - <li><strong><?php echo ucfirst($tag) ?></strong>: <?php - if (is_array($value)) { - echo '<ul><li>' . implode('</li><li>', $value) . '</li></ul>'; - } - else - echo htmlspecialchars($value); - ?></li> -<?php - endforeach; -?> - </ul> - <p><a href="http://core.trac.wordpress.org/browser/tags/3.5/wp-includes/<?php echo $function->file . '#L' . $function->line - ?>">View source (<code><?php echo $function->file ?></code> @ L<?php echo $function->line ?>)</a></p> - </div> - <div class="span6"> - <h3>Filters</h3> - <ul> -<?php - foreach ($function->filters as $filter) { - echo '<li><a href="filters.php#' . esc_id($filter) .'">' . $filter . '</a></li>'; - } -?> - </ul> - </div> - <div class="span3"> -<?php - if (!empty($function->used_by)): -?> - <h3>Used by</h3> - <ul> -<?php - foreach ($function->used_by as $other => $_) { - if (empty($data->$other) && !QP_INCLUDE_BUILTIN) - continue; - - if (empty($data->$other)) - echo '<li><a href="http://php.net/' . $other . '">' . $other . '()</a></li>'; - else - echo '<li><a href="#' . esc_id($other) . '">' . $other . '()</a></li>'; - } -?> - </ul> - </div> -<?php - endif; - if (!empty($function->uses)): -?> - <div class="span3"> - <h3>Uses</h3> - <ul> -<?php - foreach ($function->uses as $other => $_) { - if (empty($data->$other) && !QP_INCLUDE_BUILTIN) - continue; - if (empty($data->$other)) - echo '<li><a href="http://php.net/' . $other . '">' . $other . '()</a></li>'; - else - echo '<li><a href="#' . esc_id($other) . '">' . $other . '()</a></li>'; - } -?> - </ul> - </div> -<?php - endif; - echo '</article>'; -endforeach; -?> \ No newline at end of file diff --git a/filters.json b/filters.json deleted file mode 100755 index 2ac0db80a..000000000 --- a/filters.json +++ /dev/null @@ -1 +0,0 @@ -{"filters":{"'wp_admin_bar_class'":{"name":"'wp_admin_bar_class'","callers":[{"name":"_wp_admin_bar_init","file":"admin-bar.php","line":28,"type":"filter","source":"apply_filters('wp_admin_bar_class', 'WP_Admin_Bar')"}]},"'admin_bar_menu'":{"name":"'admin_bar_menu'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":58,"type":"action_reference","source":"do_action_ref_array('admin_bar_menu', array(&$wp_admin_bar))"}]},"'wp_before_admin_bar_render'":{"name":"'wp_before_admin_bar_render'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":60,"type":"action","source":"do_action('wp_before_admin_bar_render')"}]},"'wp_after_admin_bar_render'":{"name":"'wp_after_admin_bar_render'","callers":[{"name":"wp_admin_bar_render","file":"admin-bar.php","line":64,"type":"action","source":"do_action('wp_after_admin_bar_render')"}]},"'show_admin_bar'":{"name":"'show_admin_bar'","callers":[{"name":"is_admin_bar_showing","file":"admin-bar.php","line":748,"type":"filter","source":"apply_filters('show_admin_bar', $show_admin_bar)"}]},"'the_author'":{"name":"'the_author'","callers":[{"name":"get_the_author","file":"author-template.php","line":29,"type":"filter","source":"apply_filters('the_author', is_object($authordata) ? $authordata->display_name : null)"}]},"'the_modified_author'":{"name":"'the_modified_author'","callers":[{"name":"get_the_modified_author","file":"author-template.php","line":74,"type":"filter","source":"apply_filters('the_modified_author', $last_user->display_name)"}]},"'get_the_author_' . $field":{"name":"'get_the_author_' . $field","callers":[{"name":"get_the_author_meta","file":"author-template.php","line":111,"type":"filter","source":"apply_filters('get_the_author_' . $field, $value, $user_id)"}]},"'the_author_' . $field":{"name":"'the_author_' . $field","callers":[{"name":"the_author_meta","file":"author-template.php","line":123,"type":"filter","source":"apply_filters('the_author_' . $field, get_the_author_meta($field, $user_id), $user_id)"}]},"'the_author_posts_link'":{"name":"'the_author_posts_link'","callers":[{"name":"the_author_posts_link","file":"author-template.php","line":207,"type":"filter","source":"apply_filters('the_author_posts_link', $link)"}]},"'author_link'":{"name":"'author_link'","callers":[{"name":"get_author_posts_url","file":"author-template.php","line":235,"type":"filter","source":"apply_filters('author_link', $link, $author_id, $author_nicename)"}]},"'is_multi_author'":{"name":"'is_multi_author'","callers":[{"name":"is_multi_author","file":"author-template.php","line":381,"type":"filter","source":"apply_filters('is_multi_author', (bool) $is_multi_author)"}]},"'link_category'":{"name":"'link_category'","callers":[{"name":"wp_list_bookmarks","file":"bookmark-template.php","line":231,"type":"filter","source":"apply_filters('link_category', $cat->name)"},{"name":"get_links_list","file":"deprecated.php","line":1065,"type":"filter","source":"apply_filters('link_category', $cat->name)"}]},"'wp_list_bookmarks'":{"name":"'wp_list_bookmarks'","callers":[{"name":"wp_list_bookmarks","file":"bookmark-template.php","line":252,"type":"filter","source":"apply_filters('wp_list_bookmarks', $output)"}]},"'get_bookmarks'":{"name":"'get_bookmarks'","callers":[{"name":"get_bookmarks","file":"bookmark.php","line":139,"type":"filter","source":"apply_filters('get_bookmarks', $cache[$key], $r)"},{"name":"get_bookmarks","file":"bookmark.php","line":184,"type":"filter","source":"apply_filters('get_bookmarks', array(), $r)"},{"name":"get_bookmarks","file":"bookmark.php","line":266,"type":"filter","source":"apply_filters('get_bookmarks', $results, $r)"}]},"\"edit_{$field}\"":{"name":"\"edit_{$field}\"","callers":[{"name":"sanitize_bookmark_field","file":"bookmark.php","line":355,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $bookmark_id)"},{"name":"sanitize_post_field","file":"post.php","line":2016,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $post_id)"},{"name":"sanitize_user_field","file":"user.php","line":1121,"type":"filter","source":"apply_filters(\"edit_{$field}\", $value, $user_id)"}]},"\"pre_{$field}\"":{"name":"\"pre_{$field}\"","callers":[{"name":"sanitize_bookmark_field","file":"bookmark.php","line":363,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"},{"name":"sanitize_post_field","file":"post.php","line":2033,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"},{"name":"sanitize_user_field","file":"user.php","line":1132,"type":"filter","source":"apply_filters(\"pre_{$field}\", $value)"}]},"'wp_signup_location'":{"name":"'wp_signup_location'","callers":[{"name":"redirect_canonical","file":"canonical.php","line":285,"type":"filter","source":"apply_filters('wp_signup_location', network_site_url('wp-signup.php'))"}]},"'redirect_canonical'":{"name":"'redirect_canonical'","callers":[{"name":"redirect_canonical","file":"canonical.php","line":422,"type":"filter","source":"apply_filters('redirect_canonical', $redirect_url, $requested_url)"}]},"'role_has_cap'":{"name":"'role_has_cap'","callers":[{"name":"WP_Role::has_cap","file":"capabilities.php","line":378,"type":"filter","source":"apply_filters('role_has_cap', $this->capabilities, $cap, $this->name)"}]},"'set_user_role'":{"name":"'set_user_role'","callers":[{"name":"WP_User::set_role","file":"capabilities.php","line":815,"type":"action","source":"do_action('set_user_role', $this->ID, $role)"}]},"'user_has_cap'":{"name":"'user_has_cap'","callers":[{"name":"WP_User::has_cap","file":"capabilities.php","line":936,"type":"filter","source":"apply_filters('user_has_cap', $this->allcaps, $caps, $args)"}]},"\"auth_post_meta_{$meta_key}\"":{"name":"\"auth_post_meta_{$meta_key}\"","callers":[{"name":"map_meta_cap","file":"capabilities.php","line":1168,"type":"filter","source":"apply_filters(\"auth_post_meta_{$meta_key}\", false, $meta_key, $post->ID, $user_id, $cap, $caps)"}]},"'map_meta_cap'":{"name":"'map_meta_cap'","callers":[{"name":"map_meta_cap","file":"capabilities.php","line":1269,"type":"filter","source":"apply_filters('map_meta_cap', $caps, $cap, $user_id, $args)"}]},"'get_the_categories'":{"name":"'get_the_categories'","callers":[{"name":"get_the_category","file":"category-template.php","line":86,"type":"filter","source":"apply_filters('get_the_categories', $categories)"}]},"'the_category'":{"name":"'the_category'","callers":[{"name":"get_the_category_list","file":"category-template.php","line":157,"type":"filter","source":"apply_filters('the_category', '', $separator, $parents)"},{"name":"get_the_category_list","file":"category-template.php","line":161,"type":"filter","source":"apply_filters('the_category', __('Uncategorized'), $separator, $parents)"},{"name":"get_the_category_list","file":"category-template.php","line":212,"type":"filter","source":"apply_filters('the_category', $thelist, $separator, $parents)"}]},"'list_cats'":{"name":"'list_cats'","callers":[{"name":"wp_dropdown_categories","file":"category-template.php","line":344,"type":"filter","source":"apply_filters('list_cats', $show_option_none)"},{"name":"wp_dropdown_categories","file":"category-template.php","line":351,"type":"filter","source":"apply_filters('list_cats', $show_option_all)"},{"name":"wp_dropdown_categories","file":"category-template.php","line":357,"type":"filter","source":"apply_filters('list_cats', $show_option_none)"},{"name":"Walker_Category::start_el","file":"category-template.php","line":827,"type":"filter","source":"apply_filters('list_cats', $cat_name, $category)"},{"name":"Walker_CategoryDropdown::start_el","file":"category-template.php","line":939,"type":"filter","source":"apply_filters('list_cats', $category->name, $category)"}]},"'wp_dropdown_cats'":{"name":"'wp_dropdown_cats'","callers":[{"name":"wp_dropdown_categories","file":"category-template.php","line":373,"type":"filter","source":"apply_filters('wp_dropdown_cats', $output)"}]},"'wp_list_categories'":{"name":"'wp_list_categories'","callers":[{"name":"wp_list_categories","file":"category-template.php","line":485,"type":"filter","source":"apply_filters('wp_list_categories', $output, $args)"}]},"'wp_tag_cloud'":{"name":"'wp_tag_cloud'","callers":[{"name":"wp_tag_cloud","file":"category-template.php","line":548,"type":"filter","source":"apply_filters('wp_tag_cloud', $return, $args)"}]},"'tag_cloud_sort'":{"name":"'tag_cloud_sort'","callers":[{"name":"wp_generate_tag_cloud","file":"category-template.php","line":628,"type":"filter","source":"apply_filters('tag_cloud_sort', $tags, $args)"}]},"'wp_generate_tag_cloud'":{"name":"'wp_generate_tag_cloud'","callers":[{"name":"wp_generate_tag_cloud","file":"category-template.php","line":694,"type":"filter","source":"apply_filters('wp_generate_tag_cloud', $return, $tags, $args)"}]},"'category_description'":{"name":"'category_description'","callers":[{"name":"Walker_Category::start_el","file":"category-template.php","line":832,"type":"filter","source":"apply_filters('category_description', $category->description, $category)"}]},"'get_the_tags'":{"name":"'get_the_tags'","callers":[{"name":"get_the_tags","file":"category-template.php","line":986,"type":"filter","source":"apply_filters('get_the_tags', get_the_terms($id, 'post_tag'))"}]},"'the_tags'":{"name":"'the_tags'","callers":[{"name":"get_the_tag_list","file":"category-template.php","line":1002,"type":"filter","source":"apply_filters('the_tags', get_the_term_list($id, 'post_tag', $before, $sep, $after), $before, $sep, $after, $id)"}]},"'get_the_terms'":{"name":"'get_the_terms'","callers":[{"name":"get_the_terms","file":"category-template.php","line":1071,"type":"filter","source":"apply_filters('get_the_terms', $terms, $post->ID, $taxonomy)"}]},"\"term_links-{$taxonomy}\"":{"name":"\"term_links-{$taxonomy}\"","callers":[{"name":"get_the_term_list","file":"category-template.php","line":1107,"type":"filter","source":"apply_filters(\"term_links-{$taxonomy}\", $term_links)"}]},"'the_terms'":{"name":"'the_terms'","callers":[{"name":"the_terms","file":"category-template.php","line":1130,"type":"filter","source":"apply_filters('the_terms', $term_list, $taxonomy, $before, $sep, $after)"}]},"'get_categories_taxonomy'":{"name":"'get_categories_taxonomy'","callers":[{"name":"get_categories","file":"category.php","line":43,"type":"filter","source":"apply_filters('get_categories_taxonomy', $args['taxonomy'], $args)"}]},"'get_tags'":{"name":"'get_tags'","callers":[{"name":"get_tags","file":"category.php","line":260,"type":"filter","source":"apply_filters('get_tags', $tags, $args)"}]},"'wp_feed_cache_transient_lifetime'":{"name":"'wp_feed_cache_transient_lifetime'","callers":[{"name":"WP_Feed_Cache_Transient::__construct","file":"class-feed.php","line":26,"type":"filter","source":"apply_filters('wp_feed_cache_transient_lifetime', $this->lifetime, $filename)"},{"name":"fetch_feed","file":"feed.php","line":540,"type":"filter","source":"apply_filters('wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url)"}]},"'http_request_timeout'":{"name":"'http_request_timeout'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":86,"type":"filter","source":"apply_filters('http_request_timeout', 5)"}]},"'http_request_redirection_count'":{"name":"'http_request_redirection_count'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":87,"type":"filter","source":"apply_filters('http_request_redirection_count', 5)"}]},"'http_request_version'":{"name":"'http_request_version'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":88,"type":"filter","source":"apply_filters('http_request_version', '1.0')"}]},"'http_headers_useragent'":{"name":"'http_headers_useragent'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":89,"type":"filter","source":"apply_filters('http_headers_useragent', 'WordPress\/' . $wp_version . '; ' . get_bloginfo('url'))"}]},"'http_request_args'":{"name":"'http_request_args'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":109,"type":"filter","source":"apply_filters('http_request_args', $r, $url)"}]},"'pre_http_request'":{"name":"'pre_http_request'","callers":[{"name":"WP_Http::request","file":"class-http.php","line":115,"type":"filter","source":"apply_filters('pre_http_request', false, $r, $url)"}]},"'http_api_debug'":{"name":"'http_api_debug'","callers":[{"name":"WP_Http::_dispatch_request","file":"class-http.php","line":252,"type":"action","source":"do_action('http_api_debug', $response, 'response', $class, $args, $url)"}]},"'http_response'":{"name":"'http_response'","callers":[{"name":"WP_Http::_dispatch_request","file":"class-http.php","line":257,"type":"filter","source":"apply_filters('http_response', $response, $args, $url)"}]},"'block_local_requests'":{"name":"'block_local_requests'","callers":[{"name":"WP_Http::block_request","file":"class-http.php","line":512,"type":"filter","source":"apply_filters('block_local_requests', false)"}]},"'use_fsockopen_transport'":{"name":"'use_fsockopen_transport'","callers":[{"name":"WP_Http_Fsockopen::test","file":"class-http.php","line":815,"type":"filter","source":"apply_filters('use_fsockopen_transport', true, $args)"}]},"'https_local_ssl_verify'":{"name":"'https_local_ssl_verify'","callers":[{"name":"WP_Http_Streams::request","file":"class-http.php","line":882,"type":"filter","source":"apply_filters('https_local_ssl_verify', $ssl_verify)"},{"name":"WP_Http_Curl::request","file":"class-http.php","line":1073,"type":"filter","source":"apply_filters('https_local_ssl_verify', $ssl_verify)"},{"name":"spawn_cron","file":"cron.php","line":250,"type":"filter","source":"apply_filters('https_local_ssl_verify', true)"}]},"'https_ssl_verify'":{"name":"'https_ssl_verify'","callers":[{"name":"WP_Http_Streams::request","file":"class-http.php","line":884,"type":"filter","source":"apply_filters('https_ssl_verify', $ssl_verify)"},{"name":"WP_Http_Curl::request","file":"class-http.php","line":1075,"type":"filter","source":"apply_filters('https_ssl_verify', $ssl_verify)"}]},"'use_streams_transport'":{"name":"'use_streams_transport'","callers":[{"name":"WP_Http_Streams::test","file":"class-http.php","line":998,"type":"filter","source":"apply_filters('use_streams_transport', true, $args)"}]},"'http_api_curl'":{"name":"'http_api_curl'","callers":[{"name":"WP_Http_Curl::request","file":"class-http.php","line":1143,"type":"action_reference","source":"do_action_ref_array('http_api_curl', array(&$handle))"}]},"'use_curl_transport'":{"name":"'use_curl_transport'","callers":[{"name":"WP_Http_Curl::test","file":"class-http.php","line":1227,"type":"filter","source":"apply_filters('use_curl_transport', true, $args)"}]},"'pre_http_send_through_proxy'":{"name":"'pre_http_send_through_proxy'","callers":[{"name":"WP_HTTP_Proxy::send_through_proxy","file":"class-http.php","line":1393,"type":"filter","source":"apply_filters('pre_http_send_through_proxy', null, $uri, $check, $home)"}]},"'wp_http_cookie_value'":{"name":"'wp_http_cookie_value'","callers":[{"name":"WP_Http_Cookie::getHeaderValue","file":"class-http.php","line":1594,"type":"filter","source":"apply_filters('wp_http_cookie_value', $this->value, $this->name)"}]},"'oembed_providers'":{"name":"'oembed_providers'","callers":[{"name":"WP_oEmbed::__construct","file":"class-oembed.php","line":32,"type":"filter","source":"apply_filters('oembed_providers', array('#https?:\/\/(www\\\\.)?youtube.com\/watch.*#i' => array('http:\/\/www.youtube.com\/oembed', true), 'http:\/\/youtu.be\/*' => array('http:\/\/www.youtube.com\/oembed', false), 'http:\/\/blip.tv\/*' => array('http:\/\/blip.tv\/oembed\/', false), '#https?:\/\/(www\\\\.)?vimeo\\\\.com\/.*#i' => array('http:\/\/vimeo.com\/api\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?dailymotion\\\\.com\/.*#i' => array('http:\/\/www.dailymotion.com\/services\/oembed', true), '#https?:\/\/(www\\\\.)?flickr\\\\.com\/.*#i' => array('http:\/\/www.flickr.com\/services\/oembed\/', true), '#https?:\/\/(.+\\\\.)?smugmug\\\\.com\/.*#i' => array('http:\/\/api.smugmug.com\/services\/oembed\/', true), '#https?:\/\/(www\\\\.)?hulu\\\\.com\/watch\/.*#i' => array('http:\/\/www.hulu.com\/api\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?viddler\\\\.com\/.*#i' => array('http:\/\/lab.viddler.com\/services\/oembed\/', true), 'http:\/\/qik.com\/*' => array('http:\/\/qik.com\/api\/oembed.{format}', false), 'http:\/\/revision3.com\/*' => array('http:\/\/revision3.com\/api\/oembed\/', false), 'http:\/\/i*.photobucket.com\/albums\/*' => array('http:\/\/photobucket.com\/oembed', false), 'http:\/\/gi*.photobucket.com\/groups\/*' => array('http:\/\/photobucket.com\/oembed', false), '#https?:\/\/(www\\\\.)?scribd\\\\.com\/.*#i' => array('http:\/\/www.scribd.com\/services\/oembed', true), 'http:\/\/wordpress.tv\/*' => array('http:\/\/wordpress.tv\/oembed\/', false), '#https?:\/\/(.+\\\\.)?polldaddy\\\\.com\/.*#i' => array('http:\/\/polldaddy.com\/oembed\/', true), '#https?:\/\/(www\\\\.)?funnyordie\\\\.com\/videos\/.*#i' => array('http:\/\/www.funnyordie.com\/oembed', true), '#https?:\/\/(www\\\\.)?twitter.com\/.+?\/status(es)?\/.*#i' => array('http:\/\/api.twitter.com\/1\/statuses\/oembed.{format}', true), '#https?:\/\/(www\\\\.)?soundcloud\\\\.com\/.*#i' => array('http:\/\/soundcloud.com\/oembed', true), '#https?:\/\/(www\\\\.)?slideshare.net\/*#' => array('http:\/\/www.slideshare.net\/api\/oembed\/2', true), '#http:\/\/instagr(\\\\.am|am\\\\.com)\/p\/.*#i' => array('http:\/\/api.instagram.com\/oembed', true)))"}]},"'oembed_result'":{"name":"'oembed_result'","callers":[{"name":"WP_oEmbed::get_html","file":"class-oembed.php","line":98,"type":"filter","source":"apply_filters('oembed_result', $this->data2html($data, $url), $url, $args)"}]},"'oembed_linktypes'":{"name":"'oembed_linktypes'","callers":[{"name":"WP_oEmbed::discover","file":"class-oembed.php","line":114,"type":"filter","source":"apply_filters('oembed_linktypes', array('application\/json+oembed' => 'json', 'text\/xml+oembed' => 'xml', 'application\/xml+oembed' => 'xml'))"}]},"'oembed_fetch_url'":{"name":"'oembed_fetch_url'","callers":[{"name":"WP_oEmbed::fetch","file":"class-oembed.php","line":171,"type":"filter","source":"apply_filters('oembed_fetch_url', $provider, $url, $args)"}]},"'oembed_dataparse'":{"name":"'oembed_dataparse'","callers":[{"name":"WP_oEmbed::data2html","file":"class-oembed.php","line":294,"type":"filter","source":"apply_filters('oembed_dataparse', $return, $data, $url)"}]},"'admin_bar_init'":{"name":"'admin_bar_init'","callers":[{"name":"WP_Admin_Bar::initialize","file":"class-wp-admin-bar.php","line":61,"type":"action","source":"do_action('admin_bar_init')"}]},"'add_admin_bar_menus'":{"name":"'add_admin_bar_menus'","callers":[{"name":"WP_Admin_Bar::add_menus","file":"class-wp-admin-bar.php","line":488,"type":"action","source":"do_action('add_admin_bar_menus')"}]},"'customize_render_control'":{"name":"'customize_render_control'","callers":[{"name":"WP_Customize_Control::maybe_render","file":"class-wp-customize-control.php","line":181,"type":"action","source":"do_action('customize_render_control', $this)"}]},"'customize_render_control_' . $this->id":{"name":"'customize_render_control_' . $this->id","callers":[{"name":"WP_Customize_Control::maybe_render","file":"class-wp-customize-control.php","line":182,"type":"action","source":"do_action('customize_render_control_' . $this->id, $this)"}]},"'start_previewing_theme'":{"name":"'start_previewing_theme'","callers":[{"name":"WP_Customize_Manager::start_previewing_theme","file":"class-wp-customize-manager.php","line":184,"type":"action","source":"do_action('start_previewing_theme', $this)"}]},"'stop_previewing_theme'":{"name":"'stop_previewing_theme'","callers":[{"name":"WP_Customize_Manager::stop_previewing_theme","file":"class-wp-customize-manager.php","line":214,"type":"action","source":"do_action('stop_previewing_theme', $this)"}]},"'customize_register'":{"name":"'customize_register'","callers":[{"name":"WP_Customize_Manager::wp_loaded","file":"class-wp-customize-manager.php","line":278,"type":"action","source":"do_action('customize_register', $this)"}]},"'customize_preview_init'":{"name":"'customize_preview_init'","callers":[{"name":"WP_Customize_Manager::customize_preview_init","file":"class-wp-customize-manager.php","line":343,"type":"action","source":"do_action('customize_preview_init', $this)"}]},"'customize_save'":{"name":"'customize_save'","callers":[{"name":"WP_Customize_Manager::save","file":"class-wp-customize-manager.php","line":509,"type":"action","source":"do_action('customize_save', $this)"}]},"'customize_render_section'":{"name":"'customize_render_section'","callers":[{"name":"WP_Customize_Section::maybe_render","file":"class-wp-customize-section.php","line":69,"type":"action","source":"do_action('customize_render_section', $this)"}]},"'customize_render_section_' . $this->id":{"name":"'customize_render_section_' . $this->id","callers":[{"name":"WP_Customize_Section::maybe_render","file":"class-wp-customize-section.php","line":70,"type":"action","source":"do_action('customize_render_section_' . $this->id)"}]},"'customize_preview_' . $this->id":{"name":"'customize_preview_' . $this->id","callers":[{"name":"WP_Customize_Setting::preview","file":"class-wp-customize-setting.php","line":83,"type":"action","source":"do_action('customize_preview_' . $this->id)"}]},"'customize_save_' . $this->id_data['base']":{"name":"'customize_save_' . $this->id_data['base']","callers":[{"name":"WP_Customize_Setting::save","file":"class-wp-customize-setting.php","line":113,"type":"action","source":"do_action('customize_save_' . $this->id_data['base'])"}]},"\"customize_sanitize_{$this->id}\"":{"name":"\"customize_sanitize_{$this->id}\"","callers":[{"name":"WP_Customize_Setting::sanitize","file":"class-wp-customize-setting.php","line":148,"type":"filter","source":"apply_filters(\"customize_sanitize_{$this->id}\", $value, $this)"}]},"'customize_update_' . $this->type":{"name":"'customize_update_' . $this->type","callers":[{"name":"WP_Customize_Setting::update","file":"class-wp-customize-setting.php","line":168,"type":"action","source":"do_action('customize_update_' . $this->type, $value)"}]},"'customize_value_' . $this->id_data['base']":{"name":"'customize_value_' . $this->id_data['base']","callers":[{"name":"WP_Customize_Setting::value","file":"class-wp-customize-setting.php","line":228,"type":"filter","source":"apply_filters('customize_value_' . $this->id_data['base'], $this->default)"}]},"\"customize_sanitize_js_{$this->id}\"":{"name":"\"customize_sanitize_js_{$this->id}\"","callers":[{"name":"WP_Customize_Setting::js_value","file":"class-wp-customize-setting.php","line":248,"type":"filter","source":"apply_filters(\"customize_sanitize_js_{$this->id}\", $this->value(), $this)"}]},"'media_buttons'":{"name":"'media_buttons'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":139,"type":"action","source":"do_action('media_buttons', $editor_id)"}]},"'the_editor'":{"name":"'the_editor'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":145,"type":"filter","source":"apply_filters('the_editor', '<div id=\"wp-' . $editor_id . '-editor-container\" class=\"wp-editor-container\"><textarea' . $editor_class . $height . $tabindex . ' cols=\"40\" name=\"' . $set['textarea_name'] . '\" id=\"' . $editor_id . '\">%s<\/textarea><\/div>')"}]},"'the_editor_content'":{"name":"'the_editor_content'","callers":[{"name":"_WP_Editors::editor","file":"class-wp-editor.php","line":146,"type":"filter","source":"apply_filters('the_editor_content', $content)"}]},"'quicktags_settings'":{"name":"'quicktags_settings'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":184,"type":"filter","source":"apply_filters('quicktags_settings', $qtInit, $editor_id)"}]},"'disable_captions'":{"name":"'disable_captions'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":195,"type":"filter","source":"apply_filters('disable_captions', '')"},{"name":"wp_print_media_templates","file":"media-template.php","line":389,"type":"filter","source":"apply_filters('disable_captions', '')"},{"name":"wp_enqueue_media","file":"media.php","line":1462,"type":"filter","source":"apply_filters('disable_captions', '')"}]},"'teeny_mce_plugins'":{"name":"'teeny_mce_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":201,"type":"filter","source":"apply_filters('teeny_mce_plugins', array('inlinepopups', 'fullscreen', 'wordpress', 'wplink', 'wpdialogs'), $editor_id)"}]},"'mce_external_plugins'":{"name":"'mce_external_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":210,"type":"filter","source":"apply_filters('mce_external_plugins', array())"}]},"'mce_external_languages'":{"name":"'mce_external_languages'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":223,"type":"filter","source":"apply_filters('mce_external_languages', array())"}]},"'tiny_mce_plugins'":{"name":"'tiny_mce_plugins'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":280,"type":"filter","source":"apply_filters('tiny_mce_plugins', $plugins)"}]},"'mce_spellchecker_languages'":{"name":"'mce_spellchecker_languages'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":302,"type":"filter","source":"apply_filters('mce_spellchecker_languages', '+' . $mce_spellchecker_languages)"}]},"'mce_css'":{"name":"'mce_css'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":381,"type":"filter","source":"apply_filters('mce_css', $mce_css)"}]},"'teeny_mce_buttons'":{"name":"'teeny_mce_buttons'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":388,"type":"filter","source":"apply_filters('teeny_mce_buttons', array('bold', 'italic', 'underline', 'blockquote', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'undo', 'redo', 'link', 'unlink', 'fullscreen'), $editor_id)"}]},"'mce_buttons'":{"name":"'mce_buttons'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":391,"type":"filter","source":"apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', 'bullist', 'numlist', 'blockquote', 'justifyleft', 'justifycenter', 'justifyright', 'link', 'unlink', 'wp_more', 'spellchecker', 'fullscreen', 'wp_adv'), $editor_id)"}]},"'mce_buttons_2'":{"name":"'mce_buttons_2'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":392,"type":"filter","source":"apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', 'pastetext', 'pasteword', 'removeformat', 'charmap', 'outdent', 'indent', 'undo', 'redo', 'wp_help'), $editor_id)"}]},"'mce_buttons_3'":{"name":"'mce_buttons_3'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":393,"type":"filter","source":"apply_filters('mce_buttons_3', array(), $editor_id)"}]},"'mce_buttons_4'":{"name":"'mce_buttons_4'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":394,"type":"filter","source":"apply_filters('mce_buttons_4', array(), $editor_id)"}]},"'teeny_mce_before_init'":{"name":"'teeny_mce_before_init'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":446,"type":"filter","source":"apply_filters('teeny_mce_before_init', $mceInit, $editor_id)"}]},"'tiny_mce_before_init'":{"name":"'tiny_mce_before_init'","callers":[{"name":"_WP_Editors::editor_settings","file":"class-wp-editor.php","line":448,"type":"filter","source":"apply_filters('tiny_mce_before_init', $mceInit, $editor_id)"}]},"'before_wp_tiny_mce'":{"name":"'before_wp_tiny_mce'","callers":[{"name":"_WP_Editors::editor_js","file":"class-wp-editor.php","line":553,"type":"action","source":"do_action('before_wp_tiny_mce', self::$mce_settings)"}]},"'after_wp_tiny_mce'":{"name":"'after_wp_tiny_mce'","callers":[{"name":"_WP_Editors::editor_js","file":"class-wp-editor.php","line":654,"type":"action","source":"do_action('after_wp_tiny_mce', self::$mce_settings)"}]},"'wp_fullscreen_buttons'":{"name":"'wp_fullscreen_buttons'","callers":[{"name":"_WP_Editors::wp_fullscreen_html","file":"class-wp-editor.php","line":697,"type":"filter","source":"apply_filters('wp_fullscreen_buttons', $buttons)"}]},"'enter_title_here'":{"name":"'enter_title_here'","callers":[{"name":"_WP_Editors::wp_fullscreen_html","file":"class-wp-editor.php","line":727,"type":"filter","source":"apply_filters('enter_title_here', __('Enter title here'), $post)"}]},"'embed_handler_html'":{"name":"'embed_handler_html'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":156,"type":"filter","source":"apply_filters('embed_handler_html', $return, $url, $attr)"}]},"'embed_oembed_html'":{"name":"'embed_oembed_html'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":178,"type":"filter","source":"apply_filters('embed_oembed_html', $cache, $url, $attr, $post_ID)"},{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":191,"type":"filter","source":"apply_filters('embed_oembed_html', $html, $url, $attr, $post_ID)"}]},"'embed_oembed_discover'":{"name":"'embed_oembed_discover'","callers":[{"name":"WP_Embed::shortcode","file":"class-wp-embed.php","line":182,"type":"filter","source":"apply_filters('embed_oembed_discover', false)"}]},"'embed_cache_oembed_types'":{"name":"'embed_cache_oembed_types'","callers":[{"name":"WP_Embed::cache_oembed","file":"class-wp-embed.php","line":222,"type":"filter","source":"apply_filters('embed_cache_oembed_types', array('post', 'page'))"}]},"'embed_maybe_make_link'":{"name":"'embed_maybe_make_link'","callers":[{"name":"WP_Embed::maybe_make_link","file":"class-wp-embed.php","line":274,"type":"filter","source":"apply_filters('embed_maybe_make_link', $output, $url)"}]},"'image_memory_limit'":{"name":"'image_memory_limit'","callers":[{"name":"WP_Image_Editor_GD::load","file":"class-wp-image-editor-gd.php","line":90,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"},{"name":"WP_Image_Editor_Imagick::load","file":"class-wp-image-editor-imagick.php","line":123,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"},{"name":"wp_load_image","file":"deprecated.php","line":3231,"type":"filter","source":"apply_filters('image_memory_limit', WP_MAX_MEMORY_LIMIT)"}]},"'jpeg_quality'":{"name":"'jpeg_quality'","callers":[{"name":"WP_Image_Editor_GD::_save","file":"class-wp-image-editor-gd.php","line":346,"type":"filter","source":"apply_filters('jpeg_quality', $this->quality, 'image_resize')"},{"name":"WP_Image_Editor_Imagick::set_quality","file":"class-wp-image-editor-imagick.php","line":163,"type":"filter","source":"apply_filters('jpeg_quality', $quality, 'image_resize')"}]},"'image_make_intermediate_size'":{"name":"'image_make_intermediate_size'","callers":[{"name":"WP_Image_Editor_GD::_save","file":"class-wp-image-editor-gd.php","line":360,"type":"filter","source":"apply_filters('image_make_intermediate_size', $filename)"},{"name":"WP_Image_Editor_Imagick::_save","file":"class-wp-image-editor-imagick.php","line":432,"type":"filter","source":"apply_filters('image_make_intermediate_size', $filename)"}]},"'wp_editor_set_quality'":{"name":"'wp_editor_set_quality'","callers":[{"name":"WP_Image_Editor::set_quality","file":"class-wp-image-editor.php","line":204,"type":"filter","source":"apply_filters('wp_editor_set_quality', $quality)"}]},"'image_editor_default_mime_type'":{"name":"'image_editor_default_mime_type'","callers":[{"name":"WP_Image_Editor::get_output_format","file":"class-wp-image-editor.php","line":253,"type":"filter","source":"apply_filters('image_editor_default_mime_type', $this->default_mime_type)"}]},"'wp_cache_themes_persistently'":{"name":"'wp_cache_themes_persistently'","callers":[{"name":"WP_Theme::__construct","file":"class-wp-theme.php","line":172,"type":"filter","source":"apply_filters('wp_cache_themes_persistently', false, 'WP_Theme')"},{"name":"search_theme_directories","file":"theme.php","line":351,"type":"filter","source":"apply_filters('wp_cache_themes_persistently', false, 'search_theme_directories')"}]},"'allowed_themes'":{"name":"'allowed_themes'","callers":[{"name":"WP_Theme::get_allowed","file":"class-wp-theme.php","line":1076,"type":"filter","source":"apply_filters('allowed_themes', self::get_allowed_on_network())"}]},"'xmlrpc_methods'":{"name":"'xmlrpc_methods'","callers":[{"name":"wp_xmlrpc_server::__construct","file":"class-wp-xmlrpc-server.php","line":129,"type":"filter","source":"apply_filters('xmlrpc_methods', $this->methods)"}]},"'pre_option_enable_xmlrpc'":{"name":"'pre_option_enable_xmlrpc'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":173,"type":"filter","source":"apply_filters('pre_option_enable_xmlrpc', false)"}]},"'option_enable_xmlrpc'":{"name":"'option_enable_xmlrpc'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":175,"type":"filter","source":"apply_filters('option_enable_xmlrpc', true)"}]},"'xmlrpc_enabled'":{"name":"'xmlrpc_enabled'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":178,"type":"filter","source":"apply_filters('xmlrpc_enabled', $enabled)"}]},"'xmlrpc_login_error'":{"name":"'xmlrpc_login_error'","callers":[{"name":"wp_xmlrpc_server::login","file":"class-wp-xmlrpc-server.php","line":189,"type":"filter","source":"apply_filters('xmlrpc_login_error', $this->error, $user)"}]},"'xmlrpc_blog_options'":{"name":"'xmlrpc_blog_options'","callers":[{"name":"wp_xmlrpc_server::initialise_blog_option_info","file":"class-wp-xmlrpc-server.php","line":439,"type":"filter","source":"apply_filters('xmlrpc_blog_options', $this->blog_options)"}]},"'xmlrpc_call'":{"name":"'xmlrpc_call'","callers":[{"name":"wp_xmlrpc_server::wp_getUsersBlogs","file":"class-wp-xmlrpc-server.php","line":473,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUsersBlogs')"},{"name":"wp_xmlrpc_server::wp_newPost","file":"class-wp-xmlrpc-server.php","line":968,"type":"action","source":"do_action('xmlrpc_call', 'wp.newPost')"},{"name":"wp_xmlrpc_server::wp_editPost","file":"class-wp-xmlrpc-server.php","line":1253,"type":"action","source":"do_action('xmlrpc_call', 'wp.editPost')"},{"name":"wp_xmlrpc_server::wp_deletePost","file":"class-wp-xmlrpc-server.php","line":1314,"type":"action","source":"do_action('xmlrpc_call', 'wp.deletePost')"},{"name":"wp_xmlrpc_server::wp_getPost","file":"class-wp-xmlrpc-server.php","line":1395,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPost')"},{"name":"wp_xmlrpc_server::wp_getPosts","file":"class-wp-xmlrpc-server.php","line":1452,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPosts')"},{"name":"wp_xmlrpc_server::wp_newTerm","file":"class-wp-xmlrpc-server.php","line":1542,"type":"action","source":"do_action('xmlrpc_call', 'wp.newTerm')"},{"name":"wp_xmlrpc_server::wp_editTerm","file":"class-wp-xmlrpc-server.php","line":1630,"type":"action","source":"do_action('xmlrpc_call', 'wp.editTerm')"},{"name":"wp_xmlrpc_server::wp_deleteTerm","file":"class-wp-xmlrpc-server.php","line":1722,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteTerm')"},{"name":"wp_xmlrpc_server::wp_getTerm","file":"class-wp-xmlrpc-server.php","line":1789,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTerm')"},{"name":"wp_xmlrpc_server::wp_getTerms","file":"class-wp-xmlrpc-server.php","line":1842,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTerms')"},{"name":"wp_xmlrpc_server::wp_getTaxonomy","file":"class-wp-xmlrpc-server.php","line":1921,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTaxonomy')"},{"name":"wp_xmlrpc_server::wp_getTaxonomies","file":"class-wp-xmlrpc-server.php","line":1965,"type":"action","source":"do_action('xmlrpc_call', 'wp.getTaxonomies')"},{"name":"wp_xmlrpc_server::wp_getUser","file":"class-wp-xmlrpc-server.php","line":2034,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUser')"},{"name":"wp_xmlrpc_server::wp_getUsers","file":"class-wp-xmlrpc-server.php","line":2087,"type":"action","source":"do_action('xmlrpc_call', 'wp.getUsers')"},{"name":"wp_xmlrpc_server::wp_getProfile","file":"class-wp-xmlrpc-server.php","line":2154,"type":"action","source":"do_action('xmlrpc_call', 'wp.getProfile')"},{"name":"wp_xmlrpc_server::wp_editProfile","file":"class-wp-xmlrpc-server.php","line":2197,"type":"action","source":"do_action('xmlrpc_call', 'wp.editProfile')"},{"name":"wp_xmlrpc_server::wp_getPage","file":"class-wp-xmlrpc-server.php","line":2270,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPage')"},{"name":"wp_xmlrpc_server::wp_getPages","file":"class-wp-xmlrpc-server.php","line":2308,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPages')"},{"name":"wp_xmlrpc_server::wp_newPage","file":"class-wp-xmlrpc-server.php","line":2348,"type":"action","source":"do_action('xmlrpc_call', 'wp.newPage')"},{"name":"wp_xmlrpc_server::wp_deletePage","file":"class-wp-xmlrpc-server.php","line":2376,"type":"action","source":"do_action('xmlrpc_call', 'wp.deletePage')"},{"name":"wp_xmlrpc_server::wp_editPage","file":"class-wp-xmlrpc-server.php","line":2418,"type":"action","source":"do_action('xmlrpc_call', 'wp.editPage')"},{"name":"wp_xmlrpc_server::wp_getPageList","file":"class-wp-xmlrpc-server.php","line":2468,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPageList')"},{"name":"wp_xmlrpc_server::wp_getAuthors","file":"class-wp-xmlrpc-server.php","line":2519,"type":"action","source":"do_action('xmlrpc_call', 'wp.getAuthors')"},{"name":"wp_xmlrpc_server::wp_getTags","file":"class-wp-xmlrpc-server.php","line":2554,"type":"action","source":"do_action('xmlrpc_call', 'wp.getKeywords')"},{"name":"wp_xmlrpc_server::wp_newCategory","file":"class-wp-xmlrpc-server.php","line":2593,"type":"action","source":"do_action('xmlrpc_call', 'wp.newCategory')"},{"name":"wp_xmlrpc_server::wp_deleteCategory","file":"class-wp-xmlrpc-server.php","line":2654,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteCategory')"},{"name":"wp_xmlrpc_server::wp_suggestCategories","file":"class-wp-xmlrpc-server.php","line":2690,"type":"action","source":"do_action('xmlrpc_call', 'wp.suggestCategories')"},{"name":"wp_xmlrpc_server::wp_getComment","file":"class-wp-xmlrpc-server.php","line":2726,"type":"action","source":"do_action('xmlrpc_call', 'wp.getComment')"},{"name":"wp_xmlrpc_server::wp_getComments","file":"class-wp-xmlrpc-server.php","line":2767,"type":"action","source":"do_action('xmlrpc_call', 'wp.getComments')"},{"name":"wp_xmlrpc_server::wp_deleteComment","file":"class-wp-xmlrpc-server.php","line":2833,"type":"action","source":"do_action('xmlrpc_call', 'wp.deleteComment')"},{"name":"wp_xmlrpc_server::wp_editComment","file":"class-wp-xmlrpc-server.php","line":2888,"type":"action","source":"do_action('xmlrpc_call', 'wp.editComment')"},{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":3012,"type":"action","source":"do_action('xmlrpc_call', 'wp.newComment')"},{"name":"wp_xmlrpc_server::wp_getCommentStatusList","file":"class-wp-xmlrpc-server.php","line":3042,"type":"action","source":"do_action('xmlrpc_call', 'wp.getCommentStatusList')"},{"name":"wp_xmlrpc_server::wp_getCommentCount","file":"class-wp-xmlrpc-server.php","line":3069,"type":"action","source":"do_action('xmlrpc_call', 'wp.getCommentCount')"},{"name":"wp_xmlrpc_server::wp_getPostStatusList","file":"class-wp-xmlrpc-server.php","line":3101,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostStatusList')"},{"name":"wp_xmlrpc_server::wp_getPageStatusList","file":"class-wp-xmlrpc-server.php","line":3127,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPageStatusList')"},{"name":"wp_xmlrpc_server::wp_getMediaItem","file":"class-wp-xmlrpc-server.php","line":3280,"type":"action","source":"do_action('xmlrpc_call', 'wp.getMediaItem')"},{"name":"wp_xmlrpc_server::wp_getMediaLibrary","file":"class-wp-xmlrpc-server.php","line":3325,"type":"action","source":"do_action('xmlrpc_call', 'wp.getMediaLibrary')"},{"name":"wp_xmlrpc_server::wp_getPostFormats","file":"class-wp-xmlrpc-server.php","line":3366,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostFormats')"},{"name":"wp_xmlrpc_server::wp_getPostType","file":"class-wp-xmlrpc-server.php","line":3429,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostType')"},{"name":"wp_xmlrpc_server::wp_getPostTypes","file":"class-wp-xmlrpc-server.php","line":3475,"type":"action","source":"do_action('xmlrpc_call', 'wp.getPostTypes')"},{"name":"wp_xmlrpc_server::wp_getRevisions","file":"class-wp-xmlrpc-server.php","line":3529,"type":"action","source":"do_action('xmlrpc_call', 'wp.getRevisions')"},{"name":"wp_xmlrpc_server::wp_restoreRevision","file":"class-wp-xmlrpc-server.php","line":3590,"type":"action","source":"do_action('xmlrpc_call', 'wp.restoreRevision')"},{"name":"wp_xmlrpc_server::blogger_getUsersBlogs","file":"class-wp-xmlrpc-server.php","line":3639,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getUsersBlogs')"},{"name":"wp_xmlrpc_server::blogger_getUserInfo","file":"class-wp-xmlrpc-server.php","line":3706,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getUserInfo')"},{"name":"wp_xmlrpc_server::blogger_getPost","file":"class-wp-xmlrpc-server.php","line":3745,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getPost')"},{"name":"wp_xmlrpc_server::blogger_getRecentPosts","file":"class-wp-xmlrpc-server.php","line":3787,"type":"action","source":"do_action('xmlrpc_call', 'blogger.getRecentPosts')"},{"name":"wp_xmlrpc_server::blogger_newPost","file":"class-wp-xmlrpc-server.php","line":3865,"type":"action","source":"do_action('xmlrpc_call', 'blogger.newPost')"},{"name":"wp_xmlrpc_server::blogger_editPost","file":"class-wp-xmlrpc-server.php","line":3919,"type":"action","source":"do_action('xmlrpc_call', 'blogger.editPost')"},{"name":"wp_xmlrpc_server::blogger_deletePost","file":"class-wp-xmlrpc-server.php","line":3973,"type":"action","source":"do_action('xmlrpc_call', 'blogger.deletePost')"},{"name":"wp_xmlrpc_server::mw_newPost","file":"class-wp-xmlrpc-server.php","line":4044,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.newPost')"},{"name":"wp_xmlrpc_server::mw_editPost","file":"class-wp-xmlrpc-server.php","line":4365,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.editPost')"},{"name":"wp_xmlrpc_server::mw_getPost","file":"class-wp-xmlrpc-server.php","line":4639,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getPost')"},{"name":"wp_xmlrpc_server::mw_getRecentPosts","file":"class-wp-xmlrpc-server.php","line":4760,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getRecentPosts')"},{"name":"wp_xmlrpc_server::mw_getCategories","file":"class-wp-xmlrpc-server.php","line":4874,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.getCategories')"},{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4922,"type":"action","source":"do_action('xmlrpc_call', 'metaWeblog.newMediaObject')"},{"name":"wp_xmlrpc_server::mt_getRecentPostTitles","file":"class-wp-xmlrpc-server.php","line":5014,"type":"action","source":"do_action('xmlrpc_call', 'mt.getRecentPostTitles')"},{"name":"wp_xmlrpc_server::mt_getCategoryList","file":"class-wp-xmlrpc-server.php","line":5073,"type":"action","source":"do_action('xmlrpc_call', 'mt.getCategoryList')"},{"name":"wp_xmlrpc_server::mt_getPostCategories","file":"class-wp-xmlrpc-server.php","line":5114,"type":"action","source":"do_action('xmlrpc_call', 'mt.getPostCategories')"},{"name":"wp_xmlrpc_server::mt_setPostCategories","file":"class-wp-xmlrpc-server.php","line":5152,"type":"action","source":"do_action('xmlrpc_call', 'mt.setPostCategories')"},{"name":"wp_xmlrpc_server::mt_supportedMethods","file":"class-wp-xmlrpc-server.php","line":5180,"type":"action","source":"do_action('xmlrpc_call', 'mt.supportedMethods')"},{"name":"wp_xmlrpc_server::mt_supportedTextFilters","file":"class-wp-xmlrpc-server.php","line":5198,"type":"action","source":"do_action('xmlrpc_call', 'mt.supportedTextFilters')"},{"name":"wp_xmlrpc_server::mt_getTrackbackPings","file":"class-wp-xmlrpc-server.php","line":5216,"type":"action","source":"do_action('xmlrpc_call', 'mt.getTrackbackPings')"},{"name":"wp_xmlrpc_server::mt_publishPost","file":"class-wp-xmlrpc-server.php","line":5263,"type":"action","source":"do_action('xmlrpc_call', 'mt.publishPost')"},{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5299,"type":"action","source":"do_action('xmlrpc_call', 'pingback.ping')"},{"name":"wp_xmlrpc_server::pingback_extensions_getPingbacks","file":"class-wp-xmlrpc-server.php","line":5467,"type":"action","source":"do_action('xmlrpc_call', 'pingback.extensions.getPingbacks')"}]},"'xmlrpc_prepare_taxonomy'":{"name":"'xmlrpc_prepare_taxonomy'","callers":[{"name":"wp_xmlrpc_server::_prepare_taxonomy","file":"class-wp-xmlrpc-server.php","line":549,"type":"filter","source":"apply_filters('xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy, $fields)"}]},"'xmlrpc_prepare_term'":{"name":"'xmlrpc_prepare_term'","callers":[{"name":"wp_xmlrpc_server::_prepare_term","file":"class-wp-xmlrpc-server.php","line":574,"type":"filter","source":"apply_filters('xmlrpc_prepare_term', $_term, $term)"}]},"'xmlrpc_prepare_post'":{"name":"'xmlrpc_prepare_post'","callers":[{"name":"wp_xmlrpc_server::_prepare_post","file":"class-wp-xmlrpc-server.php","line":695,"type":"filter","source":"apply_filters('xmlrpc_prepare_post', $_post, $post, $fields)"}]},"'xmlrpc_prepare_post_type'":{"name":"'xmlrpc_prepare_post_type'","callers":[{"name":"wp_xmlrpc_server::_prepare_post_type","file":"class-wp-xmlrpc-server.php","line":737,"type":"filter","source":"apply_filters('xmlrpc_prepare_post_type', $_post_type, $post_type)"}]},"'xmlrpc_prepare_media_item'":{"name":"'xmlrpc_prepare_media_item'","callers":[{"name":"wp_xmlrpc_server::_prepare_media_item","file":"class-wp-xmlrpc-server.php","line":767,"type":"filter","source":"apply_filters('xmlrpc_prepare_media_item', $_media_item, $media_item, $thumbnail_size)"}]},"'xmlrpc_prepare_page'":{"name":"'xmlrpc_prepare_page'","callers":[{"name":"wp_xmlrpc_server::_prepare_page","file":"class-wp-xmlrpc-server.php","line":838,"type":"filter","source":"apply_filters('xmlrpc_prepare_page', $_page, $page)"}]},"'xmlrpc_prepare_comment'":{"name":"'xmlrpc_prepare_comment'","callers":[{"name":"wp_xmlrpc_server::_prepare_comment","file":"class-wp-xmlrpc-server.php","line":880,"type":"filter","source":"apply_filters('xmlrpc_prepare_comment', $_comment, $comment)"}]},"'xmlrpc_prepare_user'":{"name":"'xmlrpc_prepare_user'","callers":[{"name":"wp_xmlrpc_server::_prepare_user","file":"class-wp-xmlrpc-server.php","line":920,"type":"filter","source":"apply_filters('xmlrpc_prepare_user', $_user, $user, $fields)"}]},"'xmlrpc_wp_insert_post_data'":{"name":"'xmlrpc_wp_insert_post_data'","callers":[{"name":"wp_xmlrpc_server::_insert_post","file":"class-wp-xmlrpc-server.php","line":1210,"type":"filter","source":"apply_filters('xmlrpc_wp_insert_post_data', $post_data, $content_struct)"}]},"'xmlrpc_default_post_fields'":{"name":"'xmlrpc_default_post_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getPost","file":"class-wp-xmlrpc-server.php","line":1390,"type":"filter","source":"apply_filters('xmlrpc_default_post_fields', array('post', 'terms', 'custom_fields'), 'wp.getPost')"},{"name":"wp_xmlrpc_server::wp_getPosts","file":"class-wp-xmlrpc-server.php","line":1447,"type":"filter","source":"apply_filters('xmlrpc_default_post_fields', array('post', 'terms', 'custom_fields'), 'wp.getPosts')"}]},"'xmlrpc_default_taxonomy_fields'":{"name":"'xmlrpc_default_taxonomy_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getTaxonomy","file":"class-wp-xmlrpc-server.php","line":1916,"type":"filter","source":"apply_filters('xmlrpc_default_taxonomy_fields', array('labels', 'cap', 'object_type'), 'wp.getTaxonomy')"},{"name":"wp_xmlrpc_server::wp_getTaxonomies","file":"class-wp-xmlrpc-server.php","line":1960,"type":"filter","source":"apply_filters('xmlrpc_default_taxonomy_fields', array('labels', 'cap', 'object_type'), 'wp.getTaxonomies')"}]},"'xmlrpc_default_user_fields'":{"name":"'xmlrpc_default_user_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getUser","file":"class-wp-xmlrpc-server.php","line":2029,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getUser')"},{"name":"wp_xmlrpc_server::wp_getUsers","file":"class-wp-xmlrpc-server.php","line":2082,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getUsers')"},{"name":"wp_xmlrpc_server::wp_getProfile","file":"class-wp-xmlrpc-server.php","line":2149,"type":"filter","source":"apply_filters('xmlrpc_default_user_fields', array('all'), 'wp.getProfile')"}]},"'xmlrpc_call_success_wp_deletePage'":{"name":"'xmlrpc_call_success_wp_deletePage'","callers":[{"name":"wp_xmlrpc_server::wp_deletePage","file":"class-wp-xmlrpc-server.php","line":2393,"type":"action","source":"do_action('xmlrpc_call_success_wp_deletePage', $page_id, $args)"}]},"'xmlrpc_call_success_wp_newCategory'":{"name":"'xmlrpc_call_success_wp_newCategory'","callers":[{"name":"wp_xmlrpc_server::wp_newCategory","file":"class-wp-xmlrpc-server.php","line":2630,"type":"action","source":"do_action('xmlrpc_call_success_wp_newCategory', $cat_id, $args)"}]},"'xmlrpc_call_success_wp_deleteCategory'":{"name":"'xmlrpc_call_success_wp_deleteCategory'","callers":[{"name":"wp_xmlrpc_server::wp_deleteCategory","file":"class-wp-xmlrpc-server.php","line":2662,"type":"action","source":"do_action('xmlrpc_call_success_wp_deleteCategory', $category_id, $args)"}]},"'xmlrpc_call_success_wp_deleteComment'":{"name":"'xmlrpc_call_success_wp_deleteComment'","callers":[{"name":"wp_xmlrpc_server::wp_deleteComment","file":"class-wp-xmlrpc-server.php","line":2838,"type":"action","source":"do_action('xmlrpc_call_success_wp_deleteComment', $comment_ID, $args)"}]},"'xmlrpc_call_success_wp_editComment'":{"name":"'xmlrpc_call_success_wp_editComment'","callers":[{"name":"wp_xmlrpc_server::wp_editComment","file":"class-wp-xmlrpc-server.php","line":2929,"type":"action","source":"do_action('xmlrpc_call_success_wp_editComment', $comment_ID, $args)"}]},"'xmlrpc_allow_anonymous_comments'":{"name":"'xmlrpc_allow_anonymous_comments'","callers":[{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":2953,"type":"filter","source":"apply_filters('xmlrpc_allow_anonymous_comments', false)"}]},"'xmlrpc_call_success_wp_newComment'":{"name":"'xmlrpc_call_success_wp_newComment'","callers":[{"name":"wp_xmlrpc_server::wp_newComment","file":"class-wp-xmlrpc-server.php","line":3016,"type":"action","source":"do_action('xmlrpc_call_success_wp_newComment', $comment_ID, $args)"}]},"'xmlrpc_default_posttype_fields'":{"name":"'xmlrpc_default_posttype_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getPostType","file":"class-wp-xmlrpc-server.php","line":3424,"type":"filter","source":"apply_filters('xmlrpc_default_posttype_fields', array('labels', 'cap', 'taxonomies'), 'wp.getPostType')"},{"name":"wp_xmlrpc_server::wp_getPostTypes","file":"class-wp-xmlrpc-server.php","line":3470,"type":"filter","source":"apply_filters('xmlrpc_default_posttype_fields', array('labels', 'cap', 'taxonomies'), 'wp.getPostTypes')"}]},"'xmlrpc_default_revision_fields'":{"name":"'xmlrpc_default_revision_fields'","callers":[{"name":"wp_xmlrpc_server::wp_getRevisions","file":"class-wp-xmlrpc-server.php","line":3524,"type":"filter","source":"apply_filters('xmlrpc_default_revision_fields', array('post_date', 'post_date_gmt'), 'wp.getRevisions')"}]},"'xmlrpc_call_success_blogger_newPost'":{"name":"'xmlrpc_call_success_blogger_newPost'","callers":[{"name":"wp_xmlrpc_server::blogger_newPost","file":"class-wp-xmlrpc-server.php","line":3893,"type":"action","source":"do_action('xmlrpc_call_success_blogger_newPost', $post_ID, $args)"}]},"'xmlrpc_call_success_blogger_editPost'":{"name":"'xmlrpc_call_success_blogger_editPost'","callers":[{"name":"wp_xmlrpc_server::blogger_editPost","file":"class-wp-xmlrpc-server.php","line":3949,"type":"action","source":"do_action('xmlrpc_call_success_blogger_editPost', $post_ID, $args)"}]},"'xmlrpc_call_success_blogger_deletePost'":{"name":"'xmlrpc_call_success_blogger_deletePost'","callers":[{"name":"wp_xmlrpc_server::blogger_deletePost","file":"class-wp-xmlrpc-server.php","line":3988,"type":"action","source":"do_action('xmlrpc_call_success_blogger_deletePost', $post_ID, $args)"}]},"'xmlrpc_call_success_mw_newPost'":{"name":"'xmlrpc_call_success_mw_newPost'","callers":[{"name":"wp_xmlrpc_server::mw_newPost","file":"class-wp-xmlrpc-server.php","line":4298,"type":"action","source":"do_action('xmlrpc_call_success_mw_newPost', $post_ID, $args)"}]},"'xmlrpc_call_success_mw_editPost'":{"name":"'xmlrpc_call_success_mw_editPost'","callers":[{"name":"wp_xmlrpc_server::mw_editPost","file":"class-wp-xmlrpc-server.php","line":4608,"type":"action","source":"do_action('xmlrpc_call_success_mw_editPost', $post_ID, $args)"}]},"'pre_upload_error'":{"name":"'pre_upload_error'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4929,"type":"filter","source":"apply_filters('pre_upload_error', false)"}]},"'xmlrpc_call_success_mw_newMediaObject'":{"name":"'xmlrpc_call_success_mw_newMediaObject'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4976,"type":"action","source":"do_action('xmlrpc_call_success_mw_newMediaObject', $id, $args)"}]},"'wp_handle_upload'":{"name":"'wp_handle_upload'","callers":[{"name":"wp_xmlrpc_server::mw_newMediaObject","file":"class-wp-xmlrpc-server.php","line":4984,"type":"filter","source":"apply_filters('wp_handle_upload', $struct, 'upload')"}]},"'xmlrpc_text_filters'":{"name":"'xmlrpc_text_filters'","callers":[{"name":"wp_xmlrpc_server::mt_supportedTextFilters","file":"class-wp-xmlrpc-server.php","line":5199,"type":"filter","source":"apply_filters('xmlrpc_text_filters', array())"}]},"'pre_remote_source'":{"name":"'pre_remote_source'","callers":[{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5383,"type":"filter","source":"apply_filters('pre_remote_source', $linea, $pagelinkedto)"}]},"'pingback_post'":{"name":"'pingback_post'","callers":[{"name":"wp_xmlrpc_server::pingback_ping","file":"class-wp-xmlrpc-server.php","line":5448,"type":"action","source":"do_action('pingback_post', $comment_ID)"}]},"'do_parse_request'":{"name":"'do_parse_request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":123,"type":"filter","source":"apply_filters('do_parse_request', true, $this, $extra_query_vars)"}]},"'query_vars'":{"name":"'query_vars'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":248,"type":"filter","source":"apply_filters('query_vars', $this->public_query_vars)"}]},"'request'":{"name":"'request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":306,"type":"filter","source":"apply_filters('request', $this->query_vars)"}]},"'parse_request'":{"name":"'parse_request'","callers":[{"name":"WP::parse_request","file":"class-wp.php","line":308,"type":"action_reference","source":"do_action_ref_array('parse_request', array(&$this))"}]},"'wp_headers'":{"name":"'wp_headers'","callers":[{"name":"WP::send_headers","file":"class-wp.php","line":377,"type":"filter","source":"apply_filters('wp_headers', $headers, $this)"}]},"'send_headers'":{"name":"'send_headers'","callers":[{"name":"WP::send_headers","file":"class-wp.php","line":407,"type":"action_reference","source":"do_action_ref_array('send_headers', array(&$this))"}]},"'query_string'":{"name":"'query_string'","callers":[{"name":"WP::build_query_string","file":"class-wp.php","line":431,"type":"filter","source":"apply_filters('query_string', $this->query_string)"}]},"'wp'":{"name":"'wp'","callers":[{"name":"WP::main","file":"class-wp.php","line":552,"type":"action_reference","source":"do_action_ref_array('wp', array(&$this))"}]},"'wp_default_scripts'":{"name":"'wp_default_scripts'","callers":[{"name":"WP_Scripts::init","file":"class.wp-scripts.php","line":39,"type":"action_reference","source":"do_action_ref_array('wp_default_scripts', array(&$this))"}]},"'script_loader_src'":{"name":"'script_loader_src'","callers":[{"name":"WP_Scripts::do_item","file":"class.wp-scripts.php","line":100,"type":"filter","source":"apply_filters('script_loader_src', $src, $handle)"},{"name":"WP_Scripts::do_item","file":"class.wp-scripts.php","line":120,"type":"filter","source":"apply_filters('script_loader_src', $src, $handle)"}]},"'print_scripts_array'":{"name":"'print_scripts_array'","callers":[{"name":"WP_Scripts::all_deps","file":"class.wp-scripts.php","line":177,"type":"filter","source":"apply_filters('print_scripts_array', $this->to_do)"}]},"'wp_default_styles'":{"name":"'wp_default_styles'","callers":[{"name":"WP_Styles::__construct","file":"class.wp-styles.php","line":32,"type":"action_reference","source":"do_action_ref_array('wp_default_styles', array(&$this))"}]},"'style_loader_tag'":{"name":"'style_loader_tag'","callers":[{"name":"WP_Styles::do_item","file":"class.wp-styles.php","line":74,"type":"filter","source":"apply_filters('style_loader_tag', \"<link rel='{$rel}' id='{$handle}-css' {$title} href='{$href}' type='text\/css' media='{$media}' \/>\\n\", $handle)"},{"name":"WP_Styles::do_item","file":"class.wp-styles.php","line":83,"type":"filter","source":"apply_filters('style_loader_tag', \"<link rel='{$rel}' id='{$handle}-rtl-css' {$title} href='{$rtl_href}' type='text\/css' media='{$media}' \/>\\n\", $handle)"}]},"'print_styles_array'":{"name":"'print_styles_array'","callers":[{"name":"WP_Styles::all_deps","file":"class.wp-styles.php","line":133,"type":"filter","source":"apply_filters('print_styles_array', $this->to_do)"}]},"'style_loader_src'":{"name":"'style_loader_src'","callers":[{"name":"WP_Styles::_css_href","file":"class.wp-styles.php","line":144,"type":"filter","source":"apply_filters('style_loader_src', $src, $handle)"}]},"'get_comment_author'":{"name":"'get_comment_author'","callers":[{"name":"get_comment_author","file":"comment-template.php","line":35,"type":"filter","source":"apply_filters('get_comment_author', $author)"}]},"'comment_author'":{"name":"'comment_author'","callers":[{"name":"comment_author","file":"comment-template.php","line":47,"type":"filter","source":"apply_filters('comment_author', get_comment_author($comment_ID))"}]},"'get_comment_author_email'":{"name":"'get_comment_author_email'","callers":[{"name":"get_comment_author_email","file":"comment-template.php","line":63,"type":"filter","source":"apply_filters('get_comment_author_email', $comment->comment_author_email)"}]},"'author_email'":{"name":"'author_email'","callers":[{"name":"comment_author_email","file":"comment-template.php","line":81,"type":"filter","source":"apply_filters('author_email', get_comment_author_email($comment_ID))"}]},"'comment_email'":{"name":"'comment_email'","callers":[{"name":"get_comment_author_email_link","file":"comment-template.php","line":126,"type":"filter","source":"apply_filters('comment_email', $comment->comment_author_email)"}]},"'get_comment_author_link'":{"name":"'get_comment_author_link'","callers":[{"name":"get_comment_author_link","file":"comment-template.php","line":156,"type":"filter","source":"apply_filters('get_comment_author_link', $return)"}]},"'get_comment_author_IP'":{"name":"'get_comment_author_IP'","callers":[{"name":"get_comment_author_IP","file":"comment-template.php","line":183,"type":"filter","source":"apply_filters('get_comment_author_IP', $comment->comment_author_IP)"}]},"'get_comment_author_url'":{"name":"'get_comment_author_url'","callers":[{"name":"get_comment_author_url","file":"comment-template.php","line":211,"type":"filter","source":"apply_filters('get_comment_author_url', $url)"}]},"'comment_url'":{"name":"'comment_url'","callers":[{"name":"comment_author_url","file":"comment-template.php","line":224,"type":"filter","source":"apply_filters('comment_url', get_comment_author_url($comment_ID))"}]},"'get_comment_author_url_link'":{"name":"'get_comment_author_url_link'","callers":[{"name":"get_comment_author_url_link","file":"comment-template.php","line":253,"type":"filter","source":"apply_filters('get_comment_author_url_link', $return)"}]},"'comment_class'":{"name":"'comment_class'","callers":[{"name":"get_comment_class","file":"comment-template.php","line":358,"type":"filter","source":"apply_filters('comment_class', $classes, $class, $comment_id, $post_id)"}]},"'get_comment_date'":{"name":"'get_comment_date'","callers":[{"name":"get_comment_date","file":"comment-template.php","line":378,"type":"filter","source":"apply_filters('get_comment_date', $date, $d)"}]},"'get_comment_excerpt'":{"name":"'get_comment_excerpt'","callers":[{"name":"get_comment_excerpt","file":"comment-template.php","line":423,"type":"filter","source":"apply_filters('get_comment_excerpt', $excerpt)"}]},"'comment_excerpt'":{"name":"'comment_excerpt'","callers":[{"name":"comment_excerpt","file":"comment-template.php","line":435,"type":"filter","source":"apply_filters('comment_excerpt', get_comment_excerpt($comment_ID))"}]},"'get_comment_ID'":{"name":"'get_comment_ID'","callers":[{"name":"get_comment_ID","file":"comment-template.php","line":449,"type":"filter","source":"apply_filters('get_comment_ID', $comment->comment_ID)"}]},"'get_comment_link'":{"name":"'get_comment_link'","callers":[{"name":"get_comment_link","file":"comment-template.php","line":507,"type":"filter","source":"apply_filters('get_comment_link', $link . '#comment-' . $comment->comment_ID, $comment, $args)"}]},"'get_comments_number'":{"name":"'get_comments_number'","callers":[{"name":"get_comments_number","file":"comment-template.php","line":559,"type":"filter","source":"apply_filters('get_comments_number', $count, $post_id)"}]},"'comments_number'":{"name":"'comments_number'","callers":[{"name":"comments_number","file":"comment-template.php","line":586,"type":"filter","source":"apply_filters('comments_number', $output, $number)"}]},"'get_comment_text'":{"name":"'get_comment_text'","callers":[{"name":"get_comment_text","file":"comment-template.php","line":600,"type":"filter","source":"apply_filters('get_comment_text', $comment->comment_content, $comment)"}]},"'comment_text'":{"name":"'comment_text'","callers":[{"name":"comment_text","file":"comment-template.php","line":614,"type":"filter","source":"apply_filters('comment_text', get_comment_text($comment_ID), $comment)"},{"name":"check_comment","file":"comment.php","line":47,"type":"filter","source":"apply_filters('comment_text', $comment)"}]},"'get_comment_time'":{"name":"'get_comment_time'","callers":[{"name":"get_comment_time","file":"comment-template.php","line":636,"type":"filter","source":"apply_filters('get_comment_time', $date, $d, $gmt, $translate)"}]},"'get_comment_type'":{"name":"'get_comment_type'","callers":[{"name":"get_comment_type","file":"comment-template.php","line":665,"type":"filter","source":"apply_filters('get_comment_type', $comment->comment_type)"}]},"'trackback_url'":{"name":"'trackback_url'","callers":[{"name":"get_trackback_url","file":"comment-template.php","line":712,"type":"filter","source":"apply_filters('trackback_url', $tb_url)"}]},"'comments_open'":{"name":"'comments_open'","callers":[{"name":"comments_open","file":"comment-template.php","line":777,"type":"filter","source":"apply_filters('comments_open', $open, $post_id)"}]},"'pings_open'":{"name":"'pings_open'","callers":[{"name":"pings_open","file":"comment-template.php","line":794,"type":"filter","source":"apply_filters('pings_open', $open, $post_id)"}]},"'comments_array'":{"name":"'comments_array'","callers":[{"name":"comments_template","file":"comment-template.php","line":891,"type":"filter","source":"apply_filters('comments_array', $comments, $post->ID)"}]},"'comments_template'":{"name":"'comments_template'","callers":[{"name":"comments_template","file":"comment-template.php","line":910,"type":"filter","source":"apply_filters('comments_template', STYLESHEETPATH . $file)"}]},"'comments_popup_link_attributes'":{"name":"'comments_popup_link_attributes'","callers":[{"name":"comments_popup_link","file":"comment-template.php","line":1011,"type":"filter","source":"apply_filters('comments_popup_link_attributes', '')"}]},"'comment_reply_link'":{"name":"'comment_reply_link'","callers":[{"name":"get_comment_reply_link","file":"comment-template.php","line":1062,"type":"filter","source":"apply_filters('comment_reply_link', $before . $link . $after, $args, $comment, $post)"}]},"'post_comments_link'":{"name":"'post_comments_link'","callers":[{"name":"get_post_reply_link","file":"comment-template.php","line":1114,"type":"filter","source":"apply_filters('post_comments_link', $before . $link . $after, $post)"}]},"'cancel_comment_reply_link'":{"name":"'cancel_comment_reply_link'","callers":[{"name":"get_cancel_comment_reply_link","file":"comment-template.php","line":1143,"type":"filter","source":"apply_filters('cancel_comment_reply_link', '<a rel=\"nofollow\" id=\"cancel-comment-reply-link\" href=\"' . $link . '\"' . $style . '>' . $text . '<\/a>', $link, $text)"}]},"'comment_id_fields'":{"name":"'comment_id_fields'","callers":[{"name":"get_comment_id_fields","file":"comment-template.php","line":1171,"type":"filter","source":"apply_filters('comment_id_fields', $result, $id, $replytoid)"}]},"'comment_form_default_fields'":{"name":"'comment_form_default_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1534,"type":"filter","source":"apply_filters('comment_form_default_fields', $fields)"}]},"'the_permalink'":{"name":"'the_permalink'","callers":[{"name":"comment_form","file":"comment-template.php","line":1536,"type":"filter","source":"apply_filters('the_permalink', get_permalink($post_id))"},{"name":"comment_form","file":"comment-template.php","line":1537,"type":"filter","source":"apply_filters('the_permalink', get_permalink($post_id))"},{"name":"the_permalink","file":"link-template.php","line":16,"type":"filter","source":"apply_filters('the_permalink', get_permalink())"}]},"'comment_form_defaults'":{"name":"'comment_form_defaults'","callers":[{"name":"comment_form","file":"comment-template.php","line":1548,"type":"filter","source":"apply_filters('comment_form_defaults', $defaults)"}]},"'comment_form_before'":{"name":"'comment_form_before'","callers":[{"name":"comment_form","file":"comment-template.php","line":1552,"type":"action","source":"do_action('comment_form_before')"}]},"'comment_form_must_log_in_after'":{"name":"'comment_form_must_log_in_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1557,"type":"action","source":"do_action('comment_form_must_log_in_after')"}]},"'comment_form_top'":{"name":"'comment_form_top'","callers":[{"name":"comment_form","file":"comment-template.php","line":1560,"type":"action","source":"do_action('comment_form_top')"}]},"'comment_form_logged_in'":{"name":"'comment_form_logged_in'","callers":[{"name":"comment_form","file":"comment-template.php","line":1562,"type":"filter","source":"apply_filters('comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity)"}]},"'comment_form_logged_in_after'":{"name":"'comment_form_logged_in_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1563,"type":"action","source":"do_action('comment_form_logged_in_after', $commenter, $user_identity)"}]},"'comment_form_before_fields'":{"name":"'comment_form_before_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1567,"type":"action","source":"do_action('comment_form_before_fields')"}]},"\"comment_form_field_{$name}\"":{"name":"\"comment_form_field_{$name}\"","callers":[{"name":"comment_form","file":"comment-template.php","line":1569,"type":"filter","source":"apply_filters(\"comment_form_field_{$name}\", $field)"}]},"'comment_form_after_fields'":{"name":"'comment_form_after_fields'","callers":[{"name":"comment_form","file":"comment-template.php","line":1571,"type":"action","source":"do_action('comment_form_after_fields')"}]},"'comment_form_field_comment'":{"name":"'comment_form_field_comment'","callers":[{"name":"comment_form","file":"comment-template.php","line":1574,"type":"filter","source":"apply_filters('comment_form_field_comment', $args['comment_field'])"}]},"'comment_form'":{"name":"'comment_form'","callers":[{"name":"comment_form","file":"comment-template.php","line":1580,"type":"action","source":"do_action('comment_form', $post_id)"},{"name":"__main","file":"theme-compat\/comments-popup.php","line":100,"type":"action","source":"do_action('comment_form', $post->ID)"},{"name":"__main","file":"theme-compat\/comments.php","line":94,"type":"action","source":"do_action('comment_form', $post->ID)"}]},"'comment_form_after'":{"name":"'comment_form_after'","callers":[{"name":"comment_form","file":"comment-template.php","line":1584,"type":"action","source":"do_action('comment_form_after')"}]},"'comment_form_comments_closed'":{"name":"'comment_form_comments_closed'","callers":[{"name":"comment_form","file":"comment-template.php","line":1586,"type":"action","source":"do_action('comment_form_comments_closed')"}]},"'comment_max_links_url'":{"name":"'comment_max_links_url'","callers":[{"name":"check_comment","file":"comment.php","line":52,"type":"filter","source":"apply_filters('comment_max_links_url', $num_links, $url)"}]},"'get_comment'":{"name":"'get_comment'","callers":[{"name":"get_comment","file":"comment.php","line":153,"type":"filter","source":"apply_filters('get_comment', $_comment)"}]},"'pre_get_comments'":{"name":"'pre_get_comments'","callers":[{"name":"WP_Comment_Query::query","file":"comment.php","line":247,"type":"action_reference","source":"do_action_ref_array('pre_get_comments', array(&$this))"}]},"'comment_cookie_lifetime'":{"name":"'comment_cookie_lifetime'","callers":[{"name":"wp_set_comment_cookies","file":"comment.php","line":618,"type":"filter","source":"apply_filters('comment_cookie_lifetime', 30000000)"}]},"'pre_comment_author_name'":{"name":"'pre_comment_author_name'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":634,"type":"filter","source":"apply_filters('pre_comment_author_name', $_COOKIE['comment_author_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1328,"type":"filter","source":"apply_filters('pre_comment_author_name', $commentdata['comment_author'])"}]},"'pre_comment_author_email'":{"name":"'pre_comment_author_email'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":641,"type":"filter","source":"apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1332,"type":"filter","source":"apply_filters('pre_comment_author_email', $commentdata['comment_author_email'])"}]},"'pre_comment_author_url'":{"name":"'pre_comment_author_url'","callers":[{"name":"sanitize_comment_cookies","file":"comment.php","line":648,"type":"filter","source":"apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_' . COOKIEHASH])"},{"name":"wp_filter_comment","file":"comment.php","line":1331,"type":"filter","source":"apply_filters('pre_comment_author_url', $commentdata['comment_author_url'])"}]},"'comment_duplicate_trigger'":{"name":"'comment_duplicate_trigger'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":677,"type":"action","source":"do_action('comment_duplicate_trigger', $commentdata)"}]},"'check_comment_flood'":{"name":"'check_comment_flood'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":684,"type":"action","source":"do_action('check_comment_flood', $comment_author_IP, $comment_author_email, $comment_date_gmt)"}]},"'pre_comment_approved'":{"name":"'pre_comment_approved'","callers":[{"name":"wp_allow_comment","file":"comment.php","line":704,"type":"filter","source":"apply_filters('pre_comment_approved', $approved, $commentdata)"}]},"'comment_flood_filter'":{"name":"'comment_flood_filter'","callers":[{"name":"check_comment_flood_db","file":"comment.php","line":733,"type":"filter","source":"apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment)"}]},"'comment_flood_trigger'":{"name":"'comment_flood_trigger'","callers":[{"name":"check_comment_flood_db","file":"comment.php","line":735,"type":"action","source":"do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment)"}]},"'wp_blacklist_check'":{"name":"'wp_blacklist_check'","callers":[{"name":"wp_blacklist_check","file":"comment.php","line":888,"type":"action","source":"do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent)"}]},"'wp_count_comments'":{"name":"'wp_count_comments'","callers":[{"name":"wp_count_comments","file":"comment.php","line":940,"type":"filter","source":"apply_filters('wp_count_comments', array(), $post_id)"}]},"'delete_comment'":{"name":"'delete_comment'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1005,"type":"action","source":"do_action('delete_comment', $comment_id)"}]},"'deleted_comment'":{"name":"'deleted_comment'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1021,"type":"action","source":"do_action('deleted_comment', $comment_id)"}]},"'wp_set_comment_status'":{"name":"'wp_set_comment_status'","callers":[{"name":"wp_delete_comment","file":"comment.php","line":1029,"type":"action","source":"do_action('wp_set_comment_status', $comment_id, 'delete')"},{"name":"wp_set_comment_status","file":"comment.php","line":1471,"type":"action","source":"do_action('wp_set_comment_status', $comment_id, $comment_status)"}]},"'trash_comment'":{"name":"'trash_comment'","callers":[{"name":"wp_trash_comment","file":"comment.php","line":1054,"type":"action","source":"do_action('trash_comment', $comment_id)"}]},"'trashed_comment'":{"name":"'trashed_comment'","callers":[{"name":"wp_trash_comment","file":"comment.php","line":1059,"type":"action","source":"do_action('trashed_comment', $comment_id)"}]},"'untrash_comment'":{"name":"'untrash_comment'","callers":[{"name":"wp_untrash_comment","file":"comment.php","line":1080,"type":"action","source":"do_action('untrash_comment', $comment_id)"}]},"'untrashed_comment'":{"name":"'untrashed_comment'","callers":[{"name":"wp_untrash_comment","file":"comment.php","line":1089,"type":"action","source":"do_action('untrashed_comment', $comment_id)"}]},"'spam_comment'":{"name":"'spam_comment'","callers":[{"name":"wp_spam_comment","file":"comment.php","line":1110,"type":"action","source":"do_action('spam_comment', $comment_id)"}]},"'spammed_comment'":{"name":"'spammed_comment'","callers":[{"name":"wp_spam_comment","file":"comment.php","line":1114,"type":"action","source":"do_action('spammed_comment', $comment_id)"}]},"'unspam_comment'":{"name":"'unspam_comment'","callers":[{"name":"wp_unspam_comment","file":"comment.php","line":1135,"type":"action","source":"do_action('unspam_comment', $comment_id)"}]},"'unspammed_comment'":{"name":"'unspammed_comment'","callers":[{"name":"wp_unspam_comment","file":"comment.php","line":1143,"type":"action","source":"do_action('unspammed_comment', $comment_id)"}]},"'transition_comment_status'":{"name":"'transition_comment_status'","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1213,"type":"action","source":"do_action('transition_comment_status', $new_status, $old_status, $comment)"}]},"\"comment_{$old_status}_to_{$new_status}\"":{"name":"\"comment_{$old_status}_to_{$new_status}\"","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1214,"type":"action","source":"do_action(\"comment_{$old_status}_to_{$new_status}\", $comment)"}]},"\"comment_{$new_status}_{$comment->comment_type}\"":{"name":"\"comment_{$new_status}_{$comment->comment_type}\"","callers":[{"name":"wp_transition_comment_status","file":"comment.php","line":1216,"type":"action","source":"do_action(\"comment_{$new_status}_{$comment->comment_type}\", $comment->comment_ID, $comment)"}]},"'wp_get_current_commenter'":{"name":"'wp_get_current_commenter'","callers":[{"name":"wp_get_current_commenter","file":"comment.php","line":1246,"type":"filter","source":"apply_filters('wp_get_current_commenter', compact('comment_author', 'comment_author_email', 'comment_author_url'))"}]},"'wp_insert_comment'":{"name":"'wp_insert_comment'","callers":[{"name":"wp_insert_comment","file":"comment.php","line":1291,"type":"action","source":"do_action('wp_insert_comment', $id, $comment)"}]},"'pre_user_id'":{"name":"'pre_user_id'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1324,"type":"filter","source":"apply_filters('pre_user_id', $commentdata['user_ID'])"},{"name":"wp_filter_comment","file":"comment.php","line":1326,"type":"filter","source":"apply_filters('pre_user_id', $commentdata['user_id'])"}]},"'pre_comment_user_agent'":{"name":"'pre_comment_user_agent'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1327,"type":"filter","source":"apply_filters('pre_comment_user_agent', isset($commentdata['comment_agent']) ? $commentdata['comment_agent'] : '')"}]},"'pre_comment_content'":{"name":"'pre_comment_content'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1329,"type":"filter","source":"apply_filters('pre_comment_content', $commentdata['comment_content'])"}]},"'pre_comment_user_ip'":{"name":"'pre_comment_user_ip'","callers":[{"name":"wp_filter_comment","file":"comment.php","line":1330,"type":"filter","source":"apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP'])"}]},"'preprocess_comment'":{"name":"'preprocess_comment'","callers":[{"name":"wp_new_comment","file":"comment.php","line":1378,"type":"filter","source":"apply_filters('preprocess_comment', $commentdata)"}]},"'comment_post'":{"name":"'comment_post'","callers":[{"name":"wp_new_comment","file":"comment.php","line":1402,"type":"action","source":"do_action('comment_post', $comment_ID, $commentdata['comment_approved'])"}]},"'comment_save_pre'":{"name":"'comment_save_pre'","callers":[{"name":"wp_update_comment","file":"comment.php","line":1510,"type":"filter","source":"apply_filters('comment_save_pre', $comment_content)"}]},"'edit_comment'":{"name":"'edit_comment'","callers":[{"name":"wp_update_comment","file":"comment.php","line":1526,"type":"action","source":"do_action('edit_comment', $comment_ID)"}]},"'wp_update_comment_count'":{"name":"'wp_update_comment_count'","callers":[{"name":"wp_update_comment_count_now","file":"comment.php","line":1623,"type":"action","source":"do_action('wp_update_comment_count', $post_id, $new, $old)"}]},"'edit_post'":{"name":"'edit_post'","callers":[{"name":"wp_update_comment_count_now","file":"comment.php","line":1624,"type":"action","source":"do_action('edit_post', $post_id, $post)"},{"name":"wp_insert_post","file":"post.php","line":2945,"type":"action","source":"do_action('edit_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3035,"type":"action","source":"do_action('edit_post', $post->ID, $post)"}]},"'the_content'":{"name":"'the_content'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1755,"type":"filter","source":"apply_filters('the_content', $post->post_content)"},{"name":"get_the_content_feed","file":"feed.php","line":149,"type":"filter","source":"apply_filters('the_content', get_the_content())"},{"name":"wp_trim_excerpt","file":"formatting.php","line":2152,"type":"filter","source":"apply_filters('the_content', $text)"},{"name":"the_content","file":"post-template.php","line":166,"type":"filter","source":"apply_filters('the_content', $content)"}]},"'the_excerpt'":{"name":"'the_excerpt'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1757,"type":"filter","source":"apply_filters('the_excerpt', $post->post_excerpt)"},{"name":"the_excerpt","file":"post-template.php","line":249,"type":"filter","source":"apply_filters('the_excerpt', get_the_excerpt())"}]},"'the_title'":{"name":"'the_title'","callers":[{"name":"do_trackbacks","file":"comment.php","line":1761,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"previous_post","file":"deprecated.php","line":152,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"next_post","file":"deprecated.php","line":188,"type":"filter","source":"apply_filters('the_title', $post->post_title, $post->ID)"},{"name":"get_boundary_post_rel_link","file":"deprecated.php","line":2738,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"get_parent_post_rel_link","file":"deprecated.php","line":2813,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"wp_get_archives","file":"general-template.php","line":1033,"type":"filter","source":"apply_filters('the_title', $arcresult->post_title, $arcresult->ID)"},{"name":"get_calendar","file":"general-template.php","line":1220,"type":"filter","source":"apply_filters('the_title', $ak_post_title->post_title, $ak_post_title->ID)"},{"name":"get_adjacent_post_rel_link","file":"link-template.php","line":1229,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"adjacent_post_link","file":"link-template.php","line":1391,"type":"filter","source":"apply_filters('the_title', $title, $post->ID)"},{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":90,"type":"filter","source":"apply_filters('the_title', $item->title, $item->ID)"},{"name":"get_the_title","file":"post-template.php","line":118,"type":"filter","source":"apply_filters('the_title', $title, $id)"},{"name":"Walker_Page::start_el","file":"post-template.php","line":1051,"type":"filter","source":"apply_filters('the_title', $page->post_title, $page->ID)"}]},"'pre_ping'":{"name":"'pre_ping'","callers":[{"name":"pingback","file":"comment.php","line":1851,"type":"action_reference","source":"do_action_ref_array('pre_ping', array(&$post_links, &$pung, $post_ID))"}]},"'pingback_useragent'":{"name":"'pingback_useragent'","callers":[{"name":"pingback","file":"comment.php","line":1864,"type":"filter","source":"apply_filters('pingback_useragent', $client->useragent . ' -- WordPress\/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom)"}]},"'close_comments_for_post_types'":{"name":"'close_comments_for_post_types'","callers":[{"name":"_close_comments_for_old_posts","file":"comment.php","line":2015,"type":"filter","source":"apply_filters('close_comments_for_post_types', array('post'))"},{"name":"_close_comments_for_old_post","file":"comment.php","line":2054,"type":"filter","source":"apply_filters('close_comments_for_post_types', array('post'))"}]},"'schedule_event'":{"name":"'schedule_event'","callers":[{"name":"wp_schedule_single_event","file":"cron.php","line":30,"type":"filter","source":"apply_filters('schedule_event', $event)"},{"name":"wp_schedule_event","file":"cron.php","line":71,"type":"filter","source":"apply_filters('schedule_event', $event)"}]},"'cron_request'":{"name":"'cron_request'","callers":[{"name":"spawn_cron","file":"cron.php","line":247,"type":"filter","source":"apply_filters('cron_request', array('url' => site_url('wp-cron.php?doing_wp_cron=' . $doing_wp_cron), 'key' => $doing_wp_cron, 'args' => array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true))))"}]},"'cron_schedules'":{"name":"'cron_schedules'","callers":[{"name":"wp_get_schedules","file":"cron.php","line":325,"type":"filter","source":"apply_filters('cron_schedules', array())"}]},"'widget_title'":{"name":"'widget_title'","callers":[{"name":"WP_Widget_Pages::widget","file":"default-widgets.php","line":24,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Pages') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Search::widget","file":"default-widgets.php","line":199,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":244,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Archives') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Meta::widget","file":"default-widgets.php","line":307,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Calendar::widget","file":"default-widgets.php","line":358,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Text::widget","file":"default-widgets.php","line":400,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":450,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Categories') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Recent_Posts::widget","file":"default-widgets.php","line":561,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_Recent_Comments::widget","file":"default-widgets.php","line":677,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title'], $instance, $this->id_base)"},{"name":"WP_Widget_RSS::widget","file":"default-widgets.php","line":779,"type":"filter","source":"apply_filters('widget_title', $title, $instance, $this->id_base)"},{"name":"WP_Widget_Tag_Cloud::widget","file":"default-widgets.php","line":1047,"type":"filter","source":"apply_filters('widget_title', $title, $instance, $this->id_base)"},{"name":"WP_Nav_Menu_Widget::widget","file":"default-widgets.php","line":1108,"type":"filter","source":"apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base)"}]},"'widget_pages_args'":{"name":"'widget_pages_args'","callers":[{"name":"WP_Widget_Pages::widget","file":"default-widgets.php","line":31,"type":"filter","source":"apply_filters('widget_pages_args', array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude))"}]},"'widget_links_args'":{"name":"'widget_links_args'","callers":[{"name":"WP_Widget_Links::widget","file":"default-widgets.php","line":110,"type":"filter","source":"apply_filters('widget_links_args', array('title_before' => $before_title, 'title_after' => $after_title, 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => $show_images, 'show_description' => $show_description, 'show_name' => $show_name, 'show_rating' => $show_rating, 'category' => $category, 'class' => 'linkcat widget', 'orderby' => $orderby, 'order' => $order, 'limit' => $limit))"}]},"'widget_archives_dropdown_args'":{"name":"'widget_archives_dropdown_args'","callers":[{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":252,"type":"filter","source":"apply_filters('widget_archives_dropdown_args', array('type' => 'monthly', 'format' => 'option', 'show_post_count' => $c))"}]},"'widget_archives_args'":{"name":"'widget_archives_args'","callers":[{"name":"WP_Widget_Archives::widget","file":"default-widgets.php","line":257,"type":"filter","source":"apply_filters('widget_archives_args', array('type' => 'monthly', 'show_post_count' => $c))"}]},"'widget_text'":{"name":"'widget_text'","callers":[{"name":"WP_Widget_Text::widget","file":"default-widgets.php","line":401,"type":"filter","source":"apply_filters('widget_text', empty($instance['text']) ? '' : $instance['text'], $instance)"}]},"'widget_categories_dropdown_args'":{"name":"'widget_categories_dropdown_args'","callers":[{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":463,"type":"filter","source":"apply_filters('widget_categories_dropdown_args', $cat_args)"}]},"'widget_categories_args'":{"name":"'widget_categories_args'","callers":[{"name":"WP_Widget_Categories::widget","file":"default-widgets.php","line":484,"type":"filter","source":"apply_filters('widget_categories_args', $cat_args)"}]},"'widget_posts_args'":{"name":"'widget_posts_args'","callers":[{"name":"WP_Widget_Recent_Posts::widget","file":"default-widgets.php","line":566,"type":"filter","source":"apply_filters('widget_posts_args', array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true))"}]},"'show_recent_comments_widget_style'":{"name":"'show_recent_comments_widget_style'","callers":[{"name":"WP_Widget_Recent_Comments::recent_comments_style","file":"default-widgets.php","line":648,"type":"filter","source":"apply_filters('show_recent_comments_widget_style', true, $this->id_base)"}]},"'widget_comments_args'":{"name":"'widget_comments_args'","callers":[{"name":"WP_Widget_Recent_Comments::widget","file":"default-widgets.php","line":682,"type":"filter","source":"apply_filters('widget_comments_args', array('number' => $number, 'status' => 'approve', 'post_status' => 'publish'))"}]},"'widget_tag_cloud_args'":{"name":"'widget_tag_cloud_args'","callers":[{"name":"WP_Widget_Tag_Cloud::widget","file":"default-widgets.php","line":1053,"type":"filter","source":"apply_filters('widget_tag_cloud_args', array('taxonomy' => $current_taxonomy))"}]},"'widgets_init'":{"name":"'widgets_init'","callers":[{"name":"wp_widgets_init","file":"default-widgets.php","line":1198,"type":"action","source":"do_action('widgets_init')"}]},"'the_content_rss'":{"name":"'the_content_rss'","callers":[{"name":"the_content_rss","file":"deprecated.php","line":1710,"type":"filter","source":"apply_filters('the_content_rss', $content)"}]},"'icon_dir'":{"name":"'icon_dir'","callers":[{"name":"get_attachment_icon_src","file":"deprecated.php","line":1943,"type":"filter","source":"apply_filters('icon_dir', get_template_directory() . '\/images')"},{"name":"wp_get_attachment_image_src","file":"media.php","line":517,"type":"filter","source":"apply_filters('icon_dir', ABSPATH . WPINC . '\/images\/crystal')"},{"name":"wp_mime_type_icon","file":"post.php","line":4349,"type":"filter","source":"apply_filters('icon_dir', ABSPATH . WPINC . '\/images\/crystal')"}]},"'attachment_max_dims'":{"name":"'attachment_max_dims'","callers":[{"name":"get_attachment_icon","file":"deprecated.php","line":1978,"type":"filter","source":"apply_filters('attachment_max_dims', $max_dims)"}]},"'attachment_icon'":{"name":"'attachment_icon'","callers":[{"name":"get_attachment_icon","file":"deprecated.php","line":2007,"type":"filter","source":"apply_filters('attachment_icon', $icon, $post->ID)"}]},"'attachment_innerHTML'":{"name":"'attachment_innerHTML'","callers":[{"name":"get_attachment_innerHTML","file":"deprecated.php","line":2034,"type":"filter","source":"apply_filters('attachment_innerHTML', $innerHTML, $post->ID)"}]},"'delete_usermeta'":{"name":"'delete_usermeta'","callers":[{"name":"delete_usermeta","file":"deprecated.php","line":2290,"type":"action","source":"do_action('delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'deleted_usermeta'":{"name":"'deleted_usermeta'","callers":[{"name":"delete_usermeta","file":"deprecated.php","line":2301,"type":"action","source":"do_action('deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'update_usermeta'":{"name":"'update_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2396,"type":"action","source":"do_action('update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"'added_usermeta'":{"name":"'added_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2409,"type":"action","source":"do_action('added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value)"}]},"'updated_usermeta'":{"name":"'updated_usermeta'","callers":[{"name":"update_usermeta","file":"deprecated.php","line":2411,"type":"action","source":"do_action('updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value)"}]},"\"{$boundary}_post_rel_link\"":{"name":"\"{$boundary}_post_rel_link\"","callers":[{"name":"get_boundary_post_rel_link","file":"deprecated.php","line":2745,"type":"filter","source":"apply_filters(\"{$boundary}_post_rel_link\", $link)"}]},"'index_rel_link'":{"name":"'index_rel_link'","callers":[{"name":"get_index_rel_link","file":"deprecated.php","line":2776,"type":"filter","source":"apply_filters('index_rel_link', $link)"}]},"'parent_post_rel_link'":{"name":"'parent_post_rel_link'","callers":[{"name":"get_parent_post_rel_link","file":"deprecated.php","line":2819,"type":"filter","source":"apply_filters('parent_post_rel_link', $link)"}]},"'extra_theme_headers'":{"name":"'extra_theme_headers'","callers":[{"name":"get_theme_data","file":"deprecated.php","line":3117,"type":"filter","source":"apply_filters('extra_theme_headers', array())"}]},"'atom_ns'":{"name":"'atom_ns'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":15,"type":"action","source":"do_action('atom_ns')"},{"name":"__main","file":"feed-atom.php","line":17,"type":"action","source":"do_action('atom_ns')"}]},"'atom_comments_ns'":{"name":"'atom_comments_ns'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":15,"type":"action","source":"do_action('atom_comments_ns')"}]},"'comments_atom_head'":{"name":"'comments_atom_head'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":42,"type":"action","source":"do_action('comments_atom_head')"}]},"'the_title_rss'":{"name":"'the_title_rss'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":51,"type":"filter","source":"apply_filters('the_title_rss', $title)"},{"name":"__main","file":"feed-rss2-comments.php","line":43,"type":"filter","source":"apply_filters('the_title_rss', $title)"},{"name":"get_the_title_rss","file":"feed.php","line":117,"type":"filter","source":"apply_filters('the_title_rss', $title)"}]},"'comment_atom_entry'":{"name":"'comment_atom_entry'","callers":[{"name":"__main","file":"feed-atom-comments.php","line":82,"type":"action","source":"do_action('comment_atom_entry', $comment->comment_ID, $comment_post->ID)"}]},"'atom_head'":{"name":"'atom_head'","callers":[{"name":"__main","file":"feed-atom.php","line":28,"type":"action","source":"do_action('atom_head')"}]},"'atom_author'":{"name":"'atom_author'","callers":[{"name":"__main","file":"feed-atom.php","line":36,"type":"action","source":"do_action('atom_author')"}]},"'atom_entry'":{"name":"'atom_entry'","callers":[{"name":"__main","file":"feed-atom.php","line":49,"type":"action","source":"do_action('atom_entry')"}]},"'rdf_ns'":{"name":"'rdf_ns'","callers":[{"name":"__main","file":"feed-rdf.php","line":19,"type":"action","source":"do_action('rdf_ns')"}]},"'rss_update_period'":{"name":"'rss_update_period'","callers":[{"name":"__main","file":"feed-rdf.php","line":26,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"},{"name":"__main","file":"feed-rss2-comments.php","line":32,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"},{"name":"__main","file":"feed-rss2.php","line":30,"type":"filter","source":"apply_filters('rss_update_period', 'hourly')"}]},"'rss_update_frequency'":{"name":"'rss_update_frequency'","callers":[{"name":"__main","file":"feed-rdf.php","line":27,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"},{"name":"__main","file":"feed-rss2-comments.php","line":33,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"},{"name":"__main","file":"feed-rss2.php","line":31,"type":"filter","source":"apply_filters('rss_update_frequency', '1')"}]},"'rdf_header'":{"name":"'rdf_header'","callers":[{"name":"__main","file":"feed-rdf.php","line":29,"type":"action","source":"do_action('rdf_header')"}]},"'rdf_item'":{"name":"'rdf_item'","callers":[{"name":"__main","file":"feed-rdf.php","line":51,"type":"action","source":"do_action('rdf_item')"}]},"'rss_head'":{"name":"'rss_head'","callers":[{"name":"__main","file":"feed-rss.php","line":20,"type":"action","source":"do_action('rss_head')"}]},"'rss_item'":{"name":"'rss_item'","callers":[{"name":"__main","file":"feed-rss.php","line":27,"type":"action","source":"do_action('rss_item')"}]},"'rss2_ns'":{"name":"'rss2_ns'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":17,"type":"action","source":"do_action('rss2_ns')"},{"name":"__main","file":"feed-rss2.php","line":20,"type":"action","source":"do_action('rss2_ns')"}]},"'rss2_comments_ns'":{"name":"'rss2_comments_ns'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":17,"type":"action","source":"do_action('rss2_comments_ns')"}]},"'commentsrss2_head'":{"name":"'commentsrss2_head'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":34,"type":"action","source":"do_action('commentsrss2_head')"}]},"'commentrss2_item'":{"name":"'commentrss2_item'","callers":[{"name":"__main","file":"feed-rss2-comments.php","line":60,"type":"action","source":"do_action('commentrss2_item', $comment->comment_ID, $comment_post->ID)"}]},"'rss2_head'":{"name":"'rss2_head'","callers":[{"name":"__main","file":"feed-rss2.php","line":32,"type":"action","source":"do_action('rss2_head')"}]},"'rss2_item'":{"name":"'rss2_item'","callers":[{"name":"__main","file":"feed-rss2.php","line":57,"type":"action","source":"do_action('rss2_item')"}]},"'get_bloginfo_rss'":{"name":"'get_bloginfo_rss'","callers":[{"name":"get_bloginfo_rss","file":"feed.php","line":30,"type":"filter","source":"apply_filters('get_bloginfo_rss', convert_chars($info), $show)"},{"name":"get_the_category_rss","file":"feed.php","line":327,"type":"filter","source":"apply_filters('get_bloginfo_rss', get_bloginfo('url'))"}]},"'bloginfo_rss'":{"name":"'bloginfo_rss'","callers":[{"name":"bloginfo_rss","file":"feed.php","line":49,"type":"filter","source":"apply_filters('bloginfo_rss', get_bloginfo_rss($show), $show)"}]},"'default_feed'":{"name":"'default_feed'","callers":[{"name":"get_default_feed","file":"feed.php","line":66,"type":"filter","source":"apply_filters('default_feed', 'rss2')"}]},"'get_wp_title_rss'":{"name":"'get_wp_title_rss'","callers":[{"name":"get_wp_title_rss","file":"feed.php","line":86,"type":"filter","source":"apply_filters('get_wp_title_rss', $title)"}]},"'wp_title_rss'":{"name":"'wp_title_rss'","callers":[{"name":"wp_title_rss","file":"feed.php","line":102,"type":"filter","source":"apply_filters('wp_title_rss', get_wp_title_rss($sep))"}]},"'the_content_feed'":{"name":"'the_content_feed'","callers":[{"name":"get_the_content_feed","file":"feed.php","line":151,"type":"filter","source":"apply_filters('the_content_feed', $content, $feed_type)"}]},"'the_excerpt_rss'":{"name":"'the_excerpt_rss'","callers":[{"name":"the_excerpt_rss","file":"feed.php","line":179,"type":"filter","source":"apply_filters('the_excerpt_rss', $output)"}]},"'the_permalink_rss'":{"name":"'the_permalink_rss'","callers":[{"name":"the_permalink_rss","file":"feed.php","line":191,"type":"filter","source":"apply_filters('the_permalink_rss', get_permalink())"}]},"'comment_author_rss'":{"name":"'comment_author_rss'","callers":[{"name":"get_comment_author_rss","file":"feed.php","line":257,"type":"filter","source":"apply_filters('comment_author_rss', get_comment_author())"}]},"'comment_text_rss'":{"name":"'comment_text_rss'","callers":[{"name":"comment_text_rss","file":"feed.php","line":282,"type":"filter","source":"apply_filters('comment_text_rss', $comment_text)"}]},"'the_category_rss'":{"name":"'the_category_rss'","callers":[{"name":"get_the_category_rss","file":"feed.php","line":332,"type":"filter","source":"apply_filters('the_category_rss', $the_list, $type)"}]},"'rss_enclosure'":{"name":"'rss_enclosure'","callers":[{"name":"rss_enclosure","file":"feed.php","line":398,"type":"filter","source":"apply_filters('rss_enclosure', '<enclosure url=\"' . trim(htmlspecialchars($enclosure[0])) . '\" length=\"' . trim($enclosure[1]) . '\" type=\"' . $type . '\" \/>' . '\n')"}]},"'atom_enclosure'":{"name":"'atom_enclosure'","callers":[{"name":"atom_enclosure","file":"feed.php","line":429,"type":"filter","source":"apply_filters('atom_enclosure', '<link href=\"' . trim(htmlspecialchars($enclosure[0])) . '\" rel=\"enclosure\" length=\"' . trim($enclosure[1]) . '\" type=\"' . trim($enclosure[2]) . '\" \/>' . '\n')"}]},"'feed_content_type'":{"name":"'feed_content_type'","callers":[{"name":"feed_content_type","file":"feed.php","line":515,"type":"filter","source":"apply_filters('feed_content_type', $content_type, $type)"}]},"'wp_feed_options'":{"name":"'wp_feed_options'","callers":[{"name":"fetch_feed","file":"feed.php","line":541,"type":"action_reference","source":"do_action_ref_array('wp_feed_options', array(&$feed, $url))"}]},"'no_texturize_tags'":{"name":"'no_texturize_tags'","callers":[{"name":"wptexturize","file":"formatting.php","line":104,"type":"filter","source":"apply_filters('no_texturize_tags', $default_no_texturize_tags)"}]},"'no_texturize_shortcodes'":{"name":"'no_texturize_shortcodes'","callers":[{"name":"wptexturize","file":"formatting.php","line":105,"type":"filter","source":"apply_filters('no_texturize_shortcodes', $default_no_texturize_shortcodes)"}]},"'sanitize_file_name_chars'":{"name":"'sanitize_file_name_chars'","callers":[{"name":"sanitize_file_name","file":"formatting.php","line":830,"type":"filter","source":"apply_filters('sanitize_file_name_chars', $special_chars, $filename_raw)"}]},"'sanitize_file_name'":{"name":"'sanitize_file_name'","callers":[{"name":"sanitize_file_name","file":"formatting.php","line":840,"type":"filter","source":"apply_filters('sanitize_file_name', $filename, $filename_raw)"},{"name":"sanitize_file_name","file":"formatting.php","line":867,"type":"filter","source":"apply_filters('sanitize_file_name', $filename, $filename_raw)"}]},"'sanitize_user'":{"name":"'sanitize_user'","callers":[{"name":"sanitize_user","file":"formatting.php","line":902,"type":"filter","source":"apply_filters('sanitize_user', $username, $raw_username, $strict)"}]},"'sanitize_key'":{"name":"'sanitize_key'","callers":[{"name":"sanitize_key","file":"formatting.php","line":919,"type":"filter","source":"apply_filters('sanitize_key', $key, $raw_key)"}]},"'sanitize_title'":{"name":"'sanitize_title'","callers":[{"name":"sanitize_title","file":"formatting.php","line":942,"type":"filter","source":"apply_filters('sanitize_title', $title, $raw_title, $context)"}]},"'sanitize_html_class'":{"name":"'sanitize_html_class'","callers":[{"name":"sanitize_html_class","file":"formatting.php","line":1063,"type":"filter","source":"apply_filters('sanitize_html_class', $sanitized, $class, $fallback)"}]},"'format_to_edit'":{"name":"'format_to_edit'","callers":[{"name":"format_to_edit","file":"formatting.php","line":1298,"type":"filter","source":"apply_filters('format_to_edit', $content)"}]},"'format_to_post'":{"name":"'format_to_post'","callers":[{"name":"format_to_post","file":"formatting.php","line":1313,"type":"filter","source":"apply_filters('format_to_post', $content)"}]},"'smilies_src'":{"name":"'smilies_src'","callers":[{"name":"translate_smiley","file":"formatting.php","line":1741,"type":"filter","source":"apply_filters('smilies_src', includes_url(\"images\/smilies\/{$img}\"), $img, site_url())"}]},"'is_email'":{"name":"'is_email'","callers":[{"name":"is_email","file":"formatting.php","line":1796,"type":"filter","source":"apply_filters('is_email', false, $email, 'email_too_short')"},{"name":"is_email","file":"formatting.php","line":1801,"type":"filter","source":"apply_filters('is_email', false, $email, 'email_no_at')"},{"name":"is_email","file":"formatting.php","line":1810,"type":"filter","source":"apply_filters('is_email', false, $email, 'local_invalid_chars')"},{"name":"is_email","file":"formatting.php","line":1816,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_period_sequence')"},{"name":"is_email","file":"formatting.php","line":1821,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_period_limits')"},{"name":"is_email","file":"formatting.php","line":1829,"type":"filter","source":"apply_filters('is_email', false, $email, 'domain_no_periods')"},{"name":"is_email","file":"formatting.php","line":1836,"type":"filter","source":"apply_filters('is_email', false, $email, 'sub_hyphen_limits')"},{"name":"is_email","file":"formatting.php","line":1841,"type":"filter","source":"apply_filters('is_email', false, $email, 'sub_invalid_chars')"},{"name":"is_email","file":"formatting.php","line":1846,"type":"filter","source":"apply_filters('is_email', $email, $email, null)"}]},"'sanitize_email'":{"name":"'sanitize_email'","callers":[{"name":"sanitize_email","file":"formatting.php","line":2020,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'email_too_short')"},{"name":"sanitize_email","file":"formatting.php","line":2025,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'email_no_at')"},{"name":"sanitize_email","file":"formatting.php","line":2035,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'local_invalid_chars')"},{"name":"sanitize_email","file":"formatting.php","line":2042,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_period_sequence')"},{"name":"sanitize_email","file":"formatting.php","line":2048,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_period_limits')"},{"name":"sanitize_email","file":"formatting.php","line":2056,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_no_periods')"},{"name":"sanitize_email","file":"formatting.php","line":2078,"type":"filter","source":"apply_filters('sanitize_email', '', $email, 'domain_no_valid_subs')"},{"name":"sanitize_email","file":"formatting.php","line":2088,"type":"filter","source":"apply_filters('sanitize_email', $email, $email, null)"}]},"'excerpt_length'":{"name":"'excerpt_length'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2154,"type":"filter","source":"apply_filters('excerpt_length', 55)"}]},"'excerpt_more'":{"name":"'excerpt_more'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2155,"type":"filter","source":"apply_filters('excerpt_more', ' ' . '[...]')"}]},"'wp_trim_excerpt'":{"name":"'wp_trim_excerpt'","callers":[{"name":"wp_trim_excerpt","file":"formatting.php","line":2158,"type":"filter","source":"apply_filters('wp_trim_excerpt', $text, $raw_excerpt)"}]},"'wp_trim_words'":{"name":"'wp_trim_words'","callers":[{"name":"wp_trim_words","file":"formatting.php","line":2198,"type":"filter","source":"apply_filters('wp_trim_words', $text, $num_words, $more, $original_text)"}]},"'pre_ent2ncr'":{"name":"'pre_ent2ncr'","callers":[{"name":"ent2ncr","file":"formatting.php","line":2212,"type":"filter","source":"apply_filters('pre_ent2ncr', null, $text)"}]},"'richedit_pre'":{"name":"'richedit_pre'","callers":[{"name":"wp_richedit_pre","file":"formatting.php","line":2492,"type":"filter","source":"apply_filters('richedit_pre', '')"},{"name":"wp_richedit_pre","file":"formatting.php","line":2498,"type":"filter","source":"apply_filters('richedit_pre', $output)"}]},"'htmledit_pre'":{"name":"'htmledit_pre'","callers":[{"name":"wp_htmledit_pre","file":"formatting.php","line":2516,"type":"filter","source":"apply_filters('htmledit_pre', $output)"}]},"'clean_url'":{"name":"'clean_url'","callers":[{"name":"esc_url","file":"formatting.php","line":2609,"type":"filter","source":"apply_filters('clean_url', $url, $original_url, $_context)"}]},"'js_escape'":{"name":"'js_escape'","callers":[{"name":"esc_js","file":"formatting.php","line":2660,"type":"filter","source":"apply_filters('js_escape', $safe_text, $text)"}]},"'esc_html'":{"name":"'esc_html'","callers":[{"name":"esc_html","file":"formatting.php","line":2674,"type":"filter","source":"apply_filters('esc_html', $safe_text, $text)"}]},"'attribute_escape'":{"name":"'attribute_escape'","callers":[{"name":"esc_attr","file":"formatting.php","line":2688,"type":"filter","source":"apply_filters('attribute_escape', $safe_text, $text)"}]},"'esc_textarea'":{"name":"'esc_textarea'","callers":[{"name":"esc_textarea","file":"formatting.php","line":2701,"type":"filter","source":"apply_filters('esc_textarea', $safe_text, $text)"}]},"'tag_escape'":{"name":"'tag_escape'","callers":[{"name":"tag_escape","file":"formatting.php","line":2714,"type":"filter","source":"apply_filters('tag_escape', $safe_tag, $tag_name)"}]},"\"sanitize_option_{$option}\"":{"name":"\"sanitize_option_{$option}\"","callers":[{"name":"sanitize_option","file":"formatting.php","line":2915,"type":"filter","source":"apply_filters(\"sanitize_option_{$option}\", $value, $option)"}]},"'wp_parse_str'":{"name":"'wp_parse_str'","callers":[{"name":"wp_parse_str","file":"formatting.php","line":2936,"type":"filter","source":"apply_filters('wp_parse_str', $array)"}]},"'wp_sprintf'":{"name":"'wp_sprintf'","callers":[{"name":"wp_sprintf","file":"formatting.php","line":3017,"type":"filter","source":"apply_filters('wp_sprintf', $fragment, $arg)"}]},"'wp_sprintf_l'":{"name":"'wp_sprintf_l'","callers":[{"name":"wp_sprintf_l","file":"formatting.php","line":3054,"type":"filter","source":"apply_filters('wp_sprintf_l', array('between' => __(', '), 'between_last_two' => __(', and '), 'between_only_two' => __(' and ')))"}]},"'sanitize_text_field'":{"name":"'sanitize_text_field'","callers":[{"name":"sanitize_text_field","file":"formatting.php","line":3242,"type":"filter","source":"apply_filters('sanitize_text_field', $filtered, $str)"}]},"'sanitize_mime_type'":{"name":"'sanitize_mime_type'","callers":[{"name":"sanitize_mime_type","file":"formatting.php","line":3290,"type":"filter","source":"apply_filters('sanitize_mime_type', $sani_mime_type, $mime_type)"}]},"'sanitize_trackback_urls'":{"name":"'sanitize_trackback_urls'","callers":[{"name":"sanitize_trackback_urls","file":"formatting.php","line":3309,"type":"filter","source":"apply_filters('sanitize_trackback_urls', $urls_to_ping, $to_ping)"}]},"'date_i18n'":{"name":"'date_i18n'","callers":[{"name":"date_i18n","file":"functions.php","line":140,"type":"filter","source":"apply_filters('date_i18n', $j, $req_format, $i, $gmt)"}]},"'number_format_i18n'":{"name":"'number_format_i18n'","callers":[{"name":"number_format_i18n","file":"functions.php","line":156,"type":"filter","source":"apply_filters('number_format_i18n', $formatted)"}]},"'status_header'":{"name":"'status_header'","callers":[{"name":"status_header","file":"functions.php","line":886,"type":"filter","source":"apply_filters('status_header', $status_header, $header, $text, $protocol)"}]},"'nocache_headers'":{"name":"'nocache_headers'","callers":[{"name":"wp_get_nocache_headers","file":"functions.php","line":910,"type":"filter","source":"apply_filters('nocache_headers', $headers)"}]},"'do_robotstxt'":{"name":"'do_robotstxt'","callers":[{"name":"do_robots","file":"functions.php","line":1074,"type":"action","source":"do_action('do_robotstxt')"}]},"'robots_txt'":{"name":"'robots_txt'","callers":[{"name":"do_robots","file":"functions.php","line":1087,"type":"filter","source":"apply_filters('robots_txt', $output, $public)"}]},"'upload_dir'":{"name":"'upload_dir'","callers":[{"name":"wp_upload_dir","file":"functions.php","line":1606,"type":"filter","source":"apply_filters('upload_dir', array('path' => $dir, 'url' => $url, 'subdir' => $subdir, 'basedir' => $basedir, 'baseurl' => $baseurl, 'error' => false))"}]},"'wp_upload_bits'":{"name":"'wp_upload_bits'","callers":[{"name":"wp_upload_bits","file":"functions.php","line":1731,"type":"filter","source":"apply_filters('wp_upload_bits', array('name' => $name, 'bits' => $bits, 'time' => $time))"}]},"'ext2type'":{"name":"'ext2type'","callers":[{"name":"wp_ext2type","file":"functions.php","line":1782,"type":"filter","source":"apply_filters('ext2type', array('audio' => array('aac', 'ac3', 'aif', 'aiff', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma'), 'video' => array('asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv'), 'document' => array('doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'rtf', 'wp', 'wpd'), 'spreadsheet' => array('numbers', 'ods', 'xls', 'xlsx', 'xlsm', 'xlsb'), 'interactive' => array('swf', 'key', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'sldx', 'sldm', 'odp'), 'text' => array('asc', 'csv', 'tsv', 'txt'), 'archive' => array('bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z'), 'code' => array('css', 'htm', 'html', 'php', 'js')))"}]},"'getimagesize_mimes_to_exts'":{"name":"'getimagesize_mimes_to_exts'","callers":[{"name":"wp_check_filetype_and_ext","file":"functions.php","line":1864,"type":"filter","source":"apply_filters('getimagesize_mimes_to_exts', array('image\/jpeg' => 'jpg', 'image\/png' => 'png', 'image\/gif' => 'gif', 'image\/bmp' => 'bmp', 'image\/tiff' => 'tif'))"}]},"'wp_check_filetype_and_ext'":{"name":"'wp_check_filetype_and_ext'","callers":[{"name":"wp_check_filetype_and_ext","file":"functions.php","line":1891,"type":"filter","source":"apply_filters('wp_check_filetype_and_ext', compact('ext', 'type', 'proper_filename'), $file, $filename, $mimes)"}]},"'mime_types'":{"name":"'mime_types'","callers":[{"name":"wp_get_mime_types","file":"functions.php","line":1906,"type":"filter","source":"apply_filters('mime_types', array('jpg|jpeg|jpe' => 'image\/jpeg', 'gif' => 'image\/gif', 'png' => 'image\/png', 'bmp' => 'image\/bmp', 'tif|tiff' => 'image\/tiff', 'ico' => 'image\/x-icon', 'asf|asx|wax|wmv|wmx' => 'video\/asf', 'avi' => 'video\/avi', 'divx' => 'video\/divx', 'flv' => 'video\/x-flv', 'mov|qt' => 'video\/quicktime', 'mpeg|mpg|mpe' => 'video\/mpeg', 'mp4|m4v' => 'video\/mp4', 'ogv' => 'video\/ogg', 'webm' => 'video\/webm', 'mkv' => 'video\/x-matroska', 'txt|asc|c|cc|h' => 'text\/plain', 'csv' => 'text\/csv', 'tsv' => 'text\/tab-separated-values', 'ics' => 'text\/calendar', 'rtx' => 'text\/richtext', 'css' => 'text\/css', 'htm|html' => 'text\/html', 'mp3|m4a|m4b' => 'audio\/mpeg', 'ra|ram' => 'audio\/x-realaudio', 'wav' => 'audio\/wav', 'ogg|oga' => 'audio\/ogg', 'mid|midi' => 'audio\/midi', 'wma' => 'audio\/wma', 'mka' => 'audio\/x-matroska', 'rtf' => 'application\/rtf', 'js' => 'application\/javascript', 'pdf' => 'application\/pdf', 'swf' => 'application\/x-shockwave-flash', 'class' => 'application\/java', 'tar' => 'application\/x-tar', 'zip' => 'application\/zip', 'gz|gzip' => 'application\/x-gzip', 'rar' => 'application\/rar', '7z' => 'application\/x-7z-compressed', 'exe' => 'application\/x-msdownload', 'doc' => 'application\/msword', 'pot|pps|ppt' => 'application\/vnd.ms-powerpoint', 'wri' => 'application\/vnd.ms-write', 'xla|xls|xlt|xlw' => 'application\/vnd.ms-excel', 'mdb' => 'application\/vnd.ms-access', 'mpp' => 'application\/vnd.ms-project', 'docx' => 'application\/vnd.openxmlformats-officedocument.wordprocessingml.document', 'docm' => 'application\/vnd.ms-word.document.macroEnabled.12', 'dotx' => 'application\/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dotm' => 'application\/vnd.ms-word.template.macroEnabled.12', 'xlsx' => 'application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlsm' => 'application\/vnd.ms-excel.sheet.macroEnabled.12', 'xlsb' => 'application\/vnd.ms-excel.sheet.binary.macroEnabled.12', 'xltx' => 'application\/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xltm' => 'application\/vnd.ms-excel.template.macroEnabled.12', 'xlam' => 'application\/vnd.ms-excel.addin.macroEnabled.12', 'pptx' => 'application\/vnd.openxmlformats-officedocument.presentationml.presentation', 'pptm' => 'application\/vnd.ms-powerpoint.presentation.macroEnabled.12', 'ppsx' => 'application\/vnd.openxmlformats-officedocument.presentationml.slideshow', 'ppsm' => 'application\/vnd.ms-powerpoint.slideshow.macroEnabled.12', 'potx' => 'application\/vnd.openxmlformats-officedocument.presentationml.template', 'potm' => 'application\/vnd.ms-powerpoint.template.macroEnabled.12', 'ppam' => 'application\/vnd.ms-powerpoint.addin.macroEnabled.12', 'sldx' => 'application\/vnd.openxmlformats-officedocument.presentationml.slide', 'sldm' => 'application\/vnd.ms-powerpoint.slide.macroEnabled.12', 'onetoc|onetoc2|onetmp|onepkg' => 'application\/onenote', 'odt' => 'application\/vnd.oasis.opendocument.text', 'odp' => 'application\/vnd.oasis.opendocument.presentation', 'ods' => 'application\/vnd.oasis.opendocument.spreadsheet', 'odg' => 'application\/vnd.oasis.opendocument.graphics', 'odc' => 'application\/vnd.oasis.opendocument.chart', 'odb' => 'application\/vnd.oasis.opendocument.database', 'odf' => 'application\/vnd.oasis.opendocument.formula', 'wp|wpd' => 'application\/wordperfect'))"}]},"'upload_mimes'":{"name":"'upload_mimes'","callers":[{"name":"get_allowed_mime_types","file":"functions.php","line":2003,"type":"filter","source":"apply_filters('upload_mimes', wp_get_mime_types())"}]},"'wp_die_ajax_handler'":{"name":"'wp_die_ajax_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2049,"type":"filter","source":"apply_filters('wp_die_ajax_handler', '_ajax_wp_die_handler')"}]},"'wp_die_xmlrpc_handler'":{"name":"'wp_die_xmlrpc_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2051,"type":"filter","source":"apply_filters('wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler')"}]},"'wp_die_handler'":{"name":"'wp_die_handler'","callers":[{"name":"wp_die","file":"functions.php","line":2053,"type":"filter","source":"apply_filters('wp_die_handler', '_default_wp_die_handler')"}]},"'load_default_widgets'":{"name":"'load_default_widgets'","callers":[{"name":"wp_maybe_load_widgets","file":"functions.php","line":2695,"type":"filter","source":"apply_filters('load_default_widgets', true)"}]},"'deprecated_function_run'":{"name":"'deprecated_function_run'","callers":[{"name":"_deprecated_function","file":"functions.php","line":2856,"type":"action","source":"do_action('deprecated_function_run', $function, $replacement, $version)"}]},"'deprecated_function_trigger_error'":{"name":"'deprecated_function_trigger_error'","callers":[{"name":"_deprecated_function","file":"functions.php","line":2859,"type":"filter","source":"apply_filters('deprecated_function_trigger_error', true)"}]},"'deprecated_file_included'":{"name":"'deprecated_file_included'","callers":[{"name":"_deprecated_file","file":"functions.php","line":2895,"type":"action","source":"do_action('deprecated_file_included', $file, $replacement, $version, $message)"}]},"'deprecated_file_trigger_error'":{"name":"'deprecated_file_trigger_error'","callers":[{"name":"_deprecated_file","file":"functions.php","line":2898,"type":"filter","source":"apply_filters('deprecated_file_trigger_error', true)"}]},"'deprecated_argument_run'":{"name":"'deprecated_argument_run'","callers":[{"name":"_deprecated_argument","file":"functions.php","line":2940,"type":"action","source":"do_action('deprecated_argument_run', $function, $message, $version)"}]},"'deprecated_argument_trigger_error'":{"name":"'deprecated_argument_trigger_error'","callers":[{"name":"_deprecated_argument","file":"functions.php","line":2943,"type":"filter","source":"apply_filters('deprecated_argument_trigger_error', true)"}]},"'doing_it_wrong_run'":{"name":"'doing_it_wrong_run'","callers":[{"name":"_doing_it_wrong","file":"functions.php","line":2975,"type":"action","source":"do_action('doing_it_wrong_run', $function, $message, $version)"}]},"'doing_it_wrong_trigger_error'":{"name":"'doing_it_wrong_trigger_error'","callers":[{"name":"_doing_it_wrong","file":"functions.php","line":2978,"type":"filter","source":"apply_filters('doing_it_wrong_trigger_error', true)"}]},"'iis7_supports_permalinks'":{"name":"'iis7_supports_permalinks'","callers":[{"name":"iis7_supports_permalinks","file":"functions.php","line":3052,"type":"filter","source":"apply_filters('iis7_supports_permalinks', $supports_permalinks)"}]},"'global_terms_enabled'":{"name":"'global_terms_enabled'","callers":[{"name":"global_terms_enabled","file":"functions.php","line":3246,"type":"filter","source":"apply_filters('global_terms_enabled', null)"}]},"\"extra_{$context}_headers\"":{"name":"\"extra_{$context}_headers\"","callers":[{"name":"get_file_data","file":"functions.php","line":3541,"type":"filter","source":"apply_filters(\"extra_{$context}_headers\", array())"}]},"'kses_allowed_protocols'":{"name":"'kses_allowed_protocols'","callers":[{"name":"wp_allowed_protocols","file":"functions.php","line":3764,"type":"filter","source":"apply_filters('kses_allowed_protocols', $protocols)"}]},"'wp_checkdate'":{"name":"'wp_checkdate'","callers":[{"name":"wp_checkdate","file":"functions.php","line":3881,"type":"filter","source":"apply_filters('wp_checkdate', checkdate($month, $day, $year), $source_date)"}]},"'wp_print_scripts'":{"name":"'wp_print_scripts'","callers":[{"name":"wp_print_scripts","file":"functions.wp-scripts.php","line":22,"type":"action","source":"do_action('wp_print_scripts')"},{"name":"print_head_scripts","file":"script-loader.php","line":647,"type":"action","source":"do_action('wp_print_scripts')"},{"name":"wp_print_head_scripts","file":"script-loader.php","line":726,"type":"action","source":"do_action('wp_print_scripts')"}]},"'wp_print_styles'":{"name":"'wp_print_styles'","callers":[{"name":"wp_print_styles","file":"functions.wp-styles.php","line":25,"type":"action","source":"do_action('wp_print_styles')"}]},"'get_header'":{"name":"'get_header'","callers":[{"name":"get_header","file":"general-template.php","line":25,"type":"action","source":"do_action('get_header', $name)"}]},"'get_footer'":{"name":"'get_footer'","callers":[{"name":"get_footer","file":"general-template.php","line":54,"type":"action","source":"do_action('get_footer', $name)"}]},"'get_sidebar'":{"name":"'get_sidebar'","callers":[{"name":"get_sidebar","file":"general-template.php","line":83,"type":"action","source":"do_action('get_sidebar', $name)"}]},"\"get_template_part_{$slug}\"":{"name":"\"get_template_part_{$slug}\"","callers":[{"name":"get_template_part","file":"general-template.php","line":120,"type":"action","source":"do_action(\"get_template_part_{$slug}\", $slug, $name)"}]},"'get_search_form'":{"name":"'get_search_form'","callers":[{"name":"get_search_form","file":"general-template.php","line":153,"type":"action","source":"do_action('get_search_form')"},{"name":"get_search_form","file":"general-template.php","line":169,"type":"filter","source":"apply_filters('get_search_form', $form)"},{"name":"get_search_form","file":"general-template.php","line":171,"type":"filter","source":"apply_filters('get_search_form', $form)"}]},"'loginout'":{"name":"'loginout'","callers":[{"name":"wp_loginout","file":"general-template.php","line":194,"type":"filter","source":"apply_filters('loginout', $link)"},{"name":"wp_loginout","file":"general-template.php","line":196,"type":"filter","source":"apply_filters('loginout', $link)"}]},"'logout_url'":{"name":"'logout_url'","callers":[{"name":"wp_logout_url","file":"general-template.php","line":221,"type":"filter","source":"apply_filters('logout_url', $logout_url, $redirect)"}]},"'login_url'":{"name":"'login_url'","callers":[{"name":"wp_login_url","file":"general-template.php","line":246,"type":"filter","source":"apply_filters('login_url', $login_url, $redirect)"}]},"'login_form_defaults'":{"name":"'login_form_defaults'","callers":[{"name":"wp_login_form","file":"general-template.php","line":273,"type":"filter","source":"apply_filters('login_form_defaults', $defaults)"}]},"'login_form_top'":{"name":"'login_form_top'","callers":[{"name":"wp_login_form","file":"general-template.php","line":277,"type":"filter","source":"apply_filters('login_form_top', '', $args)"}]},"'login_form_middle'":{"name":"'login_form_middle'","callers":[{"name":"wp_login_form","file":"general-template.php","line":286,"type":"filter","source":"apply_filters('login_form_middle', '', $args)"}]},"'login_form_bottom'":{"name":"'login_form_bottom'","callers":[{"name":"wp_login_form","file":"general-template.php","line":292,"type":"filter","source":"apply_filters('login_form_bottom', '', $args)"}]},"'lostpassword_url'":{"name":"'lostpassword_url'","callers":[{"name":"wp_lostpassword_url","file":"general-template.php","line":320,"type":"filter","source":"apply_filters('lostpassword_url', $lostpassword_url, $redirect)"}]},"'register'":{"name":"'register'","callers":[{"name":"wp_register","file":"general-template.php","line":349,"type":"filter","source":"apply_filters('register', $link)"},{"name":"wp_register","file":"general-template.php","line":351,"type":"filter","source":"apply_filters('register', $link)"}]},"'wp_meta'":{"name":"'wp_meta'","callers":[{"name":"wp_meta","file":"general-template.php","line":365,"type":"action","source":"do_action('wp_meta')"}]},"'bloginfo_url'":{"name":"'bloginfo_url'","callers":[{"name":"get_bloginfo","file":"general-template.php","line":491,"type":"filter","source":"apply_filters('bloginfo_url', $output, $show)"}]},"'bloginfo'":{"name":"'bloginfo'","callers":[{"name":"get_bloginfo","file":"general-template.php","line":493,"type":"filter","source":"apply_filters('bloginfo', $output, $show)"}]},"'wp_title'":{"name":"'wp_title'","callers":[{"name":"wp_title","file":"general-template.php","line":602,"type":"filter","source":"apply_filters('wp_title', $title, $sep, $seplocation)"}]},"'single_post_title'":{"name":"'single_post_title'","callers":[{"name":"single_post_title","file":"general-template.php","line":634,"type":"filter","source":"apply_filters('single_post_title', $_post->post_title, $_post)"}]},"'post_type_archive_title'":{"name":"'post_type_archive_title'","callers":[{"name":"post_type_archive_title","file":"general-template.php","line":658,"type":"filter","source":"apply_filters('post_type_archive_title', $post_type_obj->labels->name)"}]},"'single_cat_title'":{"name":"'single_cat_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":732,"type":"filter","source":"apply_filters('single_cat_title', $term->name)"}]},"'single_tag_title'":{"name":"'single_tag_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":734,"type":"filter","source":"apply_filters('single_tag_title', $term->name)"}]},"'single_term_title'":{"name":"'single_term_title'","callers":[{"name":"single_term_title","file":"general-template.php","line":736,"type":"filter","source":"apply_filters('single_term_title', $term->name)"}]},"'get_archives_link'":{"name":"'get_archives_link'","callers":[{"name":"get_archives_link","file":"general-template.php","line":839,"type":"filter","source":"apply_filters('get_archives_link', $link_html)"}]},"'getarchives_where'":{"name":"'getarchives_where'","callers":[{"name":"wp_get_archives","file":"general-template.php","line":916,"type":"filter","source":"apply_filters('getarchives_where', 'WHERE post_type = \\'post\\' AND post_status = \\'publish\\'', $r)"}]},"'getarchives_join'":{"name":"'getarchives_join'","callers":[{"name":"wp_get_archives","file":"general-template.php","line":917,"type":"filter","source":"apply_filters('getarchives_join', '', $r)"}]},"'get_calendar'":{"name":"'get_calendar'","callers":[{"name":"get_calendar","file":"general-template.php","line":1081,"type":"filter","source":"apply_filters('get_calendar', $cache[$key])"},{"name":"get_calendar","file":"general-template.php","line":1084,"type":"filter","source":"apply_filters('get_calendar', $cache[$key])"},{"name":"get_calendar","file":"general-template.php","line":1267,"type":"filter","source":"apply_filters('get_calendar', $calendar_output)"},{"name":"get_calendar","file":"general-template.php","line":1269,"type":"filter","source":"apply_filters('get_calendar', $calendar_output)"}]},"'the_date'":{"name":"'the_date'","callers":[{"name":"the_date","file":"general-template.php","line":1353,"type":"filter","source":"apply_filters('the_date', $the_date, $d, $before, $after)"}]},"'get_the_date'":{"name":"'get_the_date'","callers":[{"name":"get_the_date","file":"general-template.php","line":1384,"type":"filter","source":"apply_filters('get_the_date', $the_date, $d)"}]},"'the_modified_date'":{"name":"'the_modified_date'","callers":[{"name":"the_modified_date","file":"general-template.php","line":1401,"type":"filter","source":"apply_filters('the_modified_date', $the_modified_date, $d, $before, $after)"}]},"'get_the_modified_date'":{"name":"'get_the_modified_date'","callers":[{"name":"get_the_modified_date","file":"general-template.php","line":1423,"type":"filter","source":"apply_filters('get_the_modified_date', $the_time, $d)"}]},"'the_time'":{"name":"'the_time'","callers":[{"name":"the_time","file":"general-template.php","line":1434,"type":"filter","source":"apply_filters('the_time', get_the_time($d), $d)"}]},"'get_the_time'":{"name":"'get_the_time'","callers":[{"name":"get_the_time","file":"general-template.php","line":1453,"type":"filter","source":"apply_filters('get_the_time', $the_time, $d, $post)"}]},"'get_post_time'":{"name":"'get_post_time'","callers":[{"name":"get_post_time","file":"general-template.php","line":1476,"type":"filter","source":"apply_filters('get_post_time', $time, $d, $gmt)"}]},"'the_modified_time'":{"name":"'the_modified_time'","callers":[{"name":"the_modified_time","file":"general-template.php","line":1487,"type":"filter","source":"apply_filters('the_modified_time', get_the_modified_time($d), $d)"}]},"'get_the_modified_time'":{"name":"'get_the_modified_time'","callers":[{"name":"get_the_modified_time","file":"general-template.php","line":1503,"type":"filter","source":"apply_filters('get_the_modified_time', $the_time, $d)"}]},"'get_post_modified_time'":{"name":"'get_post_modified_time'","callers":[{"name":"get_post_modified_time","file":"general-template.php","line":1526,"type":"filter","source":"apply_filters('get_post_modified_time', $time, $d, $gmt)"}]},"'the_weekday'":{"name":"'the_weekday'","callers":[{"name":"the_weekday","file":"general-template.php","line":1539,"type":"filter","source":"apply_filters('the_weekday', $the_weekday)"}]},"'the_weekday_date'":{"name":"'the_weekday_date'","callers":[{"name":"the_weekday_date","file":"general-template.php","line":1563,"type":"filter","source":"apply_filters('the_weekday_date', $the_weekday_date, $before, $after)"}]},"'wp_head'":{"name":"'wp_head'","callers":[{"name":"wp_head","file":"general-template.php","line":1574,"type":"action","source":"do_action('wp_head')"}]},"'wp_footer'":{"name":"'wp_footer'","callers":[{"name":"wp_footer","file":"general-template.php","line":1584,"type":"action","source":"do_action('wp_footer')"}]},"'user_can_richedit'":{"name":"'user_can_richedit'","callers":[{"name":"user_can_richedit","file":"general-template.php","line":1766,"type":"filter","source":"apply_filters('user_can_richedit', $wp_rich_edit)"}]},"'wp_default_editor'":{"name":"'wp_default_editor'","callers":[{"name":"wp_default_editor","file":"general-template.php","line":1785,"type":"filter","source":"apply_filters('wp_default_editor', $r)"}]},"'get_search_query'":{"name":"'get_search_query'","callers":[{"name":"get_search_query","file":"general-template.php","line":1828,"type":"filter","source":"apply_filters('get_search_query', get_query_var('s'))"}]},"'the_search_query'":{"name":"'the_search_query'","callers":[{"name":"the_search_query","file":"general-template.php","line":1844,"type":"filter","source":"apply_filters('the_search_query', get_search_query(false))"}]},"'language_attributes'":{"name":"'language_attributes'","callers":[{"name":"language_attributes","file":"general-template.php","line":1873,"type":"filter","source":"apply_filters('language_attributes', $output)"}]},"'paginate_links'":{"name":"'paginate_links'","callers":[{"name":"paginate_links","file":"general-template.php","line":1961,"type":"filter","source":"apply_filters('paginate_links', $link)"},{"name":"paginate_links","file":"general-template.php","line":1975,"type":"filter","source":"apply_filters('paginate_links', $link)"},{"name":"paginate_links","file":"general-template.php","line":1989,"type":"filter","source":"apply_filters('paginate_links', $link)"}]},"'wp_admin_css_uri'":{"name":"'wp_admin_css_uri'","callers":[{"name":"wp_admin_css_uri","file":"general-template.php","line":2061,"type":"filter","source":"apply_filters('wp_admin_css_uri', $_file, $file)"}]},"'wp_admin_css'":{"name":"'wp_admin_css'","callers":[{"name":"wp_admin_css","file":"general-template.php","line":2102,"type":"filter","source":"apply_filters('wp_admin_css', '<link rel=\\'stylesheet\\' href=\\'' . esc_url(wp_admin_css_uri($file)) . '\\' type=\\'text\/css\\' \/>\n', $file)"},{"name":"wp_admin_css","file":"general-template.php","line":2104,"type":"filter","source":"apply_filters('wp_admin_css', '<link rel=\\'stylesheet\\' href=\\'' . esc_url(wp_admin_css_uri(\"{$file}-rtl\")) . '\\' type=\\'text\/css\\' \/>\n', \"{$file}-rtl\")"}]},"'wp_generator_type'":{"name":"'wp_generator_type'","callers":[{"name":"wp_generator","file":"general-template.php","line":2130,"type":"filter","source":"apply_filters('wp_generator_type', 'xhtml')"}]},"'the_generator'":{"name":"'the_generator'","callers":[{"name":"the_generator","file":"general-template.php","line":2145,"type":"filter","source":"apply_filters('the_generator', get_the_generator($type), $type)"}]},"\"get_the_generator_{$type}\"":{"name":"\"get_the_generator_{$type}\"","callers":[{"name":"get_the_generator","file":"general-template.php","line":2211,"type":"filter","source":"apply_filters(\"get_the_generator_{$type}\", $gen, $type)"}]},"'http_origin'":{"name":"'http_origin'","callers":[{"name":"get_http_origin","file":"http.php","line":238,"type":"filter","source":"apply_filters('http_origin', $origin)"}]},"'allowed_http_origins'":{"name":"'allowed_http_origins'","callers":[{"name":"get_allowed_http_origins","file":"http.php","line":260,"type":"filter","source":"apply_filters('allowed_http_origins', $allowed_origins)"}]},"'allowed_http_origin'":{"name":"'allowed_http_origin'","callers":[{"name":"is_allowed_http_origin","file":"http.php","line":280,"type":"filter","source":"apply_filters('allowed_http_origin', $origin, $origin_arg)"}]},"'wp_kses_allowed_html'":{"name":"'wp_kses_allowed_html'","callers":[{"name":"wp_kses_allowed_html","file":"kses.php","line":499,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $context, 'explicit')"},{"name":"wp_kses_allowed_html","file":"kses.php","line":503,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedposttags, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":509,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $tags, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":512,"type":"filter","source":"apply_filters('wp_kses_allowed_html', array(), $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":515,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedentitynames, $context)"},{"name":"wp_kses_allowed_html","file":"kses.php","line":519,"type":"filter","source":"apply_filters('wp_kses_allowed_html', $allowedtags, $context)"}]},"'pre_kses'":{"name":"'pre_kses'","callers":[{"name":"wp_kses_hook","file":"kses.php","line":537,"type":"filter","source":"apply_filters('pre_kses', $string, $allowed_html, $allowed_protocols)"}]},"'safe_style_css'":{"name":"'safe_style_css'","callers":[{"name":"safecss_filter_attr","file":"kses.php","line":1411,"type":"filter","source":"apply_filters('safe_style_css', array('text-align', 'margin', 'color', 'float', 'border', 'background', 'background-color', 'border-bottom', 'border-bottom-color', 'border-bottom-style', 'border-bottom-width', 'border-collapse', 'border-color', 'border-left', 'border-left-color', 'border-left-style', 'border-left-width', 'border-right', 'border-right-color', 'border-right-style', 'border-right-width', 'border-spacing', 'border-style', 'border-top', 'border-top-color', 'border-top-style', 'border-top-width', 'border-width', 'caption-side', 'clear', 'cursor', 'direction', 'font', 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', 'height', 'letter-spacing', 'line-height', 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'overflow', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'text-decoration', 'text-indent', 'vertical-align', 'width'))"}]},"'locale'":{"name":"'locale'","callers":[{"name":"get_locale","file":"l10n.php","line":32,"type":"filter","source":"apply_filters('locale', $locale)"},{"name":"get_locale","file":"l10n.php","line":51,"type":"filter","source":"apply_filters('locale', $locale)"}]},"'gettext'":{"name":"'gettext'","callers":[{"name":"translate","file":"l10n.php","line":69,"type":"filter","source":"apply_filters('gettext', $translations->translate($text), $text, $domain)"}]},"'gettext_with_context'":{"name":"'gettext_with_context'","callers":[{"name":"translate_with_gettext_context","file":"l10n.php","line":82,"type":"filter","source":"apply_filters('gettext_with_context', $translations->translate($text, $context), $text, $context, $domain)"}]},"'ngettext'":{"name":"'ngettext'","callers":[{"name":"_n","file":"l10n.php","line":241,"type":"filter","source":"apply_filters('ngettext', $translation, $single, $plural, $number, $domain)"}]},"'ngettext_with_context'":{"name":"'ngettext_with_context'","callers":[{"name":"_nx","file":"l10n.php","line":254,"type":"filter","source":"apply_filters('ngettext_with_context', $translation, $single, $plural, $number, $context, $domain)"}]},"'override_load_textdomain'":{"name":"'override_load_textdomain'","callers":[{"name":"load_textdomain","file":"l10n.php","line":329,"type":"filter","source":"apply_filters('override_load_textdomain', false, $domain, $mofile)"}]},"'load_textdomain'":{"name":"'load_textdomain'","callers":[{"name":"load_textdomain","file":"l10n.php","line":335,"type":"action","source":"do_action('load_textdomain', $domain, $mofile)"}]},"'load_textdomain_mofile'":{"name":"'load_textdomain_mofile'","callers":[{"name":"load_textdomain","file":"l10n.php","line":337,"type":"filter","source":"apply_filters('load_textdomain_mofile', $mofile, $domain)"}]},"'override_unload_textdomain'":{"name":"'override_unload_textdomain'","callers":[{"name":"unload_textdomain","file":"l10n.php","line":362,"type":"filter","source":"apply_filters('override_unload_textdomain', false, $domain)"}]},"'unload_textdomain'":{"name":"'unload_textdomain'","callers":[{"name":"unload_textdomain","file":"l10n.php","line":367,"type":"action","source":"do_action('unload_textdomain', $domain)"}]},"'plugin_locale'":{"name":"'plugin_locale'","callers":[{"name":"load_plugin_textdomain","file":"l10n.php","line":417,"type":"filter","source":"apply_filters('plugin_locale', get_locale(), $domain)"},{"name":"load_muplugin_textdomain","file":"l10n.php","line":442,"type":"filter","source":"apply_filters('plugin_locale', get_locale(), $domain)"}]},"'theme_locale'":{"name":"'theme_locale'","callers":[{"name":"load_theme_textdomain","file":"l10n.php","line":460,"type":"filter","source":"apply_filters('theme_locale', get_locale(), $domain)"}]},"'user_trailingslashit'":{"name":"'user_trailingslashit'","callers":[{"name":"user_trailingslashit","file":"link-template.php","line":43,"type":"filter","source":"apply_filters('user_trailingslashit', $string, $type_of_url)"}]},"'pre_post_link'":{"name":"'pre_post_link'","callers":[{"name":"get_permalink","file":"link-template.php","line":115,"type":"filter","source":"apply_filters('pre_post_link', $permalink, $post, $leavename)"}]},"'post_link_category'":{"name":"'post_link_category'","callers":[{"name":"get_permalink","file":"link-template.php","line":125,"type":"filter","source":"apply_filters('post_link_category', $cats[0], $cats, $post)"}]},"'post_link'":{"name":"'post_link'","callers":[{"name":"get_permalink","file":"link-template.php","line":165,"type":"filter","source":"apply_filters('post_link', $permalink, $post, $leavename)"}]},"'post_type_link'":{"name":"'post_type_link'","callers":[{"name":"get_post_permalink","file":"link-template.php","line":209,"type":"filter","source":"apply_filters('post_type_link', $post_link, $post, $leavename, $sample)"}]},"'page_link'":{"name":"'page_link'","callers":[{"name":"get_page_link","file":"link-template.php","line":248,"type":"filter","source":"apply_filters('page_link', $link, $post->ID, $sample)"}]},"'_get_page_link'":{"name":"'_get_page_link'","callers":[{"name":"_get_page_link","file":"link-template.php","line":284,"type":"filter","source":"apply_filters('_get_page_link', $link, $post->ID)"}]},"'attachment_link'":{"name":"'attachment_link'","callers":[{"name":"get_attachment_link","file":"link-template.php","line":327,"type":"filter","source":"apply_filters('attachment_link', $link, $post->ID)"}]},"'year_link'":{"name":"'year_link'","callers":[{"name":"get_year_link","file":"link-template.php","line":345,"type":"filter","source":"apply_filters('year_link', home_url(user_trailingslashit($yearlink, 'year')), $year)"},{"name":"get_year_link","file":"link-template.php","line":347,"type":"filter","source":"apply_filters('year_link', home_url('?m=' . $year), $year)"}]},"'month_link'":{"name":"'month_link'","callers":[{"name":"get_month_link","file":"link-template.php","line":370,"type":"filter","source":"apply_filters('month_link', home_url(user_trailingslashit($monthlink, 'month')), $year, $month)"},{"name":"get_month_link","file":"link-template.php","line":372,"type":"filter","source":"apply_filters('month_link', home_url('?m=' . $year . zeroise($month, 2)), $year, $month)"}]},"'day_link'":{"name":"'day_link'","callers":[{"name":"get_day_link","file":"link-template.php","line":400,"type":"filter","source":"apply_filters('day_link', home_url(user_trailingslashit($daylink, 'day')), $year, $month, $day)"},{"name":"get_day_link","file":"link-template.php","line":402,"type":"filter","source":"apply_filters('day_link', home_url('?m=' . $year . zeroise($month, 2) . zeroise($day, 2)), $year, $month, $day)"}]},"'the_feed_link'":{"name":"'the_feed_link'","callers":[{"name":"the_feed_link","file":"link-template.php","line":416,"type":"filter","source":"apply_filters('the_feed_link', $link, $feed)"}]},"'feed_link'":{"name":"'feed_link'","callers":[{"name":"get_feed_link","file":"link-template.php","line":453,"type":"filter","source":"apply_filters('feed_link', $output, $feed)"}]},"'post_comments_feed_link'":{"name":"'post_comments_feed_link'","callers":[{"name":"get_post_comments_feed_link","file":"link-template.php","line":492,"type":"filter","source":"apply_filters('post_comments_feed_link', $url)"}]},"'post_comments_feed_link_html'":{"name":"'post_comments_feed_link_html'","callers":[{"name":"post_comments_feed_link","file":"link-template.php","line":516,"type":"filter","source":"apply_filters('post_comments_feed_link_html', \"<a href='{$url}'>{$link_text}<\/a>\", $post_id, $feed)"}]},"'author_feed_link'":{"name":"'author_feed_link'","callers":[{"name":"get_author_feed_link","file":"link-template.php","line":552,"type":"filter","source":"apply_filters('author_feed_link', $link, $feed)"}]},"'category_feed_link'":{"name":"'category_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":622,"type":"filter","source":"apply_filters('category_feed_link', $link, $feed)"}]},"'tag_feed_link'":{"name":"'tag_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":624,"type":"filter","source":"apply_filters('tag_feed_link', $link, $feed)"}]},"'taxonomy_feed_link'":{"name":"'taxonomy_feed_link'","callers":[{"name":"get_term_feed_link","file":"link-template.php","line":626,"type":"filter","source":"apply_filters('taxonomy_feed_link', $link, $feed, $taxonomy)"}]},"'get_edit_tag_link'":{"name":"'get_edit_tag_link'","callers":[{"name":"get_edit_tag_link","file":"link-template.php","line":654,"type":"filter","source":"apply_filters('get_edit_tag_link', get_edit_term_link($tag_id, $taxonomy))"}]},"'edit_tag_link'":{"name":"'edit_tag_link'","callers":[{"name":"edit_tag_link","file":"link-template.php","line":670,"type":"filter","source":"apply_filters('edit_tag_link', $link)"}]},"'get_edit_term_link'":{"name":"'get_edit_term_link'","callers":[{"name":"get_edit_term_link","file":"link-template.php","line":701,"type":"filter","source":"apply_filters('get_edit_term_link', $location, $term_id, $taxonomy, $object_type)"}]},"'edit_term_link'":{"name":"'edit_term_link'","callers":[{"name":"edit_term_link","file":"link-template.php","line":728,"type":"filter","source":"apply_filters('edit_term_link', $link, $term->term_id)"}]},"'search_link'":{"name":"'search_link'","callers":[{"name":"get_search_link","file":"link-template.php","line":762,"type":"filter","source":"apply_filters('search_link', $link, $search)"}]},"'search_feed_link'":{"name":"'search_feed_link'","callers":[{"name":"get_search_feed_link","file":"link-template.php","line":790,"type":"filter","source":"apply_filters('search_feed_link', $link, $feed, 'posts')"},{"name":"get_search_comments_feed_link","file":"link-template.php","line":819,"type":"filter","source":"apply_filters('search_feed_link', $link, $feed, 'comments')"}]},"'post_type_archive_link'":{"name":"'post_type_archive_link'","callers":[{"name":"get_post_type_archive_link","file":"link-template.php","line":851,"type":"filter","source":"apply_filters('post_type_archive_link', $link, $post_type)"}]},"'post_type_archive_feed_link'":{"name":"'post_type_archive_feed_link'","callers":[{"name":"get_post_type_archive_feed_link","file":"link-template.php","line":880,"type":"filter","source":"apply_filters('post_type_archive_feed_link', $link, $feed)"}]},"'get_edit_post_link'":{"name":"'get_edit_post_link'","callers":[{"name":"get_edit_post_link","file":"link-template.php","line":911,"type":"filter","source":"apply_filters('get_edit_post_link', admin_url(sprintf($post_type_object->_edit_link . $action, $post->ID)), $post->ID, $context)"}]},"'edit_post_link'":{"name":"'edit_post_link'","callers":[{"name":"edit_post_link","file":"link-template.php","line":936,"type":"filter","source":"apply_filters('edit_post_link', $link, $post->ID)"}]},"'get_delete_post_link'":{"name":"'get_delete_post_link'","callers":[{"name":"get_delete_post_link","file":"link-template.php","line":969,"type":"filter","source":"apply_filters('get_delete_post_link', wp_nonce_url($delete_link, \"{$action}-post_{$post->ID}\"), $post->ID, $force_delete)"}]},"'get_edit_comment_link'":{"name":"'get_edit_comment_link'","callers":[{"name":"get_edit_comment_link","file":"link-template.php","line":987,"type":"filter","source":"apply_filters('get_edit_comment_link', $location)"}]},"'edit_comment_link'":{"name":"'edit_comment_link'","callers":[{"name":"edit_comment_link","file":"link-template.php","line":1010,"type":"filter","source":"apply_filters('edit_comment_link', $link, $comment->comment_ID)"}]},"'get_edit_bookmark_link'":{"name":"'get_edit_bookmark_link'","callers":[{"name":"get_edit_bookmark_link","file":"link-template.php","line":1028,"type":"filter","source":"apply_filters('get_edit_bookmark_link', $location, $link->link_id)"}]},"'edit_bookmark_link'":{"name":"'edit_bookmark_link'","callers":[{"name":"edit_bookmark_link","file":"link-template.php","line":1051,"type":"filter","source":"apply_filters('edit_bookmark_link', $link, $bookmark->link_id)"}]},"'get_edit_user_link'":{"name":"'get_edit_user_link'","callers":[{"name":"get_edit_user_link","file":"link-template.php","line":1079,"type":"filter","source":"apply_filters('get_edit_user_link', $link, $user->ID)"}]},"\"get_{$adjacent}_post_join\"":{"name":"\"get_{$adjacent}_post_join\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1173,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_join\", $join, $in_same_cat, $excluded_categories)"}]},"\"get_{$adjacent}_post_where\"":{"name":"\"get_{$adjacent}_post_where\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1174,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_where\", $wpdb->prepare(\"WHERE p.post_date {$op} %s AND p.post_type = %s AND p.post_status = 'publish' {$posts_in_ex_cats_sql}\", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories)"}]},"\"get_{$adjacent}_post_sort\"":{"name":"\"get_{$adjacent}_post_sort\"","callers":[{"name":"get_adjacent_post","file":"link-template.php","line":1175,"type":"filter","source":"apply_filters(\"get_{$adjacent}_post_sort\", \"ORDER BY p.post_date {$order} LIMIT 1\")"}]},"\"{$adjacent}_post_rel_link\"":{"name":"\"{$adjacent}_post_rel_link\"","callers":[{"name":"get_adjacent_post_rel_link","file":"link-template.php","line":1236,"type":"filter","source":"apply_filters(\"{$adjacent}_post_rel_link\", $link)"}]},"\"{$adjacent}_post_link\"":{"name":"\"{$adjacent}_post_link\"","callers":[{"name":"adjacent_post_link","file":"link-template.php","line":1405,"type":"filter","source":"apply_filters(\"{$adjacent}_post_link\", $output, $format, $link, $post)"}]},"'get_pagenum_link'":{"name":"'get_pagenum_link'","callers":[{"name":"get_pagenum_link","file":"link-template.php","line":1467,"type":"filter","source":"apply_filters('get_pagenum_link', $result)"}]},"'next_posts_link_attributes'":{"name":"'next_posts_link_attributes'","callers":[{"name":"get_next_posts_link","file":"link-template.php","line":1538,"type":"filter","source":"apply_filters('next_posts_link_attributes', '')"}]},"'previous_posts_link_attributes'":{"name":"'previous_posts_link_attributes'","callers":[{"name":"get_previous_posts_link","file":"link-template.php","line":1609,"type":"filter","source":"apply_filters('previous_posts_link_attributes', '')"}]},"'get_comments_pagenum_link'":{"name":"'get_comments_pagenum_link'","callers":[{"name":"get_comments_pagenum_link","file":"link-template.php","line":1710,"type":"filter","source":"apply_filters('get_comments_pagenum_link', $result)"}]},"'next_comments_link_attributes'":{"name":"'next_comments_link_attributes'","callers":[{"name":"get_next_comments_link","file":"link-template.php","line":1746,"type":"filter","source":"apply_filters('next_comments_link_attributes', '')"}]},"'previous_comments_link_attributes'":{"name":"'previous_comments_link_attributes'","callers":[{"name":"get_previous_comments_link","file":"link-template.php","line":1783,"type":"filter","source":"apply_filters('previous_comments_link_attributes', '')"}]},"'shortcut_link'":{"name":"'shortcut_link'","callers":[{"name":"get_shortcut_link","file":"link-template.php","line":1864,"type":"filter","source":"apply_filters('shortcut_link', $link)"}]},"'home_url'":{"name":"'home_url'","callers":[{"name":"get_home_url","file":"link-template.php","line":1925,"type":"filter","source":"apply_filters('home_url', $url, $path, $orig_scheme, $blog_id)"}]},"'site_url'":{"name":"'site_url'","callers":[{"name":"get_site_url","file":"link-template.php","line":1977,"type":"filter","source":"apply_filters('site_url', $url, $path, $scheme, $blog_id)"}]},"'admin_url'":{"name":"'admin_url'","callers":[{"name":"get_admin_url","file":"link-template.php","line":2011,"type":"filter","source":"apply_filters('admin_url', $url, $path, $blog_id)"}]},"'includes_url'":{"name":"'includes_url'","callers":[{"name":"includes_url","file":"link-template.php","line":2029,"type":"filter","source":"apply_filters('includes_url', $url, $path)"}]},"'content_url'":{"name":"'content_url'","callers":[{"name":"content_url","file":"link-template.php","line":2047,"type":"filter","source":"apply_filters('content_url', $url, $path)"}]},"'plugins_url'":{"name":"'plugins_url'","callers":[{"name":"plugins_url","file":"link-template.php","line":2086,"type":"filter","source":"apply_filters('plugins_url', $url, $path, $plugin)"}]},"'network_site_url'":{"name":"'network_site_url'","callers":[{"name":"network_site_url","file":"link-template.php","line":2117,"type":"filter","source":"apply_filters('network_site_url', $url, $path, $scheme)"}]},"'network_home_url'":{"name":"'network_home_url'","callers":[{"name":"network_home_url","file":"link-template.php","line":2153,"type":"filter","source":"apply_filters('network_home_url', $url, $path, $orig_scheme)"}]},"'network_admin_url'":{"name":"'network_admin_url'","callers":[{"name":"network_admin_url","file":"link-template.php","line":2175,"type":"filter","source":"apply_filters('network_admin_url', $url, $path)"}]},"'user_admin_url'":{"name":"'user_admin_url'","callers":[{"name":"user_admin_url","file":"link-template.php","line":2194,"type":"filter","source":"apply_filters('user_admin_url', $url, $path)"}]},"'set_url_scheme'":{"name":"'set_url_scheme'","callers":[{"name":"set_url_scheme","file":"link-template.php","line":2243,"type":"filter","source":"apply_filters('set_url_scheme', $url, $scheme, $orig_scheme)"}]},"'user_dashboard_url'":{"name":"'user_dashboard_url'","callers":[{"name":"get_dashboard_url","file":"link-template.php","line":2281,"type":"filter","source":"apply_filters('user_dashboard_url', $url, $user_id, $path, $scheme)"}]},"'edit_profile_url'":{"name":"'edit_profile_url'","callers":[{"name":"get_edit_profile_url","file":"link-template.php","line":2303,"type":"filter","source":"apply_filters('edit_profile_url', $url, $user, $scheme)"}]},"'pre_get_shortlink'":{"name":"'pre_get_shortlink'","callers":[{"name":"wp_get_shortlink","file":"link-template.php","line":2345,"type":"filter","source":"apply_filters('pre_get_shortlink', false, $id, $context, $allow_slugs)"}]},"'get_shortlink'":{"name":"'get_shortlink'","callers":[{"name":"wp_get_shortlink","file":"link-template.php","line":2367,"type":"filter","source":"apply_filters('get_shortlink', $shortlink, $id, $context, $allow_slugs)"}]},"'the_shortlink'":{"name":"'the_shortlink'","callers":[{"name":"the_shortlink","file":"link-template.php","line":2436,"type":"filter","source":"apply_filters('the_shortlink', $link, $shortlink, $text, $title)"}]},"'shutdown'":{"name":"'shutdown'","callers":[{"name":"shutdown_action_hook","file":"load.php","line":556,"type":"action","source":"do_action('shutdown')"}]},"'upload_ui_over_quota'":{"name":"'upload_ui_over_quota'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":54,"type":"action","source":"do_action('upload_ui_over_quota')"}]},"'pre-upload-ui'":{"name":"'pre-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":66,"type":"action","source":"do_action('pre-upload-ui')"}]},"'pre-plupload-upload-ui'":{"name":"'pre-plupload-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":67,"type":"action","source":"do_action('pre-plupload-upload-ui')"}]},"'post-plupload-upload-ui'":{"name":"'post-plupload-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":70,"type":"action","source":"do_action('post-plupload-upload-ui')"},{"name":"wp_print_media_templates","file":"media-template.php","line":73,"type":"action","source":"do_action('post-plupload-upload-ui')"}]},"'post-upload-ui'":{"name":"'post-upload-ui'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":103,"type":"action","source":"do_action('post-upload-ui')"}]},"'image_size_names_choose'":{"name":"'image_size_names_choose'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":318,"type":"filter","source":"apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')))"},{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1364,"type":"filter","source":"apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')))"}]},"'print_media_templates'":{"name":"'print_media_templates'","callers":[{"name":"wp_print_media_templates","file":"media-template.php","line":466,"type":"action","source":"do_action('print_media_templates')"}]},"'editor_max_image_size'":{"name":"'editor_max_image_size'","callers":[{"name":"image_constrain_size_for_editor","file":"media.php","line":81,"type":"filter","source":"apply_filters('editor_max_image_size', array($max_width, $max_height), $size, $context)"}]},"'image_downsize'":{"name":"'image_downsize'","callers":[{"name":"image_downsize","file":"media.php","line":148,"type":"filter","source":"apply_filters('image_downsize', false, $id, $size)"},{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1377,"type":"filter","source":"apply_filters('image_downsize', false, $attachment->ID, $size)"}]},"'get_image_tag_class'":{"name":"'get_image_tag_class'","callers":[{"name":"get_image_tag","file":"media.php","line":236,"type":"filter","source":"apply_filters('get_image_tag_class', $class, $id, $align, $size)"}]},"'get_image_tag'":{"name":"'get_image_tag'","callers":[{"name":"get_image_tag","file":"media.php","line":240,"type":"filter","source":"apply_filters('get_image_tag', $html, $id, $alt, $title, $align, $size)"}]},"'image_resize_dimensions'":{"name":"'image_resize_dimensions'","callers":[{"name":"image_resize_dimensions","file":"media.php","line":328,"type":"filter","source":"apply_filters('image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop)"}]},"'intermediate_image_sizes'":{"name":"'intermediate_image_sizes'","callers":[{"name":"get_intermediate_image_sizes","file":"media.php","line":493,"type":"filter","source":"apply_filters('intermediate_image_sizes', $image_sizes)"}]},"'wp_get_attachment_image_attributes'":{"name":"'wp_get_attachment_image_attributes'","callers":[{"name":"wp_get_attachment_image","file":"media.php","line":565,"type":"filter","source":"apply_filters('wp_get_attachment_image_attributes', $attr, $attachment)"}]},"'img_caption_shortcode'":{"name":"'img_caption_shortcode'","callers":[{"name":"img_caption_shortcode","file":"media.php","line":638,"type":"filter","source":"apply_filters('img_caption_shortcode', '', $attr, $content)"}]},"'post_gallery'":{"name":"'post_gallery'","callers":[{"name":"gallery_shortcode","file":"media.php","line":685,"type":"filter","source":"apply_filters('post_gallery', '', $attr)"}]},"'use_default_gallery_style'":{"name":"'use_default_gallery_style'","callers":[{"name":"gallery_shortcode","file":"media.php","line":745,"type":"filter","source":"apply_filters('use_default_gallery_style', true)"}]},"'gallery_style'":{"name":"'gallery_style'","callers":[{"name":"gallery_shortcode","file":"media.php","line":767,"type":"filter","source":"apply_filters('gallery_style', $gallery_style . '\n\t\t' . $gallery_div)"}]},"\"{$adjacent}_image_link\"":{"name":"\"{$adjacent}_image_link\"","callers":[{"name":"adjacent_image_link","file":"media.php","line":846,"type":"filter","source":"apply_filters(\"{$adjacent}_image_link\", $output, $attachment_id, $size, $text)"}]},"'embed_defaults'":{"name":"'embed_defaults'","callers":[{"name":"wp_embed_defaults","file":"media.php","line":981,"type":"filter","source":"apply_filters('embed_defaults', compact('width', 'height'))"}]},"'load_default_embeds'":{"name":"'load_default_embeds'","callers":[{"name":"wp_maybe_load_embeds","file":"media.php","line":1074,"type":"filter","source":"apply_filters('load_default_embeds', true)"}]},"'embed_googlevideo'":{"name":"'embed_googlevideo'","callers":[{"name":"wp_embed_handler_googlevideo","file":"media.php","line":1100,"type":"filter","source":"apply_filters('embed_googlevideo', '<embed type=\"application\/x-shockwave-flash\" src=\"http:\/\/video.google.com\/googleplayer.swf?docid=' . esc_attr($matches[2]) . '&hl=en&fs=true\" style=\"width:' . esc_attr($width) . 'px;height:' . esc_attr($height) . 'px\" allowFullScreen=\"true\" allowScriptAccess=\"always\" \/>', $matches, $attr, $url, $rawattr)"}]},"'upload_size_limit'":{"name":"'upload_size_limit'","callers":[{"name":"wp_max_upload_size","file":"media.php","line":1149,"type":"filter","source":"apply_filters('upload_size_limit', min($u_bytes, $p_bytes), $u_bytes, $p_bytes)"}]},"'wp_image_editors'":{"name":"'wp_image_editors'","callers":[{"name":"_wp_image_editor_choose","file":"media.php","line":1217,"type":"filter","source":"apply_filters('wp_image_editors', array('WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'))"}]},"'plupload_default_settings'":{"name":"'plupload_default_settings'","callers":[{"name":"wp_plupload_default_settings","file":"media.php","line":1274,"type":"filter","source":"apply_filters('plupload_default_settings', $defaults)"}]},"'plupload_default_params'":{"name":"'plupload_default_params'","callers":[{"name":"wp_plupload_default_settings","file":"media.php","line":1280,"type":"filter","source":"apply_filters('plupload_default_params', $params)"}]},"'wp_prepare_attachment_for_js'":{"name":"'wp_prepare_attachment_for_js'","callers":[{"name":"wp_prepare_attachment_for_js","file":"media.php","line":1419,"type":"filter","source":"apply_filters('wp_prepare_attachment_for_js', $response, $attachment, $meta)"}]},"'media_upload_tabs'":{"name":"'media_upload_tabs'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1449,"type":"filter","source":"apply_filters('media_upload_tabs', $tabs)"}]},"'media_view_settings'":{"name":"'media_view_settings'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1535,"type":"filter","source":"apply_filters('media_view_settings', $settings, $post)"}]},"'media_view_strings'":{"name":"'media_view_strings'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1536,"type":"filter","source":"apply_filters('media_view_strings', $strings, $post)"}]},"'wp_enqueue_media'":{"name":"'wp_enqueue_media'","callers":[{"name":"wp_enqueue_media","file":"media.php","line":1550,"type":"action","source":"do_action('wp_enqueue_media')"}]},"\"add_{$meta_type}_metadata\"":{"name":"\"add_{$meta_type}_metadata\"","callers":[{"name":"add_metadata","file":"meta.php","line":50,"type":"filter","source":"apply_filters(\"add_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $unique)"}]},"\"add_{$meta_type}_meta\"":{"name":"\"add_{$meta_type}_meta\"","callers":[{"name":"add_metadata","file":"meta.php","line":62,"type":"action","source":"do_action(\"add_{$meta_type}_meta\", $object_id, $meta_key, $_meta_value)"}]},"\"added_{$meta_type}_meta\"":{"name":"\"added_{$meta_type}_meta\"","callers":[{"name":"add_metadata","file":"meta.php","line":77,"type":"action","source":"do_action(\"added_{$meta_type}_meta\", $mid, $object_id, $meta_key, $_meta_value)"}]},"\"update_{$meta_type}_metadata\"":{"name":"\"update_{$meta_type}_metadata\"","callers":[{"name":"update_metadata","file":"meta.php","line":122,"type":"filter","source":"apply_filters(\"update_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $prev_value)"}]},"\"update_{$meta_type}_meta\"":{"name":"\"update_{$meta_type}_meta\"","callers":[{"name":"update_metadata","file":"meta.php","line":149,"type":"action","source":"do_action(\"update_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":432,"type":"action","source":"do_action(\"update_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"}]},"'update_postmeta'":{"name":"'update_postmeta'","callers":[{"name":"update_metadata","file":"meta.php","line":152,"type":"action","source":"do_action('update_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":435,"type":"action","source":"do_action('update_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"}]},"\"updated_{$meta_type}_meta\"":{"name":"\"updated_{$meta_type}_meta\"","callers":[{"name":"update_metadata","file":"meta.php","line":158,"type":"action","source":"do_action(\"updated_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":443,"type":"action","source":"do_action(\"updated_{$meta_type}_meta\", $meta_id, $object_id, $meta_key, $_meta_value)"}]},"'updated_postmeta'":{"name":"'updated_postmeta'","callers":[{"name":"update_metadata","file":"meta.php","line":161,"type":"action","source":"do_action('updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"},{"name":"update_metadata_by_mid","file":"meta.php","line":446,"type":"action","source":"do_action('updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value)"}]},"\"delete_{$meta_type}_metadata\"":{"name":"\"delete_{$meta_type}_metadata\"","callers":[{"name":"delete_metadata","file":"meta.php","line":202,"type":"filter","source":"apply_filters(\"delete_{$meta_type}_metadata\", null, $object_id, $meta_key, $meta_value, $delete_all)"}]},"\"delete_{$meta_type}_meta\"":{"name":"\"delete_{$meta_type}_meta\"","callers":[{"name":"delete_metadata","file":"meta.php","line":224,"type":"action","source":"do_action(\"delete_{$meta_type}_meta\", $meta_ids, $object_id, $meta_key, $_meta_value)"},{"name":"delete_metadata_by_mid","file":"meta.php","line":488,"type":"action","source":"do_action(\"delete_{$meta_type}_meta\", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value)"}]},"'delete_postmeta'":{"name":"'delete_postmeta'","callers":[{"name":"delete_metadata","file":"meta.php","line":228,"type":"action","source":"do_action('delete_postmeta', $meta_ids)"}]},"\"deleted_{$meta_type}_meta\"":{"name":"\"deleted_{$meta_type}_meta\"","callers":[{"name":"delete_metadata","file":"meta.php","line":245,"type":"action","source":"do_action(\"deleted_{$meta_type}_meta\", $meta_ids, $object_id, $meta_key, $_meta_value)"},{"name":"delete_metadata_by_mid","file":"meta.php","line":500,"type":"action","source":"do_action(\"deleted_{$meta_type}_meta\", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value)"}]},"'deleted_postmeta'":{"name":"'deleted_postmeta'","callers":[{"name":"delete_metadata","file":"meta.php","line":249,"type":"action","source":"do_action('deleted_postmeta', $meta_ids)"}]},"\"get_{$meta_type}_metadata\"":{"name":"\"get_{$meta_type}_metadata\"","callers":[{"name":"get_metadata","file":"meta.php","line":274,"type":"filter","source":"apply_filters(\"get_{$meta_type}_metadata\", null, $object_id, $meta_key, $single)"},{"name":"metadata_exists","file":"meta.php","line":322,"type":"filter","source":"apply_filters(\"get_{$meta_type}_metadata\", null, $object_id, $meta_key, true)"}]},"\"delete_{$meta_type}meta\"":{"name":"\"delete_{$meta_type}meta\"","callers":[{"name":"delete_metadata_by_mid","file":"meta.php","line":492,"type":"action","source":"do_action(\"delete_{$meta_type}meta\", $meta_id)"}]},"\"deleted_{$meta_type}meta\"":{"name":"\"deleted_{$meta_type}meta\"","callers":[{"name":"delete_metadata_by_mid","file":"meta.php","line":504,"type":"action","source":"do_action(\"deleted_{$meta_type}meta\", $meta_id)"}]},"'is_protected_meta'":{"name":"'is_protected_meta'","callers":[{"name":"is_protected_meta","file":"meta.php","line":865,"type":"filter","source":"apply_filters('is_protected_meta', $protected, $meta_key, $meta_type)"}]},"\"sanitize_{$meta_type}_meta_{$meta_key}\"":{"name":"\"sanitize_{$meta_type}_meta_{$meta_key}\"","callers":[{"name":"sanitize_meta","file":"meta.php","line":879,"type":"filter","source":"apply_filters(\"sanitize_{$meta_type}_meta_{$meta_key}\", $meta_value, $meta_key, $meta_type)"}]},"'wpmu_blog_updated'":{"name":"'wpmu_blog_updated'","callers":[{"name":"wpmu_update_blogs_date","file":"ms-blogs.php","line":21,"type":"action","source":"do_action('wpmu_blog_updated', $wpdb->blogid)"}]},"'blog_details'":{"name":"'blog_details'","callers":[{"name":"get_blog_details","file":"ms-blogs.php","line":237,"type":"filter","source":"apply_filters('blog_details', $details)"}]},"'refresh_blog_details'":{"name":"'refresh_blog_details'","callers":[{"name":"refresh_blog_details","file":"ms-blogs.php","line":260,"type":"action","source":"do_action('refresh_blog_details', $blog_id)"}]},"'make_spam_blog'":{"name":"'make_spam_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":303,"type":"action","source":"do_action('make_spam_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":683,"type":"action","source":"do_action('make_spam_blog', $blog_id)"}]},"'make_ham_blog'":{"name":"'make_ham_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":305,"type":"action","source":"do_action('make_ham_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":683,"type":"action","source":"do_action('make_ham_blog', $blog_id)"}]},"'mature_blog'":{"name":"'mature_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":311,"type":"action","source":"do_action('mature_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":685,"type":"action","source":"do_action('mature_blog', $blog_id)"}]},"'unmature_blog'":{"name":"'unmature_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":313,"type":"action","source":"do_action('unmature_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":685,"type":"action","source":"do_action('unmature_blog', $blog_id)"}]},"'archive_blog'":{"name":"'archive_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":319,"type":"action","source":"do_action('archive_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":687,"type":"action","source":"do_action('archive_blog', $blog_id)"}]},"'unarchive_blog'":{"name":"'unarchive_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":321,"type":"action","source":"do_action('unarchive_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":687,"type":"action","source":"do_action('unarchive_blog', $blog_id)"}]},"'make_delete_blog'":{"name":"'make_delete_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":327,"type":"action","source":"do_action('make_delete_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":689,"type":"action","source":"do_action('make_delete_blog', $blog_id)"}]},"'make_undelete_blog'":{"name":"'make_undelete_blog'","callers":[{"name":"update_blog_details","file":"ms-blogs.php","line":329,"type":"action","source":"do_action('make_undelete_blog', $blog_id)"},{"name":"update_blog_status","file":"ms-blogs.php","line":689,"type":"action","source":"do_action('make_undelete_blog', $blog_id)"}]},"'blog_option_' . $option":{"name":"'blog_option_' . $option","callers":[{"name":"get_blog_option","file":"ms-blogs.php","line":393,"type":"filter","source":"apply_filters('blog_option_' . $option, $value, $id)"}]},"'switch_blog'":{"name":"'switch_blog'","callers":[{"name":"switch_to_blog","file":"ms-blogs.php","line":513,"type":"action","source":"do_action('switch_blog', $new_blog, $new_blog)"},{"name":"switch_to_blog","file":"ms-blogs.php","line":550,"type":"action","source":"do_action('switch_blog', $new_blog, $prev_blog_id)"},{"name":"restore_current_blog","file":"ms-blogs.php","line":573,"type":"action","source":"do_action('switch_blog', $blog, $blog)"},{"name":"restore_current_blog","file":"ms-blogs.php","line":611,"type":"action","source":"do_action('switch_blog', $blog, $prev_blog_id)"}]},"'graceful_fail'":{"name":"'graceful_fail'","callers":[{"name":"graceful_fail","file":"ms-deprecated.php","line":69,"type":"filter","source":"apply_filters('graceful_fail', $message)"}]},"'graceful_fail_template'":{"name":"'graceful_fail_template'","callers":[{"name":"graceful_fail","file":"ms-deprecated.php","line":70,"type":"filter","source":"apply_filters('graceful_fail_template', '<!DOCTYPE html>\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><head profile=\"http:\/\/gmpg.org\/xfn\/11\">\n<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=UTF-8\" \/>\n<title>Error!<\/title>\n<style type=\"text\/css\">\nimg {\n\tborder: 0;\n}\nbody {\nline-height: 1.6em; font-family: Georgia, serif; width: 390px; margin: auto;\ntext-align: center;\n}\n.message {\n\tfont-size: 22px;\n\twidth: 350px;\n\tmargin: auto;\n}\n<\/style>\n<\/head>\n<body>\n<p class=\"message\">%s<\/p>\n<\/body>\n<\/html>')"}]},"'add_user_to_blog'":{"name":"'add_user_to_blog'","callers":[{"name":"add_user_to_blog","file":"ms-functions.php","line":196,"type":"action","source":"do_action('add_user_to_blog', $user_id, $role, $blog_id)"}]},"'remove_user_from_blog'":{"name":"'remove_user_from_blog'","callers":[{"name":"remove_user_from_blog","file":"ms-functions.php","line":222,"type":"action","source":"do_action('remove_user_from_blog', $user_id, $blog_id)"}]},"'is_email_address_unsafe'":{"name":"'is_email_address_unsafe'","callers":[{"name":"is_email_address_unsafe","file":"ms-functions.php","line":403,"type":"filter","source":"apply_filters('is_email_address_unsafe', $is_email_address_unsafe, $user_email)"}]},"'wpmu_validate_user_signup'":{"name":"'wpmu_validate_user_signup'","callers":[{"name":"wpmu_validate_user_signup","file":"ms-functions.php","line":517,"type":"filter","source":"apply_filters('wpmu_validate_user_signup', $result)"}]},"'subdirectory_reserved_names'":{"name":"'subdirectory_reserved_names'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":559,"type":"filter","source":"apply_filters('subdirectory_reserved_names', array('page', 'comments', 'blog', 'files', 'feed'))"}]},"'newblogname'":{"name":"'newblogname'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":586,"type":"filter","source":"apply_filters('newblogname', $blogname)"}]},"'wpmu_validate_blog_signup'":{"name":"'wpmu_validate_blog_signup'","callers":[{"name":"wpmu_validate_blog_signup","file":"ms-functions.php","line":621,"type":"filter","source":"apply_filters('wpmu_validate_blog_signup', $result)"}]},"'wpmu_signup_blog_notification'":{"name":"'wpmu_signup_blog_notification'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":723,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification', $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_blog_notification_email'":{"name":"'wpmu_signup_blog_notification_email'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":739,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification_email', __('To activate your blog, please click the following link:\n\n%s\n\nAfter you activate, you will receive *another email* with your login.\n\nAfter you activate, you can visit your site here:\n\n%s'), $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_blog_notification_subject'":{"name":"'wpmu_signup_blog_notification_subject'","callers":[{"name":"wpmu_signup_blog_notification","file":"ms-functions.php","line":749,"type":"filter","source":"apply_filters('wpmu_signup_blog_notification_subject', __('[%1$s] Activate %2$s'), $domain, $path, $title, $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification'":{"name":"'wpmu_signup_user_notification'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":782,"type":"filter","source":"apply_filters('wpmu_signup_user_notification', $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification_email'":{"name":"'wpmu_signup_user_notification_email'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":792,"type":"filter","source":"apply_filters('wpmu_signup_user_notification_email', __('To activate your user, please click the following link:\n\n%s\n\nAfter you activate, you will receive *another email* with your login.'), $user, $user_email, $key, $meta)"}]},"'wpmu_signup_user_notification_subject'":{"name":"'wpmu_signup_user_notification_subject'","callers":[{"name":"wpmu_signup_user_notification","file":"ms-functions.php","line":800,"type":"filter","source":"apply_filters('wpmu_signup_user_notification_subject', __('[%1$s] Activate %2$s'), $user, $user_email, $key, $meta)"}]},"'wpmu_activate_user'":{"name":"'wpmu_activate_user'","callers":[{"name":"wpmu_activate_signup","file":"ms-functions.php","line":872,"type":"action","source":"do_action('wpmu_activate_user', $user_id, $password, $meta)"}]},"'wpmu_activate_blog'":{"name":"'wpmu_activate_blog'","callers":[{"name":"wpmu_activate_signup","file":"ms-functions.php","line":891,"type":"action","source":"do_action('wpmu_activate_blog', $blog_id, $user_id, $password, $signup->title, $meta)"}]},"'wpmu_new_user'":{"name":"'wpmu_new_user'","callers":[{"name":"wpmu_create_user","file":"ms-functions.php","line":923,"type":"action","source":"do_action('wpmu_new_user', $user_id)"}]},"'wpmu_new_blog'":{"name":"'wpmu_new_blog'","callers":[{"name":"wpmu_create_blog","file":"ms-functions.php","line":996,"type":"action","source":"do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta)"}]},"'newblog_notify_siteadmin'":{"name":"'newblog_notify_siteadmin'","callers":[{"name":"newblog_notify_siteadmin","file":"ms-functions.php","line":1032,"type":"filter","source":"apply_filters('newblog_notify_siteadmin', $msg)"}]},"'newuser_notify_siteadmin'":{"name":"'newuser_notify_siteadmin'","callers":[{"name":"newuser_notify_siteadmin","file":"ms-functions.php","line":1067,"type":"filter","source":"apply_filters('newuser_notify_siteadmin', $msg, $user)"}]},"'domain_exists'":{"name":"'domain_exists'","callers":[{"name":"domain_exists","file":"ms-functions.php","line":1088,"type":"filter","source":"apply_filters('domain_exists', $result, $domain, $path, $site_id)"}]},"'wpmu_welcome_notification'":{"name":"'wpmu_welcome_notification'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1217,"type":"filter","source":"apply_filters('wpmu_welcome_notification', $blog_id, $user_id, $password, $title, $meta)"}]},"'update_welcome_email'":{"name":"'update_welcome_email'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1245,"type":"filter","source":"apply_filters('update_welcome_email', $welcome_email, $blog_id, $user_id, $password, $title, $meta)"}]},"'update_welcome_subject'":{"name":"'update_welcome_subject'","callers":[{"name":"wpmu_welcome_notification","file":"ms-functions.php","line":1258,"type":"filter","source":"apply_filters('update_welcome_subject', sprintf(__('New %1$s Site: %2$s'), $current_site->site_name, stripslashes($title)))"}]},"'wpmu_welcome_user_notification'":{"name":"'wpmu_welcome_user_notification'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1281,"type":"filter","source":"apply_filters('wpmu_welcome_user_notification', $user_id, $password, $meta)"}]},"'update_welcome_user_email'":{"name":"'update_welcome_user_email'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1288,"type":"filter","source":"apply_filters('update_welcome_user_email', $welcome_email, $user_id, $password, $meta)"}]},"'update_welcome_user_subject'":{"name":"'update_welcome_user_subject'","callers":[{"name":"wpmu_welcome_user_notification","file":"ms-functions.php","line":1306,"type":"filter","source":"apply_filters('update_welcome_user_subject', sprintf(__('New %1$s User: %2$s'), $current_site->site_name, $user->user_login))"}]},"'blog_redirect_404'":{"name":"'blog_redirect_404'","callers":[{"name":"maybe_redirect_404","file":"ms-functions.php","line":1653,"type":"filter","source":"apply_filters('blog_redirect_404', NOBLOGREDIRECT)"}]},"'added_existing_user'":{"name":"'added_existing_user'","callers":[{"name":"add_existing_user_to_blog","file":"ms-functions.php","line":1704,"type":"action","source":"do_action('added_existing_user', $details['user_id'], $result)"}]},"'update_blog_public'":{"name":"'update_blog_public'","callers":[{"name":"update_blog_public","file":"ms-functions.php","line":1774,"type":"action","source":"do_action('update_blog_public')"}]},"'pre_get_space_used'":{"name":"'pre_get_space_used'","callers":[{"name":"get_space_used","file":"ms-functions.php","line":1944,"type":"filter","source":"apply_filters('pre_get_space_used', false)"}]},"'ms_site_check'":{"name":"'ms_site_check'","callers":[{"name":"ms_site_check","file":"ms-load.php","line":77,"type":"filter","source":"apply_filters('ms_site_check', null)"}]},"'nav_menu_css_class'":{"name":"'nav_menu_css_class'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":75,"type":"filter","source":"apply_filters('nav_menu_css_class', array_filter($classes), $item, $args)"}]},"'nav_menu_item_id'":{"name":"'nav_menu_item_id'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":78,"type":"filter","source":"apply_filters('nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args)"}]},"'walker_nav_menu_start_el'":{"name":"'walker_nav_menu_start_el'","callers":[{"name":"Walker_Nav_Menu::start_el","file":"nav-menu-template.php","line":94,"type":"filter","source":"apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args)"}]},"'wp_nav_menu_args'":{"name":"'wp_nav_menu_args'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":144,"type":"filter","source":"apply_filters('wp_nav_menu_args', $args)"}]},"'wp_nav_menu_container_allowedtags'":{"name":"'wp_nav_menu_container_allowedtags'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":188,"type":"filter","source":"apply_filters('wp_nav_menu_container_allowedtags', array('div', 'nav'))"}]},"'wp_nav_menu_objects'":{"name":"'wp_nav_menu_objects'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":206,"type":"filter","source":"apply_filters('wp_nav_menu_objects', $sorted_menu_items, $args)"}]},"'wp_nav_menu_items'":{"name":"'wp_nav_menu_items'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":228,"type":"filter","source":"apply_filters('wp_nav_menu_items', $items, $args)"}]},"\"wp_nav_menu_{$menu->slug}_items\"":{"name":"\"wp_nav_menu_{$menu->slug}_items\"","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":229,"type":"filter","source":"apply_filters(\"wp_nav_menu_{$menu->slug}_items\", $items, $args)"}]},"'wp_nav_menu'":{"name":"'wp_nav_menu'","callers":[{"name":"wp_nav_menu","file":"nav-menu-template.php","line":237,"type":"filter","source":"apply_filters('wp_nav_menu', $nav_menu, $args)"}]},"'wp_delete_nav_menu'":{"name":"'wp_delete_nav_menu'","callers":[{"name":"wp_delete_nav_menu","file":"nav-menu.php","line":192,"type":"action","source":"do_action('wp_delete_nav_menu', $menu->term_id)"}]},"'wp_create_nav_menu'":{"name":"'wp_create_nav_menu'","callers":[{"name":"wp_update_nav_menu_object","file":"nav-menu.php","line":240,"type":"action","source":"do_action('wp_create_nav_menu', $_menu['term_id'], $menu_data)"}]},"'wp_update_nav_menu'":{"name":"'wp_update_nav_menu'","callers":[{"name":"wp_update_nav_menu_object","file":"nav-menu.php","line":255,"type":"action","source":"do_action('wp_update_nav_menu', $menu_id, $menu_data)"}]},"'wp_update_nav_menu_item'":{"name":"'wp_update_nav_menu_item'","callers":[{"name":"wp_update_nav_menu_item","file":"nav-menu.php","line":396,"type":"action","source":"do_action('wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args)"}]},"'wp_get_nav_menus'":{"name":"'wp_get_nav_menus'","callers":[{"name":"wp_get_nav_menus","file":"nav-menu.php","line":412,"type":"filter","source":"apply_filters('wp_get_nav_menus', get_terms('nav_menu', $args), $args)"}]},"'wp_get_nav_menu_items'":{"name":"'wp_get_nav_menu_items'","callers":[{"name":"wp_get_nav_menu_items","file":"nav-menu.php","line":543,"type":"filter","source":"apply_filters('wp_get_nav_menu_items', $items, $menu, $args)"}]},"'nav_menu_attr_title'":{"name":"'nav_menu_attr_title'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":619,"type":"filter","source":"apply_filters('nav_menu_attr_title', $menu_item->post_excerpt)"},{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":640,"type":"filter","source":"apply_filters('nav_menu_attr_title', '')"}]},"'nav_menu_description'":{"name":"'nav_menu_description'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":622,"type":"filter","source":"apply_filters('nav_menu_description', wp_trim_words($menu_item->post_content, 200))"},{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":641,"type":"filter","source":"apply_filters('nav_menu_description', '')"}]},"'wp_setup_nav_menu_item'":{"name":"'wp_setup_nav_menu_item'","callers":[{"name":"wp_setup_nav_menu_item","file":"nav-menu.php","line":667,"type":"filter","source":"apply_filters('wp_setup_nav_menu_item', $menu_item)"}]},"'pre_option_' . $option":{"name":"'pre_option_' . $option","callers":[{"name":"get_option","file":"option.php","line":40,"type":"filter","source":"apply_filters('pre_option_' . $option, false)"}]},"'default_option_' . $option":{"name":"'default_option_' . $option","callers":[{"name":"get_option","file":"option.php","line":51,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"},{"name":"get_option","file":"option.php","line":70,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"},{"name":"get_option","file":"option.php","line":81,"type":"filter","source":"apply_filters('default_option_' . $option, $default)"}]},"'option_' . $option":{"name":"'option_' . $option","callers":[{"name":"get_option","file":"option.php","line":91,"type":"filter","source":"apply_filters('option_' . $option, maybe_unserialize($value))"}]},"'pre_update_option_' . $option":{"name":"'pre_update_option_' . $option","callers":[{"name":"update_option","file":"option.php","line":229,"type":"filter","source":"apply_filters('pre_update_option_' . $option, $newvalue, $oldvalue)"}]},"'update_option'":{"name":"'update_option'","callers":[{"name":"update_option","file":"option.php","line":247,"type":"action","source":"do_action('update_option', $option, $oldvalue, $_newvalue)"}]},"\"update_option_{$option}\"":{"name":"\"update_option_{$option}\"","callers":[{"name":"update_option","file":"option.php","line":261,"type":"action","source":"do_action(\"update_option_{$option}\", $oldvalue, $_newvalue)"}]},"'updated_option'":{"name":"'updated_option'","callers":[{"name":"update_option","file":"option.php","line":262,"type":"action","source":"do_action('updated_option', $option, $oldvalue, $_newvalue)"}]},"'add_option'":{"name":"'add_option'","callers":[{"name":"add_option","file":"option.php","line":319,"type":"action","source":"do_action('add_option', $option, $_value)"}]},"\"add_option_{$option}\"":{"name":"\"add_option_{$option}\"","callers":[{"name":"add_option","file":"option.php","line":340,"type":"action","source":"do_action(\"add_option_{$option}\", $option, $_value)"}]},"'added_option'":{"name":"'added_option'","callers":[{"name":"add_option","file":"option.php","line":341,"type":"action","source":"do_action('added_option', $option, $_value)"}]},"'delete_option'":{"name":"'delete_option'","callers":[{"name":"delete_option","file":"option.php","line":369,"type":"action","source":"do_action('delete_option', $option)"}]},"\"delete_option_{$option}\"":{"name":"\"delete_option_{$option}\"","callers":[{"name":"delete_option","file":"option.php","line":383,"type":"action","source":"do_action(\"delete_option_{$option}\", $option)"}]},"'deleted_option'":{"name":"'deleted_option'","callers":[{"name":"delete_option","file":"option.php","line":384,"type":"action","source":"do_action('deleted_option', $option)"}]},"'delete_transient_' . $transient":{"name":"'delete_transient_' . $transient","callers":[{"name":"delete_transient","file":"option.php","line":406,"type":"action","source":"do_action('delete_transient_' . $transient, $transient)"}]},"'deleted_transient'":{"name":"'deleted_transient'","callers":[{"name":"delete_transient","file":"option.php","line":419,"type":"action","source":"do_action('deleted_transient', $transient)"}]},"'pre_transient_' . $transient":{"name":"'pre_transient_' . $transient","callers":[{"name":"get_transient","file":"option.php","line":445,"type":"filter","source":"apply_filters('pre_transient_' . $transient, false)"}]},"'transient_' . $transient":{"name":"'transient_' . $transient","callers":[{"name":"get_transient","file":"option.php","line":469,"type":"filter","source":"apply_filters('transient_' . $transient, $value)"}]},"'pre_set_transient_' . $transient":{"name":"'pre_set_transient_' . $transient","callers":[{"name":"set_transient","file":"option.php","line":494,"type":"filter","source":"apply_filters('pre_set_transient_' . $transient, $value)"}]},"'set_transient_' . $transient":{"name":"'set_transient_' . $transient","callers":[{"name":"set_transient","file":"option.php","line":515,"type":"action","source":"do_action('set_transient_' . $transient)"}]},"'setted_transient'":{"name":"'setted_transient'","callers":[{"name":"set_transient","file":"option.php","line":516,"type":"action","source":"do_action('setted_transient', $transient)"}]},"'pre_site_option_' . $option":{"name":"'pre_site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":763,"type":"filter","source":"apply_filters('pre_site_option_' . $option, false)"}]},"'default_site_option_' . $option":{"name":"'default_site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":768,"type":"filter","source":"apply_filters('default_site_option_' . $option, $default)"},{"name":"get_site_option","file":"option.php","line":784,"type":"filter","source":"apply_filters('default_site_option_' . $option, $default)"}]},"'site_option_' . $option":{"name":"'site_option_' . $option","callers":[{"name":"get_site_option","file":"option.php","line":789,"type":"filter","source":"apply_filters('site_option_' . $option, $value)"}]},"'pre_add_site_option_' . $option":{"name":"'pre_add_site_option_' . $option","callers":[{"name":"add_site_option","file":"option.php","line":813,"type":"filter","source":"apply_filters('pre_add_site_option_' . $option, $value)"}]},"\"add_site_option_{$option}\"":{"name":"\"add_site_option_{$option}\"","callers":[{"name":"add_site_option","file":"option.php","line":833,"type":"action","source":"do_action(\"add_site_option_{$option}\", $option, $value)"}]},"'add_site_option'":{"name":"'add_site_option'","callers":[{"name":"add_site_option","file":"option.php","line":834,"type":"action","source":"do_action('add_site_option', $option, $value)"}]},"'pre_delete_site_option_' . $option":{"name":"'pre_delete_site_option_' . $option","callers":[{"name":"delete_site_option","file":"option.php","line":860,"type":"action","source":"do_action('pre_delete_site_option_' . $option)"}]},"\"delete_site_option_{$option}\"":{"name":"\"delete_site_option_{$option}\"","callers":[{"name":"delete_site_option","file":"option.php","line":875,"type":"action","source":"do_action(\"delete_site_option_{$option}\", $option)"}]},"'delete_site_option'":{"name":"'delete_site_option'","callers":[{"name":"delete_site_option","file":"option.php","line":876,"type":"action","source":"do_action('delete_site_option', $option)"}]},"'pre_update_site_option_' . $option":{"name":"'pre_update_site_option_' . $option","callers":[{"name":"update_site_option","file":"option.php","line":902,"type":"filter","source":"apply_filters('pre_update_site_option_' . $option, $value, $oldvalue)"}]},"\"update_site_option_{$option}\"":{"name":"\"update_site_option_{$option}\"","callers":[{"name":"update_site_option","file":"option.php","line":924,"type":"action","source":"do_action(\"update_site_option_{$option}\", $option, $value, $oldvalue)"}]},"'update_site_option'":{"name":"'update_site_option'","callers":[{"name":"update_site_option","file":"option.php","line":925,"type":"action","source":"do_action('update_site_option', $option, $value, $oldvalue)"}]},"'delete_site_transient_' . $transient":{"name":"'delete_site_transient_' . $transient","callers":[{"name":"delete_site_transient","file":"option.php","line":947,"type":"action","source":"do_action('delete_site_transient_' . $transient, $transient)"}]},"'deleted_site_transient'":{"name":"'deleted_site_transient'","callers":[{"name":"delete_site_transient","file":"option.php","line":958,"type":"action","source":"do_action('deleted_site_transient', $transient)"}]},"'pre_site_transient_' . $transient":{"name":"'pre_site_transient_' . $transient","callers":[{"name":"get_site_transient","file":"option.php","line":985,"type":"filter","source":"apply_filters('pre_site_transient_' . $transient, false)"}]},"'site_transient_' . $transient":{"name":"'site_transient_' . $transient","callers":[{"name":"get_site_transient","file":"option.php","line":1008,"type":"filter","source":"apply_filters('site_transient_' . $transient, $value)"}]},"'pre_set_site_transient_' . $transient":{"name":"'pre_set_site_transient_' . $transient","callers":[{"name":"set_site_transient","file":"option.php","line":1034,"type":"filter","source":"apply_filters('pre_set_site_transient_' . $transient, $value)"}]},"'set_site_transient_' . $transient":{"name":"'set_site_transient_' . $transient","callers":[{"name":"set_site_transient","file":"option.php","line":1052,"type":"action","source":"do_action('set_site_transient_' . $transient)"}]},"'setted_site_transient'":{"name":"'setted_site_transient'","callers":[{"name":"set_site_transient","file":"option.php","line":1053,"type":"action","source":"do_action('setted_site_transient', $transient)"}]},"'set_current_user'":{"name":"'set_current_user'","callers":[{"name":"wp_set_current_user","file":"pluggable.php","line":37,"type":"action","source":"do_action('set_current_user')"}]},"'wp_mail'":{"name":"'wp_mail'","callers":[{"name":"wp_mail","file":"pluggable.php","line":216,"type":"filter","source":"apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments'))"}]},"'wp_mail_from'":{"name":"'wp_mail_from'","callers":[{"name":"wp_mail","file":"pluggable.php","line":340,"type":"filter","source":"apply_filters('wp_mail_from', $from_email)"}]},"'wp_mail_from_name'":{"name":"'wp_mail_from_name'","callers":[{"name":"wp_mail","file":"pluggable.php","line":341,"type":"filter","source":"apply_filters('wp_mail_from_name', $from_name)"}]},"'wp_mail_content_type'":{"name":"'wp_mail_content_type'","callers":[{"name":"wp_mail","file":"pluggable.php","line":412,"type":"filter","source":"apply_filters('wp_mail_content_type', $content_type)"}]},"'wp_mail_charset'":{"name":"'wp_mail_charset'","callers":[{"name":"wp_mail","file":"pluggable.php","line":425,"type":"filter","source":"apply_filters('wp_mail_charset', $charset)"}]},"'phpmailer_init'":{"name":"'phpmailer_init'","callers":[{"name":"wp_mail","file":"pluggable.php","line":447,"type":"action_reference","source":"do_action_ref_array('phpmailer_init', array(&$phpmailer))"}]},"'authenticate'":{"name":"'authenticate'","callers":[{"name":"wp_authenticate","file":"pluggable.php","line":474,"type":"filter","source":"apply_filters('authenticate', null, $username, $password)"}]},"'wp_login_failed'":{"name":"'wp_login_failed'","callers":[{"name":"wp_authenticate","file":"pluggable.php","line":485,"type":"action","source":"do_action('wp_login_failed', $username)"}]},"'wp_logout'":{"name":"'wp_logout'","callers":[{"name":"wp_logout","file":"pluggable.php","line":500,"type":"action","source":"do_action('wp_logout')"}]},"'auth_cookie_malformed'":{"name":"'auth_cookie_malformed'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":522,"type":"action","source":"do_action('auth_cookie_malformed', $cookie, $scheme)"}]},"'auth_cookie_expired'":{"name":"'auth_cookie_expired'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":536,"type":"action","source":"do_action('auth_cookie_expired', $cookie_elements)"}]},"'auth_cookie_bad_username'":{"name":"'auth_cookie_bad_username'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":542,"type":"action","source":"do_action('auth_cookie_bad_username', $cookie_elements)"}]},"'auth_cookie_bad_hash'":{"name":"'auth_cookie_bad_hash'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":552,"type":"action","source":"do_action('auth_cookie_bad_hash', $cookie_elements)"}]},"'auth_cookie_valid'":{"name":"'auth_cookie_valid'","callers":[{"name":"wp_validate_auth_cookie","file":"pluggable.php","line":559,"type":"action","source":"do_action('auth_cookie_valid', $cookie_elements, $user)"}]},"'auth_cookie'":{"name":"'auth_cookie'","callers":[{"name":"wp_generate_auth_cookie","file":"pluggable.php","line":588,"type":"filter","source":"apply_filters('auth_cookie', $cookie, $user_id, $expiration, $scheme)"}]},"'auth_cookie_expiration'":{"name":"'auth_cookie_expiration'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":654,"type":"filter","source":"apply_filters('auth_cookie_expiration', 1209600, $user_id, $remember)"},{"name":"wp_set_auth_cookie","file":"pluggable.php","line":656,"type":"filter","source":"apply_filters('auth_cookie_expiration', 172800, $user_id, $remember)"}]},"'secure_auth_cookie'":{"name":"'secure_auth_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":663,"type":"filter","source":"apply_filters('secure_auth_cookie', $secure, $user_id)"}]},"'secure_logged_in_cookie'":{"name":"'secure_logged_in_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":664,"type":"filter","source":"apply_filters('secure_logged_in_cookie', false, $user_id, $secure)"}]},"'set_auth_cookie'":{"name":"'set_auth_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":677,"type":"action","source":"do_action('set_auth_cookie', $auth_cookie, $expire, $expiration, $user_id, $scheme)"}]},"'set_logged_in_cookie'":{"name":"'set_logged_in_cookie'","callers":[{"name":"wp_set_auth_cookie","file":"pluggable.php","line":678,"type":"action","source":"do_action('set_logged_in_cookie', $logged_in_cookie, $expire, $expiration, $user_id, 'logged_in')"}]},"'clear_auth_cookie'":{"name":"'clear_auth_cookie'","callers":[{"name":"wp_clear_auth_cookie","file":"pluggable.php","line":695,"type":"action","source":"do_action('clear_auth_cookie')"}]},"'secure_auth_redirect'":{"name":"'secure_auth_redirect'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":747,"type":"filter","source":"apply_filters('secure_auth_redirect', $secure)"}]},"'auth_redirect_scheme'":{"name":"'auth_redirect_scheme'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":763,"type":"filter","source":"apply_filters('auth_redirect_scheme', '')"}]},"'auth_redirect'":{"name":"'auth_redirect'","callers":[{"name":"auth_redirect","file":"pluggable.php","line":766,"type":"action","source":"do_action('auth_redirect', $user_id)"}]},"'check_admin_referer'":{"name":"'check_admin_referer'","callers":[{"name":"check_admin_referer","file":"pluggable.php","line":817,"type":"action","source":"do_action('check_admin_referer', $action, $result)"}]},"'check_ajax_referer'":{"name":"'check_ajax_referer'","callers":[{"name":"check_ajax_referer","file":"pluggable.php","line":846,"type":"action","source":"do_action('check_ajax_referer', $action, $result)"}]},"'wp_redirect'":{"name":"'wp_redirect'","callers":[{"name":"wp_redirect","file":"pluggable.php","line":866,"type":"filter","source":"apply_filters('wp_redirect', $location, $status)"}]},"'wp_redirect_status'":{"name":"'wp_redirect_status'","callers":[{"name":"wp_redirect","file":"pluggable.php","line":867,"type":"filter","source":"apply_filters('wp_redirect_status', $status, $location)"}]},"'allowed_redirect_hosts'":{"name":"'allowed_redirect_hosts'","callers":[{"name":"wp_validate_redirect","file":"pluggable.php","line":970,"type":"filter","source":"apply_filters('allowed_redirect_hosts', array($wpp['host']), isset($lp['host']) ? $lp['host'] : '')"}]},"'comment_notification_text'":{"name":"'comment_notification_text'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1074,"type":"filter","source":"apply_filters('comment_notification_text', $notify_message, $comment_id)"}]},"'comment_notification_subject'":{"name":"'comment_notification_subject'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1075,"type":"filter","source":"apply_filters('comment_notification_subject', $subject, $comment_id)"}]},"'comment_notification_headers'":{"name":"'comment_notification_headers'","callers":[{"name":"wp_notify_postauthor","file":"pluggable.php","line":1076,"type":"filter","source":"apply_filters('comment_notification_headers', $message_headers, $comment_id)"}]},"'comment_moderation_text'":{"name":"'comment_moderation_text'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1156,"type":"filter","source":"apply_filters('comment_moderation_text', $notify_message, $comment_id)"}]},"'comment_moderation_subject'":{"name":"'comment_moderation_subject'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1157,"type":"filter","source":"apply_filters('comment_moderation_subject', $subject, $comment_id)"}]},"'comment_moderation_headers'":{"name":"'comment_moderation_headers'","callers":[{"name":"wp_notify_moderator","file":"pluggable.php","line":1158,"type":"filter","source":"apply_filters('comment_moderation_headers', $message_headers)"}]},"'nonce_life'":{"name":"'nonce_life'","callers":[{"name":"wp_nonce_tick","file":"pluggable.php","line":1237,"type":"filter","source":"apply_filters('nonce_life', DAY_IN_SECONDS)"}]},"'nonce_user_logged_out'":{"name":"'nonce_user_logged_out'","callers":[{"name":"wp_verify_nonce","file":"pluggable.php","line":1260,"type":"filter","source":"apply_filters('nonce_user_logged_out', $uid, $action)"},{"name":"wp_create_nonce","file":"pluggable.php","line":1288,"type":"filter","source":"apply_filters('nonce_user_logged_out', $uid, $action)"}]},"'salt'":{"name":"'salt'","callers":[{"name":"wp_salt","file":"pluggable.php","line":1334,"type":"filter","source":"apply_filters('salt', $cached_salts[$scheme], $scheme)"},{"name":"wp_salt","file":"pluggable.php","line":1380,"type":"filter","source":"apply_filters('salt', $cached_salts[$scheme], $scheme)"}]},"'check_password'":{"name":"'check_password'","callers":[{"name":"wp_check_password","file":"pluggable.php","line":1461,"type":"filter","source":"apply_filters('check_password', $check, $password, $hash, $user_id)"},{"name":"wp_check_password","file":"pluggable.php","line":1474,"type":"filter","source":"apply_filters('check_password', $check, $password, $hash, $user_id)"}]},"'random_password'":{"name":"'random_password'","callers":[{"name":"wp_generate_password","file":"pluggable.php","line":1503,"type":"filter","source":"apply_filters('random_password', $password)"}]},"'get_avatar_comment_types'":{"name":"'get_avatar_comment_types'","callers":[{"name":"get_avatar","file":"pluggable.php","line":1609,"type":"filter","source":"apply_filters('get_avatar_comment_types', array('comment'))"}]},"'get_avatar'":{"name":"'get_avatar'","callers":[{"name":"get_avatar","file":"pluggable.php","line":1673,"type":"filter","source":"apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt)"}]},"'protected_title_format'":{"name":"'protected_title_format'","callers":[{"name":"get_the_title","file":"post-template.php","line":110,"type":"filter","source":"apply_filters('protected_title_format', __('Protected: %s'))"}]},"'private_title_format'":{"name":"'private_title_format'","callers":[{"name":"get_the_title","file":"post-template.php","line":113,"type":"filter","source":"apply_filters('private_title_format', __('Private: %s'))"}]},"'get_the_guid'":{"name":"'get_the_guid'","callers":[{"name":"get_the_guid","file":"post-template.php","line":153,"type":"filter","source":"apply_filters('get_the_guid', $post->guid)"}]},"'the_content_more_link'":{"name":"'the_content_more_link'","callers":[{"name":"get_the_content","file":"post-template.php","line":219,"type":"filter","source":"apply_filters('the_content_more_link', ' <a href=\"' . get_permalink() . \"#more-{$post->ID}\\\" class=\\\"more-link\\\">{$more_link_text}<\/a>\", $more_link_text)"}]},"'get_the_excerpt'":{"name":"'get_the_excerpt'","callers":[{"name":"get_the_excerpt","file":"post-template.php","line":270,"type":"filter","source":"apply_filters('get_the_excerpt', $post->post_excerpt)"}]},"'post_class'":{"name":"'post_class'","callers":[{"name":"get_post_class","file":"post-template.php","line":377,"type":"filter","source":"apply_filters('post_class', $classes, $class, $post->ID)"}]},"'body_class'":{"name":"'body_class'","callers":[{"name":"get_body_class","file":"post-template.php","line":558,"type":"filter","source":"apply_filters('body_class', $classes, $class)"}]},"'wp_link_pages_args'":{"name":"'wp_link_pages_args'","callers":[{"name":"wp_link_pages","file":"post-template.php","line":641,"type":"filter","source":"apply_filters('wp_link_pages_args', $r)"}]},"'the_meta_key'":{"name":"'the_meta_key'","callers":[{"name":"the_meta","file":"post-template.php","line":751,"type":"filter","source":"apply_filters('the_meta_key', \"<li><span class='post-meta-key'>{$key}:<\/span> {$value}<\/li>\\n\", $key, $value)"}]},"'wp_dropdown_pages'":{"name":"'wp_dropdown_pages'","callers":[{"name":"wp_dropdown_pages","file":"post-template.php","line":797,"type":"filter","source":"apply_filters('wp_dropdown_pages', $output)"}]},"'wp_list_pages_excludes'":{"name":"'wp_list_pages_excludes'","callers":[{"name":"wp_list_pages","file":"post-template.php","line":834,"type":"filter","source":"apply_filters('wp_list_pages_excludes', $exclude_array)"}]},"'wp_list_pages'":{"name":"'wp_list_pages'","callers":[{"name":"wp_list_pages","file":"post-template.php","line":853,"type":"filter","source":"apply_filters('wp_list_pages', $output, $r)"}]},"'wp_page_menu_args'":{"name":"'wp_page_menu_args'","callers":[{"name":"wp_page_menu","file":"post-template.php","line":890,"type":"filter","source":"apply_filters('wp_page_menu_args', $args)"}]},"'wp_page_menu'":{"name":"'wp_page_menu'","callers":[{"name":"wp_page_menu","file":"post-template.php","line":925,"type":"filter","source":"apply_filters('wp_page_menu', $menu, $args)"}]},"'page_css_class'":{"name":"'page_css_class'","callers":[{"name":"Walker_Page::start_el","file":"post-template.php","line":1049,"type":"filter","source":"apply_filters('page_css_class', $css_class, $page, $depth, $args, $current_page)"}]},"'list_pages'":{"name":"'list_pages'","callers":[{"name":"Walker_PageDropdown::start_el","file":"post-template.php","line":1118,"type":"filter","source":"apply_filters('list_pages', $page->post_title, $page)"}]},"'wp_get_attachment_link'":{"name":"'wp_get_attachment_link'","callers":[{"name":"wp_get_attachment_link","file":"post-template.php","line":1183,"type":"filter","source":"apply_filters('wp_get_attachment_link', \"<a href='{$url}' title='{$post_title}'>{$link_text}<\/a>\", $id, $size, $permalink, $icon, $text)"}]},"'prepend_attachment'":{"name":"'prepend_attachment'","callers":[{"name":"prepend_attachment","file":"post-template.php","line":1205,"type":"filter","source":"apply_filters('prepend_attachment', $p)"}]},"'the_password_form'":{"name":"'the_password_form'","callers":[{"name":"get_the_password_form","file":"post-template.php","line":1230,"type":"filter","source":"apply_filters('the_password_form', $output)"}]},"'post_thumbnail_size'":{"name":"'post_thumbnail_size'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":88,"type":"filter","source":"apply_filters('post_thumbnail_size', $size)"}]},"'begin_fetch_post_thumbnail_html'":{"name":"'begin_fetch_post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":90,"type":"action","source":"do_action('begin_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size)"}]},"'end_fetch_post_thumbnail_html'":{"name":"'end_fetch_post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":94,"type":"action","source":"do_action('end_fetch_post_thumbnail_html', $post_id, $post_thumbnail_id, $size)"}]},"'post_thumbnail_html'":{"name":"'post_thumbnail_html'","callers":[{"name":"get_the_post_thumbnail","file":"post-thumbnail-template.php","line":98,"type":"filter","source":"apply_filters('post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr)"}]},"'get_attached_file'":{"name":"'get_attached_file'","callers":[{"name":"get_attached_file","file":"post.php","line":192,"type":"filter","source":"apply_filters('get_attached_file', $file, $attachment_id)"}]},"'update_attached_file'":{"name":"'update_attached_file'","callers":[{"name":"update_attached_file","file":"post.php","line":212,"type":"filter","source":"apply_filters('update_attached_file', $file, $attachment_id)"}]},"'_wp_relative_upload_path'":{"name":"'_wp_relative_upload_path'","callers":[{"name":"_wp_relative_upload_path","file":"post.php","line":239,"type":"filter","source":"apply_filters('_wp_relative_upload_path', $new_path, $path)"}]},"'registered_post_type'":{"name":"'registered_post_type'","callers":[{"name":"register_post_type","file":"post.php","line":1350,"type":"action","source":"do_action('registered_post_type', $post_type, $args)"}]},"\"post_type_labels_{$post_type}\"":{"name":"\"post_type_labels_{$post_type}\"","callers":[{"name":"get_post_type_labels","file":"post.php","line":1514,"type":"filter","source":"apply_filters(\"post_type_labels_{$post_type}\", $labels)"}]},"\"{$field_no_prefix}_edit_pre\"":{"name":"\"{$field_no_prefix}_edit_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2018,"type":"filter","source":"apply_filters(\"{$field_no_prefix}_edit_pre\", $value, $post_id)"}]},"\"edit_post_{$field}\"":{"name":"\"edit_post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2020,"type":"filter","source":"apply_filters(\"edit_post_{$field}\", $value, $post_id)"}]},"\"{$field_no_prefix}_save_pre\"":{"name":"\"{$field_no_prefix}_save_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2034,"type":"filter","source":"apply_filters(\"{$field_no_prefix}_save_pre\", $value)"}]},"\"pre_post_{$field}\"":{"name":"\"pre_post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2036,"type":"filter","source":"apply_filters(\"pre_post_{$field}\", $value)"}]},"\"{$field}_pre\"":{"name":"\"{$field}_pre\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2037,"type":"filter","source":"apply_filters(\"{$field}_pre\", $value)"}]},"\"post_{$field}\"":{"name":"\"post_{$field}\"","callers":[{"name":"sanitize_post_field","file":"post.php","line":2044,"type":"filter","source":"apply_filters(\"post_{$field}\", $value, $post_id, $context)"}]},"'post_mime_types'":{"name":"'post_mime_types'","callers":[{"name":"get_post_mime_types","file":"post.php","line":2199,"type":"filter","source":"apply_filters('post_mime_types', $post_mime_types)"}]},"'before_delete_post'":{"name":"'before_delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2317,"type":"action","source":"do_action('before_delete_post', $postid)"}]},"'delete_post'":{"name":"'delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2366,"type":"action","source":"do_action('delete_post', $postid)"},{"name":"wp_delete_attachment","file":"post.php","line":4119,"type":"action","source":"do_action('delete_post', $post_id)"}]},"'deleted_post'":{"name":"'deleted_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2368,"type":"action","source":"do_action('deleted_post', $postid)"},{"name":"wp_delete_attachment","file":"post.php","line":4121,"type":"action","source":"do_action('deleted_post', $post_id)"}]},"'after_delete_post'":{"name":"'after_delete_post'","callers":[{"name":"wp_delete_post","file":"post.php","line":2379,"type":"action","source":"do_action('after_delete_post', $postid)"}]},"'wp_trash_post'":{"name":"'wp_trash_post'","callers":[{"name":"wp_trash_post","file":"post.php","line":2407,"type":"action","source":"do_action('wp_trash_post', $post_id)"}]},"'trashed_post'":{"name":"'trashed_post'","callers":[{"name":"wp_trash_post","file":"post.php","line":2417,"type":"action","source":"do_action('trashed_post', $post_id)"}]},"'untrash_post'":{"name":"'untrash_post'","callers":[{"name":"wp_untrash_post","file":"post.php","line":2439,"type":"action","source":"do_action('untrash_post', $post_id)"}]},"'untrashed_post'":{"name":"'untrashed_post'","callers":[{"name":"wp_untrash_post","file":"post.php","line":2452,"type":"action","source":"do_action('untrashed_post', $post_id)"}]},"'trash_post_comments'":{"name":"'trash_post_comments'","callers":[{"name":"wp_trash_post_comments","file":"post.php","line":2476,"type":"action","source":"do_action('trash_post_comments', $post_id)"}]},"'trashed_post_comments'":{"name":"'trashed_post_comments'","callers":[{"name":"wp_trash_post_comments","file":"post.php","line":2493,"type":"action","source":"do_action('trashed_post_comments', $post_id, $statuses)"}]},"'untrash_post_comments'":{"name":"'untrash_post_comments'","callers":[{"name":"wp_untrash_post_comments","file":"post.php","line":2522,"type":"action","source":"do_action('untrash_post_comments', $post_id)"}]},"'untrashed_post_comments'":{"name":"'untrashed_post_comments'","callers":[{"name":"wp_untrash_post_comments","file":"post.php","line":2541,"type":"action","source":"do_action('untrashed_post_comments', $post_id)"}]},"'wp_insert_post_empty_content'":{"name":"'wp_insert_post_empty_content'","callers":[{"name":"wp_insert_post","file":"post.php","line":2729,"type":"filter","source":"apply_filters('wp_insert_post_empty_content', $maybe_empty, $postarr)"}]},"'wp_insert_post_parent'":{"name":"'wp_insert_post_parent'","callers":[{"name":"wp_insert_post","file":"post.php","line":2850,"type":"filter","source":"apply_filters('wp_insert_post_parent', $post_parent, $post_ID, compact(array_keys($postarr)), $postarr)"}]},"'wp_insert_post_data'":{"name":"'wp_insert_post_data'","callers":[{"name":"wp_insert_post","file":"post.php","line":2864,"type":"filter","source":"apply_filters('wp_insert_post_data', $data, $postarr)"}]},"'pre_post_update'":{"name":"'pre_post_update'","callers":[{"name":"wp_insert_post","file":"post.php","line":2869,"type":"action","source":"do_action('pre_post_update', $post_ID)"}]},"'post_updated'":{"name":"'post_updated'","callers":[{"name":"wp_insert_post","file":"post.php","line":2947,"type":"action","source":"do_action('post_updated', $post_ID, $post_after, $post_before)"}]},"'save_post'":{"name":"'save_post'","callers":[{"name":"wp_insert_post","file":"post.php","line":2950,"type":"action","source":"do_action('save_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3036,"type":"action","source":"do_action('save_post', $post->ID, $post)"}]},"'wp_insert_post'":{"name":"'wp_insert_post'","callers":[{"name":"wp_insert_post","file":"post.php","line":2951,"type":"action","source":"do_action('wp_insert_post', $post_ID, $post)"},{"name":"wp_publish_post","file":"post.php","line":3037,"type":"action","source":"do_action('wp_insert_post', $post->ID, $post)"}]},"'wp_unique_post_slug_is_bad_attachment_slug'":{"name":"'wp_unique_post_slug_is_bad_attachment_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3104,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_attachment_slug', false, $slug)"}]},"'wp_unique_post_slug_is_bad_hierarchical_slug'":{"name":"'wp_unique_post_slug_is_bad_hierarchical_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3121,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent)"}]},"'wp_unique_post_slug_is_bad_flat_slug'":{"name":"'wp_unique_post_slug_is_bad_flat_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3135,"type":"filter","source":"apply_filters('wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type)"}]},"'wp_unique_post_slug'":{"name":"'wp_unique_post_slug'","callers":[{"name":"wp_unique_post_slug","file":"post.php","line":3146,"type":"filter","source":"apply_filters('wp_unique_post_slug', $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug)"}]},"'transition_post_status'":{"name":"'transition_post_status'","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3274,"type":"action","source":"do_action('transition_post_status', $new_status, $old_status, $post)"}]},"\"{$old_status}_to_{$new_status}\"":{"name":"\"{$old_status}_to_{$new_status}\"","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3275,"type":"action","source":"do_action(\"{$old_status}_to_{$new_status}\", $post)"}]},"\"{$new_status}_{$post->post_type}\"":{"name":"\"{$new_status}_{$post->post_type}\"","callers":[{"name":"wp_transition_post_status","file":"post.php","line":3276,"type":"action","source":"do_action(\"{$new_status}_{$post->post_type}\", $post->ID, $post)"}]},"'add_ping'":{"name":"'add_ping'","callers":[{"name":"add_ping","file":"post.php","line":3300,"type":"filter","source":"apply_filters('add_ping', $new)"}]},"'get_enclosed'":{"name":"'get_enclosed'","callers":[{"name":"get_enclosed","file":"post.php","line":3329,"type":"filter","source":"apply_filters('get_enclosed', $pung, $post_id)"}]},"'get_pung'":{"name":"'get_pung'","callers":[{"name":"get_pung","file":"post.php","line":3347,"type":"filter","source":"apply_filters('get_pung', $pung)"}]},"'get_to_ping'":{"name":"'get_to_ping'","callers":[{"name":"get_to_ping","file":"post.php","line":3365,"type":"filter","source":"apply_filters('get_to_ping', $to_ping)"}]},"'get_pages'":{"name":"'get_pages'","callers":[{"name":"get_pages","file":"post.php","line":3658,"type":"filter","source":"apply_filters('get_pages', $pages, $r)"},{"name":"get_pages","file":"post.php","line":3800,"type":"filter","source":"apply_filters('get_pages', array(), $r)"},{"name":"get_pages","file":"post.php","line":3836,"type":"filter","source":"apply_filters('get_pages', $pages, $r)"}]},"'edit_attachment'":{"name":"'edit_attachment'","callers":[{"name":"wp_insert_attachment","file":"post.php","line":4050,"type":"action","source":"do_action('edit_attachment', $post_ID)"}]},"'add_attachment'":{"name":"'add_attachment'","callers":[{"name":"wp_insert_attachment","file":"post.php","line":4052,"type":"action","source":"do_action('add_attachment', $post_ID)"}]},"'delete_attachment'":{"name":"'delete_attachment'","callers":[{"name":"wp_delete_attachment","file":"post.php","line":4104,"type":"action","source":"do_action('delete_attachment', $post_id)"}]},"'wp_delete_file'":{"name":"'wp_delete_file'","callers":[{"name":"wp_delete_attachment","file":"post.php","line":4129,"type":"filter","source":"apply_filters('wp_delete_file', $thumbfile)"},{"name":"wp_delete_attachment","file":"post.php","line":4136,"type":"filter","source":"apply_filters('wp_delete_file', $intermediate['path'])"},{"name":"wp_delete_attachment","file":"post.php","line":4143,"type":"filter","source":"apply_filters('wp_delete_file', $del_file)"},{"name":"wp_delete_attachment","file":"post.php","line":4148,"type":"filter","source":"apply_filters('wp_delete_file', $file)"}]},"'wp_get_attachment_metadata'":{"name":"'wp_get_attachment_metadata'","callers":[{"name":"wp_get_attachment_metadata","file":"post.php","line":4177,"type":"filter","source":"apply_filters('wp_get_attachment_metadata', $data, $post->ID)"}]},"'wp_update_attachment_metadata'":{"name":"'wp_update_attachment_metadata'","callers":[{"name":"wp_update_attachment_metadata","file":"post.php","line":4194,"type":"filter","source":"apply_filters('wp_update_attachment_metadata', $data, $post->ID)"}]},"'wp_get_attachment_url'":{"name":"'wp_get_attachment_url'","callers":[{"name":"wp_get_attachment_url","file":"post.php","line":4231,"type":"filter","source":"apply_filters('wp_get_attachment_url', $url, $post->ID)"}]},"'wp_get_attachment_thumb_file'":{"name":"'wp_get_attachment_thumb_file'","callers":[{"name":"wp_get_attachment_thumb_file","file":"post.php","line":4257,"type":"filter","source":"apply_filters('wp_get_attachment_thumb_file', $thumbfile, $post->ID)"}]},"'wp_get_attachment_thumb_url'":{"name":"'wp_get_attachment_thumb_url'","callers":[{"name":"wp_get_attachment_thumb_url","file":"post.php","line":4285,"type":"filter","source":"apply_filters('wp_get_attachment_thumb_url', $url, $post->ID)"}]},"'icon_dir_uri'":{"name":"'icon_dir_uri'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4350,"type":"filter","source":"apply_filters('icon_dir_uri', includes_url('images\/crystal'))"}]},"'icon_dirs'":{"name":"'icon_dirs'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4351,"type":"filter","source":"apply_filters('icon_dirs', array($icon_dir => $icon_dir_uri))"}]},"'wp_mime_type_icon'":{"name":"'wp_mime_type_icon'","callers":[{"name":"wp_mime_type_icon","file":"post.php","line":4398,"type":"filter","source":"apply_filters('wp_mime_type_icon', $icon, $mime, $post_id)"}]},"'pub_priv_sql_capability'":{"name":"'pub_priv_sql_capability'","callers":[{"name":"get_posts_by_author_sql","file":"post.php","line":4481,"type":"filter","source":"apply_filters('pub_priv_sql_capability', '')"}]},"'get_lastpostdate'":{"name":"'get_lastpostdate'","callers":[{"name":"get_lastpostdate","file":"post.php","line":4532,"type":"filter","source":"apply_filters('get_lastpostdate', _get_last_post_time($timezone, 'date'), $timezone)"}]},"'get_lastpostmodified'":{"name":"'get_lastpostmodified'","callers":[{"name":"get_lastpostmodified","file":"post.php","line":4555,"type":"filter","source":"apply_filters('get_lastpostmodified', $lastpostmodified, $timezone)"}]},"'clean_post_cache'":{"name":"'clean_post_cache'","callers":[{"name":"clean_post_cache","file":"post.php","line":4657,"type":"action","source":"do_action('clean_post_cache', $post->ID, $post)"}]},"'clean_page_cache'":{"name":"'clean_page_cache'","callers":[{"name":"clean_post_cache","file":"post.php","line":4664,"type":"action","source":"do_action('clean_page_cache', $post->ID)"}]},"'clean_attachment_cache'":{"name":"'clean_attachment_cache'","callers":[{"name":"clean_attachment_cache","file":"post.php","line":4771,"type":"action","source":"do_action('clean_attachment_cache', $id)"}]},"'private_to_published'":{"name":"'private_to_published'","callers":[{"name":"_transition_post_status","file":"post.php","line":4798,"type":"action","source":"do_action('private_to_published', $post->ID)"}]},"'xmlrpc_publish_post'":{"name":"'xmlrpc_publish_post'","callers":[{"name":"_publish_post_hook","file":"post.php","line":4846,"type":"action","source":"do_action('xmlrpc_publish_post', $post_id)"}]},"'_wp_post_revision_fields'":{"name":"'_wp_post_revision_fields'","callers":[{"name":"_wp_post_revision_fields","file":"post.php","line":4887,"type":"filter","source":"apply_filters('_wp_post_revision_fields', $fields)"}]},"'_wp_put_post_revision'":{"name":"'_wp_put_post_revision'","callers":[{"name":"_wp_put_post_revision","file":"post.php","line":5086,"type":"action","source":"do_action('_wp_put_post_revision', $revision_id)"}]},"'wp_restore_post_revision'":{"name":"'wp_restore_post_revision'","callers":[{"name":"wp_restore_post_revision","file":"post.php","line":5165,"type":"action","source":"do_action('wp_restore_post_revision', $post_id, $revision['ID'])"}]},"'wp_delete_post_revision'":{"name":"'wp_delete_post_revision'","callers":[{"name":"wp_delete_post_revision","file":"post.php","line":5194,"type":"action","source":"do_action('wp_delete_post_revision', $revision->ID, $revision)"}]},"'parse_query'":{"name":"'parse_query'","callers":[{"name":"WP_Query::parse_query","file":"query.php","line":1676,"type":"action_reference","source":"do_action_ref_array('parse_query', array(&$this))"}]},"'pre_get_posts'":{"name":"'pre_get_posts'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":1924,"type":"action_reference","source":"do_action_ref_array('pre_get_posts', array(&$this))"}]},"'posts_selection'":{"name":"'posts_selection'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2600,"type":"action","source":"do_action('posts_selection', $where . $groupby . $orderby . $limits . $join)"}]},"'split_the_query'":{"name":"'split_the_query'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2654,"type":"filter","source":"apply_filters('split_the_query', $split_the_query, $this)"}]},"'posts_request_ids'":{"name":"'posts_request_ids'","callers":[{"name":"WP_Query::get_posts","file":"query.php","line":2661,"type":"filter","source":"apply_filters('posts_request_ids', $this->request, $this)"}]},"'loop_start'":{"name":"'loop_start'","callers":[{"name":"WP_Query::the_post","file":"query.php","line":2851,"type":"action_reference","source":"do_action_ref_array('loop_start', array(&$this))"}]},"'loop_end'":{"name":"'loop_end'","callers":[{"name":"WP_Query::have_posts","file":"query.php","line":2872,"type":"action_reference","source":"do_action_ref_array('loop_end', array(&$this))"}]},"'comment_loop_start'":{"name":"'comment_loop_start'","callers":[{"name":"WP_Query::the_comment","file":"query.php","line":2923,"type":"action","source":"do_action('comment_loop_start')"}]},"'the_post'":{"name":"'the_post'","callers":[{"name":"setup_postdata","file":"query.php","line":3655,"type":"action_reference","source":"do_action_ref_array('the_post', array(&$post))"}]},"'url_to_postid'":{"name":"'url_to_postid'","callers":[{"name":"url_to_postid","file":"rewrite.php","line":284,"type":"filter","source":"apply_filters('url_to_postid', $url)"}]},"'post_rewrite_rules'":{"name":"'post_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1544,"type":"filter","source":"apply_filters('post_rewrite_rules', $post_rewrite)"}]},"'date_rewrite_rules'":{"name":"'date_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1548,"type":"filter","source":"apply_filters('date_rewrite_rules', $date_rewrite)"}]},"'root_rewrite_rules'":{"name":"'root_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1552,"type":"filter","source":"apply_filters('root_rewrite_rules', $root_rewrite)"}]},"'comments_rewrite_rules'":{"name":"'comments_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1556,"type":"filter","source":"apply_filters('comments_rewrite_rules', $comments_rewrite)"}]},"'search_rewrite_rules'":{"name":"'search_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1561,"type":"filter","source":"apply_filters('search_rewrite_rules', $search_rewrite)"}]},"'author_rewrite_rules'":{"name":"'author_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1565,"type":"filter","source":"apply_filters('author_rewrite_rules', $author_rewrite)"}]},"'page_rewrite_rules'":{"name":"'page_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1569,"type":"filter","source":"apply_filters('page_rewrite_rules', $page_rewrite)"}]},"$permastructname . '_rewrite_rules'":{"name":"$permastructname . '_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1582,"type":"filter","source":"apply_filters($permastructname . '_rewrite_rules', $rules)"}]},"'tag_rewrite_rules'":{"name":"'tag_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1584,"type":"filter","source":"apply_filters('tag_rewrite_rules', $rules)"}]},"'generate_rewrite_rules'":{"name":"'generate_rewrite_rules'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1595,"type":"action_reference","source":"do_action_ref_array('generate_rewrite_rules', array(&$this))"}]},"'rewrite_rules_array'":{"name":"'rewrite_rules_array'","callers":[{"name":"WP_Rewrite::rewrite_rules","file":"rewrite.php","line":1596,"type":"filter","source":"apply_filters('rewrite_rules_array', $this->rules)"}]},"'mod_rewrite_rules'":{"name":"'mod_rewrite_rules'","callers":[{"name":"WP_Rewrite::mod_rewrite_rules","file":"rewrite.php","line":1704,"type":"filter","source":"apply_filters('mod_rewrite_rules', $rules)"}]},"'rewrite_rules'":{"name":"'rewrite_rules'","callers":[{"name":"WP_Rewrite::mod_rewrite_rules","file":"rewrite.php","line":1705,"type":"filter","source":"apply_filters('rewrite_rules', $rules)"}]},"'iis7_url_rewrite_rules'":{"name":"'iis7_url_rewrite_rules'","callers":[{"name":"WP_Rewrite::iis7_url_rewrite_rules","file":"rewrite.php","line":1751,"type":"filter","source":"apply_filters('iis7_url_rewrite_rules', $rules)"}]},"'permalink_structure_changed'":{"name":"'permalink_structure_changed'","callers":[{"name":"WP_Rewrite::set_permalink_structure","file":"rewrite.php","line":1946,"type":"action","source":"do_action('permalink_structure_changed', $old_permalink_structure, $permalink_structure)"}]},"'load_feed_engine'":{"name":"'load_feed_engine'","callers":[{"name":"__main","file":"rss.php","line":23,"type":"action","source":"do_action('load_feed_engine')"}]},"'print_head_scripts'":{"name":"'print_head_scripts'","callers":[{"name":"print_head_scripts","file":"script-loader.php","line":656,"type":"filter","source":"apply_filters('print_head_scripts', true)"}]},"'print_footer_scripts'":{"name":"'print_footer_scripts'","callers":[{"name":"print_footer_scripts","file":"script-loader.php","line":678,"type":"filter","source":"apply_filters('print_footer_scripts', true)"}]},"'wp_print_footer_scripts'":{"name":"'wp_print_footer_scripts'","callers":[{"name":"wp_print_footer_scripts","file":"script-loader.php","line":752,"type":"action","source":"do_action('wp_print_footer_scripts')"}]},"'wp_enqueue_scripts'":{"name":"'wp_enqueue_scripts'","callers":[{"name":"wp_enqueue_scripts","file":"script-loader.php","line":764,"type":"action","source":"do_action('wp_enqueue_scripts')"}]},"'print_admin_styles'":{"name":"'print_admin_styles'","callers":[{"name":"print_admin_styles","file":"script-loader.php","line":786,"type":"filter","source":"apply_filters('print_admin_styles', true)"}]},"'print_late_styles'":{"name":"'print_late_styles'","callers":[{"name":"print_late_styles","file":"script-loader.php","line":807,"type":"filter","source":"apply_filters('print_late_styles', true)"}]},"'post_format_rewrite_base'":{"name":"'post_format_rewrite_base'","callers":[{"name":"create_initial_taxonomies","file":"taxonomy.php","line":27,"type":"filter","source":"apply_filters('post_format_rewrite_base', 'type')"}]},"'registered_taxonomy'":{"name":"'registered_taxonomy'","callers":[{"name":"register_taxonomy","file":"taxonomy.php","line":392,"type":"action","source":"do_action('registered_taxonomy', $taxonomy, $object_type, $args)"}]},"'get_term'":{"name":"'get_term'","callers":[{"name":"get_term","file":"taxonomy.php","line":900,"type":"filter","source":"apply_filters('get_term', $_term, $taxonomy)"},{"name":"get_term_by","file":"taxonomy.php","line":972,"type":"filter","source":"apply_filters('get_term', $term, $taxonomy)"}]},"\"get_{$taxonomy}\"":{"name":"\"get_{$taxonomy}\"","callers":[{"name":"get_term","file":"taxonomy.php","line":901,"type":"filter","source":"apply_filters(\"get_{$taxonomy}\", $_term, $taxonomy)"},{"name":"get_term_by","file":"taxonomy.php","line":973,"type":"filter","source":"apply_filters(\"get_{$taxonomy}\", $term, $taxonomy)"}]},"'get_terms_args'":{"name":"'get_terms_args'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1224,"type":"filter","source":"apply_filters('get_terms_args', $args, $taxonomies)"}]},"'get_terms'":{"name":"'get_terms'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1251,"type":"filter","source":"apply_filters('get_terms', $cache, $taxonomies, $args)"},{"name":"get_terms","file":"taxonomy.php","line":1408,"type":"filter","source":"apply_filters('get_terms', array(), $taxonomies, $args)"},{"name":"get_terms","file":"taxonomy.php","line":1460,"type":"filter","source":"apply_filters('get_terms', $terms, $taxonomies, $args)"}]},"'get_terms_orderby'":{"name":"'get_terms_orderby'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1271,"type":"filter","source":"apply_filters('get_terms_orderby', $orderby, $args)"}]},"'list_terms_exclusions'":{"name":"'list_terms_exclusions'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1327,"type":"filter","source":"apply_filters('list_terms_exclusions', $exclusions, $args)"}]},"'get_terms_fields'":{"name":"'get_terms_fields'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1383,"type":"filter","source":"apply_filters('get_terms_fields', $selects, $args)"}]},"'terms_clauses'":{"name":"'terms_clauses'","callers":[{"name":"get_terms","file":"taxonomy.php","line":1388,"type":"filter","source":"apply_filters('terms_clauses', compact($pieces), $taxonomies, $args)"}]},"\"edit_term_{$field}\"":{"name":"\"edit_term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1644,"type":"filter","source":"apply_filters(\"edit_term_{$field}\", $value, $term_id, $taxonomy)"}]},"\"edit_{$taxonomy}_{$field}\"":{"name":"\"edit_{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1645,"type":"filter","source":"apply_filters(\"edit_{$taxonomy}_{$field}\", $value, $term_id)"}]},"\"pre_term_{$field}\"":{"name":"\"pre_term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1651,"type":"filter","source":"apply_filters(\"pre_term_{$field}\", $value, $taxonomy)"}]},"\"pre_{$taxonomy}_{$field}\"":{"name":"\"pre_{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1652,"type":"filter","source":"apply_filters(\"pre_{$taxonomy}_{$field}\", $value)"}]},"'pre_category_nicename'":{"name":"'pre_category_nicename'","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1655,"type":"filter","source":"apply_filters('pre_category_nicename', $value)"}]},"\"term_{$field}_rss\"":{"name":"\"term_{$field}_rss\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1658,"type":"filter","source":"apply_filters(\"term_{$field}_rss\", $value, $taxonomy)"}]},"\"{$taxonomy}_{$field}_rss\"":{"name":"\"{$taxonomy}_{$field}_rss\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1659,"type":"filter","source":"apply_filters(\"{$taxonomy}_{$field}_rss\", $value)"}]},"\"term_{$field}\"":{"name":"\"term_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1662,"type":"filter","source":"apply_filters(\"term_{$field}\", $value, $term_id, $taxonomy, $context)"}]},"\"{$taxonomy}_{$field}\"":{"name":"\"{$taxonomy}_{$field}\"","callers":[{"name":"sanitize_term_field","file":"taxonomy.php","line":1663,"type":"filter","source":"apply_filters(\"{$taxonomy}_{$field}\", $value, $term_id, $context)"}]},"'delete_term_relationships'":{"name":"'delete_term_relationships'","callers":[{"name":"wp_delete_object_term_relationships","file":"taxonomy.php","line":1731,"type":"action","source":"do_action('delete_term_relationships', $object_id, $tt_ids)"},{"name":"wp_set_object_terms","file":"taxonomy.php","line":2221,"type":"action","source":"do_action('delete_term_relationships', $object_id, $delete_terms)"}]},"'deleted_term_relationships'":{"name":"'deleted_term_relationships'","callers":[{"name":"wp_delete_object_term_relationships","file":"taxonomy.php","line":1733,"type":"action","source":"do_action('deleted_term_relationships', $object_id, $tt_ids)"},{"name":"wp_set_object_terms","file":"taxonomy.php","line":2223,"type":"action","source":"do_action('deleted_term_relationships', $object_id, $delete_terms)"}]},"'edit_term_taxonomies'":{"name":"'edit_term_taxonomies'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1800,"type":"action","source":"do_action('edit_term_taxonomies', $edit_tt_ids)"}]},"'edited_term_taxonomies'":{"name":"'edited_term_taxonomies'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1802,"type":"action","source":"do_action('edited_term_taxonomies', $edit_tt_ids)"}]},"'delete_term_taxonomy'":{"name":"'delete_term_taxonomy'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1828,"type":"action","source":"do_action('delete_term_taxonomy', $tt_id)"}]},"'deleted_term_taxonomy'":{"name":"'deleted_term_taxonomy'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1830,"type":"action","source":"do_action('deleted_term_taxonomy', $tt_id)"}]},"'delete_term'":{"name":"'delete_term'","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1838,"type":"action","source":"do_action('delete_term', $term, $tt_id, $taxonomy, $deleted_term)"}]},"\"delete_{$taxonomy}\"":{"name":"\"delete_{$taxonomy}\"","callers":[{"name":"wp_delete_term","file":"taxonomy.php","line":1839,"type":"action","source":"do_action(\"delete_{$taxonomy}\", $term, $tt_id, $deleted_term)"}]},"'wp_get_object_terms'":{"name":"'wp_get_object_terms'","callers":[{"name":"wp_get_object_terms","file":"taxonomy.php","line":1985,"type":"filter","source":"apply_filters('wp_get_object_terms', $terms, $object_ids, $taxonomies, $args)"}]},"'pre_insert_term'":{"name":"'pre_insert_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2047,"type":"filter","source":"apply_filters('pre_insert_term', $term, $taxonomy)"}]},"'edit_terms'":{"name":"'edit_terms'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2080,"type":"action","source":"do_action('edit_terms', $alias->term_id)"},{"name":"wp_insert_term","file":"taxonomy.php","line":2121,"type":"action","source":"do_action('edit_terms', $term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2395,"type":"action","source":"do_action('edit_terms', $alias->term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2414,"type":"action","source":"do_action('edit_terms', $term_id)"}]},"'edited_terms'":{"name":"'edited_terms'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2082,"type":"action","source":"do_action('edited_terms', $alias->term_id)"},{"name":"wp_insert_term","file":"taxonomy.php","line":2123,"type":"action","source":"do_action('edited_terms', $term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2397,"type":"action","source":"do_action('edited_terms', $alias->term_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2420,"type":"action","source":"do_action('edited_terms', $term_id)"}]},"'create_term'":{"name":"'create_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2134,"type":"action","source":"do_action('create_term', $term_id, $tt_id, $taxonomy)"}]},"\"create_{$taxonomy}\"":{"name":"\"create_{$taxonomy}\"","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2135,"type":"action","source":"do_action(\"create_{$taxonomy}\", $term_id, $tt_id)"}]},"'term_id_filter'":{"name":"'term_id_filter'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2137,"type":"filter","source":"apply_filters('term_id_filter', $term_id, $tt_id)"},{"name":"wp_update_term","file":"taxonomy.php","line":2430,"type":"filter","source":"apply_filters('term_id_filter', $term_id, $tt_id)"}]},"'created_term'":{"name":"'created_term'","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2141,"type":"action","source":"do_action('created_term', $term_id, $tt_id, $taxonomy)"}]},"\"created_{$taxonomy}\"":{"name":"\"created_{$taxonomy}\"","callers":[{"name":"wp_insert_term","file":"taxonomy.php","line":2142,"type":"action","source":"do_action(\"created_{$taxonomy}\", $term_id, $tt_id)"}]},"'add_term_relationship'":{"name":"'add_term_relationship'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2208,"type":"action","source":"do_action('add_term_relationship', $object_id, $tt_id)"}]},"'added_term_relationship'":{"name":"'added_term_relationship'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2210,"type":"action","source":"do_action('added_term_relationship', $object_id, $tt_id)"}]},"'set_object_terms'":{"name":"'set_object_terms'","callers":[{"name":"wp_set_object_terms","file":"taxonomy.php","line":2243,"type":"action","source":"do_action('set_object_terms', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids)"}]},"'wp_update_term_parent'":{"name":"'wp_update_term_parent'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2402,"type":"filter","source":"apply_filters('wp_update_term_parent', $parent, $term_id, $taxonomy, compact(array_keys($args)), $args)"}]},"'edit_term_taxonomy'":{"name":"'edit_term_taxonomy'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2423,"type":"action","source":"do_action('edit_term_taxonomy', $tt_id, $taxonomy)"},{"name":"_update_post_term_count","file":"taxonomy.php","line":2946,"type":"action","source":"do_action('edit_term_taxonomy', $term, $taxonomy)"},{"name":"_update_generic_term_count","file":"taxonomy.php","line":2971,"type":"action","source":"do_action('edit_term_taxonomy', $term, $taxonomy)"}]},"'edited_term_taxonomy'":{"name":"'edited_term_taxonomy'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2425,"type":"action","source":"do_action('edited_term_taxonomy', $tt_id, $taxonomy)"},{"name":"_update_post_term_count","file":"taxonomy.php","line":2948,"type":"action","source":"do_action('edited_term_taxonomy', $term, $taxonomy)"},{"name":"_update_generic_term_count","file":"taxonomy.php","line":2973,"type":"action","source":"do_action('edited_term_taxonomy', $term, $taxonomy)"}]},"'edit_term'":{"name":"'edit_term'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2427,"type":"action","source":"do_action('edit_term', $term_id, $tt_id, $taxonomy)"}]},"\"edit_{$taxonomy}\"":{"name":"\"edit_{$taxonomy}\"","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2428,"type":"action","source":"do_action(\"edit_{$taxonomy}\", $term_id, $tt_id)"}]},"'edited_term'":{"name":"'edited_term'","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2434,"type":"action","source":"do_action('edited_term', $term_id, $tt_id, $taxonomy)"}]},"\"edited_{$taxonomy}\"":{"name":"\"edited_{$taxonomy}\"","callers":[{"name":"wp_update_term","file":"taxonomy.php","line":2435,"type":"action","source":"do_action(\"edited_{$taxonomy}\", $term_id, $tt_id)"}]},"'clean_object_term_cache'":{"name":"'clean_object_term_cache'","callers":[{"name":"clean_object_term_cache","file":"taxonomy.php","line":2575,"type":"action","source":"do_action('clean_object_term_cache', $object_ids, $object_type)"}]},"'clean_term_cache'":{"name":"'clean_term_cache'","callers":[{"name":"clean_term_cache","file":"taxonomy.php","line":2632,"type":"action","source":"do_action('clean_term_cache', $ids, $taxonomy)"}]},"'tag_link'":{"name":"'tag_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3040,"type":"filter","source":"apply_filters('tag_link', $termlink, $term->term_id)"}]},"'category_link'":{"name":"'category_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3042,"type":"filter","source":"apply_filters('category_link', $termlink, $term->term_id)"}]},"'term_link'":{"name":"'term_link'","callers":[{"name":"get_term_link","file":"taxonomy.php","line":3044,"type":"filter","source":"apply_filters('term_link', $termlink, $term, $taxonomy)"}]},"'get_ancestors'":{"name":"'get_ancestors'","callers":[{"name":"get_ancestors","file":"taxonomy.php","line":3230,"type":"filter","source":"apply_filters('get_ancestors', $ancestors, $object_id, $object_type)"},{"name":"get_ancestors","file":"taxonomy.php","line":3243,"type":"filter","source":"apply_filters('get_ancestors', $ancestors, $object_id, $object_type)"}]},"'template_redirect'":{"name":"'template_redirect'","callers":[{"name":"__main","file":"template-loader.php","line":7,"type":"action","source":"do_action('template_redirect')"}]},"'exit_on_http_head'":{"name":"'exit_on_http_head'","callers":[{"name":"__main","file":"template-loader.php","line":10,"type":"filter","source":"apply_filters('exit_on_http_head', true)"}]},"'do_robots'":{"name":"'do_robots'","callers":[{"name":"__main","file":"template-loader.php","line":15,"type":"action","source":"do_action('do_robots')"}]},"'template_include'":{"name":"'template_include'","callers":[{"name":"__main","file":"template-loader.php","line":46,"type":"filter","source":"apply_filters('template_include', $template)"}]},"\"{$type}_template\"":{"name":"\"{$type}_template\"","callers":[{"name":"get_query_template","file":"template.php","line":29,"type":"filter","source":"apply_filters(\"{$type}_template\", locate_template($templates))"}]},"'locate_template'":{"name":"'locate_template'","callers":[{"name":"locate_template","file":"template.php","line":370,"type":"filter","source":"apply_filters('locate_template', $template_names, $load, $require_once)"}]},"'stylesheet'":{"name":"'stylesheet'","callers":[{"name":"get_stylesheet","file":"theme.php","line":147,"type":"filter","source":"apply_filters('stylesheet', get_option('stylesheet'))"}]},"'stylesheet_directory'":{"name":"'stylesheet_directory'","callers":[{"name":"get_stylesheet_directory","file":"theme.php","line":163,"type":"filter","source":"apply_filters('stylesheet_directory', $stylesheet_dir, $stylesheet, $theme_root)"}]},"'stylesheet_directory_uri'":{"name":"'stylesheet_directory_uri'","callers":[{"name":"get_stylesheet_directory_uri","file":"theme.php","line":178,"type":"filter","source":"apply_filters('stylesheet_directory_uri', $stylesheet_dir_uri, $stylesheet, $theme_root_uri)"}]},"'stylesheet_uri'":{"name":"'stylesheet_uri'","callers":[{"name":"get_stylesheet_uri","file":"theme.php","line":195,"type":"filter","source":"apply_filters('stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri)"}]},"'locale_stylesheet_uri'":{"name":"'locale_stylesheet_uri'","callers":[{"name":"get_locale_stylesheet_uri","file":"theme.php","line":228,"type":"filter","source":"apply_filters('locale_stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri)"}]},"'template'":{"name":"'template'","callers":[{"name":"get_template","file":"theme.php","line":240,"type":"filter","source":"apply_filters('template', get_option('template'))"}]},"'template_directory'":{"name":"'template_directory'","callers":[{"name":"get_template_directory","file":"theme.php","line":256,"type":"filter","source":"apply_filters('template_directory', $template_dir, $template, $theme_root)"}]},"'template_directory_uri'":{"name":"'template_directory_uri'","callers":[{"name":"get_template_directory_uri","file":"theme.php","line":272,"type":"filter","source":"apply_filters('template_directory_uri', $template_dir_uri, $template, $theme_root_uri)"}]},"'theme_root'":{"name":"'theme_root'","callers":[{"name":"get_theme_root","file":"theme.php","line":455,"type":"filter","source":"apply_filters('theme_root', $theme_root)"}]},"'theme_root_uri'":{"name":"'theme_root_uri'","callers":[{"name":"get_theme_root_uri","file":"theme.php","line":495,"type":"filter","source":"apply_filters('theme_root_uri', $theme_root_uri, get_option('siteurl'), $stylesheet_or_template)"}]},"'switch_theme'":{"name":"'switch_theme'","callers":[{"name":"switch_theme","file":"theme.php","line":700,"type":"action","source":"do_action('switch_theme', $new_name, $new_theme)"}]},"'validate_current_theme'":{"name":"'validate_current_theme'","callers":[{"name":"validate_current_theme","file":"theme.php","line":718,"type":"filter","source":"apply_filters('validate_current_theme', true)"}]},"\"theme_mod_{$name}\"":{"name":"\"theme_mod_{$name}\"","callers":[{"name":"get_theme_mod","file":"theme.php","line":780,"type":"filter","source":"apply_filters(\"theme_mod_{$name}\", $mods[$name])"},{"name":"get_theme_mod","file":"theme.php","line":785,"type":"filter","source":"apply_filters(\"theme_mod_{$name}\", $default)"}]},"'current_theme_supports-' . $feature":{"name":"'current_theme_supports-' . $feature","callers":[{"name":"current_theme_supports","file":"theme.php","line":1564,"type":"filter","source":"apply_filters('current_theme_supports-' . $feature, true, $args, $_wp_theme_features[$feature])"}]},"'after_switch_theme'":{"name":"'after_switch_theme'","callers":[{"name":"check_theme_switched","file":"theme.php","line":1613,"type":"action","source":"do_action('after_switch_theme', $old_theme->get('Name'), $old_theme)"},{"name":"check_theme_switched","file":"theme.php","line":1615,"type":"action","source":"do_action('after_switch_theme', $stylesheet)"}]},"'core_version_check_locale'":{"name":"'core_version_check_locale'","callers":[{"name":"wp_version_check","file":"update.php","line":43,"type":"filter","source":"apply_filters('core_version_check_locale', get_locale())"}]},"'wp_get_update_data'":{"name":"'wp_get_update_data'","callers":[{"name":"wp_get_update_data","file":"update.php","line":365,"type":"filter","source":"apply_filters('wp_get_update_data', array('counts' => $counts, 'title' => $update_title), $titles)"}]},"'wp_authenticate'":{"name":"'wp_authenticate'","callers":[{"name":"wp_signon","file":"user.php","line":41,"type":"action_reference","source":"do_action_ref_array('wp_authenticate', array(&$credentials['user_login'], &$credentials['user_password']))"}]},"'secure_signon_cookie'":{"name":"'secure_signon_cookie'","callers":[{"name":"wp_signon","file":"user.php","line":46,"type":"filter","source":"apply_filters('secure_signon_cookie', $secure_cookie, $credentials)"}]},"'wp_login'":{"name":"'wp_login'","callers":[{"name":"wp_signon","file":"user.php","line":64,"type":"action","source":"do_action('wp_login', $user->user_login, $user)"}]},"'wp_authenticate_user'":{"name":"'wp_authenticate_user'","callers":[{"name":"wp_authenticate_username_password","file":"user.php","line":105,"type":"filter","source":"apply_filters('wp_authenticate_user', $user, $password)"}]},"'get_usernumposts'":{"name":"'get_usernumposts'","callers":[{"name":"count_user_posts","file":"user.php","line":159,"type":"filter","source":"apply_filters('get_usernumposts', $count, $userid)"}]},"\"get_user_option_{$option}\"":{"name":"\"get_user_option_{$option}\"","callers":[{"name":"get_user_option","file":"user.php","line":252,"type":"filter","source":"apply_filters(\"get_user_option_{$option}\", $result, $option, $user)"}]},"'pre_user_query'":{"name":"'pre_user_query'","callers":[{"name":"WP_User_Query::prepare_query","file":"user.php","line":529,"type":"action_reference","source":"do_action_ref_array('pre_user_query', array(&$this))"}]},"'found_users_query'":{"name":"'found_users_query'","callers":[{"name":"WP_User_Query::query","file":"user.php","line":550,"type":"filter","source":"apply_filters('found_users_query', 'SELECT FOUND_ROWS()')"}]},"'get_blogs_of_user'":{"name":"'get_blogs_of_user'","callers":[{"name":"get_blogs_of_user","file":"user.php","line":757,"type":"filter","source":"apply_filters('get_blogs_of_user', $blogs, $user_id, $all)"}]},"'wp_dropdown_users'":{"name":"'wp_dropdown_users'","callers":[{"name":"wp_dropdown_users","file":"user.php","line":1076,"type":"filter","source":"apply_filters('wp_dropdown_users', $output)"}]},"\"edit_user_{$field}\"":{"name":"\"edit_user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1123,"type":"filter","source":"apply_filters(\"edit_user_{$field}\", $value, $user_id)"}]},"\"pre_user_{$field}\"":{"name":"\"pre_user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1134,"type":"filter","source":"apply_filters(\"pre_user_{$field}\", $value)"}]},"\"user_{$field}\"":{"name":"\"user_{$field}\"","callers":[{"name":"sanitize_user_field","file":"user.php","line":1141,"type":"filter","source":"apply_filters(\"user_{$field}\", $value, $user_id, $context)"}]},"'validate_username'":{"name":"'validate_username'","callers":[{"name":"validate_username","file":"user.php","line":1233,"type":"filter","source":"apply_filters('validate_username', $valid, $username)"}]},"'pre_user_login'":{"name":"'pre_user_login'","callers":[{"name":"wp_insert_user","file":"user.php","line":1304,"type":"filter","source":"apply_filters('pre_user_login', $user_login)"}]},"'pre_user_nicename'":{"name":"'pre_user_nicename'","callers":[{"name":"wp_insert_user","file":"user.php","line":1317,"type":"filter","source":"apply_filters('pre_user_nicename', $user_nicename)"}]},"'pre_user_url'":{"name":"'pre_user_url'","callers":[{"name":"wp_insert_user","file":"user.php","line":1321,"type":"filter","source":"apply_filters('pre_user_url', $user_url)"}]},"'pre_user_email'":{"name":"'pre_user_email'","callers":[{"name":"wp_insert_user","file":"user.php","line":1325,"type":"filter","source":"apply_filters('pre_user_email', $user_email)"}]},"'pre_user_nickname'":{"name":"'pre_user_nickname'","callers":[{"name":"wp_insert_user","file":"user.php","line":1332,"type":"filter","source":"apply_filters('pre_user_nickname', $nickname)"}]},"'pre_user_first_name'":{"name":"'pre_user_first_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1336,"type":"filter","source":"apply_filters('pre_user_first_name', $first_name)"}]},"'pre_user_last_name'":{"name":"'pre_user_last_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1340,"type":"filter","source":"apply_filters('pre_user_last_name', $last_name)"}]},"'pre_user_display_name'":{"name":"'pre_user_display_name'","callers":[{"name":"wp_insert_user","file":"user.php","line":1355,"type":"filter","source":"apply_filters('pre_user_display_name', $display_name)"}]},"'pre_user_description'":{"name":"'pre_user_description'","callers":[{"name":"wp_insert_user","file":"user.php","line":1359,"type":"filter","source":"apply_filters('pre_user_description', $description)"}]},"'profile_update'":{"name":"'profile_update'","callers":[{"name":"wp_insert_user","file":"user.php","line":1419,"type":"action","source":"do_action('profile_update', $user_id, $old_user_data)"}]},"'user_register'":{"name":"'user_register'","callers":[{"name":"wp_insert_user","file":"user.php","line":1421,"type":"action","source":"do_action('user_register', $user_id)"}]},"'user_contactmethods'":{"name":"'user_contactmethods'","callers":[{"name":"_wp_get_user_contactmethods","file":"user.php","line":1544,"type":"filter","source":"apply_filters('user_contactmethods', $user_contactmethods, $user)"}]},"'use_google_chrome_frame'":{"name":"'use_google_chrome_frame'","callers":[{"name":"__main","file":"vars.php","line":55,"type":"filter","source":"apply_filters('use_google_chrome_frame', is_admin())"}]},"'widget_display_callback'":{"name":"'widget_display_callback'","callers":[{"name":"WP_Widget::display_callback","file":"widgets.php","line":180,"type":"filter","source":"apply_filters('widget_display_callback', $instance, $this, $args)"}]},"'widget_update_callback'":{"name":"'widget_update_callback'","callers":[{"name":"WP_Widget::update_callback","file":"widgets.php","line":235,"type":"filter","source":"apply_filters('widget_update_callback', $instance, $new_instance, $old_instance, $this)"}]},"'widget_form_callback'":{"name":"'widget_form_callback'","callers":[{"name":"WP_Widget::form_callback","file":"widgets.php","line":266,"type":"filter","source":"apply_filters('widget_form_callback', $instance, $this)"}]},"'in_widget_form'":{"name":"'in_widget_form'","callers":[{"name":"WP_Widget::form_callback","file":"widgets.php","line":273,"type":"action_reference","source":"do_action_ref_array('in_widget_form', array(&$this, &$return, $instance))"}]},"'register_sidebar'":{"name":"'register_sidebar'","callers":[{"name":"register_sidebar","file":"widgets.php","line":574,"type":"action","source":"do_action('register_sidebar', $sidebar)"}]},"'wp_register_sidebar_widget'":{"name":"'wp_register_sidebar_widget'","callers":[{"name":"wp_register_sidebar_widget","file":"widgets.php","line":647,"type":"action","source":"do_action('wp_register_sidebar_widget', $widget)"}]},"'wp_unregister_sidebar_widget'":{"name":"'wp_unregister_sidebar_widget'","callers":[{"name":"wp_unregister_sidebar_widget","file":"widgets.php","line":703,"type":"action","source":"do_action('wp_unregister_sidebar_widget', $id)"}]},"'dynamic_sidebar_params'":{"name":"'dynamic_sidebar_params'","callers":[{"name":"dynamic_sidebar","file":"widgets.php","line":897,"type":"filter","source":"apply_filters('dynamic_sidebar_params', $params)"}]},"'dynamic_sidebar'":{"name":"'dynamic_sidebar'","callers":[{"name":"dynamic_sidebar","file":"widgets.php","line":901,"type":"action","source":"do_action('dynamic_sidebar', $wp_registered_widgets[$id])"}]},"'sidebars_widgets'":{"name":"'sidebars_widgets'","callers":[{"name":"wp_get_sidebars_widgets","file":"widgets.php","line":1027,"type":"filter","source":"apply_filters('sidebars_widgets', $sidebars_widgets)"}]},"'the_widget'":{"name":"'the_widget'","callers":[{"name":"the_widget","file":"widgets.php","line":1145,"type":"action","source":"do_action('the_widget', $widget, $instance, $args)"}]},"'query'":{"name":"'query'","callers":[{"name":"wpdb::query","file":"wp-db.php","line":1181,"type":"filter","source":"apply_filters('query', $query)"}]}}} \ No newline at end of file diff --git a/filters.php b/filters.php deleted file mode 100755 index e9c0cfc9a..000000000 --- a/filters.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -define('QP_INCLUDE_BUILTIN', false); -require dirname(__FILE__) . '/library/class-utility.php'; -require dirname(__FILE__) . '/library/class-phpdoc-parser.php'; - -$data = json_decode(file_get_contents('output.json')); -$filters = json_decode(file_get_contents('filters.json')); -?> -<html> -<head> - <link href="http://localhost/work/Renku/cosmonaut/store/content/themes/roscosmos/bootstrap/css/bootstrap.css" rel="stylesheet" /> -</head> -<body> - <div class="container"> -<?php - -function esc_id($name) { - $name = str_replace(array('"', "'"), '', $name); - $name = str_replace(array('{', '}', '$', ' ', '.', '[', ']'), '_', $name); - return $name; -} - -$data->__main->doc = 'This is a placeholder for the global scope.'; -$filters = (array) $filters->filters; - -echo '<h1>' . count($filters) . ' actions and filters</h1>'; - -foreach ($filters as $name => $filter): -?> - <article id="<?php echo esc_id($name) ?>" class="row"> - <h2><?php echo $name ?></h2> - <p><?php echo $filter->callers[0]->type ?></p> - <div class="span12"> - <h3>Used by</h3> - <ul> -<?php - foreach ($filter->callers as $caller) { - echo '<li><a href="display.php#' . $caller->name .'">' . $caller->name . '()</a>: <code>' . htmlspecialchars($caller->source) .'</code></li>'; - } -?> - </ul> - </div> - </article> -<?php -endforeach; -?> \ No newline at end of file diff --git a/output.json b/output.json deleted file mode 100755 index 4f47297a4..000000000 --- a/output.json +++ /dev/null @@ -1 +0,0 @@ -{"_wp_admin_bar_init":{"doc":"\/**\n * Instantiate the admin bar object and set it up as a global for access elsewhere.\n *\n * To hide the admin bar, you're looking in the wrong place. Unhooking this function will not\n * properly remove the admin bar. For that, use show_admin_bar(false) or the show_admin_bar filter.\n *\n * @since 3.1.0\n * @access private\n * @return bool Whether the admin bar was successfully initialized.\n *\/","file":"admin-bar.php","line":18,"missingDoc":false,"filters":["'wp_admin_bar_class'"],"uses":{"is_admin_bar_showing":[21],"class_exists":[29],"initialize":[34],"add_menus":[35]},"used_by":[]},"is_admin_bar_showing":{"doc":"\/**\n * Determine whether the admin bar should be showing.\n *\n * @since 3.1.0\n *\n * @return bool Whether the admin bar should be showing.\n *\/","file":"admin-bar.php","line":729,"missingDoc":false,"filters":["'show_admin_bar'"],"uses":{"defined":[733,733,733],"is_admin":[737],"_get_admin_bar_pref":[744],"is_user_logged_in":[741]},"used_by":{"_wp_admin_bar_init":[21],"wp_admin_bar_render":[55],"get_body_class":[513]}},"__main":{"doc":"","file":"","line":0,"missingDoc":false,"filters":["'atom_ns'","'atom_comments_ns'","'comments_atom_head'","'the_title_rss'","'comment_atom_entry'","'atom_ns'","'atom_head'","'atom_author'","'atom_entry'","'rdf_ns'","'rss_update_period'","'rss_update_frequency'","'rdf_header'","'rdf_item'","'rss_head'","'rss_item'","'rss2_ns'","'rss2_comments_ns'","'rss_update_period'","'rss_update_frequency'","'commentsrss2_head'","'the_title_rss'","'commentrss2_item'","'rss2_ns'","'rss_update_period'","'rss_update_frequency'","'rss2_head'","'rss2_item'","'load_feed_engine'","'template_redirect'","'exit_on_http_head'","'do_robots'","'template_include'","'comment_form'","'comment_form'","'use_google_chrome_frame'"],"uses":{"add_action":[39,66,67,392,506,536,183,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,218,221,222,223,227,232,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,263,264,265,268,269,272,273,276,282,283,1201,1282,1283,1284,1285,1392,1393,1300,151,18,19,20,21,25,26,29,32,37,38,39,40,41,48,51,1777,165,1562,870,874,121,582,1420,1601,1638,1671,434,435,437,438,439,440,441,443,444,445,446,447,449],"class_exists":[3,836,2,2,8,6,182,10,13,19,11,105,145,185,200,12,230,11],"define":[62,67,72,77,82,87,92,108,113,119,124,130,135,141,147,153,159,165,171,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,368,373,378,383,388,393,398,403,408,413,418,423,428,433,438,443,448,453,458,463,10,11,12,13,14,15,16,17,18,19,20,22,23,24,11,12,13,14,15,45,11,12,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,26,27,28,15,20,25,30,35],"version_compare":[38],"function_exists":[648,32,10,16,35,64,77,122,37,60,33,18,39,56,73,98,115,136,9,43,60,111,125,148,177,460,492,504,565,592,639,688,718,736,794,822,852,881,900,928,979,1084,1167,1188,1225,1243,1275,1296,1384,1401,1428,1478,1507,1554,1578,1677,389,821,865,900,15],"spl_autoload_register":[41],"gmdate":[119,16,26,54,58],"_deprecated_file":[6,7,7,8,18,10,10,10,10,10],"basename":[6,7,7,8,18,10,10,10,10,13,10,10,10,10,10,10],"add_filter":[17,18,19,26,27,29,34,40,42,47,48,49,54,56,62,63,64,70,71,73,78,83,87,88,92,97,98,99,104,105,109,110,115,116,117,118,123,127,128,131,132,133,135,136,137,138,139,140,142,143,144,145,146,147,149,150,151,152,153,154,156,158,160,163,164,165,166,167,168,169,170,171,172,173,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,194,279,286,289,17,24,33,36,44,45,46,47,54,56,58,59,66,1836,1865,494,5449,5468,5482,5506,5522,871,872,875,335,29,71],"is_admin":[24,38,55,69,72,20,55],"defined":[231,3,44,55,57,17,84,83,95,117,6,25,431],"header":[8,8,8,8,8,8,13,14,15,16,17,18,19,10,24,25,26,27,32,41,43,47,50,56,57,58,91,98,56],"feed_content_type":[8,8,8,8,8,8],"get_option":[8,9,8,11,45,8,11,45,8,11,8,10,8,11,43,15,14,16,25,25,69,68,64],"bloginfo_rss":[13,25,30,34,38,38,39,40,57,75,80,15,16,19,20,24,24,39,50,21,22,23,24,14,15,16,19,29,30,24,26,27,29],"printf":[19,21,23,52,54,22,24,26,44,46,232,14,38,56,67,71,118,26,65,72,87,17,19,20,32,35,38,41,44,47],"ent2ncr":[19,21,23,52,54,22,24,26,44,46,54],"__":[19,21,23,52,54,22,24,26,44,46,54,232,35,121,122,7,7,10,10,14,38,56,67,71,118,10,10,58,58,65,72,87,10,10,17,19,19,19,20,10,10,10,10,32,35,35,38,38,41,44,47,55,63],"get_the_title_rss":[19,22],"is_search":[20,33,23,28,43,27],"get_bloginfo_rss":[21,23,24,26],"get_search_query":[21,34,24,44],"get_wp_title_rss":[23,26],"is_singular":[18,29,49,21,41,36],"mysql2date":[27,66,67,22,25,42,17,31,51,28,38],"get_lastcommentmodified":[27,31],"comments_link_feed":[30,37],"esc_url":[31,32,51,54,35],"get_post_comments_feed_link":[31,32,51,54,35],"home_url":[34,232,45],"get_search_comments_feed_link":[35,36],"have_comments":[44,44,36,36,25],"the_comment":[44,36],"get_post":[45,37,46],"get_the_title":[50,42,27],"get_comment_author_rss":[52,54,44,46,50],"comment_link":[57,69,71,49],"comment_author_rss":[60],"get_comment_author_url":[61,61],"comment_guid":[65,80,52],"get_comment_time":[66,67,51,56],"get_the_password_form":[69,55,48],"comment_text":[71,58,55],"post_password_required":[68,53,47,16],"the_guid":[75,40,42],"the_permalink_rss":[75,39,46,50,33,39,41,26,29,36],"get_comment":[77],"get_comment_link":[80],"wp_title_rss":[19,22,14,24],"get_lastpostmodified":[22,25,17,28],"bloginfo":[25,15,16,18,16,16,18,20,21,29,29,31,45,46],"self_link":[26,28,25],"have_posts":[29,32,38,22,33,31,30],"the_post":[29,32,38,22,33,31],"the_author":[32,43,39],"get_the_author_meta":[33],"the_author_meta":[34],"html_type_rss":[38,44,46],"the_title_rss":[38,40,24,35],"get_post_modified_time":[41],"get_post_time":[42,38],"the_category_rss":[43,44,40],"the_excerpt_rss":[44,46,48,25,44,46,51],"the_content_feed":[46,49],"atom_enclosure":[48],"get_comments_number":[50,51,52,55,26,27],"rewind_posts":[38],"is_single":[29,34,27],"comment_text_rss":[57],"get_the_content_feed":[47],"strlen":[48,63,66],"rss_enclosure":[56],"wp_mce_translation":[564],"error_reporting":[10,7,19],"dirname":[13,14,15,16,19,9,12,12,10,11,10,10,17,17,13,15,17],"getRequestParam":[25],"fopen":[38],"feof":[42,78],"fread":[43],"fclose":[45,81],"file_get_contents":[48],"parse_url":[57],"fsockopen":[71],"intval":[71],"fputs":[74],"fgets":[79],"explode":[84],"decode":[93],"call_user_func_array":[98],"encode":[110],"get_bloginfo":[10,17,19,19,35,35,38,38,41,41,44,44,47,47],"language_attributes":[13,13],"_e":[16,162,163,164,165,171,172,173,174,175,179,180,181,182,183,184,185,186,187,191,192,195,195,195,195,196,196,197,197,198,198,200,200,201,201,202,202,203,203,204,204,207,209,209,209,209,210,210,211,211,212,212,213,213,214,214,215,215,216,216,217,217,220,222,223,224,229,231,233,234,33,35,62,66,75,80,85,90,103,108,114,17,49,72,77,77,80,80,83,21,57,69,73,74],"wp_admin_css":[19],"is_rtl":[140],"esc_attr_e":[162,163,164,165,237,245,245,98,72,91,73,74,75],"esc_attr__":[232],"time":[26,58],"get_file":[35,36,30],"stripos":[30,53,54,61,76],"array_map":[450],"wp_kses_array_lc":[452,453],"add_shortcode":[609,610,658],"remove_filter":[62,63,33],"is_multisite":[14],"ms_file_constants":[17],"status_header":[22,28,77],"rtrim":[26,39],"str_replace":[26,47,45,89],"is_file":[27,72],"wp_check_filetype":[32],"mime_content_type":[34],"substr":[39,28,29,30,31,32,27,42,41,64,66,68,70,36],"strrpos":[39],"filesize":[43],"strpos":[42,26,64,68,67,70,69,63,65,65,67,67,69,71,71,51,87,87,93,93,99],"filemtime":[54],"md5":[55],"stripslashes":[61],"trim":[66,29],"strtotime":[68,71],"readfile":[82],"ms_subdomain_constants":[21],"addslashes":[25],"wp_load_translations_early":[34,120],"wp_die":[35,122],"preg_replace":[44,46,30],"wpmu_current_site":[48],"get_var":[50,62,121],"prepare":[50,60,62],"wp_cache_get":[53,74],"get_blog_details":[55,76,101],"wp_cache_set":[57,78],"get_row":[60],"htmlspecialchars":[66],"in_array":[72],"is_subdomain_install":[52,83],"is_object":[83],"ms_not_installed":[104],"get_current_site_name":[114],"set_prefix":[126],"set_blog_id":[127],"get_blog_prefix":[128],"wp_start_object_cache":[133],"ms_upload_constants":[136],"_deprecated_function":[95,112,133,169],"ini_set":[14],"is_feed":[17],"do_feed":[18],"is_trackback":[20],"is_robots":[14],"get_search_template":[28],"is_tax":[29],"get_taxonomy_template":[29],"is_front_page":[30],"get_front_page_template":[30],"is_home":[31,66],"get_home_template":[31],"is_attachment":[32],"get_attachment_template":[32],"get_single_template":[34],"is_page":[35,66],"get_page_template":[35],"is_category":[36,31,26],"get_category_template":[36],"is_tag":[37],"get_tag_template":[37],"is_author":[38],"get_author_template":[38],"is_date":[39],"get_date_template":[39],"is_archive":[40],"get_archive_template":[40],"is_comments_popup":[41],"get_comments_popup_template":[41],"is_paged":[42,27],"get_paged_template":[42],"get_index_template":[44],"is_404":[27,30,26],"get_404_template":[27],"sprintf":[10,10,10,10,10,10,10,10,10,10],"the_title":[14],"get_trackback_url":[38],"pings_open":[37],"wp_get_current_commenter":[43],"extract":[44],"get_approved_comments":[45],"comment_ID":[54],"comment_type":[56],"get_comment_author_link":[56],"get_comment_date":[56],"get_comment_ID":[56],"allowed_tags":[67,87],"get_edit_user_link":[71,72],"wp_logout_url":[71,72],"get_permalink":[71,65,72],"esc_attr":[74,79,84,97,76,79,82],"comments_open":[65,44,54],"timer_stop":[118,20],"_n":[26],"number_format_i18n":[27],"previous_comments_link":[30,39],"next_comments_link":[31,40],"wp_list_comments":[35],"comment_form_title":[58],"cancel_comment_reply_link":[61],"wp_login_url":[65],"is_user_logged_in":[70,64],"comment_id_fields":[92],"get_num_queries":[20],"wp_footer":[28],"wp_title":[18],"wp_enqueue_script":[36],"wp_head":[38],"body_class":[40],"get_search_form":[17],"single_cat_title":[32],"is_day":[34,26],"get_the_time":[35,38,41],"is_month":[37,26],"is_year":[40,27],"esc_html":[44],"wp_list_pages":[55],"wp_get_archives":[59],"wp_list_categories":[63],"wp_list_bookmarks":[67],"wp_register":[71],"wp_loginout":[72],"wp_meta":[76],"dynamic_sidebar":[15],"is_main_site":[431],"is_network_admin":[431,22],"preg_match":[23,25,27,34,40],"is_user_admin":[24],"strtolower":[35,41]},"used_by":[]},"add_action":{"doc":"\/**\n * Hooks a function on to a specific action.\n *\n * Actions are the hooks that the WordPress core launches at specific points\n * during execution, or when specific events occur. Plugins can specify that\n * one or more of its PHP functions are executed at these points, using the\n * Action API.\n *\n * @uses add_filter() Adds an action. Parameter list and functionality are the same.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The name of the action to which the $function_to_add is hooked.\n * @param callback $function_to_add The name of the function you wish to be called.\n * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.\n * @param int $accepted_args optional. The number of arguments the function accept (default 1).\n *\/","file":"plugin.php","line":333,"missingDoc":false,"filters":[],"uses":{"add_filter":[334]},"used_by":{"__main":[39,66,67,392,506,536,183,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,218,221,222,223,227,232,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,263,264,265,268,269,272,273,276,282,283,1201,1282,1283,1284,1285,1392,1393,1300,151,18,19,20,21,25,26,29,32,37,38,39,40,41,48,51,1777,165,1562,870,874,121,582,1420,1601,1638,1671,434,435,437,438,439,440,441,443,444,445,446,447,449],"wp_admin_bar_appearance_menu":[595],"WP_Admin_Bar::initialize":[44,46,56],"WP_Admin_Bar::add_menus":[469,470,471,474,475,476,477,481,482,484,486],"WP_Customize_Image_Control::__construct":[488],"WP_Customize_Manager::__construct":[37,38,41,51,53,54,55],"WP_Customize_Manager::setup_theme":[128],"WP_Customize_Manager::customize_preview_init":[333,334,335,336],"_WP_Editors::editor_settings":[160,161,163,164],"WP_Embed::__construct":[29,32],"WP_Scripts::__construct":[35],"WP_Widget_Recent_Posts::__construct":[539,540,541],"WP_Widget_Recent_Comments::__construct":[640,642,643],"wp_maybe_load_widgets":[2698],"add_thickbox":[2121],"wp_print_media_templates":[71],"wp_enqueue_media":[1547,1548],"register_activation_hook":[624],"register_deactivation_hook":[649],"register_post_type":[1337,1344],"wp_get_post_autosave":[4997],"add_feed":[93],"_custom_header_background_just_in_time":[1399,1412],"WP_Widget_Factory::WP_Widget_Factory":[320]}},"wp_admin_bar_render":{"doc":"\/**\n * Render the admin bar to the page based on the $wp_admin_bar->menu member var.\n * This is called very late on the footer actions so that it will render after anything else being\n * added to the footer.\n *\n * It includes the action \"admin_bar_menu\" which should be used to hook in and\n * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point,\n * right before the admin bar is rendered. This also gives you access to the $post global, among others.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":52,"missingDoc":false,"filters":["'admin_bar_menu'","'wp_before_admin_bar_render'","'wp_after_admin_bar_render'"],"uses":{"is_admin_bar_showing":[55],"is_object":[55],"render":[62]},"used_by":[]},"wp_admin_bar_wp_menu":{"doc":"\/**\n * Add the WordPress logo menu.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":74,"missingDoc":false,"filters":[],"uses":{"add_menu":[75,86,95,103,111,119],"self_admin_url":[78,90],"__":[80,89,98,99,106,107,114,115,122,123],"is_user_logged_in":[84]},"used_by":[]},"self_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for either the current blog or the network depending on context.\n *\n * @package WordPress\n * @since 3.1.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2207,"missingDoc":false,"filters":[],"uses":{"network_admin_url":[2209],"is_user_admin":[2210],"user_admin_url":[2211],"admin_url":[2213],"is_network_admin":[2208]},"used_by":{"wp_admin_bar_wp_menu":[78,90],"get_edit_user_link":[1077]}},"__":{"doc":"\/**\n * Retrieves the translation of $text. If there is no translation, or\n * the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @since 2.1.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":96,"missingDoc":false,"filters":[],"uses":{"translate":[97]},"used_by":{"wp_admin_bar_wp_menu":[80,89,98,99,106,107,114,115,122,123],"wp_admin_bar_my_account_item":[141,151],"wp_admin_bar_my_account_menu":[192,198],"wp_admin_bar_site_menu":[225,227,247,255,265],"wp_admin_bar_my_sites_menu":[292,305,312,318,324,330,362,370,379,387],"wp_admin_bar_shortlink_menu":[411],"wp_admin_bar_appearance_menu":[580,589,598,601,604,607],"wp_admin_bar_search_menu":[646],"AtomParser::parse":[133],"the_author":[55],"get_the_author_link":[137],"the_author_posts_link":[204],"wp_list_authors":[318],"_walk_bookmarks":[81],"wp_list_bookmarks":[205],"WP_User::__isset":[590],"WP_User::__get":[610],"WP_User::__set":[636],"WP_User::has_cap":[920],"get_category_parents":[59],"get_the_category_list":[161,174,177,184,197,200,207],"wp_list_categories":[414,422],"Walker_Category::start_el":[830,845],"the_tags":[1017],"WP_Http::request":[122,125,145],"WP_Http::_dispatch_request":[244],"WP_Http_Fsockopen::request":[742,782],"WP_Http_Streams::request":[866,924,943,966],"WP_Http_Curl::request":[1123,1164,1183],"WP_Admin_Bar::add_node":[96],"WP_Customize_Control::render_content":[292],"WP_Customize_Color_Control::__construct":[344],"WP_Customize_Image_Control::__construct":[480,484,485],"WP_Customize_Background_Image_Control::__construct":[656,663],"WP_Customize_Header_Image_Control::__construct":[729,739,740,741,742],"WP_Customize_Header_Image_Control::prepare_control":[768],"WP_Customize_Manager::wp_die":[83],"WP_Customize_Manager::register_controls":[717,728,739,746,762,768,783,791,811,833,837,838,839,840,850,854,855,856,866,870,871,891,894,898,926,929,940,944,945,956,968],"_WP_Editors::editor":[115],"_WP_Editors::editor_settings":[295],"_WP_Editors::wp_fullscreen_html":[664,664,682,683,685,686,688,689,691,692,694,727,736],"_WP_Editors::wp_link_query":[788],"WP_Image_Editor_GD::load":[87,94,98],"WP_Image_Editor_GD::resize":[151],"WP_Image_Editor_GD::_resize":[157,169],"WP_Image_Editor_GD::crop":[249],"WP_Image_Editor_GD::rotate":[273],"WP_Image_Editor_GD::flip":[303],"WP_Image_Editor_GD::_save":[335,343,347,350],"WP_Image_Editor_Imagick::load":[120,129],"WP_Image_Editor_Imagick::update_size":[193],"WP_Image_Editor_Imagick::resize":[223],"WP_Theme::__construct":[208,210,214,218,236,255,267,271],"WP_Theme::markup_header":[656,663],"wp_xmlrpc_server::login":[181,188],"wp_xmlrpc_server::initialise_blog_option_info":[311,316,321,326,331,336,341,346,351,356,363,368,373,378,383,388,393,398,403,408,413,418,423,428,433],"wp_xmlrpc_server::minimum_args":[514],"wp_xmlrpc_server::_insert_post":[1003,1009,1011,1013,1016,1025,1030,1039,1044,1049,1082,1087,1100,1121,1124,1131,1144,1147,1166,1173,1217],"wp_xmlrpc_server::wp_editPost":[1258,1263],"wp_xmlrpc_server::wp_deletePost":[1318,1322,1327],"wp_xmlrpc_server::wp_getPost":[1400,1404],"wp_xmlrpc_server::wp_getPosts":[1459,1465],"wp_xmlrpc_server::wp_newTerm":[1545,1550,1559,1563,1572,1589],"wp_xmlrpc_server::wp_editTerm":[1633,1638,1651,1657,1662,1671,1688],"wp_xmlrpc_server::wp_deleteTerm":[1725,1730,1738,1746],"wp_xmlrpc_server::wp_getTerm":[1792,1797,1805],"wp_xmlrpc_server::wp_getTerms":[1845,1850],"wp_xmlrpc_server::wp_getTaxonomy":[1924,1929],"wp_xmlrpc_server::wp_getUser":[2037,2042],"wp_xmlrpc_server::wp_getUsers":[2090,2106],"wp_xmlrpc_server::wp_getProfile":[2157],"wp_xmlrpc_server::wp_editProfile":[2200,2234],"wp_xmlrpc_server::wp_getPage":[2265,2268,2278],"wp_xmlrpc_server::wp_getPages":[2306],"wp_xmlrpc_server::wp_deletePage":[2382,2386,2391],"wp_xmlrpc_server::wp_editPage":[2423,2427],"wp_xmlrpc_server::wp_getPageList":[2466],"wp_xmlrpc_server::wp_getAuthors":[2517],"wp_xmlrpc_server::wp_getTags":[2552],"wp_xmlrpc_server::wp_newCategory":[2597,2625,2627],"wp_xmlrpc_server::wp_deleteCategory":[2657],"wp_xmlrpc_server::wp_suggestCategories":[2688],"wp_xmlrpc_server::wp_getComment":[2724,2729],"wp_xmlrpc_server::wp_getComments":[2765],"wp_xmlrpc_server::wp_deleteComment":[2825,2828,2831],"wp_xmlrpc_server::wp_editComment":[2880,2883,2886,2895,2927],"wp_xmlrpc_server::wp_newComment":[2960,2973,2976,3002,3004],"wp_xmlrpc_server::wp_getCommentStatusList":[3040],"wp_xmlrpc_server::wp_getCommentCount":[3067],"wp_xmlrpc_server::wp_getPostStatusList":[3099],"wp_xmlrpc_server::wp_getPageStatusList":[3125],"wp_xmlrpc_server::wp_getPageTemplates":[3151],"wp_xmlrpc_server::wp_setOptions":[3229],"wp_xmlrpc_server::wp_getMediaItem":[3278,3283],"wp_xmlrpc_server::wp_getMediaLibrary":[3323],"wp_xmlrpc_server::wp_getPostFormats":[3364],"wp_xmlrpc_server::wp_getPostType":[3432,3437],"wp_xmlrpc_server::wp_getRevisions":[3532,3535,3539],"wp_xmlrpc_server::wp_restoreRevision":[3593,3596,3599,3602,3606],"wp_xmlrpc_server::blogger_getUserInfo":[3704],"wp_xmlrpc_server::blogger_getPost":[3740,3743],"wp_xmlrpc_server::blogger_getRecentPosts":[3792],"wp_xmlrpc_server::blogger_getTemplate":[3831],"wp_xmlrpc_server::blogger_setTemplate":[3841],"wp_xmlrpc_server::blogger_newPost":[3869,3889],"wp_xmlrpc_server::blogger_editPost":[3924,3929,3934,3945],"wp_xmlrpc_server::blogger_deletePost":[3978,3981,3986],"wp_xmlrpc_server::mw_newPost":[4055,4066,4070,4079,4084,4092,4121,4125,4128,4133,4275,4296],"wp_xmlrpc_server::mw_editPost":[4373,4376,4380,4384,4390,4425,4429,4432,4535,4537,4573,4592],"wp_xmlrpc_server::mw_getPost":[4634,4637,4733],"wp_xmlrpc_server::mw_getCategories":[4872],"wp_xmlrpc_server::mw_newMediaObject":[4925,4952,4961],"wp_xmlrpc_server::mt_getRecentPostTitles":[5019],"wp_xmlrpc_server::mt_getCategoryList":[5071],"wp_xmlrpc_server::mt_getPostCategories":[5109,5112],"wp_xmlrpc_server::mt_setPostCategories":[5155,5158],"wp_xmlrpc_server::mt_getTrackbackPings":[5221],"wp_xmlrpc_server::mt_publishPost":[5267,5270],"wp_xmlrpc_server::pingback_ping":[5315,5355,5362,5365,5369,5373,5381,5393,5429,5450],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5476,5483],"get_comment_author":[30],"comments_number":[580,582,584],"comment_type":[679,680],"trackback_url":[726],"comments_popup_link":[973,974,975,976,986,1013],"get_comment_reply_link":[1038,1039],"get_post_reply_link":[1099,1100],"get_cancel_comment_reply_link":[1139],"comment_form_title":[1196,1197],"Walker_Comment::start_el":[1354,1364,1364],"comment_form":[1524,1526,1528,1532,1536,1537,1538,1539,1542,1543,1544,1545],"get_comment_statuses":[420],"wp_allow_comment":[679,681],"check_comment_flood_db":[738,740],"wp_set_comment_status":[1462],"wp_clear_scheduled_hook":[159],"wp_get_schedules":[321,322,323],"WP_Widget_Pages::__construct":[17,18],"WP_Widget_Pages::widget":[24],"WP_Widget_Links::__construct":[93,94],"WP_Widget_Search::__construct":[193,194],"WP_Widget_Archives::__construct":[236,237],"WP_Widget_Archives::widget":[244,252],"WP_Widget_Meta::__construct":[301,302],"WP_Widget_Meta::widget":[307,316,317,318],"WP_Widget_Calendar::__construct":[352,353],"WP_Widget_Text::__construct":[393,395],"WP_Widget_Categories::__construct":[443,444],"WP_Widget_Categories::widget":[450,462],"WP_Widget_Recent_Posts::__construct":[535,536],"WP_Widget_Recent_Posts::widget":[561],"WP_Widget_Recent_Comments::__construct":[635,636],"WP_Widget_Recent_Comments::widget":[677],"WP_Widget_RSS::__construct":[739,741],"WP_Widget_RSS::widget":[777],"wp_widget_rss_output":[831,847,861],"wp_widget_rss_form":[939],"WP_Widget_Tag_Cloud::__construct":[1030,1031],"WP_Widget_Tag_Cloud::widget":[1041],"WP_Nav_Menu_Widget::__construct":[1097,1098],"WP_Nav_Menu_Widget::form":[1135],"start_wp":[62],"dropdown_cats":[707],"get_links":[987],"get_the_attachment_link":[1898],"get_boundary_post_rel_link":[2732,2732],"wp_admin_bar_dashboard_view_site_menu":[2847,2849,2851],"wp_explain_nonce":[3175],"wp_load_image":[3225,3228,3235],"__main":[19,21,23,52,54,22,24,26,44,46,54,232,35,121,122,7,7,10,10,14,38,56,67,71,118,10,10,58,58,65,72,87,10,10,17,19,19,19,20,10,10,10,10,32,35,35,38,38,41,44,47,55,63],"wp_trim_words":[2177],"sanitize_option":[2765,2852,2862,2903],"wp_sprintf_l":[3056,3058,3060],"do_feed":[1009],"is_blog_installed":[1153],"wp_upload_dir":[1623],"wp_upload_bits":[1720,1724,1746,1752],"wp_nonce_ays":[2019,2021,2022,2024,2026],"_default_wp_die_handler":[2100,2112],"wp_widgets_add_menu":[2713],"_deprecated_function":[2861,2863],"_deprecated_file":[2901,2903],"_deprecated_argument":[2945,2947],"_doing_it_wrong":[2979,2980,2981],"wp_timezone_choice":[3376,3425],"wp_print_scripts":[29],"wp_register_script":[56],"wp_localize_script":[90],"wp_deregister_script":[109],"wp_enqueue_script":[129],"wp_dequeue_script":[153],"wp_script_is":[179],"wp_print_styles":[30],"wp_add_inline_style":[57],"wp_register_style":[85],"wp_deregister_style":[106],"wp_enqueue_style":[137],"wp_dequeue_style":[159],"wp_style_is":[186],"get_search_form":[162],"wp_loginout":[189,191],"wp_login_form":[261,262,263,264],"wp_register":[341,345],"get_bloginfo":[410,410],"wp_title":[580,585],"wp_get_archives":[937],"get_calendar":[1172,1180],"feed_links":[1602,1604],"feed_links_extra":[1625,1627,1629,1631,1633,1635],"paginate_links":[1930,1931,1978],"wp_mce_translation":[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,81,82,83,84,85,89,90,91,92,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95,95,95,95,95,96,96,96,96,96,96,96,100,104,108,109,113,114,115,116,117,121,122,126,130,131,135,139,143,144,148,152,156,157,158,159,160,161,165,169,170,171,172,173,177,178,179,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,206,210,214,215,219,223,227,231,232,233,234,235,236,237,238,239,240,244,248,249,250,251,252,253,254,255,256,257,261,265,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,501,502,503,504,505,506,507,508,509,510,511,512,513,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],"post_comments_feed_link":[514],"edit_term_link":[725],"edit_post_link":[932],"edit_comment_link":[1007],"edit_bookmark_link":[1048],"get_adjacent_post":[1149],"get_adjacent_post_rel_link":[1221,1221],"adjacent_post_link":[1389,1389],"get_next_posts_link":[1535],"get_previous_posts_link":[1606],"get_posts_nav_link":[1642,1643],"get_next_comments_link":[1744],"get_previous_comments_link":[1781],"the_shortlink":[2427],"wp_check_php_mysql_versions":[108,113],"wp_set_wpdb_vars":[370],"wp_not_installed":[428],"WP_Locale::init":[99,100,101,102,103,104,105,109,109,110,110,111,111,112,112,113,113,114,114,115,115,122,122,123,123,124,124,125,125,126,126,127,127,128,128,131,132,133,134,135,136,137,138,139,140,141,142,146,146,147,147,148,148,149,149,150,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,164,165,166,167,173,177],"wp_print_media_templates":[93,99,319,320,321,322],"wp_get_image_editor":[1187],"wp_plupload_default_settings":[1264],"wp_prepare_attachment_for_js":[1365,1366,1367,1368],"wp_enqueue_media":[1490,1491,1492,1493,1494,1499,1500,1503,1504,1507,1508,1509,1510,1511,1512,1513,1513,1514,1514,1515,1518,1521,1522,1525,1526,1527,1528,1529,1530,1531,1532],"ms_subdomain_constants":[126,128],"add_user_to_blog":[185],"remove_user_from_blog":[247],"create_empty_blog":[290,297],"wpmu_validate_user_signup":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"wpmu_validate_blog_signup":[562,565,568,571,574,578,584,591,602,606,617],"wpmu_signup_blog_notification":[740,750],"wpmu_signup_user_notification":[793,801],"wpmu_activate_signup":[837,841,843,859,867],"wpmu_create_blog":[968,974],"newblog_notify_siteadmin":[1027,1034],"newuser_notify_siteadmin":[1062,1068],"install_blog":[1142,1142],"wpmu_welcome_notification":[1222,1258],"wpmu_welcome_user_notification":[1306],"upload_is_file_too_big":[1610],"signup_nonce_check":[1641],"maybe_add_existing_user_to_blog":[1686,1688,1688],"welcome_user_msg_filter":[1849],"ms_site_check":[89,96,103],"wpmu_current_site":[219,221],"ms_not_installed":[237,241,242,244,246,247,248,249],"wp_update_nav_menu_object":[226,233],"wp_update_nav_menu_item":[275],"wp_setup_nav_menu_item":[612],"wp_protect_special_option":[109],"wp_authenticate":[479],"check_admin_referer":[808],"wp_notify_postauthor":[1019,1021,1022,1023,1024,1025,1026,1028,1030,1032,1033,1034,1035,1037,1039,1041,1042,1043,1044,1046,1049,1051,1053,1054],"wp_notify_moderator":[1118,1120,1121,1122,1125,1127,1128,1129,1132,1134,1135,1136,1137,1138,1142,1144,1146,1147,1153],"wp_password_change_notification":[1179,1183],"wp_new_user_notification":[1207,1208,1209,1211,1216,1217,1220],"register_uninstall_hook":[679],"get_the_title":[110,113],"get_the_content":[186],"get_the_excerpt":[267],"wp_link_pages":[633,635,636],"wp_list_pages":[818],"wp_page_menu":[899],"wp_get_attachment_link":[1166],"get_the_password_form":[1226,1227],"wp_post_revision_title":[1306,1308],"wp_list_post_revisions":[1401],"create_initial_post_types":[58,59,80,81,98,99],"set_post_format":[808],"get_post_statuses":[866,867,868,869],"get_page_statuses":[887,888,889],"register_post_type":[1238],"get_post_type_labels":[1499,1499,1500,1500,1501,1501,1502,1502,1503,1503,1504,1504,1505,1505,1506,1507,1507],"get_post_mime_types":[2194,2194,2195,2195,2196,2196],"wp_get_recent_posts":[2633],"wp_insert_post":[2731,2797,2872,2888,2935],"_wp_post_revision_fields":[4881,4882,4883],"_wp_put_post_revision":[5076],"_show_post_preview":[5251],"is_archive":[143],"is_post_type_archive":[164],"is_attachment":[184],"is_author":[208],"is_category":[232],"is_tag":[256],"is_tax":[285],"is_comments_popup":[305],"is_date":[325],"is_day":[345],"is_feed":[366],"is_comment_feed":[386],"is_front_page":[416],"is_home":[445],"is_month":[465],"is_page":[492],"is_paged":[512],"is_preview":[532],"is_robots":[552],"is_search":[572],"is_single":[601],"is_singular":[628],"is_time":[648],"is_trackback":[668],"is_year":[688],"is_404":[708],"WP_Query::get_posts":[1958],"wp_default_scripts":[71,78,79,80,81,82,83,84,85,86,87,88,89,100,101,106,186,187,188,189,190,191,204,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,274,275,276,279,280,291,292,293,294,295,318,319,320,321,322,323,326,348,349,356,357,366,367,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,402,416,417,418,424,429,430,438,439,440,441,452,457,458,459,460,467,468],"wp_just_in_time_script_localization":[579,580],"create_initial_taxonomies":[68,69,81,82,83,85,86,87,88,89],"register_taxonomy":[335],"get_taxonomy_labels":[429,429,430,431,431,432,433,434,434,435,435,436,436,437,437,438,438,439,440,441],"get_objects_in_term":[518],"get_term":[875,880],"get_term_children":[1009],"get_terms":[1197],"wp_get_object_terms":[1901],"wp_insert_term":[2045,2052,2055,2093,2097,2104,2108,2114],"wp_set_object_terms":[2176,2238],"wp_update_term":[2353,2379,2412],"get_term_link":[3002],"is_object_in_term":[3163],"wp_get_update_data":[357],"wp_authenticate_username_password":[79,82,90,95,101,110],"wp_authenticate_cookie":[135],"wp_insert_user":[1310,1313,1328],"wp_update_user":[1456],"_wp_get_user_contactmethods":[1540,1541,1542],"WP_Widget::form":[67],"register_sidebars":[488,490],"register_sidebar":[558],"wpdb::select":[846],"wpdb::print_error":[1029,1031],"wpdb::db_connect":[1145],"wpdb::check_database_version":[1652]}},"is_user_logged_in":{"doc":"\/**\n * Checks if the current visitor is a logged in user.\n *\n * @since 2.0.0\n *\n * @return bool True if user is logged in, false if not logged in.\n *\/","file":"pluggable.php","line":726,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[727],"exists":[729]},"used_by":{"wp_admin_bar_wp_menu":[84],"wp_admin_bar_site_menu":[212],"wp_admin_bar_my_sites_menu":[283],"is_admin_bar_showing":[741],"WP_Admin_Bar::initialize":[30],"WP_Customize_Manager::setup_theme":[114],"WP::send_headers":[324,329],"comment_form":[1561,1555],"wp_loginout":[188],"wp_register":[339],"user_can_richedit":[1757],"get_body_class":[510],"wp_count_posts":[2129],"get_posts_by_author_sql":[4501],"WP_Query::get_posts":[2203,2504,2704],"__main":[70,64]}},"wp_admin_bar_my_account_item":{"doc":"\/**\n * Add the \"My Account\" item.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":132,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[133],"wp_get_current_user":[134],"get_edit_profile_url":[135],"get_avatar":[140],"sprintf":[141],"__":[141,151],"add_menu":[144]},"used_by":[]},"get_current_user_id":{"doc":"\/**\n * Get the current user's ID\n *\n * @since MU\n *\n * @uses wp_get_current_user\n *\n * @return int The current user's ID\n *\/","file":"user.php","line":208,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[209]},"used_by":{"wp_admin_bar_my_account_item":[133],"wp_admin_bar_my_account_menu":[162],"map_meta_cap":[1039,1089,1143],"is_super_admin":[1450],"WP_Admin_Bar::initialize":[32,34],"wp_admin_bar_dashboard_view_site_menu":[2843],"is_blog_user":[2869],"get_edit_user_link":[1064,1074],"is_site_admin":[47],"is_user_spammy":[1751],"wp_notify_postauthor":[1003],"wp_default_scripts":[65],"get_user_option":[240],"is_user_member_of_blog":[775],"setup_userdata":[964]}},"wp_get_current_user":{"doc":"\/**\n * Retrieve the current user object.\n *\n * @since 2.0.3\n *\n * @return WP_User Current user WP_User object\n *\/","file":"pluggable.php","line":51,"missingDoc":false,"filters":[],"uses":{"get_currentuserinfo":[54]},"used_by":{"wp_admin_bar_my_account_item":[134],"wp_admin_bar_my_account_menu":[163],"map_meta_cap":[1039,1089,1143],"current_user_can":[1281],"current_user_can_for_blog":[1305],"is_super_admin":[1451],"WP::init":[473],"comment_form":[1518],"wp_default_editor":[1781],"switch_to_blog":[546],"restore_current_blog":[607],"is_user_option_local":[1808],"wp_user_settings":[540],"get_all_user_settings":[667],"wp_set_all_user_settings":[702],"delete_all_user_settings":[733],"is_user_logged_in":[727],"wp_verify_nonce":[1257],"wp_create_nonce":[1285],"wp_count_posts":[2124],"get_current_user_id":[209],"wp_update_user":[1481]}},"get_edit_profile_url":{"doc":"\/**\n * Get the URL to the user's profile editor.\n *\n * @since 3.1.0\n *\n * @param int $user User ID\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Dashboard url link with optional path appended.\n *\/","file":"link-template.php","line":2293,"missingDoc":false,"filters":["'edit_profile_url'"],"uses":{"user_admin_url":[2297],"is_network_admin":[2298],"network_admin_url":[2299],"get_dashboard_url":[2301],"is_user_admin":[2296]},"used_by":{"wp_admin_bar_my_account_item":[135],"wp_admin_bar_my_account_menu":[164],"get_edit_user_link":[1075]}},"get_avatar":{"doc":"\/**\n * Retrieve the avatar for a user who provided a user ID or email address.\n *\n * @since 2.5\n * @param int|string|object $id_or_email A user ID, email address, or comment object\n * @param int $size Size of the avatar image\n * @param string $default URL to a default image to use if no avatar is available\n * @param string $alt Alternative text to use in image tag. Defaults to blank\n * @return string <img> tag for the user's avatar\n*\/","file":"pluggable.php","line":1589,"missingDoc":false,"filters":["'get_avatar_comment_types'","'get_avatar'"],"uses":{"get_option":[1590,1626,1664],"esc_attr":[1596],"is_numeric":[1598,1602],"get_userdata":[1604,1615],"is_object":[1607],"in_array":[1610],"md5":[1634],"strtolower":[1634],"trim":[1634],"sprintf":[1640],"hexdec":[1640],"is_ssl":[1636],"includes_url":[1648],"strpos":[1655],"add_query_arg":[1656],"urlencode":[1662]},"used_by":{"wp_admin_bar_my_account_item":[140],"wp_admin_bar_my_account_menu":[174],"Walker_Comment::start_el":[1353]}},"wp_admin_bar_my_account_menu":{"doc":"\/**\n * Add the \"My Account\" submenu items.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":161,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[162],"wp_get_current_user":[163],"get_edit_profile_url":[164],"add_group":[169],"get_avatar":[174],"add_menu":[180,189,195],"__":[192,198],"wp_logout_url":[199]},"used_by":[]},"wp_logout_url":{"doc":"\/**\n * Returns the Log Out URL.\n *\n * Returns the URL that allows the user to log out of the site\n *\n * @since 2.7.0\n * @uses wp_nonce_url() To protect against CSRF\n * @uses site_url() To generate the log in URL\n * @uses apply_filters() calls 'logout_url' hook on final logout url\n *\n * @param string $redirect Path to redirect to on logout.\n * @return string A log out URL.\n *\/","file":"general-template.php","line":212,"missingDoc":false,"filters":["'logout_url'"],"uses":{"urlencode":[215],"add_query_arg":[218],"site_url":[218],"wp_nonce_url":[219]},"used_by":{"wp_admin_bar_my_account_menu":[199],"WP_Admin_Bar::_render":[357],"comment_form":[1537],"wp_nonce_ays":[2022],"wp_loginout":[191],"__main":[71,72]}},"wp_admin_bar_site_menu":{"doc":"\/**\n * Add the \"Site Name\" menu.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":208,"missingDoc":false,"filters":[],"uses":{"is_user_logged_in":[212],"is_user_member_of_blog":[216],"is_super_admin":[216],"get_bloginfo":[219],"preg_replace":[222],"get_home_url":[222],"sprintf":[225,227],"__":[225,227,247,255,265],"esc_html":[225,227],"is_user_admin":[226],"is_network_admin":[224],"wp_html_excerpt":[230],"trim":[232],"add_menu":[234,244,252,262],"is_admin":[237,242],"home_url":[237,248],"admin_url":[237,266],"network_admin_url":[256],"get_current_blog_id":[256],"is_blog_admin":[251],"is_multisite":[251],"current_user_can":[251],"wp_admin_bar_appearance_menu":[270]},"used_by":[]},"is_user_member_of_blog":{"doc":"\/**\n * Find out whether a user is a member of a given blog.\n *\n * @since MU 1.1\n * @uses get_blogs_of_user()\n *\n * @param int $user_id Optional. The unique ID of the user. Defaults to the current user.\n * @param int $blog_id Optional. ID of the blog to check. Defaults to the current site.\n * @return bool\n *\/","file":"user.php","line":770,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[775],"get_current_blog_id":[778],"get_blogs_of_user":[780],"array_key_exists":[781]},"used_by":{"wp_admin_bar_site_menu":[216],"is_blog_user":[2869],"wp_notify_postauthor":[995]}},"is_super_admin":{"doc":"\/**\n * Determine if user is a site admin.\n *\n * @since 3.0.0\n *\n * @param int $user_id (Optional) The ID of a user. Defaults to the current user.\n * @return bool True if the user is a site admin.\n *\/","file":"capabilities.php","line":1449,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1451],"get_userdata":[1453],"get_current_user_id":[1450],"exists":[1455],"get_super_admins":[1459],"is_array":[1460],"in_array":[1460],"has_cap":[1463],"is_multisite":[1458]},"used_by":{"wp_admin_bar_site_menu":[216],"wp_admin_bar_my_sites_menu":[287,296,340],"WP_User::has_cap":[929],"map_meta_cap":[1010,1183,1192,1205,1221,1238,1246],"get_dashboard_url":[2270,2264],"is_site_admin":[57],"wpmu_validate_blog_signup":[570],"wpmu_create_blog":[992],"ms_site_check":[82],"wp_user_settings":[543],"wp_set_all_user_settings":[705],"wp_authenticate_username_password":[98]}},"get_bloginfo":{"doc":"\/**\n * Retrieve information about the blog.\n *\n * Some show parameter values are deprecated and will be removed in future\n * versions. These options will trigger the _deprecated_argument() function.\n * The deprecated blog info options are listed in the function contents.\n *\n * The possible values for the 'show' parameter are listed below.\n * <ol>\n * <li><strong>url<\/strong> - Blog URI to homepage.<\/li>\n * <li><strong>wpurl<\/strong> - Blog URI path to WordPress.<\/li>\n * <li><strong>description<\/strong> - Secondary title<\/li>\n * <\/ol>\n *\n * The feed URL options can be retrieved from 'rdf_url' (RSS 0.91),\n * 'rss_url' (RSS 1.0), 'rss2_url' (RSS 2.0), or 'atom_url' (Atom feed). The\n * comment feeds can be retrieved from the 'comments_atom_url' (Atom comment\n * feed) or 'comments_rss2_url' (RSS 2.0 comment feed).\n *\n * @since 0.71\n *\n * @param string $show Blog info to retrieve.\n * @param string $filter How to filter what is retrieved.\n * @return string Mostly string values, might be empty.\n *\/","file":"general-template.php","line":405,"missingDoc":false,"filters":["'bloginfo_url'","'bloginfo'"],"uses":{"_deprecated_argument":[410],"sprintf":[410,410],"__":[410,410],"home_url":[412],"site_url":[415],"get_option":[418,439,452,455,459,479],"get_feed_link":[421,424,427,430,433,436],"get_stylesheet_uri":[442],"get_stylesheet_directory_uri":[445],"get_template_directory_uri":[449],"get_locale":[466],"str_replace":[467],"is_rtl":[472],"function_exists":[471],"strpos":[484,485,486]},"used_by":{"wp_admin_bar_site_menu":[219],"WP_Http::request":[89,132],"WP::send_headers":[320],"weblog_ping":[1950],"get_index_rel_link":[2775,2775],"get_bloginfo_rss":[29],"get_the_category_rss":[327],"html_type_rss":[359],"cache_javascript_headers":[955],"wp_nonce_ays":[2021],"bloginfo":[377],"feed_links":[1609,1610],"feed_links_extra":[1645,1651,1656,1661,1664,1667],"rsd_link":[1682],"wlwmanifest_link":[1693],"language_attributes":[1864],"wp_admin_css_uri":[2059],"get_the_generator":[2190,2193,2205],"__main":[10,17,19,19,35,35,38,38,41,41,44,44,47,47],"get_pagenum_link":[1433,1455],"filter_SSL":[1899],"wp_mail":[422],"wp_default_scripts":[57],"wp_default_styles":[499],"wp_update_plugins":[202],"wp_update_themes":[307]}},"get_home_url":{"doc":"\/**\n * Retrieve the home url for a given site.\n *\n * Returns the 'home' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":1902,"missingDoc":false,"filters":["'home_url'"],"uses":{"get_option":[1906,1909],"switch_to_blog":[1908],"restore_current_blog":[1910],"is_multisite":[1905],"parse_url":[1917],"is_ssl":[1914],"is_admin":[1914],"in_array":[1913],"set_url_scheme":[1920],"ltrim":[1923],"is_string":[1922],"strpos":[1922]},"used_by":{"wp_admin_bar_site_menu":[222],"WP_Admin_Bar::initialize":[35],"home_url":[1884]}},"esc_html":{"doc":"\/**\n * Escaping for HTML blocks.\n *\n * @since 2.8.0\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2671,"missingDoc":false,"filters":["'esc_html'"],"uses":{"wp_check_invalid_utf8":[2672],"_wp_specialchars":[2673]},"used_by":{"wp_admin_bar_site_menu":[225,227],"sanitize_bookmark_field":[358],"WP_oEmbed::data2html":[286],"WP_Customize_Control::render_content":[240,249,260,266,277],"WP_Customize_Color_Control::render_content":[385],"WP_Customize_Upload_Control::render_content":[442],"WP_Customize_Image_Control::render_content":[526,546],"WP_Customize_Section::render":[83],"_WP_Editors::wp_link_query":[794],"WP_Embed::maybe_make_link":[273],"wp_xmlrpc_server::wp_getTags":[2564,2565],"wp_xmlrpc_server::mw_getCategories":[4885,4886],"wp_xmlrpc_server::pingback_ping":[5433],"get_cancel_comment_reply_link":[1142],"WP_Widget_RSS::widget":[770],"wp_widget_rss_output":[872,894],"the_content_rss":[1714],"wp_specialchars":[2127],"sanitize_option":[2810],"wp_pre_kses_less_than_callback":[2965],"do_feed":[1009],"wp_nonce_url":[1177],"wp_timezone_choice":[3412,3445],"wp_login_form":[279,283,287],"feed_links_extra":[1645],"esc_html__":[129],"esc_html_e":[170],"esc_html_x":[213],"wp_print_media_templates":[93,93,330,365],"wpmu_admin_do_redirect":[244],"wpmu_signup_blog_notification":[736],"wpmu_signup_user_notification":[789],"wpmu_welcome_notification":[1251],"wpmu_welcome_user_notification":[1299],"wp_update_nav_menu_object":[226,233],"wp_protect_special_option":[109],"Walker_PageDropdown::start_el":[1119],"wp_rss":[889],"get_rss":[924],"sanitize_term_field":[1647],"__main":[44],"wp_version_check":[110],"wp_dropdown_users":[1063,1070],"sanitize_user_field":[1127],"wp_widget_description":[671],"wp_sidebar_description":[692]}},"is_user_admin":{"doc":"\/**\n * Whether the current request is for a user admin screen \/wp-admin\/user\/\n *\n * Does not inform on whether the user is an admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress user administration pages.\n *\/","file":"load.php","line":642,"missingDoc":false,"filters":[],"uses":{"in_admin":[644],"defined":[645]},"used_by":{"wp_admin_bar_site_menu":[226],"WP_Admin_Bar::add_menus":[480],"self_admin_url":[2210],"get_edit_profile_url":[2296],"auth_redirect":[760],"__main":[24]}},"is_network_admin":{"doc":"\/**\n * Whether the current request is for a network admin screen \/wp-admin\/network\/\n *\n * Does not inform on whether the user is a network admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress network administration pages.\n *\/","file":"load.php","line":623,"missingDoc":false,"filters":[],"uses":{"in_admin":[625],"defined":[626]},"used_by":{"wp_admin_bar_site_menu":[224],"WP_Admin_Bar::add_menus":[480],"add_thickbox":[2120],"load_default_textdomain":[398],"self_admin_url":[2208],"get_edit_profile_url":[2298],"get_currentuserinfo":[101],"__main":[431,22]}},"wp_html_excerpt":{"doc":"\/**\n * Safely extracts not more than the first $count characters from html string.\n *\n * UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT*\n * be counted as one character. For example & will be counted as 4, < as\n * 3, etc.\n *\n * @since 2.5.0\n *\n * @param integer $str String to get the excerpt from.\n * @param integer $count Maximum number of characters to take.\n * @return string The excerpt.\n *\/","file":"formatting.php","line":3093,"missingDoc":false,"filters":[],"uses":{"wp_strip_all_tags":[3094],"mb_substr":[3095],"preg_replace":[3097]},"used_by":{"wp_admin_bar_site_menu":[230],"WP_Customize_Manager::register_controls":[900],"do_trackbacks":[1759],"wp_widget_rss_output":[864]}},"is_admin":{"doc":"\/**\n * Whether the current request is for a network or blog admin page\n *\n * Does not inform on whether the user is an admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 1.5.1\n *\n * @return bool True if inside WordPress administration pages.\n *\/","file":"load.php","line":585,"missingDoc":false,"filters":[],"uses":{"in_admin":[587],"defined":[588]},"used_by":{"wp_admin_bar_site_menu":[237,242],"wp_admin_bar_edit_menu":[425],"wp_admin_bar_search_menu":[641],"is_admin_bar_showing":[737],"redirect_canonical":[42],"WP_Customize_Manager::setup_theme":[112],"WP_Customize_Manager::wp_loaded":[280],"WP_Customize_Manager::wp_redirect_status":[296],"_WP_Editors::editor_settings":[159],"_WP_Editors::editor_js":[641],"WP_Theme::get_allowed_on_site":[1146],"WP::handle_404":[507],"__main":[24,38,55,69,72,20,55],"wp_widget_rss_output":[830],"wp_admin_bar_dashboard_view_site_menu":[2846],"load_default_textdomain":[395],"get_pagenum_link":[1432],"get_home_url":[1914],"network_home_url":[2143],"image_constrain_size_for_editor":[40],"ms_not_installed":[239],"wp_get_nav_menu_items":[531],"wp_user_settings":[534],"get_the_title":[108],"get_post_class":[325],"register_post_type":[1293],"_post_format_request":[5445],"WP_Query::parse_query":[1594],"wp_default_scripts":[344],"script_concat_settings":[853],"register_taxonomy":[345],"switch_theme":[694],"get_theme_mods":[753],"add_editor_style":[1211],"remove_editor_styles":[1236],"_custom_header_background_just_in_time":[1401,1414],"_wp_customize_include":[1630],"wp_get_sidebars_widgets":[1015],"wp_convert_widget_settings":[1091,1111,1116]}},"home_url":{"doc":"\/**\n * Retrieve the home url for the current site.\n *\n * Returns the 'home' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @uses get_home_url()\n *\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":1883,"missingDoc":false,"filters":[],"uses":{"get_home_url":[1884]},"used_by":{"wp_admin_bar_site_menu":[237,248],"wp_admin_bar_my_sites_menu":[388],"wp_admin_bar_search_menu":[644],"get_author_posts_url":[223,232],"redirect_canonical":[125,314],"wp_redirect_admin_locations":[514,515,516,526,527],"wp_list_categories":[460],"WP_Admin_Bar::initialize":[39],"WP_Customize_Manager::customize_preview_base":[352],"wp_xmlrpc_server::wp_getUsersBlogs":[491],"WP::parse_request":[154],"comments_popup_link":[993],"weblog_ping":[1949],"WP_Widget_Categories::widget":[471],"WP_Widget_RSS::widget":[759],"wp_admin_bar_dashboard_view_site_menu":[2847],"__main":[34,232,45],"self_link":[490],"get_search_form":[161],"get_bloginfo":[412],"wp_get_archives":[1008],"get_allowed_http_origins":[250],"get_permalink":[160,163],"get_post_permalink":[200,206],"get_page_link":[244],"_get_page_link":[278,281],"get_attachment_link":[325],"get_year_link":[345,347],"get_month_link":[370,372],"get_day_link":[400,402],"get_feed_link":[442,450],"get_post_comments_feed_link":[487,489],"get_author_feed_link":[541],"get_term_feed_link":[603,606,609],"get_search_link":[754,759],"get_post_type_archive_link":[846,848],"get_pagenum_link":[1425],"network_home_url":[2138],"wp_get_shortlink":[2364],"maybe_add_existing_user_to_blog":[1686,1688],"_wp_menu_item_classes_by_context":[317,384,397],"wp_validate_redirect":[968],"wp_page_menu":[905],"is_local_attachment":[3854,3856],"url_to_postid":[309,313,322,325,320],"WP_Rewrite::rewrite_rules":[1525],"WP_Rewrite::mod_rewrite_rules":[1648],"get_term_link":[3021,3036],"preview_theme_ob_filter_callback":[638],"_wp_customize_loader_settings":[1649],"wp_customize_support_script":[1705],"wp_version_check":[64,82,85]}},"admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the current site.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":1990,"missingDoc":false,"filters":[],"uses":{"get_admin_url":[1991]},"used_by":{"wp_admin_bar_site_menu":[237,266],"wp_admin_bar_my_sites_menu":[293,356,363,371,380],"wp_admin_bar_new_content_menu":[529,542],"wp_admin_bar_comments_menu":[566],"wp_admin_bar_appearance_menu":[580,598,601,604,607],"wp_redirect_admin_locations":[521],"_WP_Editors::editor_js":[642],"WP_Embed::maybe_run_ajax_cache":[82],"WP_Nav_Menu_Widget::form":[1135],"wp_admin_bar_dashboard_view_site_menu":[2851],"wp_register":[345],"register_admin_color_schemes":[2038,2040],"wp_admin_css_uri":[2057],"get_allowed_http_origins":[249],"get_edit_term_link":[699],"get_edit_post_link":[911],"get_delete_post_link":[967],"get_edit_comment_link":[986],"get_edit_bookmark_link":[1027],"get_shortcut_link":[1854],"network_admin_url":[2168],"self_admin_url":[2213],"get_dashboard_url":[2267,2271],"wp_print_media_templates":[97],"wp_plupload_default_settings":[1261],"wp_enqueue_media":[1460],"maybe_add_existing_user_to_blog":[1688],"check_admin_referer":[810],"wp_safe_redirect":[922],"wp_notify_postauthor":[1051,1053,1054],"wp_notify_moderator":[1142,1144,1146,1147,1151],"wp_default_scripts":[333],"_wp_customize_loader_settings":[1648,1658],"wp_customize_url":[1682],"wp_customize_support_script":[1704]}},"network_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the network.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2166,"missingDoc":false,"filters":["'network_admin_url'"],"uses":{"admin_url":[2168],"is_multisite":[2167],"network_site_url":[2170],"ltrim":[2173],"is_string":[2172],"strpos":[2172]},"used_by":{"wp_admin_bar_site_menu":[256],"wp_admin_bar_my_sites_menu":[306,313,319,325],"wp_admin_bar_updates_menu":[628],"self_admin_url":[2209],"get_edit_profile_url":[2299],"newblog_notify_siteadmin":[1020],"newuser_notify_siteadmin":[1061]}},"get_current_blog_id":{"doc":"\/**\n * Retrieve the current blog id\n *\n * @since 3.1.0\n *\n * @return int Blog id\n *\/","file":"load.php","line":675,"missingDoc":false,"filters":[],"uses":{"absint":[677]},"used_by":{"wp_admin_bar_site_menu":[256],"WP_Admin_Bar::initialize":[38],"WP_Theme::get_allowed_on_site":[1108,1113],"wp_upload_dir":[1562,1564],"is_main_site":[3226],"get_dashboard_url":[2269],"get_blog_details":[170],"get_blog_option":[384,386],"add_blog_option":[419,421],"delete_blog_option":[444,446],"update_blog_option":[472],"wp_user_settings":[544],"wp_set_all_user_settings":[706],"get_blogs_of_user":[695],"is_user_member_of_blog":[778],"count_users":[878]}},"is_blog_admin":{"doc":"\/**\n * Whether the current request is for a blog admin screen \/wp-admin\/\n *\n * Does not inform on whether the user is a blog admin! Use capability checks to\n * tell if the user should be accessing a section or not.\n *\n * @since 3.1.0\n *\n * @return bool True if inside WordPress network administration pages.\n *\/","file":"load.php","line":604,"missingDoc":false,"filters":[],"uses":{"in_admin":[606],"defined":[607]},"used_by":{"wp_admin_bar_site_menu":[251],"get_currentuserinfo":[101]}},"is_multisite":{"doc":"\/**\n * Whether Multisite support is enabled\n *\n * @since 3.0.0\n *\n * @return bool True if multisite is enabled, false otherwise.\n *\/","file":"load.php","line":658,"missingDoc":false,"filters":[],"uses":{"defined":[659,662,662,662]},"used_by":{"wp_admin_bar_site_menu":[251],"wp_admin_bar_my_sites_menu":[283],"WP_Object_Cache::__construct":[630],"redirect_canonical":[284],"WP_User::has_cap":[929],"map_meta_cap":[1010,1183,1192,1205,1221,1228,1238,1244],"current_user_can_for_blog":[1302,1315],"is_super_admin":[1458],"WP_Admin_Bar::initialize":[33],"WP_Theme::is_allowed":[1048],"WP_Theme::get_allowed_on_site":[1107],"wp_xmlrpc_server::wp_getUsersBlogs":[460],"wp_xmlrpc_server::blogger_getUsersBlogs":[3628],"wp_initial_constants":[20],"wp_admin_bar_dashboard_view_site_menu":[2848],"wp_upload_dir":[1546,1552],"is_main_site":[3222],"global_terms_enabled":[3241],"get_locale":[39],"load_default_textdomain":[390],"get_home_url":[1905],"get_site_url":[1964],"network_site_url":[2106],"network_home_url":[2137],"network_admin_url":[2167],"get_dashboard_url":[2266],"wp_not_installed":[426],"wp_get_active_and_valid_plugins":[492],"wp_print_media_templates":[52],"wp_plupload_default_settings":[1290],"__main":[14],"get_active_blog_for_user":[76],"wp_load_alloptions":[138,152],"wp_load_core_site_options":[171],"get_site_option":[767],"add_site_option":[815],"delete_site_option":[862],"update_site_option":[910],"wp_delete_attachment":[4101],"WP_Rewrite::rewrite_rules":[1536],"wp_get_themes":[50],"wp_version_check":[54],"wp_authenticate_username_password":[92],"WP_User_Query::prepare_query":[497],"get_blogs_of_user":[694],"wpdb::init_charset":[620],"wpdb::set_prefix":[675,686],"wpdb::get_blog_prefix":[736],"wpdb::tables":[781,789],"wpdb::print_error":[1040]}},"current_user_can":{"doc":"\/**\n * Whether current user has capability or role.\n *\n * @since 2.0.0\n *\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1280,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1281],"array_slice":[1286],"func_get_args":[1286],"array_merge":[1287],"call_user_func_array":[1289]},"used_by":{"wp_admin_bar_site_menu":[251],"wp_admin_bar_my_sites_menu":[366,375],"wp_admin_bar_edit_menu":[432,470,460],"wp_admin_bar_new_content_menu":[492,495,498,501,508,518,518],"wp_admin_bar_comments_menu":[553],"wp_admin_bar_appearance_menu":[579,579,582],"WP_Customize_Manager::setup_theme":[119,130],"_WP_Editors::editor":[100],"wp_xmlrpc_server::get_custom_fields":[254],"wp_xmlrpc_server::set_custom_fields":[287,289,292],"wp_xmlrpc_server::wp_getUsersBlogs":[487],"wp_xmlrpc_server::_insert_post":[1010,1015,1015,1024,1029,1038,1043,1086,1123,1146,1172],"wp_xmlrpc_server::wp_deletePost":[1321],"wp_xmlrpc_server::wp_getPost":[1403],"wp_xmlrpc_server::wp_getPosts":[1464,1499],"wp_xmlrpc_server::wp_newTerm":[1549],"wp_xmlrpc_server::wp_editTerm":[1637],"wp_xmlrpc_server::wp_deleteTerm":[1729],"wp_xmlrpc_server::wp_getTerm":[1796],"wp_xmlrpc_server::wp_getTerms":[1849],"wp_xmlrpc_server::wp_getTaxonomy":[1928],"wp_xmlrpc_server::wp_getTaxonomies":[1974],"wp_xmlrpc_server::wp_getUser":[2036],"wp_xmlrpc_server::wp_getUsers":[2089,2119],"wp_xmlrpc_server::wp_getProfile":[2156],"wp_xmlrpc_server::wp_editProfile":[2199],"wp_xmlrpc_server::wp_getPage":[2267],"wp_xmlrpc_server::wp_getPages":[2305,2318],"wp_xmlrpc_server::wp_deletePage":[2385],"wp_xmlrpc_server::wp_editPage":[2426],"wp_xmlrpc_server::wp_getPageList":[2465],"wp_xmlrpc_server::wp_getAuthors":[2516],"wp_xmlrpc_server::wp_getTags":[2551],"wp_xmlrpc_server::wp_newCategory":[2596],"wp_xmlrpc_server::wp_deleteCategory":[2656],"wp_xmlrpc_server::wp_suggestCategories":[2687],"wp_xmlrpc_server::wp_getComment":[2723],"wp_xmlrpc_server::wp_getComments":[2764],"wp_xmlrpc_server::wp_deleteComment":[2824,2830],"wp_xmlrpc_server::wp_editComment":[2879,2885],"wp_xmlrpc_server::wp_getCommentStatusList":[3039],"wp_xmlrpc_server::wp_getCommentCount":[3066],"wp_xmlrpc_server::wp_getPostStatusList":[3098],"wp_xmlrpc_server::wp_getPageStatusList":[3124],"wp_xmlrpc_server::wp_getPageTemplates":[3150],"wp_xmlrpc_server::wp_setOptions":[3228],"wp_xmlrpc_server::wp_getMediaItem":[3277],"wp_xmlrpc_server::wp_getMediaLibrary":[3322],"wp_xmlrpc_server::wp_getPostFormats":[3363],"wp_xmlrpc_server::wp_getPostType":[3436],"wp_xmlrpc_server::wp_getPostTypes":[3482],"wp_xmlrpc_server::wp_getRevisions":[3534,3549],"wp_xmlrpc_server::wp_restoreRevision":[3601],"wp_xmlrpc_server::blogger_getUsersBlogs":[3641],"wp_xmlrpc_server::blogger_getUserInfo":[3703],"wp_xmlrpc_server::blogger_getPost":[3742],"wp_xmlrpc_server::blogger_getRecentPosts":[3797],"wp_xmlrpc_server::blogger_newPost":[3868,3868],"wp_xmlrpc_server::blogger_editPost":[3928,3933],"wp_xmlrpc_server::blogger_deletePost":[3980],"wp_xmlrpc_server::mw_newPost":[4083,4085,4120,4124],"wp_xmlrpc_server::mw_editPost":[4375,4424,4428,4536,4534],"wp_xmlrpc_server::mw_getPost":[4636],"wp_xmlrpc_server::mw_getRecentPosts":[4769],"wp_xmlrpc_server::mw_getCategories":[4871],"wp_xmlrpc_server::mw_newMediaObject":[4924,4960],"wp_xmlrpc_server::mt_getRecentPostTitles":[5026],"wp_xmlrpc_server::mt_getCategoryList":[5070],"wp_xmlrpc_server::mt_getPostCategories":[5111],"wp_xmlrpc_server::mt_setPostCategories":[5157],"wp_xmlrpc_server::mt_publishPost":[5269,5269],"wp_comment_form_unfiltered_html_nonce":[816],"check_comment_flood_db":[727],"WP_Widget_Text::update":[412],"wp_widget_rss_output":[830],"wp_upload_bits":[1723],"kses_init_filters":[1332],"kses_init":[1388],"get_edit_term_link":[685],"edit_term_link":[721],"get_edit_post_link":[908],"get_delete_post_link":[962],"get_edit_comment_link":[983],"edit_comment_link":[1003],"get_edit_bookmark_link":[1024],"edit_bookmark_link":[1044],"get_edit_user_link":[1066],"wp_prepare_attachment_for_js":[1354,1359],"wp_post_revision_title":[1311],"wp_list_post_revisions":[1381,1383],"wp_count_posts":[2131],"wp_insert_post":[2767,2915],"wp_insert_attachment":[4036],"get_posts_by_author_sql":[4498],"WP_Query::get_posts":[2468,2474,2508,2710,2718,2726],"preview_theme":[556],"wp_get_update_data":[336,342,350,348]}},"wp_admin_bar_appearance_menu":{"doc":"\/**\n * Add appearance submenu items to the \"Site Name\" menu.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":576,"missingDoc":false,"filters":[],"uses":{"add_group":[577],"add_menu":[580,586,598,601,604,607],"__":[580,589,598,601,604,607],"admin_url":[580,598,601,604,607],"current_user_can":[579,579,582],"is_ssl":[585],"add_query_arg":[590],"urlencode":[590],"wp_customize_url":[590],"add_action":[595],"current_theme_supports":[597,600,600,603,606]},"used_by":{"wp_admin_bar_site_menu":[270]}},"wp_admin_bar_my_sites_menu":{"doc":"\/**\n * Add the \"My Sites\/[Site Name]\" menu and all submenus.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":279,"missingDoc":false,"filters":[],"uses":{"is_user_logged_in":[283],"is_multisite":[283],"count":[287],"is_super_admin":[287,296,340],"add_menu":[290,302,309,315,321,327,352,359,367,376,384],"__":[292,305,312,318,324,330,362,370,379,387],"admin_url":[293,356,363,371,380],"add_group":[297,336],"network_admin_url":[306,313,319,325],"network_home_url":[331],"switch_to_blog":[345],"current_user_can":[366,375],"get_post_type_object":[366],"home_url":[388],"restore_current_blog":[391]},"used_by":[]},"network_home_url":{"doc":"\/**\n * Retrieve the home url for the current network.\n *\n * Returns the home url with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path (optional) Path relative to the home url.\n * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'.\n * @return string Home url link with optional path appended.\n*\/","file":"link-template.php","line":2134,"missingDoc":false,"filters":["'network_home_url'"],"uses":{"home_url":[2138],"is_multisite":[2137],"is_ssl":[2143],"is_admin":[2143],"in_array":[2142],"set_url_scheme":[2148],"ltrim":[2151],"is_string":[2150],"strpos":[2150]},"used_by":{"wp_admin_bar_my_sites_menu":[331],"get_blogaddress_by_name":[51,55],"maybe_redirect_404":[1655]}},"switch_to_blog":{"doc":"\/**\n * Switch the current blog.\n *\n * This function is useful if you need to pull posts, or other information,\n * from other blogs. You can switch back afterwards using restore_current_blog().\n *\n * Things that aren't switched:\n * - autoloaded options. See #14992\n * - plugins. See #14941\n *\n * @see restore_current_blog()\n * @since MU\n *\n * @param int $new_blog The id of the blog you want to switch to. Default: current blog\n * @param bool $deprecated Deprecated argument\n * @return bool True on success, false if the validation failed\n *\/","file":"ms-blogs.php","line":501,"missingDoc":false,"filters":["'switch_blog'","'switch_blog'"],"uses":{"set_blog_id":[518],"wp_cache_switch_to_blog":[524],"is_object":[528],"wp_cache_init":[533],"wp_cache_add_global_groups":[537,539],"is_array":[536],"wp_cache_add_non_persistent_groups":[540],"function_exists":[535,523],"reinit":[545],"wp_get_current_user":[546],"for_blog":[547],"did_action":[544]},"used_by":{"wp_admin_bar_my_sites_menu":[345],"wp_cache_switch_to_blog":[194],"current_user_can_for_blog":[1303],"WP_Theme::get_allowed_on_site":[1118,1129,1151],"wp_xmlrpc_server::wp_getUsersBlogs":[485],"get_home_url":[1908],"get_site_url":[1967],"get_blog_details":[231],"update_blog_details":[333],"get_blog_option":[389],"add_blog_option":[424],"delete_blog_option":[449],"update_blog_option":[475],"get_blog_post":[158],"add_user_to_blog":[179],"remove_user_from_blog":[220],"create_empty_blog":[299],"get_blog_permalink":[316],"wpmu_create_blog":[976],"newblog_notify_siteadmin":[1022]}},"get_post_type_object":{"doc":"\/**\n * Retrieve a post type object by name\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_types\n * @see register_post_type\n * @see get_post_types\n *\n * @param string $post_type The name of a registered post type\n * @return object A post type object\n *\/","file":"post.php","line":1094,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_admin_bar_my_sites_menu":[366],"wp_admin_bar_edit_menu":[431,459],"redirect_canonical":[97],"map_meta_cap":[1023,1073,1121,1154,1162,1178],"wp_xmlrpc_server::_insert_post":[1001],"wp_xmlrpc_server::wp_deletePost":[1320],"wp_xmlrpc_server::wp_getPost":[1402],"wp_xmlrpc_server::wp_getPosts":[1457,1461,1498],"wp_xmlrpc_server::wp_getPostType":[3434],"wp_xmlrpc_server::blogger_newPost":[3868],"wp_xmlrpc_server::mw_newPost":[4083],"get_post_permalink":[192],"get_post_type_archive_link":[834],"get_post_type_archive_feed_link":[870],"get_edit_post_link":[904],"edit_post_link":[934],"get_delete_post_link":[958],"_update_blog_date_on_post_publish":[742],"_update_blog_date_on_post_delete":[764],"wp_setup_nav_menu_item":[580,632],"is_post_type_hierarchical":[1047],"post_type_exists":[1061],"_add_post_type_submenus":[1555],"wp_count_posts":[2130],"get_posts_by_author_sql":[4476],"WP_Query::parse_query":[1569],"WP_Query::get_posts":[2085,2113,2400,2413,2416,2419,2422],"WP_Query::get_queried_object":[3012],"register_taxonomy_for_object_type":[466]}},"restore_current_blog":{"doc":"\/**\n * Restore the current blog, after calling switch_to_blog()\n *\n * @see switch_to_blog()\n * @since MU\n *\n * @return bool True on success, false if we're already on the current blog\n *\/","file":"ms-blogs.php","line":564,"missingDoc":false,"filters":["'switch_blog'","'switch_blog'"],"uses":{"array_pop":[570],"set_blog_id":[579],"wp_cache_switch_to_blog":[585],"is_object":[589],"wp_cache_init":[594],"wp_cache_add_global_groups":[598,600],"is_array":[597],"wp_cache_add_non_persistent_groups":[601],"function_exists":[596,584],"reinit":[606],"wp_get_current_user":[607],"for_blog":[608],"did_action":[605]},"used_by":{"wp_admin_bar_my_sites_menu":[391],"current_user_can_for_blog":[1316],"WP_Theme::get_allowed_on_site":[1120,1131,1154],"wp_xmlrpc_server::wp_getUsersBlogs":[497],"get_home_url":[1910],"get_site_url":[1969],"get_blog_details":[235],"update_blog_details":[335],"get_blog_option":[391],"add_blog_option":[426],"delete_blog_option":[451],"update_blog_option":[477],"get_blog_post":[160],"add_user_to_blog":[184,198],"remove_user_from_blog":[246,264],"create_empty_blog":[301],"get_blog_permalink":[318],"wpmu_create_blog":[995],"newblog_notify_siteadmin":[1025]}},"wp_admin_bar_shortlink_menu":{"doc":"\/**\n * Provide a shortlink.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":400,"missingDoc":false,"filters":[],"uses":{"wp_get_shortlink":[401],"esc_attr":[407],"add_menu":[409],"__":[411]},"used_by":[]},"wp_get_shortlink":{"doc":"\/**\n * Return a shortlink for a post, page, attachment, or blog.\n *\n * This function exists to provide a shortlink tag that all themes and plugins can target. A plugin must hook in to\n * provide the actual shortlinks. Default shortlink support is limited to providing ?p= style links for posts.\n * Plugins can short-circuit this function via the pre_get_shortlink filter or filter the output\n * via the get_shortlink filter.\n *\n * @since 3.0.0.\n *\n * @param int $id A post or blog id. Default is 0, which means the current post or blog.\n * @param string $context Whether the id is a 'blog' id, 'post' id, or 'media' id. If 'post', the post_type of the post is consulted. If 'query', the current query is consulted to determine the id and context. Default is 'post'.\n * @param bool $allow_slugs Whether to allow post slugs in the shortlink. It is up to the plugin how and whether to honor this.\n * @return string A shortlink or an empty string if no shortlink exists for the requested resource or if shortlinks are not enabled.\n *\/","file":"link-template.php","line":2343,"missingDoc":false,"filters":["'pre_get_shortlink'","'get_shortlink'"],"uses":{"get_queried_object_id":[2352],"get_post":[2354,2362],"is_single":[2351],"home_url":[2364],"get_option":[2361]},"used_by":{"wp_admin_bar_shortlink_menu":[401],"wp_shortlink_wp_head":[2380],"wp_shortlink_header":[2401],"the_shortlink":[2432]}},"esc_attr":{"doc":"\/**\n * Escaping for HTML attributes.\n *\n * @since 2.8.0\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2685,"missingDoc":false,"filters":["'attribute_escape'"],"uses":{"wp_check_invalid_utf8":[2686],"_wp_specialchars":[2687]},"used_by":{"wp_admin_bar_shortlink_menu":[407],"wp_admin_bar_comments_menu":[558],"get_the_author_link":[137],"the_author_posts_link":[204],"wp_list_authors":[318,330,331],"_walk_bookmarks":[74,75,92],"sanitize_bookmark_field":[360,369],"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_dropdown_categories":[334,335,336],"wp_list_categories":[449],"wp_generate_tag_cloud":[674],"Walker_Category::start_el":[826,830,832],"WP_oEmbed::data2html":[275,275,275],"WP_Admin_Bar::add_node":[98],"WP_Admin_Bar::_render_container":[367],"WP_Admin_Bar::_render_group":[382,386],"WP_Admin_Bar::_render_item":[414,418,425,428,434],"WP_Customize_Control::render":[196,196],"WP_Customize_Control::get_link":[213],"WP_Customize_Control::render_content":[241,248,265,265,281],"WP_Customize_Color_Control::render_content":[380],"WP_Customize_Image_Control::render_content":[545,551],"WP_Customize_Header_Image_Control::print_header_image":[796],"WP_Customize_Section::render":[82,83],"WP_Embed::maybe_make_link":[273],"WP_Styles::do_item":[60,66],"comments_popup_link":[981,1013],"comment_form":[1525,1527,1529,1559,1577,1577],"sanitize_comment_cookies":[636,643],"WP_Widget_Pages::form":[63,64],"WP_Widget_Search::form":[215],"WP_Widget_Archives::widget":[252],"WP_Widget_Archives::form":[281],"WP_Widget_Meta::widget":[316,317,318],"WP_Widget_Meta::form":[339],"WP_Widget_Calendar::form":[380],"WP_Widget_Text::form":[426],"WP_Widget_Categories::form":[506],"WP_Widget_Recent_Posts::widget":[574],"WP_Widget_Recent_Posts::form":[611],"WP_Widget_Recent_Comments::form":[719],"WP_Widget_RSS::widget":[768],"wp_widget_rss_output":[859,863],"wp_widget_rss_form":[928,929],"WP_Widget_Tag_Cloud::form":[1068,1076],"get_links":[981,982],"get_the_attachment_link":[1903],"get_attachment_icon":[2003],"get_attachment_innerHTML":[2032],"attribute_escape":[2144],"get_boundary_post_rel_link":[2741],"get_index_rel_link":[2775],"get_parent_post_rel_link":[2816],"get_the_category_rss":[327,327],"translate_smiley":[1739],"_links_add_target":[3175],"wp_nonce_field":[1209],"wp_referer_field":[1235],"wp_original_referer_field":[1261],"wp_timezone_choice":[3392,3412,3425,3445],"wp_login_form":[279,280,280,283,284,287,289,289],"get_archives_link":[827],"get_calendar":[1160,1172,1180,1220,1234,1248,1259],"feed_links":[1609,1610],"feed_links_extra":[1672],"get_search_query":[1830],"the_search_query":[1844],"esc_attr__":[113],"esc_attr_e":[156],"esc_attr_x":[209],"edit_post_link":[935],"get_adjacent_post_rel_link":[1232],"wp_print_media_templates":[329,364],"get_image_tag":[233,235,235,238,238],"img_caption_shortcode":[652,654],"wp_embed_handler_googlevideo":[1100,1100,1100],"Walker_Nav_Menu::start_el":[76,79,83,84,85,86],"wp_nav_menu":[191,192,231,231],"form_option":[123],"get_avatar":[1596],"the_title_attribute":[82],"wp_dropdown_pages":[788,788,792],"wp_page_menu":[905,924],"wp_get_attachment_link":[1171],"wp_list_post_revisions":[1426],"sanitize_post_field":[2029,2048],"wp_rss":[888],"wp_default_scripts":[79,80,81,82,87,88,89,348],"_print_scripts":[709],"_print_styles":[828],"sanitize_term_field":[1649,1667],"get_the_taxonomies":[3122],"__main":[74,79,84,97,76,79,82],"preview_theme_ob_filter_callback":[649],"wp_get_update_data":[363],"wp_dropdown_users":[1040,1044],"sanitize_user_field":[1129,1148]}},"wp_admin_bar_edit_menu":{"doc":"\/**\n * Provide an edit link for posts and terms.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":422,"missingDoc":false,"filters":[],"uses":{"get_current_screen":[426],"get_post":[427],"add_menu":[436,446,463,473],"get_permalink":[439],"is_object":[442],"get_taxonomy":[443,469],"get_term_link":[449],"get_post_type_object":[431,459],"current_user_can":[432,470,460],"get_queried_object":[453],"get_edit_post_link":[466],"get_edit_term_link":[476],"is_admin":[425]},"used_by":[]},"get_post":{"doc":"\/**\n * Retrieves post data given a post ID or post object.\n *\n * See {@link sanitize_post()} for optional $filter values. Also, the parameter\n * $post, must be given as a variable, since it is passed by reference.\n *\n * @since 1.5.1\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post\n *\n * @param int|object $post Post ID or post object. Optional, default is the current post from the loop.\n * @param string $output Optional, default is Object. Either OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter Optional, default is raw.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":386,"missingDoc":false,"filters":[],"uses":{"is_object":[392],"sanitize_post":[394],"is_a":[390],"filter":[408],"to_array":[411,413],"array_values":[413]},"used_by":{"wp_admin_bar_edit_menu":[427],"get_the_modified_author":[72],"get_the_author_posts":[166],"redirect_canonical":[96],"map_meta_cap":[1017,1020,1067,1070,1115,1118,1153,1161,1177],"author_can":[1331],"get_the_terms":[1062],"has_term":[1182],"_WP_Editors::editor_settings":[399],"_WP_Editors::wp_fullscreen_html":[659],"WP_Embed::maybe_run_ajax_cache":[73],"WP_Embed::shortcode":[138],"WP_Embed::cache_oembed":[220],"wp_xmlrpc_server::_prepare_post":[650],"wp_xmlrpc_server::_prepare_page":[786],"wp_xmlrpc_server::_insert_post":[1008,1099],"wp_xmlrpc_server::wp_editPost":[1255],"wp_xmlrpc_server::wp_deletePost":[1316],"wp_xmlrpc_server::wp_getPost":[1397],"wp_xmlrpc_server::wp_getPage":[2263],"wp_xmlrpc_server::wp_deletePage":[2380],"wp_xmlrpc_server::wp_editPage":[2421],"wp_xmlrpc_server::wp_newComment":[2975],"wp_xmlrpc_server::wp_getMediaItem":[3282],"wp_xmlrpc_server::wp_getRevisions":[3531],"wp_xmlrpc_server::wp_restoreRevision":[3598],"wp_xmlrpc_server::blogger_getPost":[3738],"wp_xmlrpc_server::blogger_editPost":[3921],"wp_xmlrpc_server::blogger_deletePost":[3975],"wp_xmlrpc_server::mw_editPost":[4367],"wp_xmlrpc_server::mw_getPost":[4632],"wp_xmlrpc_server::mt_getPostCategories":[5108],"wp_xmlrpc_server::mt_setPostCategories":[5154],"wp_xmlrpc_server::mt_getTrackbackPings":[5218],"wp_xmlrpc_server::mt_publishPost":[5265],"wp_xmlrpc_server::pingback_ping":[5359],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5479],"get_comment_class":[315],"get_comments_number":[553],"comments_open":[774],"pings_open":[791],"wp_comment_form_unfiltered_html_nonce":[813],"get_comment_reply_link":[1051],"get_post_reply_link":[1104],"wp_new_comment":[1408],"wp_update_comment_count_now":[1614],"do_trackbacks":[1746],"_close_comments_for_old_post":[2052],"get_postdata":[29],"start_wp":[67],"user_can_edit_post":[251],"get_the_attachment_link":[1895],"get_attachment_icon_src":[1924],"get_attachment_icon":[1969],"get_attachment_innerHTML":[2026],"get_parent_post_rel_link":[2804],"wp_get_single_post":[3301],"__main":[45,37,46],"wp_scheduled_delete":[3483],"the_date_xml":[1321],"get_the_date":[1376],"get_the_time":[1447],"get_post_time":[1468],"get_post_modified_time":[1518],"the_weekday":[1538],"the_weekday_date":[1559],"feed_links_extra":[1642],"permalink_anchor":[58],"get_permalink":[99],"get_post_permalink":[181],"get_page_link":[241],"_get_page_link":[267],"get_attachment_link":[303,306],"get_edit_post_link":[896],"edit_post_link":[925],"get_delete_post_link":[955],"get_adjacent_post":[1125,1182,1193],"get_adjacent_post_rel_link":[1213,1212],"get_boundary_post":[1306],"adjacent_post_link":[1379,1379],"wp_get_shortlink":[2354,2362],"the_shortlink":[2424],"wp_get_attachment_image":[553],"gallery_shortcode":[672],"adjacent_image_link":[830],"get_attachment_taxonomies":[859],"wp_prepare_attachment_for_js":[1312],"wp_enqueue_media":[1474],"_update_blog_date_on_post_delete":[762],"get_blog_post":[159],"wp_update_nav_menu_item":[325],"wp_setup_nav_menu_item":[590],"wp_notify_postauthor":[991],"wp_notify_moderator":[1101],"get_the_ID":[29],"get_the_title":[103],"get_the_guid":[151],"get_the_content":[183],"get_the_excerpt":[264],"has_excerpt":[282],"get_post_class":[317],"get_body_class":[491],"post_password_required":[572],"_wp_link_page":[696],"Walker_Page::start_el":[1038],"wp_get_attachment_link":[1163],"prepend_attachment":[1196],"get_the_password_form":[1223],"get_page_template_slug":[1274],"wp_post_revision_title":[1297],"wp_list_post_revisions":[1353],"update_attached_file":[209],"get_post_ancestors":[687,696],"get_post_field":[725],"get_post_mime_type":[748],"get_post_format":[766],"set_post_format":[805],"get_post_status":[833],"get_post_type":[1075],"wp_trash_post":[2401],"wp_untrash_post":[2433],"wp_trash_post_comments":[2470],"wp_untrash_post_comments":[2511],"wp_insert_post":[2763,2928,2946],"wp_update_post":[2976],"wp_publish_post":[3021],"check_and_publish_future_post":[3053],"trackback_url_list":[3380],"get_page":[3438],"get_page_by_path":[3491],"get_page_by_title":[3511],"get_page_uri":[3597,3602],"is_local_attachment":[3859],"wp_get_attachment_metadata":[4169],"wp_update_attachment_metadata":[4191],"wp_get_attachment_url":[4210],"wp_get_attachment_thumb_file":[4249],"wp_get_attachment_thumb_url":[4271],"wp_attachment_is_image":[4298],"wp_mime_type_icon":[4330],"clean_post_cache":[4646],"wp_save_post_revision":[4934],"wp_get_post_autosave":[4984],"_wp_put_post_revision":[5071],"wp_get_post_revision":[5106],"wp_get_post_revisions":[5214],"wp_get_post_parent_id":[5267],"set_post_thumbnail":[5377,5379],"delete_post_thumbnail":[5397],"WP_Query::get_posts":[2136,2727],"WP_Query::get_queried_object":[3015],"get_the_taxonomies":[3094],"get_post_taxonomies":[3140]}},"get_permalink":{"doc":"\/**\n * Retrieve full permalink for current post or post ID.\n *\n * @since 1.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name.\n * @return string\n *\/","file":"link-template.php","line":80,"missingDoc":false,"filters":["'pre_post_link'","'post_link_category'","'post_link'"],"uses":{"get_post":[99],"is_object":[95],"get_page_link":[107],"get_attachment_link":[109],"in_array":[110,117],"get_post_types":[110],"get_post_permalink":[111],"get_option":[113,134],"strtotime":[118],"get_the_category":[122],"usort":[124],"get_term":[126],"get_category_parents":[129],"get_category":[134],"is_wp_error":[135],"strpos":[121,140],"get_userdata":[141],"explode":[145],"date":[145],"home_url":[160,163],"str_replace":[160],"user_trailingslashit":[161]},"used_by":{"wp_admin_bar_edit_menu":[439],"redirect_canonical":[86,99,116,119,122,127,210,216],"redirect_guess_404_permalink":[498,500],"wp_list_categories":[460],"_WP_Editors::wp_link_query":[795],"get_comment_link":[500,502,504],"get_comments_link":[519],"get_trackback_url":[708],"comments_popup_link":[1000],"get_comment_reply_link":[1059],"get_post_reply_link":[1110,1112],"comment_form":[1536,1537],"pingback":[1859],"trackback":[1913],"WP_Widget_RSS::widget":[771],"wp_widget_rss_process":[1010],"previous_post":[150],"next_post":[186],"get_boundary_post_rel_link":[2742],"get_parent_post_rel_link":[2817],"the_permalink_rss":[191],"wp_get_archives":[1031],"the_permalink":[16],"post_permalink":[225],"get_attachment_link":[310],"get_post_comments_feed_link":[478],"get_adjacent_post_rel_link":[1233],"adjacent_post_link":[1395],"get_comments_pagenum_link":[1692],"paginate_comments_links":[1825],"rel_canonical":[2320],"get_blog_permalink":[317],"wp_setup_nav_menu_item":[588,637],"wp_notify_postauthor":[1048,1049],"wp_notify_moderator":[1119,1126,1133],"get_the_content":[219],"_wp_link_page":[699,702,704,706],"Walker_Page::start_el":[1051],"wp_insert_post":[2924],"_transition_post_status":[4797],"wp_old_slug_redirect":[3606],"SimplePie_Item::get_id":[241,252,250],"__main":[71,65,72]}},"get_taxonomy":{"doc":"\/**\n * Retrieves the taxonomy object of $taxonomy.\n *\n * The get_taxonomy function will first check that the parameter string given\n * is a taxonomy object and if it is, it will return it.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wp_taxonomies\n * @uses taxonomy_exists() Checks whether taxonomy exists\n *\n * @param string $taxonomy Name of taxonomy object to return\n * @return object|bool The Taxonomy Object or false if $taxonomy doesn't exist\n *\/","file":"taxonomy.php","line":205,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[208]},"used_by":{"wp_admin_bar_edit_menu":[443,469],"redirect_canonical":[178],"wp_xmlrpc_server::wp_newTerm":[1547],"wp_xmlrpc_server::wp_editTerm":[1635],"wp_xmlrpc_server::wp_deleteTerm":[1727],"wp_xmlrpc_server::wp_getTerm":[1794],"wp_xmlrpc_server::wp_getTerms":[1847],"wp_xmlrpc_server::wp_getTaxonomy":[1926],"WP_Widget_Tag_Cloud::widget":[1043],"WP_Widget_Tag_Cloud::form":[1072],"wp_title":[546],"get_term_feed_link":[608],"get_edit_term_link":[684],"edit_term_link":[720],"wp_setup_nav_menu_item":[595,653],"wp_insert_post":[2912],"wp_insert_attachment":[4033],"_post_format_request":[5444],"is_taxonomy_hierarchical":[256],"wp_delete_term":[1821],"wp_get_object_terms":[1914,1921],"wp_set_object_terms":[2228],"wp_update_term_count_now":[2519],"_pad_term_counts":[2873],"get_term_link":[3012],"get_the_taxonomies":[3107]}},"get_term_link":{"doc":"\/**\n * Generates a permalink for a taxonomy term archive.\n *\n * @since 2.5.0\n *\n * @uses apply_filters() Calls 'term_link' with term link and term object, and taxonomy parameters.\n * @uses apply_filters() For the post_tag Taxonomy, Calls 'tag_link' with tag link and tag ID as parameters.\n * @uses apply_filters() For the category Taxonomy, Calls 'category_link' filter on category link and category ID.\n *\n * @param object|int|string $term\n * @param string $taxonomy (optional if $term is object)\n * @return string|WP_Error HTML link to taxonomy term archive on success, WP_Error if term does not exist.\n *\/","file":"taxonomy.php","line":2990,"missingDoc":false,"filters":["'tag_link'","'category_link'","'term_link'"],"uses":{"get_term":[2995,3027],"get_term_by":[2997],"is_int":[2994],"is_object":[2993,3001],"__":[3002],"is_wp_error":[3004],"get_extra_permastruct":[3009],"get_taxonomy":[3012],"home_url":[3021,3036],"get_ancestors":[3025],"array_reverse":[3030],"str_replace":[3032,3034],"implode":[3032],"user_trailingslashit":[3036]},"used_by":{"wp_admin_bar_edit_menu":[449],"redirect_canonical":[167],"get_category_link":[22],"wp_tag_cloud":[538],"Walker_Category::start_el":[828],"get_tag_link":[968],"get_the_term_list":[1101],"get_term_feed_link":[612],"wp_setup_nav_menu_item":[603,658],"get_post_format_link":[5415],"get_the_taxonomies":[3122]}},"get_queried_object":{"doc":"\/**\n * Retrieve the currently-queried object. Wrapper for $wp_query->get_queried_object()\n *\n * @uses WP_Query::get_queried_object\n *\n * @since 3.1.0\n * @access public\n *\n * @return object\n *\/","file":"query.php","line":40,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[42]},"used_by":{"wp_admin_bar_edit_menu":[453],"redirect_canonical":[166],"wp_list_categories":[469],"term_description":[1044],"WP::handle_404":[516],"wp_title":[545,552],"single_post_title":[629],"post_type_archive_title":[657],"single_term_title":[726],"feed_links_extra":[1649,1654,1668],"edit_term_link":[717],"_wp_menu_item_classes_by_context":[256],"get_body_class":[429,458,465,472,479],"get_queried_object":[42],"WP_Query::get_queried_object_id":[3037],"WP_Query::is_post_type_archive":[3088],"WP_Query::is_author":[3122],"WP_Query::is_category":[3154],"WP_Query::is_tag":[3186],"WP_Query::is_tax":[3221],"WP_Query::is_page":[3381],"WP_Query::is_single":[3462],"WP_Query::is_singular":[3494],"get_author_template":[83],"get_category_template":[109],"get_tag_template":[135],"get_taxonomy_template":[166],"get_page_template":[243],"get_single_template":[289]}},"get_edit_post_link":{"doc":"\/**\n * Retrieve edit posts link for post.\n *\n * Can be used within the WordPress loop or outside of it. Can be used with\n * pages, posts, attachments, and revisions.\n *\n * @since 2.3.0\n *\n * @param int $id Optional. Post ID.\n * @param string $context Optional, defaults to display. How to write the '&', defaults to '&'.\n * @return string\n *\/","file":"link-template.php","line":895,"missingDoc":false,"filters":["'get_edit_post_link'"],"uses":{"get_post":[896],"get_post_type_object":[904],"current_user_can":[908],"admin_url":[911],"sprintf":[911]},"used_by":{"wp_admin_bar_edit_menu":[466],"edit_post_link":[928],"wp_prepare_attachment_for_js":[1356],"wp_post_revision_title":[1311]}},"get_edit_term_link":{"doc":"\/**\n * Retrieve edit term url.\n *\n * @since 3.1.0\n *\n * @param int $term_id Term ID\n * @param string $taxonomy Taxonomy\n * @param string $object_type The object type\n * @return string\n *\/","file":"link-template.php","line":683,"missingDoc":false,"filters":["'get_edit_term_link'"],"uses":{"get_taxonomy":[684],"current_user_can":[685],"get_term":[688],"add_query_arg":[699],"admin_url":[699]},"used_by":{"wp_admin_bar_edit_menu":[476],"get_edit_tag_link":[654],"edit_term_link":[727]}},"wp_admin_bar_new_content_menu":{"doc":"\/**\n * Add \"Add New\" menu.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":487,"missingDoc":false,"filters":[],"uses":{"get_post_types":[490],"current_user_can":[492,495,498,501,508,518,518],"_x":[499,519,524,531],"add_menu":[526,538],"admin_url":[529,542],"current":[529],"array_keys":[529]},"used_by":[]},"get_post_types":{"doc":"\/**\n * Get a list of all registered post type objects.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.9.0\n * @uses $wp_post_types\n * @see register_post_type\n *\n * @param array|string $args An array of key => value arguments to match against the post type objects.\n * @param string $output The type of output to return, either post type 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of post type names or objects\n *\/","file":"post.php","line":1118,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[1123]},"used_by":{"wp_admin_bar_new_content_menu":[490],"redirect_guess_404_permalink":[483],"_WP_Editors::wp_link_query":[756],"wp_xmlrpc_server::wp_getPostTypes":[3477],"WP::parse_request":[289],"get_permalink":[110],"_add_post_type_submenus":[1554],"wp_unique_post_slug":[3098],"get_pages":[3642],"_get_last_post_time":[4583],"WP_Query::get_posts":[2226,2406],"WP_Rewrite::generate_rewrite_rules":[1394]}},"_x":{"doc":"\/**\n * Retrieve translated string with gettext context\n *\n * Quite a few times, there will be collisions with similar translatable text\n * found in more than two places but with different translated context.\n *\n * By including the context in the pot file translators can translate the two\n * strings differently.\n *\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $context Context information for the translators\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"l10n.php","line":189,"missingDoc":false,"filters":[],"uses":{"translate_with_gettext_context":[190]},"used_by":{"wp_admin_bar_new_content_menu":[499,519,524,531],"_WP_Editors::editor":[114],"comment_type":[678],"comment_form":[1535],"get_comment_statuses":[422,424],"WP_Widget_Recent_Comments::widget":[694],"wptexturize":[37,39,42,45,47,50,52,55,57],"wp_trim_words":[2182],"capital_P_dangit":[3272],"get_calendar":[1146],"feed_links":[1600],"feed_links_extra":[1623],"register_admin_color_schemes":[2038,2040],"wp_mce_translation":[357,401],"_ex":[205],"WP_Locale::init":[184],"wp_post_revision_title":[1304],"wp_list_post_revisions":[1374],"create_initial_post_types":[22,38,55,56,57,110,117,124,131,138,145],"get_post_type_labels":[1496,1496,1497,1497,1498,1498],"wp_set_post_terms":[3203],"get_post_format_strings":[5325,5326,5327,5328,5329,5330,5331,5332,5333,5334],"wp_default_scripts":[278,306,394,419,466],"create_initial_taxonomies":[111,112],"get_taxonomy_labels":[427,427,428,428],"wp_insert_user":[1347]}},"wp_admin_bar_comments_menu":{"doc":"\/**\n * Add edit comments link with awaiting moderation count bubble.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":552,"missingDoc":false,"filters":[],"uses":{"current_user_can":[553],"wp_count_comments":[556],"esc_attr":[558],"sprintf":[558],"_n":[558],"number_format_i18n":[558,561],"add_menu":[563],"admin_url":[566]},"used_by":[]},"wp_count_comments":{"doc":"\/**\n * Retrieve total comments for blog or single post.\n *\n * The properties of the returned object contain the 'moderated', 'approved',\n * and spam comments for either the entire blog or single post. Those properties\n * contain the amount of comments that match the status. The 'total_comments'\n * property contains the integer of total comments.\n *\n * The comment stats are cached and then retrieved, if they already exist in the\n * cache.\n *\n * @since 2.5.0\n *\n * @param int $post_id Optional. Post ID.\n * @return object Comment stats.\n *\/","file":"comment.php","line":935,"missingDoc":false,"filters":["'wp_count_comments'"],"uses":{"wp_cache_get":[944],"prepare":[951],"get_results":[953],"wp_cache_set":[972]},"used_by":{"wp_admin_bar_comments_menu":[556],"wp_xmlrpc_server::wp_getCommentCount":[3071]}},"_n":{"doc":"\/**\n * Retrieve the plural or single form based on the amount.\n *\n * If the domain is not set in the $l10n list, then a comparison will be made\n * and either $plural or $single parameters returned.\n *\n * If the domain does exist, then the parameters $single, $plural, and $number\n * will first be passed to the domain's ngettext method. Then it will be passed\n * to the 'ngettext' filter hook along with the same parameters. The expected\n * type will be a string.\n *\n * @since 2.8.0\n * @uses $l10n Gets list of domain translated string (gettext_reader) objects\n * @uses apply_filters() Calls 'ngettext' hook on domains text returned,\n *\t\talong with $single, $plural, and $number parameters. Expected to return string.\n *\n * @param string $single The text that will be used if $number is 1\n * @param string $plural The text that will be used if $number is not 1\n * @param int $number The number to compare against to use either $single or $plural\n * @param string $domain Optional. The domain identifier the text should be retrieved in\n * @return string Either $single or $plural translated text\n *\/","file":"l10n.php","line":238,"missingDoc":false,"filters":["'ngettext'"],"uses":{"get_translations_for_domain":[239],"translate_plural":[240]},"used_by":{"wp_admin_bar_comments_menu":[558],"default_topic_count_text":[563],"WP_Customize_Manager::register_controls":[894],"_nc":[1831],"human_time_diff":[2113,2119,2125],"translate_nooped_plural":[307],"wp_notify_moderator":[1149],"__main":[26],"wp_get_update_data":[359,361]}},"number_format_i18n":{"doc":"\/**\n * Convert integer number to format based on the locale.\n *\n * @since 2.3.0\n *\n * @param int $number The number to convert based on locale.\n * @param int $decimals Precision of the number of decimal places.\n * @return string Converted number in string format.\n *\/","file":"functions.php","line":153,"missingDoc":false,"filters":["'number_format_i18n'"],"uses":{"number_format":[155],"absint":[155]},"used_by":{"wp_admin_bar_comments_menu":[558,561],"wp_admin_bar_updates_menu":[622],"default_topic_count_text":[563],"WP_Customize_Manager::register_controls":[894],"comments_number":[580],"size_format":[191],"paginate_links":[1964],"timer_stop":[227],"wp_notify_moderator":[1150],"__main":[27]}},"is_ssl":{"doc":"\/**\n * Determine if SSL is used.\n *\n * @since 2.6.0\n *\n * @return bool True if SSL, false if not used.\n *\/","file":"functions.php","line":3092,"missingDoc":false,"filters":[],"uses":{"strtolower":[3094]},"used_by":{"wp_admin_bar_appearance_menu":[585],"redirect_canonical":[47],"WP_Admin_Bar::__get":[18],"wp_guess_url":[3158],"wp_login_form":[259],"get_home_url":[1914],"network_home_url":[2143],"set_url_scheme":[2235],"filter_SSL":[1901],"wp_parse_auth_cookie":[615],"wp_set_auth_cookie":[661],"auth_redirect":[745,750],"get_avatar":[1636],"wp_signon":[44]}},"add_query_arg":{"doc":"\/**\n * Retrieve a modified URL query string.\n *\n * You can rebuild the URL and append a new query variable to the URL query by\n * using this function. You can also retrieve the full URL with query data.\n *\n * Adding a single key & value or an associative array. Setting a key value to\n * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER\n * value. Additional values provided are expected to be encoded appropriately\n * with urlencode() or rawurlencode().\n *\n * @since 1.5.0\n *\n * @param mixed $param1 Either newkey or an associative_array\n * @param mixed $param2 Either newvalue or oldquery or uri\n * @param mixed $param3 Optional. Old query or uri\n * @return string New URL query string.\n *\/","file":"functions.php","line":638,"missingDoc":false,"filters":[],"uses":{"func_get_args":[640],"count":[642,647,670],"is_array":[641,687],"substr":[654,660,663],"strlen":[654],"strstr":[653],"stripos":[661,658],"explode":[669],"strpos":[677,668],"wp_parse_str":[685],"urlencode_deep":[686],"array_merge":[689],"build_query":[699],"trim":[700],"preg_replace":[701],"rtrim":[703]},"used_by":{"wp_admin_bar_appearance_menu":[590],"redirect_canonical":[192,266,307],"WP_oEmbed::fetch":[167,168,169],"WP_oEmbed::_fetch_with_format":[192],"WP_Scripts::do_item":[118],"WP_Styles::_css_href":[143],"get_comment_link":[502],"get_comment_reply_link":[1061],"spawn_cron":[233],"dropdown_cats":[711],"wp_get_links":[899],"remove_query_arg":[719,722],"wp_nonce_url":[1177],"wp_logout_url":[218],"wp_login_url":[241,244],"wp_lostpassword_url":[319],"paginate_links":[1959,1973,1987],"wp_admin_css_uri":[2059],"get_post_permalink":[203,205],"get_post_comments_feed_link":[487,489],"get_edit_term_link":[699],"get_search_feed_link":[784],"get_search_comments_feed_link":[815,817],"get_post_type_archive_feed_link":[877],"get_delete_post_link":[967],"get_edit_user_link":[1077],"get_pagenum_link":[1436],"get_comments_pagenum_link":[1699,1705],"paginate_comments_links":[1817],"wp_enqueue_media":[1460],"get_avatar":[1656],"_wp_link_page":[702],"wp_list_post_revisions":[1401],"_post_format_link":[5465],"wp_style_loader_src":[625],"preview_theme_ob_filter_callback":[646]}},"wp_customize_url":{"doc":"\/**\n * Returns a URL to load the theme customizer.\n *\n * @since 3.4.0\n *\n * @param string $stylesheet Optional. Theme to customize. Defaults to current theme.\n * \tThe theme's stylesheet will be urlencoded if necessary.\n *\/","file":"theme.php","line":1681,"missingDoc":false,"filters":[],"uses":{"admin_url":[1682],"urlencode":[1684],"esc_url":[1685]},"used_by":{"wp_admin_bar_appearance_menu":[590]}},"current_theme_supports":{"doc":"\/**\n * Checks a theme's support for a given feature\n *\n * @since 2.9.0\n * @param string $feature the feature being checked\n * @return boolean\n *\/","file":"theme.php","line":1522,"missingDoc":false,"filters":["'current_theme_supports-' . $feature"],"uses":{"current_theme_supports":[1526],"func_num_args":[1532],"array_slice":[1535],"func_get_args":[1535],"in_array":[1545,1552]},"used_by":{"wp_admin_bar_appearance_menu":[597,600,600,603,606],"WP_Admin_Bar::initialize":[48],"wp_xmlrpc_server::initialise_blog_option_info":[358],"wp_xmlrpc_server::_prepare_post":[649],"wp_xmlrpc_server::wp_getPostFormats":[3373],"WP_Widget_Recent_Comments::recent_comments_style":[647],"wp_widgets_add_menu":[2710],"feed_links":[1595],"wp_enqueue_media":[1480],"create_initial_taxonomies":[118],"display_header_text":[874],"_get_random_header_data":[924],"get_custom_header":[1037],"remove_editor_styles":[1233],"_custom_header_background_just_in_time":[1393,1407],"current_theme_supports":[1526],"require_if_theme_supports":[1575]}},"wp_admin_bar_updates_menu":{"doc":"\/**\n * Provide an update link if theme\/plugin\/core updates are available.\n *\n * @since 3.1.0\n *\/","file":"admin-bar.php","line":615,"missingDoc":false,"filters":[],"uses":{"wp_get_update_data":[617],"number_format_i18n":[622],"add_menu":[625],"network_admin_url":[628]},"used_by":[]},"wp_get_update_data":{"doc":"","file":"update.php","line":333,"missingDoc":true,"filters":["'wp_get_update_data'"],"uses":{"get_site_transient":[337,343],"count":[339,345],"current_user_can":[336,342,350,348],"get_core_updates":[349],"in_array":[350],"function_exists":[348],"sprintf":[357,359,361],"__":[357],"_n":[359,361],"esc_attr":[363],"implode":[363]},"used_by":{"wp_admin_bar_updates_menu":[617]}},"wp_admin_bar_search_menu":{"doc":"\/**\n * Add search form.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":640,"missingDoc":false,"filters":[],"uses":{"is_admin":[641],"esc_url":[644],"home_url":[644],"__":[646],"add_menu":[649]},"used_by":[]},"esc_url":{"doc":"\/**\n * Checks and cleans a URL.\n *\n * A number of characters are removed from the URL. If the URL is for displaying\n * (the default behaviour) ampersands are also replaced. The 'clean_url' filter\n * is applied to the returned cleaned URL.\n *\n * @since 2.8.0\n * @uses wp_kses_bad_protocol() To only permit protocols in the URL set\n *\t\tvia $protocols or the common ones set in the function.\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols Optional. An array of acceptable protocols.\n *\t\tDefaults to 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' if not set.\n * @param string $_context Private. Use esc_url_raw() for database usage.\n * @return string The cleaned $url after the 'clean_url' filter is applied.\n *\/","file":"formatting.php","line":2580,"missingDoc":false,"filters":["'clean_url'"],"uses":{"preg_replace":[2585],"_deep_replace":[2587],"str_replace":[2588,2600,2601],"strpos":[2593],"in_array":[2593],"preg_match":[2594],"wp_kses_normalize_entities":[2599],"wp_allowed_protocols":[2605],"is_array":[2604],"wp_kses_bad_protocol":[2606]},"used_by":{"wp_admin_bar_search_menu":[644],"wp_list_authors":[339],"_walk_bookmarks":[72],"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_list_categories":[461],"wp_generate_tag_cloud":[671],"Walker_Category::start_el":[828,842],"get_the_term_list":[1104],"WP_oEmbed::data2html":[275,275,286],"WP_Admin_Bar::_render":[357],"WP_Admin_Bar::_render_item":[420],"WP_Customize_Image_Control::render_content":[534],"WP_Customize_Image_Control::print_tab_image":[630,631],"WP_Customize_Header_Image_Control::print_header_image":[795,797],"WP_Theme::markup_header":[669],"WP_Scripts::do_item":[120],"WP_Styles::_css_href":[145],"get_comment_author_url":[210],"comments_template":[879],"get_comment_reply_link":[1059,1061],"wp_set_comment_cookies":[621],"WP_Widget_Recent_Comments::widget":[694],"WP_Widget_RSS::widget":[771,780],"wp_widget_rss_output":[858],"wp_widget_rss_form":[930],"wp_widget_rss_process":[1010],"get_links":[976],"comments_rss":[1218],"clean_url":[2093],"get_index_rel_link":[2775],"__main":[31,32,51,54,35],"the_permalink_rss":[191],"comments_link_feed":[201],"comment_guid":[214],"comment_link":[242],"self_link":[491],"_make_url_clickable_cb":[1512],"_make_web_ftp_clickable_cb":[1535],"esc_url_raw":[2623],"wp_nonce_ays":[2026],"get_search_form":[161],"wp_loginout":[189,191],"wp_login_form":[276,290],"get_archives_link":[828],"feed_links_extra":[1672],"paginate_links":[1961,1975,1989],"wp_admin_css":[2102,2104],"the_feed_link":[415],"post_comments_feed_link":[512],"get_pagenum_link":[1470],"next_posts":[1506],"previous_posts":[1586],"get_next_comments_link":[1746],"get_previous_comments_link":[1783],"wp_shortlink_wp_head":[2385],"the_shortlink":[2435],"get_blogaddress_by_id":[34],"get_blogaddress_by_name":[57],"get_blogaddress_by_domain":[83],"get_most_active_blogs":[196],"wpmu_signup_blog_notification":[732,744,754],"newblog_notify_siteadmin":[1020],"newuser_notify_siteadmin":[1061],"the_guid":[135],"_wp_link_page":[709],"get_the_password_form":[1225],"wp_rss":[887],"_wp_customize_loader_settings":[1658],"wp_customize_url":[1685],"wp_version_check":[108],"sanitize_user_field":[1145]}},"wp_admin_bar_add_secondary_groups":{"doc":"\/**\n * Add secondary menus.\n *\n * @since 3.3.0\n *\/","file":"admin-bar.php","line":665,"missingDoc":false,"filters":[],"uses":{"add_group":[666,673]},"used_by":[]},"wp_admin_bar_header":{"doc":"\/**\n * Style and scripts for the admin bar.\n *\n * @since 3.1.0\n *\n *\/","file":"admin-bar.php","line":688,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_admin_bar_bump_cb":{"doc":"\/**\n * Default admin bar callback.\n *\n * @since 3.1.0\n *\n *\/","file":"admin-bar.php","line":699,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"show_admin_bar":{"doc":"\/**\n * Set the display status of the admin bar.\n *\n * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action.\n *\n * @since 3.1.0\n *\n * @param bool $show Whether to allow the admin bar to show.\n * @return void\n *\/","file":"admin-bar.php","line":717,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Customize_Manager::setup_theme":[117],"preview_theme":[561]}},"_get_admin_bar_pref":{"doc":"\/**\n * Retrieve the admin bar display preference of a user.\n *\n * @since 3.1.0\n * @access private\n *\n * @param string $context Context of this preference check. Defaults to 'front'. The 'admin'\n * \tpreference is no longer used.\n * @param int $user Optional. ID of the user to check, defaults to 0 for current user.\n * @return bool Whether the admin bar should be showing for this user.\n *\/","file":"admin-bar.php","line":764,"missingDoc":false,"filters":[],"uses":{"get_user_option":[765]},"used_by":{"is_admin_bar_showing":[744]}},"get_user_option":{"doc":"\/**\n * Retrieve user option that can be either per Site or per Network.\n *\n * If the user ID is not given, then the current user will be used instead. If\n * the user ID is given, then the user data will be retrieved. The filter for\n * the result, will also pass the original option name and finally the user data\n * object as the third parameter.\n *\n * The option will first check for the per site name and then the per Network name.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database object for queries.\n * @uses apply_filters() Calls 'get_user_option_$option' hook with result,\n *\t\toption parameter, and user data object.\n *\n * @param string $option User option name.\n * @param int $user Optional. User ID.\n * @param bool $deprecated Use get_option() to check for an option in the options table.\n * @return mixed\n *\/","file":"user.php","line":233,"missingDoc":false,"filters":["\"get_user_option_{$option}\""],"uses":{"_deprecated_argument":[237],"get_current_user_id":[240],"get_userdata":[242],"get":[246,248],"has_prop":[247,245]},"used_by":{"_get_admin_bar_pref":[765],"user_can_richedit":[1757],"wp_user_settings":[548,557],"get_all_user_settings":[681],"auth_redirect":[769],"wp_style_loader_src":[611]}},"AtomParser::AtomParser":{"doc":"","file":"atomlib.php","line":90,"missingDoc":true,"filters":[],"uses":{"create_function":[94,95]},"used_by":[]},"AtomParser::_p":{"doc":"","file":"atomlib.php","line":98,"missingDoc":true,"filters":[],"uses":{"str_repeat":[100]},"used_by":[]},"AtomParser::error_handler":{"doc":"","file":"atomlib.php","line":104,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::parse":{"doc":"","file":"atomlib.php","line":108,"missingDoc":true,"filters":[],"uses":{"set_error_handler":[110],"array_unshift":[112],"xml_parser_create_ns":[114],"xml_set_object":[115],"xml_set_element_handler":[116],"xml_parser_set_option":[117,118],"xml_set_character_data_handler":[119],"xml_set_default_handler":[120],"xml_set_start_namespace_decl_handler":[121],"xml_set_end_namespace_decl_handler":[122],"fopen":[128],"fread":[129],"trigger_error":[133],"sprintf":[133],"__":[133],"xml_error_string":[134],"xml_get_error_code":[134],"xml_get_current_line_number":[135],"xml_parse":[132],"feof":[132],"fclose":[140],"xml_parser_free":[142],"restore_error_handler":[144]},"used_by":[]},"AtomParser::start_element":{"doc":"","file":"atomlib.php","line":149,"missingDoc":true,"filters":[],"uses":{"array_pop":[151],"split":[151],"_p":[162],"array_unshift":[166,198],"trigger_error":[175],"ns_to_prefix":[181,190],"xml_escape":[182],"join":[185,199],"array_map":[185,199],"array_keys":[185,199,211,214],"array_values":[185,199],"strlen":[186,200],"array_push":[193,205,217,220,222],"is_declared_content_ns":[192],"count":[197],"in_array":[211,214,207,207]},"used_by":[]},"AtomParser::end_element":{"doc":"","file":"atomlib.php","line":228,"missingDoc":true,"filters":[],"uses":{"array_pop":[230],"split":[230],"count":[232,244],"array_shift":[241,270],"array_push":[245,248,250,266,275],"xml_escape":[248],"join":[255,257],"in_array":[254],"substr":[262],"ns_to_prefix":[265],"_p":[279]},"used_by":[]},"AtomParser::start_ns":{"doc":"","file":"atomlib.php","line":282,"missingDoc":true,"filters":[],"uses":{"_p":[283],"array_push":[284]},"used_by":[]},"AtomParser::end_ns":{"doc":"","file":"atomlib.php","line":287,"missingDoc":true,"filters":[],"uses":{"_p":[288]},"used_by":[]},"AtomParser::cdata":{"doc":"","file":"atomlib.php","line":291,"missingDoc":true,"filters":[],"uses":{"_p":[292],"str_replace":[292],"trim":[292],"array_push":[294]},"used_by":[]},"AtomParser::_default":{"doc":"","file":"atomlib.php","line":298,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::ns_to_prefix":{"doc":"","file":"atomlib.php","line":303,"missingDoc":true,"filters":[],"uses":{"split":[305],"array_pop":[308],"join":[312],"strlen":[315,327]},"used_by":[]},"AtomParser::is_declared_content_ns":{"doc":"","file":"atomlib.php","line":335,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"AtomParser::xml_escape":{"doc":"","file":"atomlib.php","line":346,"missingDoc":true,"filters":[],"uses":{"str_replace":[348]},"used_by":[]},"get_the_author":{"doc":"\/**\n * Retrieve the author of the current post.\n *\n * @since 1.5\n * @uses $authordata The current author's DB object.\n * @uses apply_filters() Calls 'the_author' hook on the author display name.\n *\n * @param string $deprecated Deprecated.\n * @return string The author's display name.\n *\/","file":"author-template.php","line":23,"missingDoc":false,"filters":["'the_author'"],"uses":{"_deprecated_argument":[27],"is_object":[29]},"used_by":{"the_author":[57,58],"get_the_author_link":[137,137,139],"the_author_posts_link":[204,205]}},"_deprecated_argument":{"doc":"\/**\n * Marks a function argument as deprecated and informs when it has been used.\n *\n * This function is to be used whenever a deprecated function argument is used.\n * Before this function is called, the argument must be checked for whether it was\n * used by comparing it to its default value or evaluating whether it is empty.\n * For example:\n * <code>\n * if ( !empty($deprecated) )\n * \t_deprecated_argument( __FUNCTION__, '3.0' );\n * <\/code>\n *\n * There is a hook deprecated_argument_run that will be called that can be used\n * to get the backtrace up to what file and function used the deprecated\n * argument.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 3.0.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_argument_run' and passes the function name, a message on the change,\n * and the version in which the argument was deprecated.\n * @uses apply_filters() Calls 'deprecated_argument_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called\n * @param string $version The version of WordPress that deprecated the argument used\n * @param string $message Optional. A message regarding the change.\n *\/","file":"functions.php","line":2938,"missingDoc":false,"filters":["'deprecated_argument_run'","'deprecated_argument_trigger_error'"],"uses":{"trigger_error":[2945,2947],"sprintf":[2945,2947],"__":[2945,2947],"is_null":[2944]},"used_by":{"get_the_author":[27],"the_author":[53,55],"the_author_posts_link":[196],"WP_User::__isset":[590],"WP_User::__get":[610],"WP_User::__set":[636],"WP_User::has_cap":[920],"wp_dropdown_categories":[317],"get_categories":[47],"WP_Admin_Bar::__get":[21],"WP_Admin_Bar::add_node":[127],"comments_link":[532,534],"comments_number":[575],"trackback_url":[726],"trackback_rdf":[744],"discover_pingback_server_uri":[1648],"wp_clear_scheduled_hook":[159],"convert_chars":[1081],"is_email":[1792],"wp_get_http_headers":[544],"wp_upload_bits":[1717],"get_bloginfo":[410],"safecss_filter_attr":[1402],"load_plugin_textdomain":[422],"post_permalink":[223],"get_delete_post_link":[953],"get_adjacent_post":[1149],"update_blog_option":[470],"update_blog_status":[670],"get_last_updated":[727],"ms_subdomain_constants":[130],"add_option":[297],"get_the_excerpt":[262],"the_attachment_link":[1140],"wp_get_recent_posts":[2633],"WP_Query::get_posts":[1958],"get_user_option":[237],"wp_get_sidebars_widgets":[1009]}},"the_author":{"doc":"\/**\n * Display the name of the author of the current post.\n *\n * The behavior of this function is based off of old functionality predating\n * get_the_author(). This function is not deprecated, but is designed to echo\n * the value from get_the_author() and as an result of any old theme that might\n * still use the old behavior will also pass the value from get_the_author().\n *\n * The normal, expected behavior of this function is to echo the author and not\n * return it. However, backwards compatibility has to be maintained.\n *\n * @since 0.71\n * @see get_the_author()\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author\n *\n * @param string $deprecated Deprecated.\n * @param string $deprecated_echo Deprecated. Use get_the_author(). Echo the string or return it.\n * @return string The author's display name, from get_the_author().\n *\/","file":"author-template.php","line":51,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[53,55],"__":[55],"get_the_author":[57,58]},"used_by":{"__main":[32,43,39]}},"get_the_modified_author":{"doc":"\/**\n * Retrieve the author who last edited the current post.\n *\n * @since 2.8\n * @uses $post The current post's DB object.\n * @uses get_post_meta() Retrieves the ID of the author who last edited the current post.\n * @uses get_userdata() Retrieves the author's DB object.\n * @uses apply_filters() Calls 'the_modified_author' hook on the author display name.\n * @return string The author's display name.\n *\/","file":"author-template.php","line":71,"missingDoc":false,"filters":["'the_modified_author'"],"uses":{"get_userdata":[73],"get_post_meta":[72],"get_post":[72]},"used_by":{"the_modified_author":[86]}},"get_userdata":{"doc":"\/**\n * Retrieve user info by user ID.\n *\n * @since 0.71\n *\n * @param int $user_id User ID\n * @return bool|object False on failure, WP_User object on success\n *\/","file":"pluggable.php","line":120,"missingDoc":false,"filters":[],"uses":{"get_user_by":[121]},"used_by":{"get_the_modified_author":[73],"get_the_author_meta":[103],"get_author_posts_url":[227],"wp_list_authors":[291],"redirect_canonical":[155],"map_meta_cap":[1039,1089,1143],"author_can":[1334],"user_can":[1356],"is_super_admin":[1453],"wp_xmlrpc_server::_prepare_page":[805],"wp_xmlrpc_server::_insert_post":[1046],"wp_xmlrpc_server::wp_getUser":[2039],"wp_xmlrpc_server::wp_getProfile":[2159],"wp_xmlrpc_server::mw_newPost":[4131],"wp_xmlrpc_server::mw_getPost":[4666],"wp_xmlrpc_server::mw_getRecentPosts":[4797],"get_comment_author":[27],"get_comment_class":[310],"wp_allow_comment":[687],"user_can_create_post":[210],"user_can_create_draft":[230],"user_can_edit_post":[250,252],"user_can_set_post_date":[299],"user_can_edit_post_date":[319],"user_can_edit_user":[378,379],"get_permalink":[141],"get_edit_user_link":[1069],"add_user_to_blog":[181],"remove_user_from_blog":[244],"newuser_notify_siteadmin":[1059],"wpmu_welcome_notification":[1237],"wpmu_welcome_user_notification":[1286],"wpmu_log_new_registrations":[1512],"is_user_spammy":[1755],"wp_generate_auth_cookie":[579],"wp_notify_postauthor":[992],"wp_notify_moderator":[1102],"wp_new_user_notification":[1198],"get_avatar":[1604,1615],"WP_Query::get_queried_object":[3022],"setup_postdata":[3630],"get_user_option":[242],"setup_userdata":[965],"wp_dropdown_users":[1067],"wp_update_user":[1454]}},"get_post_meta":{"doc":"\/**\n * Retrieve post meta field for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"post.php","line":1795,"missingDoc":false,"filters":[],"uses":{"get_metadata":[1796]},"used_by":{"get_the_modified_author":[72],"map_meta_cap":[1047,1097],"WP_Embed::shortcode":[171],"wp_xmlrpc_server::_prepare_post":[686],"wp_get_attachment_image":[557],"wp_prepare_attachment_for_js":[1332],"wp_enqueue_media":[1481],"_wp_menu_item_classes_by_context":[348,378],"wp_update_nav_menu_item":[386],"wp_get_nav_menu_items":[504,505,506],"wp_setup_nav_menu_item":[574,575,576,577,614,617,624,625],"wp_get_associated_nav_menu_items":[695],"get_page_template_slug":[1277],"get_post_thumbnail_id":[34],"get_attached_file":[186],"WP_Post::__get":[617,645],"get_post_custom":[1855],"wp_untrash_post":[2441],"wp_untrash_post_comments":[2517],"wp_delete_attachment":[4092],"wp_get_attachment_metadata":[4172],"wp_get_attachment_url":[4217],"wp_check_for_changed_slugs":[4430]}},"the_modified_author":{"doc":"\/**\n * Display the name of the author who last edited the current post.\n *\n * @since 2.8\n * @see get_the_author()\n * @return string The author's display name, from get_the_modified_author().\n *\/","file":"author-template.php","line":85,"missingDoc":false,"filters":[],"uses":{"get_the_modified_author":[86]},"used_by":[]},"get_the_author_meta":{"doc":"\/**\n * Retrieve the requested data of the author of the current post.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_meta\n * @since 2.8.0\n * @uses $authordata The current author's DB object (if $user_id not specified).\n * @param string $field selects the field of the users record.\n * @param int $user_id Optional. User ID.\n * @return string The author's field from the current author's DB object.\n *\/","file":"author-template.php","line":98,"missingDoc":false,"filters":["'get_the_author_' . $field"],"uses":{"get_userdata":[103],"in_array":[106]},"used_by":{"the_author_meta":[123],"get_the_author_link":[137,136],"get_the_author_description":[1333],"get_the_author_login":[1361],"get_the_author_firstname":[1389],"get_the_author_lastname":[1417],"get_the_author_nickname":[1445],"get_the_author_email":[1473],"get_the_author_icq":[1501],"get_the_author_yim":[1529],"get_the_author_msn":[1557],"get_the_author_aim":[1585],"get_author_name":[1614],"get_the_author_url":[1629],"get_the_author_ID":[1657],"get_profile":[2473],"__main":[33],"feed_links_extra":[1661],"wp_list_post_revisions":[1389]}},"the_author_meta":{"doc":"\/**\n * Retrieve the requested data of the author of the current post.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_meta\n * @since 2.8.0\n * @param string $field selects the field of the users record.\n * @param int $user_id Optional. User ID.\n * @echo string The author's field from the current author's DB object.\n *\/","file":"author-template.php","line":122,"missingDoc":false,"filters":["'the_author_' . $field"],"uses":{"get_the_author_meta":[123]},"used_by":{"the_author_description":[1346],"the_author_login":[1374],"the_author_firstname":[1402],"the_author_lastname":[1430],"the_author_nickname":[1458],"the_author_email":[1486],"the_author_icq":[1514],"the_author_yim":[1542],"the_author_msn":[1570],"the_author_aim":[1598],"the_author_url":[1642],"the_author_ID":[1670],"__main":[34]}},"get_the_author_link":{"doc":"\/**\n * Retrieve either author's link or author's name.\n *\n * If the author has a home page set, return an HTML link, otherwise just return the\n * author's name.\n *\n * @uses get_the_author_meta()\n * @uses get_the_author()\n *\/","file":"author-template.php","line":135,"missingDoc":false,"filters":[],"uses":{"get_the_author_meta":[137,136],"esc_attr":[137],"sprintf":[137],"__":[137],"get_the_author":[137,137,139]},"used_by":{"the_author_link":[154]}},"the_author_link":{"doc":"\/**\n * Display either author's link or author's name.\n *\n * If the author has a home page set, echo an HTML link, otherwise just echo the\n * author's name.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_link\n * @since 2.1\n * @uses get_the_author_link()\n *\/","file":"author-template.php","line":153,"missingDoc":false,"filters":[],"uses":{"get_the_author_link":[154]},"used_by":[]},"get_the_author_posts":{"doc":"\/**\n * Retrieve the number of posts by the author of the current post.\n *\n * @since 1.5\n * @uses $post The current post in the Loop's DB object.\n * @uses count_user_posts()\n * @return int The number of posts by the author.\n *\/","file":"author-template.php","line":165,"missingDoc":false,"filters":[],"uses":{"count_user_posts":[166],"get_post":[166]},"used_by":{"the_author_posts":[177]}},"count_user_posts":{"doc":"\/**\n * Number of posts user has written.\n *\n * @since 3.0.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param int $userid User ID.\n * @return int Amount of posts user has written.\n *\/","file":"user.php","line":152,"missingDoc":false,"filters":["'get_usernumposts'"],"uses":{"get_posts_by_author_sql":[155],"get_var":[157]},"used_by":{"get_the_author_posts":[166],"get_usernumposts":[2486]}},"the_author_posts":{"doc":"\/**\n * Display the number of posts by the author of the current post.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_posts\n * @since 0.71\n * @uses get_the_author_posts() Echoes returned value from function.\n *\/","file":"author-template.php","line":176,"missingDoc":false,"filters":[],"uses":{"get_the_author_posts":[177]},"used_by":[]},"the_author_posts_link":{"doc":"\/**\n * Display an HTML link to the author page of the author of the current post.\n *\n * Does just echo get_author_posts_url() function, like the others do. The\n * reason for this, is that another function is used to help in printing the\n * link to the author's posts.\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/the_author_posts_link\n * @since 1.2.0\n * @uses $authordata The current author's DB object.\n * @uses get_author_posts_url()\n * @uses get_the_author()\n * @param string $deprecated Deprecated.\n *\/","file":"author-template.php","line":194,"missingDoc":false,"filters":["'the_author_posts_link'"],"uses":{"_deprecated_argument":[196],"is_object":[199],"sprintf":[201,204],"get_author_posts_url":[203],"esc_attr":[204],"__":[204],"get_the_author":[204,205]},"used_by":[]},"get_author_posts_url":{"doc":"\/**\n * Retrieve the URL to the author page for the user with the ID provided.\n *\n * @since 2.1.0\n * @uses $wp_rewrite WP_Rewrite\n * @return string The URL to the author's page.\n *\/","file":"author-template.php","line":217,"missingDoc":false,"filters":["'author_link'"],"uses":{"get_author_permastruct":[220],"home_url":[223,232],"get_userdata":[227],"str_replace":[231],"user_trailingslashit":[232]},"used_by":{"the_author_posts_link":[203],"wp_list_authors":[318],"redirect_canonical":[157],"get_author_link":[805],"get_author_feed_link":[543]}},"user_trailingslashit":{"doc":"\/**\n * Retrieve trailing slash string, if blog set for adding trailing slashes.\n *\n * Conditionally adds a trailing slash if the permalink structure has a trailing\n * slash, strips the trailing slash if not. The string is passed through the\n * 'user_trailingslashit' filter. Will remove trailing slash from string, if\n * blog is not set to have them.\n *\n * @since 2.2.0\n * @uses $wp_rewrite\n *\n * @param string $string URL with or without a trailing slash.\n * @param string $type_of_url The type of URL being considered (e.g. single, category, etc) for use in the filter.\n * @return string\n *\/","file":"link-template.php","line":34,"missingDoc":false,"filters":["'user_trailingslashit'"],"uses":{"trailingslashit":[37],"untrailingslashit":[39]},"used_by":{"get_author_posts_url":[232],"redirect_canonical":[217,236,238,261,271,275,364],"redirect_guess_404_permalink":[498],"get_comment_link":[500],"get_trackback_url":[708],"get_index_rel_link":[2775],"get_permalink":[161],"get_post_permalink":[200],"_get_page_link":[279],"get_attachment_link":[318],"get_year_link":[345],"get_month_link":[370],"get_day_link":[400],"get_feed_link":[442],"get_post_comments_feed_link":[483],"get_author_feed_link":[549],"get_term_feed_link":[618],"get_search_link":[759],"get_post_type_archive_link":[846],"get_pagenum_link":[1461],"get_comments_pagenum_link":[1697,1703],"paginate_comments_links":[1825],"_wp_link_page":[704,706],"get_term_link":[3036]}},"wp_list_authors":{"doc":"\/**\n * List all the authors of the blog, with several options available.\n *\n * <ul>\n * <li>optioncount (boolean) (false): Show the count in parenthesis next to the\n * author's name.<\/li>\n * <li>exclude_admin (boolean) (true): Exclude the 'admin' user that is\n * installed bydefault.<\/li>\n * <li>show_fullname (boolean) (false): Show their full names.<\/li>\n * <li>hide_empty (boolean) (true): Don't show authors without any posts.<\/li>\n * <li>feed (string) (''): If isn't empty, show links to author's feeds.<\/li>\n * <li>feed_image (string) (''): If isn't empty, use this image to link to\n * feeds.<\/li>\n * <li>echo (boolean) (true): Set to false to return the output, instead of\n * echoing.<\/li>\n * <li>style (string) ('list'): Whether to display list of authors in list form\n * or as a string.<\/li>\n * <li>html (bool) (true): Whether to list the items in html form or plaintext.\n * <\/li>\n * <\/ul>\n *\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_list_authors\n * @since 1.2.0\n * @param array $args The argument array.\n * @return null|string The output, if echo is set to false.\n *\/","file":"author-template.php","line":266,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[277],"extract":[278],"wp_array_slice_assoc":[282],"get_users":[284],"get_results":[287],"get_private_posts_cap_sql":[287],"get_userdata":[291],"get_author_posts_url":[318],"esc_attr":[318,330,331],"sprintf":[318],"__":[318],"get_author_feed_link":[326],"esc_url":[339],"rtrim":[356]},"used_by":{"list_authors":[733]}},"wp_parse_args":{"doc":"\/**\n * Merge user defined arguments into defaults array.\n *\n * This function is used throughout WordPress to allow for both string or array\n * to be merged into another array.\n *\n * @since 2.2.0\n *\n * @param string|array $args Value to merge with $defaults\n * @param array $defaults Array that serves as the defaults.\n * @return array Merged user defined values with defaults.\n *\/","file":"functions.php","line":2551,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[2553],"is_array":[2554,2559],"wp_parse_str":[2557],"is_object":[2552],"array_merge":[2560]},"used_by":{"wp_list_authors":[277],"_walk_bookmarks":[58],"wp_list_bookmarks":[212],"get_bookmarks":[132],"wp_dropdown_categories":[321],"wp_list_categories":[427],"wp_tag_cloud":[527],"wp_generate_tag_cloud":[622],"get_categories":[41],"WP_Http::request":[102,108],"WP_Http::post":[274],"WP_Http::get":[292],"WP_Http::head":[310],"WP_Http_Fsockopen::request":[619],"WP_Http_Streams::request":[850],"WP_Http_Curl::request":[1040],"WP_oEmbed::fetch":[165],"WP_Admin_Bar::add_node":[116,118],"WP_Ajax_Response::add":[63],"_WP_Editors::parse_settings":[31],"WP_Embed::shortcode":[144],"wp_xmlrpc_server::_insert_post":[999],"get_comment_link":[485],"get_comment_reply_link":[1041],"get_post_reply_link":[1102],"wp_list_comments":[1423],"comment_form":[1548],"WP_Comment_Query::query":[241],"get_page_of_comment":[832],"WP_Widget_Pages::form":[62],"WP_Widget_Links::form":[142],"WP_Widget_Search::form":[212],"WP_Widget_Search::update":[221],"WP_Widget_Archives::update":[267],"WP_Widget_Archives::form":[276],"WP_Widget_Meta::form":[336],"WP_Widget_Calendar::form":[376],"WP_Widget_Text::form":[421],"WP_Widget_Categories::form":[505],"wp_widget_rss_output":[836],"wp_widget_rss_form":[924],"wp_get_linksbyname":[446],"wp_list_cats":[658],"wp_get_links":[918],"_default_wp_die_handler":[2073],"_xmlrpc_wp_die_handler":[2271],"wp_login_form":[273],"wp_get_archives":[881],"feed_links":[1607],"feed_links_extra":[1638],"paginate_links":[1939],"wp_http_supports":[207],"get_posts_nav_link":[1645],"paginate_comments_links":[1827],"wp_get_attachment_image":[564],"wp_enqueue_media":[1437],"wp_nav_menu":[143],"wp_update_nav_menu_item":[299],"wp_get_nav_menus":[411],"wp_get_nav_menu_items":[487],"wp_text_diff":[1706],"the_title_attribute":[78],"wp_link_pages":[640],"wp_dropdown_pages":[778],"wp_list_pages":[823],"wp_page_menu":[889],"wp_list_post_revisions":[1357],"get_children":[309],"register_post_status":[942],"register_post_type":[1231],"get_posts":[1709],"wp_get_post_categories":[2562],"wp_get_post_terms":[2611],"wp_get_recent_posts":[2647],"wp_insert_post":[2709],"get_pages":[3636],"wp_insert_attachment":[3915],"wp_get_post_revisions":[5218],"WP_Query::parse_query":[1430,1612],"WP_Query::query":[2971],"WP_Rewrite::add_permastruct":[1863],"register_taxonomy":[332,346],"get_objects_in_term":[522],"get_terms":[1207],"wp_count_terms":[1692],"wp_delete_term":[1783],"wp_get_object_terms":[1909],"wp_insert_term":[2058],"wp_update_term":[2370],"the_taxonomies":[3075],"get_the_taxonomies":[3096],"wp_get_themes":[31],"get_custom_header":[1061],"add_theme_support":[1294,1299,1363,1366],"WP_User_Query::__construct":[361],"get_users":[664],"wp_dropdown_users":[1031],"WP_Widget::__construct":[97,98],"WP_Widget::display_callback":[173],"WP_Widget::update_callback":[194],"WP_Widget::form_callback":[253],"register_sidebar":[568],"wp_register_sidebar_widget":[637],"wp_register_widget_control":[750],"_register_widget_form_callback":[806],"the_widget":[1142,1143]}},"wp_array_slice_assoc":{"doc":"\/**\n * Extract a slice of an array, given a list of keys.\n *\n * @since 3.1.0\n *\n * @param array $array The original array\n * @param array $keys The list of keys\n * @return array The array slice\n *\/","file":"functions.php","line":2588,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_list_authors":[282],"wp_dropdown_users":[1034]}},"get_users":{"doc":"\/**\n * Retrieve list of users matching criteria.\n *\n * @since 3.1.0\n * @uses $wpdb\n * @uses WP_User_Query See for default arguments and information.\n *\n * @param array $args Optional.\n * @return array List of users.\n *\/","file":"user.php","line":662,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[664],"get_results":[669]},"used_by":{"wp_list_authors":[284],"wp_xmlrpc_server::wp_getUsers":[2115],"wp_xmlrpc_server::wp_getAuthors":[2522],"wp_dropdown_users":[1036]}},"get_private_posts_cap_sql":{"doc":"\/**\n * Retrieve the private post SQL based on capability.\n *\n * This function provides a standardized way to appropriately select on the\n * post_status of a post type. The function will return a piece of SQL code\n * that can be added to a WHERE clause; this SQL is constructed to allow all\n * published posts, and all private posts to which the user has access.\n *\n * @since 2.2.0\n *\n * @uses $user_ID\n *\n * @param string $post_type currently only supports 'post' or 'page'.\n * @return string SQL code that can be added to a where clause.\n *\/","file":"post.php","line":4456,"missingDoc":false,"filters":[],"uses":{"get_posts_by_author_sql":[4457]},"used_by":{"wp_list_authors":[287]}},"get_author_feed_link":{"doc":"\/**\n * Retrieve the feed link for a given author.\n *\n * Returns a link to the feed for all posts by a given author. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int $author_id ID of an author.\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the author specified by $author_id.\n*\/","file":"link-template.php","line":533,"missingDoc":false,"filters":["'author_feed_link'"],"uses":{"get_option":[535],"get_default_feed":[538,544],"home_url":[541],"get_author_posts_url":[543],"trailingslashit":[549],"user_trailingslashit":[549]},"used_by":{"wp_list_authors":[326],"get_author_rss_link":[1200],"feed_links_extra":[1662]}},"is_multi_author":{"doc":"\/**\n * Does this site have more than one author\n *\n * Checks to see if more than one author has published posts.\n *\n * @since 3.2.0\n * @return bool Whether or not we have more than one author\n *\/","file":"author-template.php","line":372,"missingDoc":false,"filters":["'is_multi_author'"],"uses":{"get_col":[376],"count":[377],"wp_cache_set":[378],"wp_cache_get":[375]},"used_by":[]},"wp_cache_set":{"doc":"\/**\n * Saves the data to the cache.\n *\n * @since 2.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::set()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":176,"missingDoc":false,"filters":[],"uses":{"set":[179]},"used_by":{"is_multi_author":[378],"get_bookmarks":[183,264],"WP_Comment_Query::query":[254],"wp_count_comments":[972],"wp_insert_comment":[1297],"clean_comment_cache":[1975],"WP_Widget_Recent_Posts::widget":[589],"WP_Widget_Recent_Comments::widget":[702],"is_blog_installed":[1123,1159],"wp_get_archives":[928,950,971,994,1024],"get_calendar":[1097,1264],"get_adjacent_post":[1190],"get_id_from_blogname":[112],"get_blog_details":[143,160,221,227,239,242],"get_blog_id_from_url":[352,356],"get_current_site_name":[124],"wpmu_current_site":[176],"__main":[57,78],"get_option":[69],"wp_load_core_site_options":[187],"update_option":[241,252,254],"add_option":[324,326,334],"delete_option":[376],"set_transient":[497],"get_site_option":[782],"add_site_option":[824],"update_site_option":[915],"set_site_transient":[1037],"wp_count_posts":[2152],"get_pages":[3831],"_get_last_post_time":[4600],"get_terms":[1246],"clean_term_cache":[2635]}},"wp_cache_get":{"doc":"\/**\n * Retrieves the cache contents from the cache by key and group.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::get()\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false)\n * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value.\n * @return bool|mixed False on failure to retrieve contents or the cache\n *\t\tcontents on success\n *\/","file":"cache.php","line":110,"missingDoc":false,"filters":[],"uses":{"get":[113]},"used_by":{"is_multi_author":[375],"get_bookmark":[34],"get_bookmarks":[137],"WP_User::get_data_by":[552,556,561,569],"get_all_category_ids":[17],"WP_Theme::cache_get":[495],"get_comment":[145],"WP_Comment_Query::query":[252,257],"wp_count_comments":[944],"wp_insert_comment":[1296],"clean_comment_cache":[1974],"WP_Widget_Recent_Posts::widget":[545],"WP_Widget_Recent_Posts::update":[599],"WP_Widget_Recent_Comments::widget":[662],"WP_Widget_Recent_Comments::update":[711],"get_usermeta":[2333],"is_blog_installed":[1108],"_get_non_cached_ids":[3829],"wp_get_archives":[924,946,967,990,1020],"get_calendar":[1078],"get_adjacent_post":[1179],"get_metadata":[282],"metadata_exists":[326],"update_meta_cache":[546],"get_id_from_blogname":[99],"get_blog_details":[133,150,180,198,200],"get_blog_id_from_url":[342],"get_current_site_name":[119],"wpmu_current_site":[163],"__main":[53,74],"get_option":[49,58],"wp_load_alloptions":[139],"update_option":[238],"add_option":[311,331],"get_transient":[450],"get_site_option":[773],"get_site_transient":[990],"WP_Post::get_instance":[577],"wp_count_posts":[2138],"get_all_page_ids":[3415],"get_pages":[3654],"wp_mime_type_icon":[4323,4346],"_get_last_post_time":[4578],"get_term":[892],"get_terms":[1243,1249],"get_object_term_cache":[2652],"update_object_term_cache":[2692]}},"__clear_multi_author_cache":{"doc":"\/**\n * Helper function to clear the cache for number of authors.\n *\n * @private\n *\/","file":"author-template.php","line":389,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[390]},"used_by":[]},"wp_cache_delete":{"doc":"\/**\n * Removes the cache contents matching key and group.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::delete()\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @return bool True on successful removal, false on failure\n *\/","file":"cache.php","line":75,"missingDoc":false,"filters":[],"uses":{"delete":[78]},"used_by":{"__clear_multi_author_cache":[390],"clean_bookmark_cache":[384,385],"WP_Theme::cache_delete":[506],"clean_comment_cache":[1969],"WP_Widget_Recent_Posts::flush_widget_cache":[607],"WP_Widget_Recent_Comments::flush_widget_cache":[656],"delete_usermeta":[2298],"update_usermeta":[2406],"delete_get_calendar_cache":[1280],"add_metadata":[75],"update_metadata":[156],"delete_metadata":[239,242],"update_metadata_by_mid":[441],"delete_metadata_by_mid":[498],"get_blog_details":[188,208],"clean_blog_cache":[354,355,356,357,358,359,360],"add_user_to_blog":[197],"delete_option":[379],"delete_transient":[409],"delete_site_option":[869],"delete_site_transient":[949],"wp_set_password":[1574],"clean_post_cache":[4650,4651,4655,4660,4663],"clean_attachment_cache":[4765,4766],"_transition_post_status":[4804,4805],"wp_set_object_terms":[2241],"clean_object_term_cache":[2573],"clean_term_cache":[2607,2614,2625,2626],"clean_user_cache":[1183,1184,1185,1186],"wp_insert_user":[1415,1416],"wp_update_user":[1474]}},"_walk_bookmarks":{"doc":"\/**\n * The formatted output of a list of bookmarks.\n *\n * The $bookmarks array must contain bookmark objects and will be iterated over\n * to retrieve the bookmark to be used in the output.\n *\n * The output is formatted as HTML with no way to change that format. However,\n * what is between, before, and after can be changed. The link itself will be\n * HTML.\n *\n * This function is used internally by wp_list_bookmarks() and should not be\n * used by themes.\n *\n * The defaults for overwriting are:\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'show_description' - Default is 0 (integer). Whether to show the description\n *\t\tof the bookmark.\n * 'show_images' - Default is 1 (integer). Whether to show link image if\n *\t\tavailable.\n * 'show_name' - Default is 0 (integer). Whether to show link name if\n *\t\tavailable.\n * 'before' - Default is '<li>' (string). The html or text to prepend to each\n *\t\tbookmarks.\n * 'after' - Default is '<\/li>' (string). The html or text to append to each\n *\t\tbookmarks.\n * 'link_before' - Default is '' (string). The html or text to prepend to each\n *\t\tbookmarks inside the <a> tag.\n * 'link_after' - Default is '' (string). The html or text to append to each\n *\t\tbookmarks inside the <a> tag.\n * 'between' - Default is '\\n' (string). The string for use in between the link,\n *\t\tdescription, and image.\n * 'show_rating' - Default is 0 (integer). Whether to show the link rating.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $bookmarks List of bookmarks to traverse\n * @param string|array $args Optional. Overwrite the defaults.\n * @return string Formatted output in HTML\n *\/","file":"bookmark-template.php","line":50,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[58],"extract":[59],"get_option":[68,81,81,106,119],"esc_url":[72],"esc_attr":[74,75,92],"sanitize_bookmark_field":[74,75,125],"sprintf":[81],"__":[81],"date":[81],"substr":[79],"strpos":[103]},"used_by":{"wp_list_bookmarks":[233,244,247]}},"get_option":{"doc":"\/**\n * Retrieve option value based on name of option.\n *\n * If the option does not exist or does not have a value, then the return value\n * will be false. This is useful to check whether you need to install an option\n * and is commonly used during installation of plugin options and to test\n * whether upgrading is required.\n *\n * If the option was serialized then it will be unserialized when it is returned.\n *\n * @since 1.5.0\n * @package WordPress\n * @subpackage Option\n * @uses apply_filters() Calls 'pre_option_$option' before checking the option.\n * \tAny value other than false will \"short-circuit\" the retrieval of the option\n *\tand return the returned value. You should not try to override special options,\n * \tbut you will not be prevented from doing so.\n * @uses apply_filters() Calls 'option_$option', after checking the option, with\n * \tthe option value.\n *\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional. Default value to return if the option does not exist.\n * @return mixed Value set for the option.\n *\/","file":"option.php","line":32,"missingDoc":false,"filters":["'pre_option_' . $option","'default_option_' . $option","'default_option_' . $option","'default_option_' . $option","'option_' . $option"],"uses":{"trim":[35],"defined":[44,47],"wp_cache_get":[49,58],"wp_load_alloptions":[53],"get_row":[61,76],"prepare":[61,76],"wp_cache_add":[66],"wp_cache_set":[69],"is_object":[64,78],"suppress_errors":[75,77],"get_option":[86],"untrailingslashit":[89],"in_array":[88],"maybe_unserialize":[91]},"used_by":{"_walk_bookmarks":[68,81,81,106,119],"get_bookmarks":[212,211],"redirect_canonical":[124,124,126,126,127,270,270,270],"WP_Roles::_init":[103],"WP_Roles::reinit":[135],"map_meta_cap":[1252],"wp_list_categories":[460,460,460],"WP_Http::request":[177],"WP_Http::block_request":[508],"WP_Http_Fsockopen::test":[807],"WP_HTTP_Proxy::send_through_proxy":[1391],"IXR_Server::output":[469],"WP_Ajax_Response::send":[129,130],"WP_Customize_Manager::register_controls":[722,733,933],"WP_Customize_Setting::_update_option":[206],"WP_Theme::get_allowed_on_site":[1116,1119,1127,1130],"wp_xmlrpc_server::wp_getUsersBlogs":[493],"wp_xmlrpc_server::wp_newComment":[2959,3000],"wp_xmlrpc_server::_getOptions":[3200],"wp_xmlrpc_server::blogger_getUsersBlogs":[3645,3647],"wp_xmlrpc_server::mw_newPost":[4171,4184,4189,4202,4214,4219],"wp_xmlrpc_server::mw_editPost":[4448,4461,4477,4489],"wp_xmlrpc_server::pingback_ping":[5313],"WP::send_headers":[331,331,336,336],"get_comment_date":[375],"get_comment_link":[488,487],"get_comment_time":[633],"get_trackback_url":[710,707],"comments_template":[857,903,902],"comments_popup_link":[995],"get_comment_reply_link":[1058],"get_post_reply_link":[1109],"wp_list_comments":[1452,1462,1461,1472,1482],"comment_form":[1521,1555],"check_comment":[44,50,57,83],"get_comment_pages_count":[796,801],"get_page_of_comment":[834,845,844],"wp_blacklist_check":[890],"wp_new_comment":[1410],"wp_set_comment_status":[1443],"generic_ping":[1786],"privacy_ping_filter":[1883],"trackback":[1914],"weblog_ping":[1951,1950],"_close_comments_for_old_posts":[2012,2019],"_close_comments_for_old_post":[2045,2048],"_mb_substr":[25],"_get_cron_array":[362],"wp_plugin_directory_constants":[94],"wp_cookie_constants":[206,212],"WP_Widget_Recent_Comments::widget":[691],"WP_Widget_RSS::widget":[768],"wp_widget_rss_output":[863,885],"wp_widgets_init":[1177],"get_settings":[851],"get_links":[973,987,987,1004,1012],"make_url_footnote":[1763],"get_boundary_post_rel_link":[2734],"get_parent_post_rel_link":[2809],"get_current_theme":[2979],"__main":[8,9,8,11,45,8,11,45,8,11,8,10,8,11,43,15,14,16,25,25,69,68,64],"get_the_category_rss":[329],"wp_check_invalid_utf8":[518],"balanceTags":[1148],"convert_smilies":[1761],"get_gmt_from_date":[1900,1915],"get_date_from_gmt":[1935],"iso8601_to_datetime":[1979],"wp_trim_words":[2182],"sanitize_option":[2763,2850,2860,2869,2901],"current_time":[62,65],"date_i18n":[124],"get_weekstartend":[212],"do_robots":[1077],"wp_upload_dir":[1525,1526,1537,1594],"wp_send_json":[2320],"smilies_init":[2452],"wp_timezone_override_offset":[3265],"_wp_mysql_week":[3657],"wp_register":[340],"get_bloginfo":[418,439,452,455,459,479],"wp_get_archives":[910,911,912,1005],"get_calendar":[1106],"get_the_date":[1380],"get_the_modified_date":[1420],"get_the_time":[1450],"get_the_modified_time":[1500],"noindex":[1709],"language_attributes":[1865,1868],"get_locale":[41],"get_permalink":[113,134],"get_page_link":[243,243],"get_attachment_link":[312],"get_post_comments_feed_link":[475,475,474],"get_author_feed_link":[535],"get_term_feed_link":[599],"get_post_type_archive_link":[840],"get_post_type_archive_feed_link":[871],"get_adjacent_post_rel_link":[1225],"adjacent_post_link":[1392],"get_comments_pagenum_link":[1694],"get_next_comments_link":[1727],"get_previous_comments_link":[1770],"paginate_comments_links":[1809],"get_home_url":[1906,1909],"get_site_url":[1965,1968],"wp_get_shortlink":[2361],"wp_get_active_and_valid_plugins":[481,484],"wp_set_internal_encoding":[517],"image_constrain_size_for_editor":[47,48,56,57,65,66],"wp_prepare_attachment_for_js":[1346],"wp_enqueue_media":[1453,1454,1455],"get_blog_details":[232,233,234],"get_blog_option":[387,390],"ms_cookie_constants":[66],"wpmu_signup_blog_notification":[737],"wpmu_signup_user_notification":[790],"newblog_notify_siteadmin":[1023],"wpmu_welcome_notification":[1252],"wpmu_welcome_user_notification":[1300],"global_terms":[1569],"maybe_add_existing_user_to_blog":[1681],"get_space_allowed":[1961],"_wp_menu_item_classes_by_context":[265],"_wp_auto_add_pages_to_menu":[759],"get_option":[86],"form_option":[123],"update_option":[228],"add_option":[313],"get_transient":[458,466],"set_transient":[501],"get_site_option":[769],"wp_notify_postauthor":[1014,1069],"wp_notify_moderator":[1097,1104,1105,1113],"wp_password_change_notification":[1182,1183,1178],"wp_new_user_notification":[1205,1211],"get_avatar":[1590,1626,1664],"register_uninstall_hook":[686],"_wp_link_page":[703,703,701],"wp_list_pages":[816],"wp_page_menu":[913,907],"Walker_Page::start_el":[1045],"register_post_type":[1293],"is_sticky":[1918],"stick_post":[2065],"unstick_post":[2086],"wp_delete_post":[2338,2342],"wp_insert_post":[2704,2749,2831,2834],"wp_set_post_categories":[3237],"wp_insert_attachment":[3911,3974,3977],"_publish_post_hook":[4851],"WP_Query::parse_query":[1619,1611,1611,1635,1635,1643,1643],"WP_Query::get_posts":[1990,2005,2015,2020,2017,2017,2131,2132,2175,2175,2559,2692,2731],"WP_Query::get_queried_object":[3014],"WP_Query::is_front_page":[3323,3323,3323,3321],"WP_Rewrite::generate_rewrite_rules":[1334,1331,1361],"WP_Rewrite::wp_rewrite_rules":[1616],"WP_Rewrite::init":[1906],"WP_Rewrite::set_category_base":[1963],"WP_Rewrite::set_tag_base":[1982],"create_initial_taxonomies":[31,31,32,36,36,37],"register_taxonomy":[345],"wp_delete_term":[1778],"_get_term_hierarchy":[2766],"get_stylesheet":[147],"get_template":[240],"get_theme_root_uri":[495],"get_raw_theme_root":[518,519,520,517],"preview_theme":[578],"switch_theme":[695,694],"get_theme_mods":[747,749,752,748],"set_theme_mod":[801],"remove_theme_mod":[827],"remove_theme_mods":[837,840],"get_uploaded_header_images":[1003],"check_theme_switched":[1609],"wp_update_plugins":[147],"wp_update_themes":[248],"get_blogs_of_user":[698,702],"wp_insert_user":[1413],"WP_Widget::get_settings":[291,294],"is_dynamic_sidebar":[965],"wp_get_sidebars_widgets":[1017,1021],"wp_convert_widget_settings":[1092,1095]}},"sanitize_bookmark_field":{"doc":"\/**\n * Sanitizes a bookmark field\n *\n * Sanitizes the bookmark fields based on what the field name is. If the field\n * has a strict value set, then it will be tested for that, else a more generic\n * filtering is applied. After the more strict filter is applied, if the\n * $context is 'raw' then the value is immediately return.\n *\n * Hooks exist for the more generic cases. With the 'edit' context, the\n * 'edit_$field' filter will be called and passed the $value and $bookmark_id\n * respectively. With the 'db' context, the 'pre_$field' filter is called and\n * passed the value. The 'display' context is the final context and has the\n * $field has the filter name and is passed the $value, $bookmark_id, and\n * $context respectively.\n *\n * @since 2.3.0\n *\n * @param string $field The bookmark field\n * @param mixed $value The bookmark field value\n * @param int $bookmark_id Bookmark ID\n * @param string $context How to filter the field value. Either 'raw', 'edit',\n *\t\t'attribute', 'js', 'db', or 'display'\n * @return mixed The filtered value\n *\/","file":"bookmark.php","line":329,"missingDoc":false,"filters":["\"edit_{$field}\"","\"pre_{$field}\""],"uses":{"array_map":[336],"preg_replace":[342],"in_array":[346],"esc_html":[358],"esc_attr":[360,369],"esc_js":[371]},"used_by":{"_walk_bookmarks":[74,75,125],"get_bookmark_field":[84],"sanitize_bookmark":[295,298],"get_links":[981,982],"get_linkrating":[1115]}},"wp_list_bookmarks":{"doc":"\/**\n * Retrieve or echo all of the bookmarks.\n *\n * List of default arguments are as follows:\n * 'orderby' - Default is 'name' (string). How to order the links by. String is\n *\t\tbased off of the bookmark scheme.\n * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either\n *\t\tascending or descending order.\n * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to\n *\t\tdisplay.\n * 'category' - Default is empty string (string). Include the links in what\n *\t\tcategory ID(s).\n * 'category_name' - Default is empty string (string). Get links by category\n *\t\tname.\n * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide\n *\t\tlinks marked as 'invisible'.\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'echo' - Default is 1 (integer). Whether to echo (default) or return the\n *\t\tformatted bookmarks.\n * 'categorize' - Default is 1 (integer). Whether to show links listed by\n *\t\tcategory (default) or show links in one column.\n * 'show_description' - Default is 0 (integer). Whether to show the description\n *\t\tof the bookmark.\n *\n * These options define how the Category name will appear before the category\n * links are displayed, if 'categorize' is 1. If 'categorize' is 0, then it will\n * display for only the 'title_li' string and only if 'title_li' is not empty.\n * 'title_li' - Default is 'Bookmarks' (translatable string). What to show\n *\t\tbefore the links appear.\n * 'title_before' - Default is '<h2>' (string). The HTML or text to show before\n *\t\tthe 'title_li' string.\n * 'title_after' - Default is '<\/h2>' (string). The HTML or text to show after\n *\t\tthe 'title_li' string.\n * 'class' - Default is 'linkcat' (string). The CSS class to use for the\n *\t\t'title_li'.\n *\n * 'category_before' - Default is '<li id=\"%id\" class=\"%class\">'. String must\n *\t\tcontain '%id' and '%class' to get\n * the id of the category and the 'class' argument. These are used for\n *\t\tformatting in themes.\n * Argument will be displayed before the 'title_before' argument.\n * 'category_after' - Default is '<\/li>' (string). The HTML or text that will\n *\t\tappear after the list of links.\n *\n * These are only used if 'categorize' is set to 1 or true.\n * 'category_orderby' - Default is 'name'. How to order the bookmark category\n *\t\tbased on term scheme.\n * 'category_order' - Default is 'ASC'. Set the order by either ASC (ascending)\n *\t\tor DESC (descending).\n *\n * @see _walk_bookmarks() For other arguments that can be set in this function\n *\t\tand passed to _walk_bookmarks().\n * @see get_bookmarks() For other arguments that can be set in this function and\n *\t\tpassed to get_bookmarks().\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_list_bookmarks\n *\n * @since 2.1.0\n * @uses _walk_bookmarks() Used to iterate over all of the bookmarks and return\n *\t\tthe html\n * @uses get_terms() Gets all of the categories that are for links.\n *\n * @param string|array $args Optional. Overwrite the defaults of the function\n * @return string|null Will only return if echo option is set to not echo.\n *\t\tDefault is not return anything.\n *\/","file":"bookmark-template.php","line":199,"missingDoc":false,"filters":["'link_category'","'wp_list_bookmarks'"],"uses":{"__":[205],"wp_parse_args":[212],"extract":[213],"get_terms":[218],"array_merge":[226],"get_bookmarks":[227,238],"str_replace":[230,242],"_walk_bookmarks":[233,244,247]},"used_by":{"WP_Widget_Links::widget":[110],"wp_get_linksbyname":[448],"wp_get_links":[920],"__main":[67]}},"get_terms":{"doc":"\/**\n * Retrieve the terms in a given taxonomy or list of taxonomies.\n *\n * You can fully inject any customizations to the query before it is sent, as\n * well as control the output with a filter.\n *\n * The 'get_terms' filter will be called when the cache has the term and will\n * pass the found term along with the array of $taxonomies and array of $args.\n * This filter is also called before the array of terms is passed and will pass\n * the array of terms, along with the $taxonomies and $args.\n *\n * The 'list_terms_exclusions' filter passes the compiled exclusions along with\n * the $args.\n *\n * The 'get_terms_orderby' filter passes the ORDER BY clause for the query\n * along with the $args array.\n *\n * The 'get_terms_fields' filter passes the fields for the SELECT query\n * along with the $args array.\n *\n * The list of arguments that $args can contain, which will overwrite the defaults:\n *\n * orderby - Default is 'name'. Can be name, count, term_group, slug or nothing\n * (will use term_id), Passing a custom value other than these will cause it to\n * order based on the custom value.\n *\n * order - Default is ASC. Can use DESC.\n *\n * hide_empty - Default is true. Will not return empty terms, which means\n * terms whose count is 0 according to the given taxonomy.\n *\n * exclude - Default is an empty array. An array, comma- or space-delimited string\n * of term ids to exclude from the return array. If 'include' is non-empty,\n * 'exclude' is ignored.\n *\n * exclude_tree - Default is an empty array. An array, comma- or space-delimited\n * string of term ids to exclude from the return array, along with all of their\n * descendant terms according to the primary taxonomy. If 'include' is non-empty,\n * 'exclude_tree' is ignored.\n *\n * include - Default is an empty array. An array, comma- or space-delimited string\n * of term ids to include in the return array.\n *\n * number - The maximum number of terms to return. Default is to return them all.\n *\n * offset - The number by which to offset the terms query.\n *\n * fields - Default is 'all', which returns an array of term objects.\n * If 'fields' is 'ids' or 'names', returns an array of\n * integers or strings, respectively.\n *\n * slug - Returns terms whose \"slug\" matches this value. Default is empty string.\n *\n * hierarchical - Whether to include terms that have non-empty descendants\n * (even if 'hide_empty' is set to true).\n *\n * search - Returned terms' names will contain the value of 'search',\n * case-insensitive. Default is an empty string.\n *\n * name__like - Returned terms' names will begin with the value of 'name__like',\n * case-insensitive. Default is empty string.\n *\n * The argument 'pad_counts', if set to true will include the quantity of a term's\n * children in the quantity of each term's \"count\" object variable.\n *\n * The 'get' argument, if set to 'all' instead of its default empty string,\n * returns terms regardless of ancestry or whether the terms are empty.\n *\n * The 'child_of' argument, when used, should be set to the integer of a term ID. Its default\n * is 0. If set to a non-zero value, all returned terms will be descendants\n * of that term according to the given taxonomy. Hence 'child_of' is set to 0\n * if more than one taxonomy is passed in $taxonomies, because multiple taxonomies\n * make term ancestry ambiguous.\n *\n * The 'parent' argument, when used, should be set to the integer of a term ID. Its default is\n * the empty string '', which has a different meaning from the integer 0.\n * If set to an integer value, all returned terms will have as an immediate\n * ancestor the term whose ID is specified by that integer according to the given taxonomy.\n * The 'parent' argument is different from 'child_of' in that a term X is considered a 'parent'\n * of term Y only if term X is the father of term Y, not its grandfather or great-grandfather, etc.\n *\n * The 'cache_domain' argument enables a unique cache key to be produced when this query is stored\n * in object cache. For instance, if you are using one of this function's filters to modify the\n * query (such as 'terms_clauses'), setting 'cache_domain' to a unique value will not overwrite\n * the cache for similar queries. Default value is 'core'.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses wp_parse_args() Merges the defaults with those defined by $args and allows for strings.\n *\n * @param string|array $taxonomies Taxonomy name or list of Taxonomy names\n * @param string|array $args The values of what to search for when returning terms\n * @return array|WP_Error List of Term Objects and their children. Will return WP_Error, if any of $taxonomies do not exist.\n *\/","file":"taxonomy.php","line":1187,"missingDoc":false,"filters":["'get_terms_args'","'get_terms'","'get_terms_orderby'","'list_terms_exclusions'","'get_terms_fields'","'terms_clauses'","'get_terms'","'get_terms'"],"uses":{"is_array":[1191,1192,1427,1423],"count":[1191,1454],"__":[1197],"taxonomy_exists":[1196],"wp_parse_args":[1207],"absint":[1208,1209],"is_taxonomy_hierarchical":[1210],"extract":[1226],"_get_term_hierarchy":[1229,1235,1413],"has_filter":[1241],"serialize":[1241,1242,1242],"md5":[1242],"compact":[1242,1388],"array_keys":[1242],"wp_cache_get":[1243,1249],"time":[1245],"wp_cache_set":[1246],"strtolower":[1255],"strtoupper":[1278],"in_array":[1279],"implode":[1282,1383],"wp_parse_id_list":[1287,1302,1316],"intval":[1290,1292,1304,1308,1310,1319,1321,1454],"get_terms":[1304],"sanitize_title":[1331],"like_escape":[1336,1359],"prepare":[1337,1360],"get_var":[1397],"get_results":[1401],"update_term_cache":[1403],"wp_cache_add":[1407,1458],"_get_term_children":[1415,1426],"_pad_term_counts":[1420],"reset":[1437],"array_shift":[1441,1445,1449],"array_slice":[1455]},"used_by":{"wp_list_bookmarks":[218],"wp_dropdown_categories":[333],"wp_tag_cloud":[529],"get_all_category_ids":[18],"get_categories":[51],"get_category_by_path":[121],"get_tags":[253],"wp_xmlrpc_server::_insert_post":[1152],"wp_xmlrpc_server::wp_getTerms":[1875],"WP_Widget_Links::form":[143],"WP_Nav_Menu_Widget::form":[1131],"wp_get_nav_menus":[412],"wp_get_nav_menu_items":[523],"get_terms":[1304],"wp_count_terms":[1702],"wp_insert_term":[2091],"_get_term_hierarchy":[2771]}},"get_bookmarks":{"doc":"\/**\n * Retrieves the list of bookmarks\n *\n * Attempts to retrieve from the cache first based on MD5 hash of arguments. If\n * that fails, then the query will be built from the arguments and executed. The\n * results will be stored to the cache.\n *\n * List of default arguments are as follows:\n * 'orderby' - Default is 'name' (string). How to order the links by. String is\n *\t\tbased off of the bookmark scheme.\n * 'order' - Default is 'ASC' (string). Either 'ASC' or 'DESC'. Orders in either\n *\t\tascending or descending order.\n * 'limit' - Default is -1 (integer) or show all. The amount of bookmarks to\n *\t\tdisplay.\n * 'category' - Default is empty string (string). Include the links in what\n *\t\tcategory ID(s).\n * 'category_name' - Default is empty string (string). Get links by category\n *\t\tname.\n * 'hide_invisible' - Default is 1 (integer). Whether to show (default) or hide\n *\t\tlinks marked as 'invisible'.\n * 'show_updated' - Default is 0 (integer). Will show the time of when the\n *\t\tbookmark was last updated.\n * 'include' - Default is empty string (string). Include bookmark ID(s)\n *\t\tseparated by commas.\n * 'exclude' - Default is empty string (string). Exclude bookmark ID(s)\n *\t\tseparated by commas.\n *\n * @since 2.1.0\n * @uses $wpdb Database Object\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/get_bookmarks\n *\n * @param string|array $args List of arguments to overwrite the defaults\n * @return array List of bookmark row objects\n *\/","file":"bookmark.php","line":121,"missingDoc":false,"filters":["'get_bookmarks'","'get_bookmarks'","'get_bookmarks'"],"uses":{"wp_parse_args":[132],"extract":[133],"md5":[136],"serialize":[136],"is_array":[138,142],"wp_cache_get":[137],"preg_split":[150,165,196],"intval":[154,156,169,171,200,202],"count":[151,166,197],"wp_cache_set":[183,264],"get_term_by":[179],"like_escape":[189],"get_option":[212,211],"strtolower":[219],"trim":[234],"in_array":[238,236,248],"explode":[233],"implode":[241],"strtoupper":[247],"get_results":[261]},"used_by":{"wp_list_bookmarks":[227,238],"get_linkobjects":[530],"get_links":[961]}},"get_bookmark":{"doc":"\/**\n * Retrieve Bookmark data\n *\n * @since 2.1.0\n * @uses $wpdb Database Object\n *\n * @param mixed $bookmark\n * @param string $output Optional. Either OBJECT, ARRAY_N, or ARRAY_A constant\n * @param string $filter Optional, default is 'raw'.\n * @return array|object Type returned depends on $output value.\n *\/","file":"bookmark.php","line":20,"missingDoc":false,"filters":[],"uses":{"is_object":[28],"wp_cache_add":[29,38],"wp_cache_get":[34],"get_row":[35],"prepare":[35],"array_unique":[37],"wp_get_object_terms":[37],"sanitize_bookmark":[46],"get_object_vars":[51,53],"array_values":[53]},"used_by":{"get_bookmark_field":[73],"get_link":[2051],"get_edit_bookmark_link":[1022],"edit_bookmark_link":[1042]}},"wp_cache_add":{"doc":"\/**\n * Adds data to the cache, if the cache key doesn't already exist.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::add()\n *\n * @param int|string $key The cache key to use for retrieval later\n * @param mixed $data The data to add to the cache store\n * @param string $group The group to add the cache to\n * @param int $expire When the cache data should be expired\n * @return unknown\n *\/","file":"cache.php","line":24,"missingDoc":false,"filters":[],"uses":{"add":[27]},"used_by":{"get_bookmark":[29,38],"get_the_terms":[1068],"get_all_category_ids":[19],"WP_Theme::cache_add":[480],"get_comment":[140,149],"WP_Comment_Query::query":[380],"update_comment_cache":[1994],"update_meta_cache":[581],"get_option":[66],"wp_load_alloptions":[153],"WP_Post::get_instance":[586],"get_all_page_ids":[3418],"wp_mime_type_icon":[4372,4392],"update_post_cache":[4620],"get_term":[885,896],"get_term_by":[970],"get_terms":[1407,1458],"update_object_term_cache":[2720],"update_term_cache":[2741],"update_user_caches":[1163,1164,1165,1166]}},"wp_get_object_terms":{"doc":"\/**\n * Retrieves the terms associated with the given object(s), in the supplied taxonomies.\n *\n * The following information has to do the $args parameter and for what can be\n * contained in the string or array of that parameter, if it exists.\n *\n * The first argument is called, 'orderby' and has the default value of 'name'.\n * The other value that is supported is 'count'.\n *\n * The second argument is called, 'order' and has the default value of 'ASC'.\n * The only other value that will be acceptable is 'DESC'.\n *\n * The final argument supported is called, 'fields' and has the default value of\n * 'all'. There are multiple other options that can be used instead. Supported\n * values are as follows: 'all', 'ids', 'names', and finally\n * 'all_with_object_id'.\n *\n * The fields argument also decides what will be returned. If 'all' or\n * 'all_with_object_id' is chosen or the default kept intact, then all matching\n * terms objects will be returned. If either 'ids' or 'names' is used, then an\n * array of all matching term ids or term names will be returned respectively.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $object_ids The ID(s) of the object(s) to retrieve.\n * @param string|array $taxonomies The taxonomies to retrieve terms from.\n * @param array|string $args Change what is returned\n * @return array|WP_Error The requested term data or empty array if no terms found. WP_Error if any of the $taxonomies don't exist.\n *\/","file":"taxonomy.php","line":1890,"missingDoc":false,"filters":["'wp_get_object_terms'"],"uses":{"is_array":[1896,1904,1915,1922],"__":[1901],"taxonomy_exists":[1900],"array_map":[1906],"wp_parse_args":[1909],"get_taxonomy":[1914,1921],"array_merge":[1917,1917,1915,1923,1974,1977],"wp_get_object_terms":[1917],"count":[1912],"extract":[1926],"strtoupper":[1952],"in_array":[1953],"implode":[1956,1957],"get_results":[1974],"update_term_cache":[1975],"get_col":[1977,1979]},"used_by":{"get_bookmark":[37],"redirect_canonical":[208],"get_the_terms":[1067],"wp_xmlrpc_server::_prepare_post":[674],"get_adjacent_post":[1138],"get_boundary_post":[1316],"_wp_menu_item_classes_by_context":[271],"wp_get_post_categories":[2564],"wp_get_post_terms":[2613],"_update_term_count_on_transition_post_status":[5536],"wp_delete_object_term_relationships":[1729],"wp_delete_term":[1808],"wp_get_object_terms":[1917],"wp_set_object_terms":[2182,2232],"update_object_term_cache":[2702],"get_the_taxonomies":[3117],"is_object_in_term":[3167]}},"sanitize_bookmark":{"doc":"\/**\n * Sanitizes all bookmark fields\n *\n * @since 2.3.0\n *\n * @param object|array $bookmark Bookmark row\n * @param string $context Optional, default is 'display'. How to filter the\n *\t\tfields\n * @return object|array Same type as $bookmark but with fields sanitized.\n *\/","file":"bookmark.php","line":279,"missingDoc":false,"filters":[],"uses":{"is_object":[284],"sanitize_bookmark_field":[295,298]},"used_by":{"get_bookmark":[46]}},"get_bookmark_field":{"doc":"\/**\n * Retrieve single bookmark data item or field.\n *\n * @since 2.3.0\n * @uses get_bookmark() Gets bookmark object using $bookmark as ID\n * @uses sanitize_bookmark_field() Sanitizes Bookmark field based on $context.\n *\n * @param string $field The name of the data field to return\n * @param int $bookmark The bookmark ID to get field\n * @param string $context Optional. The context of how the field will be used.\n * @return string\n *\/","file":"bookmark.php","line":71,"missingDoc":false,"filters":[],"uses":{"get_bookmark":[73],"is_wp_error":[75],"is_object":[78],"sanitize_bookmark_field":[84]},"used_by":[]},"is_wp_error":{"doc":"\/**\n * Check whether variable is a WordPress Error.\n *\n * Looks at the object and if a WP_Error class. Does not check to see if the\n * parent is also WP_Error, so can't inherit WP_Error and still use this\n * function.\n *\n * @since 2.1.0\n *\n * @param mixed $thing Check if unknown variable is WordPress Error object.\n * @return bool True, if WP_Error. False, if not WP_Error.\n *\/","file":"class-wp-error.php","line":206,"missingDoc":false,"filters":[],"uses":{"is_object":[207],"is_a":[207]},"used_by":{"get_bookmark_field":[75],"redirect_canonical":[167,209,209],"get_category_link":[24],"get_category_parents":[45],"get_the_category":[76],"get_the_category_by_ID":[139],"wp_tag_cloud":[531,539],"get_tag_link":[970],"term_description":[1049],"get_the_term_list":[1094,1102],"the_terms":[1127],"has_term":[1188],"get_category":[83],"get_category_by_path":[131],"get_cat_name":[189],"WP_SimplePie_File::__construct":[79],"WP_Http::_dispatch_request":[254],"WP_oEmbed::fetch":[175,177],"WP_Ajax_Response::add":[67,73],"WP_HTTP_IXR_Client::query":[60],"WP_Image_Editor_GD::resize":[148],"WP_Image_Editor_GD::multi_resize":[194,189],"WP_Image_Editor_GD::save":[319],"WP_Image_Editor_Imagick::load":[142],"WP_Image_Editor_Imagick::multi_resize":[272,265],"WP_Image_Editor_Imagick::save":[390],"WP_Theme::errors":[437],"wp_xmlrpc_server::login":[187],"wp_xmlrpc_server::_insert_post":[1177,1198,1213],"wp_xmlrpc_server::wp_newTerm":[1568,1585],"wp_xmlrpc_server::wp_editTerm":[1647,1667,1684],"wp_xmlrpc_server::wp_deleteTerm":[1734,1742],"wp_xmlrpc_server::wp_getTerm":[1801],"wp_xmlrpc_server::wp_getTerms":[1877],"wp_xmlrpc_server::wp_editProfile":[2230],"wp_xmlrpc_server::wp_newCategory":[2621],"wp_xmlrpc_server::wp_editComment":[2923],"wp_xmlrpc_server::blogger_newPost":[3885],"wp_xmlrpc_server::mw_newPost":[4292],"wp_xmlrpc_server::mw_editPost":[4569],"discover_pingback_server_uri":[1666,1679],"trackback":[1920],"WP_Widget_RSS::widget":[767,791],"wp_widget_rss_output":[829],"wp_widget_rss_process":[1007],"get_category_children":[1310],"image_resize":[3268,3273,3279],"user_pass_ok":[3319],"get_wp_title_rss":[84],"wp_get_http":[507],"wp_get_http_headers":[548],"wp_remote_fopen":[764],"_default_wp_die_handler":[2077],"wp_remote_retrieve_headers":[120],"wp_remote_retrieve_header":[136],"wp_remote_retrieve_response_code":[156],"wp_remote_retrieve_response_message":[173],"wp_remote_retrieve_body":[188],"get_permalink":[135],"get_post_permalink":[183],"get_term_feed_link":[593],"get_adjacent_post":[1139],"wp_set_wpdb_vars":[368],"image_make_intermediate_size":[393,393,398],"wp_get_image_editor":[1181],"wpmu_activate_signup":[879],"wpmu_create_user":[916],"maybe_add_existing_user_to_blog":[1685],"wp_nav_menu":[166,177,181],"is_nav_menu":[57],"is_nav_menu_item":[154],"wp_delete_nav_menu":[191],"wp_update_nav_menu_object":[222,237,229,252],"wp_update_nav_menu_item":[279,361],"wp_get_nav_menu_items":[495],"wp_setup_nav_menu_item":[604,607],"wp_login":[162],"wp_authenticate":[484],"get_post_class":[334],"get_body_class":[440],"_wp_put_post_revision":[5082],"wp_restore_post_revision":[5161],"wp_delete_post_revision":[5190],"wp_get_post_parent_id":[5268],"get_post_format_link":[5413],"WP_Query::get_queried_object":[3004],"_fetch_remote_file":[540],"WP_Tax_Query::get_sql":[672],"WP_Tax_Query::clean_query":[757],"get_term_by":[961],"get_term_field":[1050],"get_term_to_edit":[1081],"wp_delete_term":[1770,1795],"wp_insert_term":[2048],"wp_set_object_terms":[2200],"wp_unique_term_slug":[2283],"wp_update_term":[2360],"_get_term_children":[2812],"get_term_link":[3004],"is_object_in_term":[3169],"get_ancestors":[3235],"wp_get_term_taxonomy_parent_id":[3258],"wp_version_check":[91],"wp_update_plugins":[207],"wp_update_themes":[312],"wp_signon":[55],"wp_authenticate_username_password":[106]}},"get_term_by":{"doc":"\/**\n * Get all Term data from database by Term field and data.\n *\n * Warning: $value is not escaped for 'name' $field. You must do it yourself, if\n * required.\n *\n * The default $field is 'id', therefore it is possible to also use null for\n * field, but not recommended that you do so.\n *\n * If $value does not exist, the return value will be false. If $taxonomy exists\n * and $field and $value combinations exist, the Term will be returned.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses sanitize_term() Cleanses the term based on $filter context before returning.\n * @see sanitize_term_field() The $context param lists the available values for get_term_by() $filter param.\n *\n * @param string $field Either 'slug', 'name', or 'id'\n * @param string|int $value Search for this term value\n * @param string $taxonomy Taxonomy Name\n * @param string $output Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional, default is raw or no WordPress defined filter will applied.\n * @return mixed Term Row from database. Will return false if $taxonomy does not exist or $term was not found.\n *\/","file":"taxonomy.php","line":944,"missingDoc":false,"filters":["'get_term'","\"get_{$taxonomy}\""],"uses":{"taxonomy_exists":[947],"sanitize_title":[952],"stripslashes":[957],"get_term":[960],"is_wp_error":[961],"get_row":[966],"prepare":[966],"wp_cache_add":[970],"sanitize_term":[974],"get_object_vars":[979,981],"array_values":[981]},"used_by":{"get_bookmarks":[179],"get_category_by_slug":[156],"get_cat_ID":[172],"wp_xmlrpc_server::_insert_post":[1128,1168],"get_linksbyname":[413],"get_linkobjectsbyname":[477],"wp_get_nav_menu_object":[28,31],"wp_update_nav_menu_object":[219,230],"get_post_format_link":[5412],"WP_Query::get_posts":[2261,2273],"WP_Query::get_queried_object":[3002],"get_term_link":[2997]}},"like_escape":{"doc":"\/**\n * Escapes text for SQL LIKE special characters % and _.\n *\n * @since 2.5.0\n *\n * @param string $text The text to be escaped.\n * @return string text, safe for inclusion in LIKE query.\n *\/","file":"formatting.php","line":2725,"missingDoc":false,"filters":[],"uses":{"str_replace":[2726]},"used_by":{"get_bookmarks":[189],"redirect_guess_404_permalink":[477],"wp_xmlrpc_server::pingback_ping":[5346],"WP_Comment_Query::get_search_sql":[396],"do_enclose":[429,448],"WP_Meta_Query::get_sql":[807],"WP_Query::get_posts":[2196],"get_terms":[1336,1359],"WP_User_Query::get_search_sql":[621],"count_users":[893]}},"esc_js":{"doc":"\/**\n * Escape single quotes, htmlspecialchar \" < > &, and fix line endings.\n *\n * Escapes text strings for echoing in JS. It is intended to be used for inline JS\n * (in a tag attribute, for example onclick=\"...\"). Note that the strings have to\n * be in single quotes. The filter 'js_escape' is also applied here.\n *\n * @since 2.8.0\n *\n * @param string $text The text to be escaped.\n * @return string Escaped text.\n *\/","file":"formatting.php","line":2654,"missingDoc":false,"filters":["'js_escape'"],"uses":{"wp_check_invalid_utf8":[2655],"_wp_specialchars":[2656],"preg_replace":[2657],"stripslashes":[2657],"str_replace":[2658,2659],"addslashes":[2659]},"used_by":{"sanitize_bookmark_field":[371],"WP_Admin_Bar::_render_item":[422],"WP_Customize_Manager::customize_preview_settings":[381],"js_escape":[2111],"mce_escape":[11],"wp_print_media_templates":[327],"sanitize_post_field":[2050],"sanitize_term_field":[1669],"sanitize_user_field":[1150]}},"clean_bookmark_cache":{"doc":"\/**\n * Deletes bookmark cache\n *\n * @since 2.7.0\n * @uses wp_cache_delete() Deletes the contents of 'get_bookmarks'\n *\/","file":"bookmark.php","line":383,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[384,385],"clean_object_term_cache":[386]},"used_by":[]},"clean_object_term_cache":{"doc":"\/**\n * Removes the taxonomy relationship to terms from the cache.\n *\n * Will remove the entire taxonomy relationship containing term $object_id. The\n * term IDs have to exist within the taxonomy $object_type for the deletion to\n * take place.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @see get_object_taxonomies() for more on $object_type\n * @uses do_action() Will call action hook named, 'clean_object_term_cache' after completion.\n *\tPasses, function params in same order.\n *\n * @param int|array $object_ids Single or list of term object ID(s)\n * @param array|string $object_type The taxonomy object type\n *\/","file":"taxonomy.php","line":2565,"missingDoc":false,"filters":["'clean_object_term_cache'"],"uses":{"is_array":[2566],"get_object_taxonomies":[2569],"wp_cache_delete":[2573]},"used_by":{"clean_bookmark_cache":[386],"clean_post_cache":[4653],"clean_attachment_cache":[4769],"wp_delete_term":[1823]}},"wp_cache_close":{"doc":"\/**\n * Closes the cache.\n *\n * This function has ceased to do anything since WordPress 2.5. The\n * functionality was removed along with the rest of the persistent cache. This\n * does not mean that plugins can't implement this function when they need to\n * make sure that the cache is cleaned up after WordPress no longer needs it.\n *\n * @since 2.0.0\n *\n * @return bool Always returns True\n *\/","file":"cache.php","line":42,"missingDoc":false,"filters":[],"uses":[],"used_by":{"shutdown_action_hook":[557]}},"wp_cache_decr":{"doc":"\/**\n * Decrement numeric cache item's value\n *\n * @since 3.3.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::decr()\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to decrement the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":58,"missingDoc":false,"filters":[],"uses":{"decr":[61]},"used_by":[]},"wp_cache_flush":{"doc":"\/**\n * Removes all cache items.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::flush()\n *\n * @return bool Always returns true\n *\/","file":"cache.php","line":90,"missingDoc":false,"filters":[],"uses":{"flush":[93]},"used_by":[]},"wp_cache_incr":{"doc":"\/**\n * Increment numeric cache item's value\n *\n * @since 3.3.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::incr()\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to increment the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":128,"missingDoc":false,"filters":[],"uses":{"incr":[131]},"used_by":{"wp_insert_comment":[1294],"clean_comment_cache":[1972]}},"wp_cache_init":{"doc":"\/**\n * Sets up Object Cache Global and assigns it.\n *\n * @since 2.0.0\n * @global WP_Object_Cache $wp_object_cache WordPress Object Cache\n *\/","file":"cache.php","line":140,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_start_object_cache":[409],"switch_to_blog":[533],"restore_current_blog":[594]}},"wp_cache_replace":{"doc":"\/**\n * Replaces the contents of the cache with new data.\n *\n * @since 2.0.0\n * @uses $wp_object_cache Object Cache Class\n * @see WP_Object_Cache::replace()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":157,"missingDoc":false,"filters":[],"uses":{"replace":[160]},"used_by":[]},"wp_cache_switch_to_blog":{"doc":"\/**\n * Switch the interal blog id.\n *\n * This changes the blog id used to create keys in blog specific groups.\n *\n * @since 3.5.0\n *\n * @param int $blog_id Blog ID\n *\/","file":"cache.php","line":191,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[194]},"used_by":{"wp_start_object_cache":[407],"switch_to_blog":[524],"restore_current_blog":[585]}},"wp_cache_add_global_groups":{"doc":"\/**\n * Adds a group or set of groups to the list of global groups.\n *\n * @since 2.6.0\n *\n * @param string|array $groups A group or an array of groups to add\n *\/","file":"cache.php","line":204,"missingDoc":false,"filters":[],"uses":{"add_global_groups":[207]},"used_by":{"WP_Theme::__construct":[174],"wp_start_object_cache":[412],"switch_to_blog":[537,539],"restore_current_blog":[598,600]}},"wp_cache_add_non_persistent_groups":{"doc":"\/**\n * Adds a group or set of groups to the list of non-persistent groups.\n *\n * @since 2.6.0\n *\n * @param string|array $groups A group or an array of groups to add\n *\/","file":"cache.php","line":217,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::__construct":[178],"wp_start_object_cache":[413],"switch_to_blog":[540],"restore_current_blog":[601]}},"wp_cache_reset":{"doc":"\/**\n * Reset internal cache keys and structures. If the cache backend uses global\n * blog or site IDs as part of its cache keys, this function instructs the\n * backend to reset those keys and perform any cleanup since blog or site IDs\n * have changed since cache init.\n *\n * This function is deprecated. Use wp_cache_switch_to_blog() instead of this\n * function when preparing the cache for a blog switch. For clearing the cache\n * during unit tests, consider using wp_cache_init(). wp_cache_init() is not\n * recommended outside of unit tests as the performance penality for using it is\n * high.\n *\n * @since 2.6.0\n * @deprecated 3.5.0\n *\/","file":"cache.php","line":237,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[238],"reset":[242]},"used_by":[]},"_deprecated_function":{"doc":"\/**\n * Marks a function as deprecated and informs when it has been used.\n *\n * There is a hook deprecated_function_run that will be called that can be used\n * to get the backtrace up to what file and function called the deprecated\n * function.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * This function is to be used in every function that is deprecated.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 2.5.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_function_run' and passes the function name, what to use instead,\n * and the version the function was deprecated in.\n * @uses apply_filters() Calls 'deprecated_function_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called\n * @param string $version The version of WordPress that deprecated the function\n * @param string $replacement Optional. The function that should have been called\n *\/","file":"functions.php","line":2854,"missingDoc":false,"filters":["'deprecated_function_run'","'deprecated_function_trigger_error'"],"uses":{"trigger_error":[2861,2863],"sprintf":[2861,2863],"__":[2861,2863],"is_null":[2860]},"used_by":{"wp_cache_reset":[238],"WP_Object_Cache::reset":[533],"WP_Admin_Bar::recursive_render":[463],"WP_Scripts::print_scripts_l10n":[57],"get_postdata":[27],"start_wp":[62],"the_category_ID":[82],"the_category_head":[108],"previous_post":[138],"next_post":[174],"user_can_create_post":[208],"user_can_create_draft":[228],"user_can_edit_post":[248],"user_can_delete_post":[277],"user_can_set_post_date":[297],"user_can_edit_post_date":[317],"user_can_edit_post_comments":[337],"user_can_delete_post_comments":[357],"user_can_edit_user":[376],"get_linksbyname":[410],"wp_get_linksbyname":[433],"get_linkobjectsbyname":[474],"get_linkobjects":[528],"get_linksbyname_withrating":[562],"get_links_withrating":[590],"get_autotoggle":[606],"list_cats":[639],"wp_list_cats":[656],"dropdown_cats":[699],"list_authors":[730],"wp_get_post_cats":[747],"wp_set_post_cats":[765],"get_archives":[784],"get_author_link":[803],"link_pages":[831],"get_settings":[849],"permalink_link":[863],"permalink_single_rss":[878],"wp_get_links":[895],"get_links":[950],"get_links_list":[1043],"links_popup_script":[1089],"get_linkrating":[1114],"get_linkcatname":[1130],"comments_rss_link":[1159],"get_category_rss_link":[1176],"get_author_rss_link":[1198],"comments_rss":[1217],"create_user":[1235],"gzip_compression":[1245],"get_commentdata":[1263],"get_catname":[1279],"get_category_children":[1298],"get_the_author_description":[1332],"the_author_description":[1345],"get_the_author_login":[1360],"the_author_login":[1373],"get_the_author_firstname":[1388],"the_author_firstname":[1401],"get_the_author_lastname":[1416],"the_author_lastname":[1429],"get_the_author_nickname":[1444],"the_author_nickname":[1457],"get_the_author_email":[1472],"the_author_email":[1485],"get_the_author_icq":[1500],"the_author_icq":[1513],"get_the_author_yim":[1528],"the_author_yim":[1541],"get_the_author_msn":[1556],"the_author_msn":[1569],"get_the_author_aim":[1584],"the_author_aim":[1597],"get_author_name":[1613],"get_the_author_url":[1628],"the_author_url":[1641],"get_the_author_ID":[1656],"the_author_ID":[1669],"the_content_rss":[1708],"make_url_footnote":[1754],"_c":[1794],"translate_with_context":[1813],"_nc":[1830],"__ngettext":[1843],"__ngettext_noop":[1857],"get_alloptions":[1874],"get_the_attachment_link":[1893],"get_attachment_icon_src":[1922],"get_attachment_icon":[1967],"get_attachment_innerHTML":[2024],"get_link":[2050],"sanitize_url":[2067],"clean_url":[2090,2092],"js_escape":[2110],"wp_specialchars":[2122],"attribute_escape":[2143],"register_sidebar_widget":[2168],"unregister_sidebar_widget":[2200],"register_widget_control":[2225],"unregister_widget_control":[2259],"delete_usermeta":[2277],"get_usermeta":[2324],"update_usermeta":[2378],"get_users_of_blog":[2431],"automatic_feed_links":[2451],"get_profile":[2468],"get_usernumposts":[2485],"funky_javascript_fix":[2517],"is_taxonomy":[2541],"is_term":[2559],"is_plugin_page":[2575],"update_category_cache":[2598],"wp_timezone_supported":[2612],"the_editor":[2632],"get_user_metavalues":[2648],"sanitize_user_object":[2682],"get_boundary_post_rel_link":[2721],"start_post_rel_link":[2759],"get_index_rel_link":[2773],"index_rel_link":[2786],"get_parent_post_rel_link":[2801],"parent_post_rel_link":[2829],"wp_admin_bar_dashboard_view_site_menu":[2841],"is_blog_user":[2867],"debug_fopen":[2881],"debug_fwrite":[2894],"debug_fclose":[2908],"get_themes":[2926],"get_theme":[2958],"get_current_theme":[2977],"clean_pre":[2998],"add_custom_image_header":[3026],"remove_custom_image_header":[3047],"add_custom_background":[3064],"remove_custom_background":[3084],"get_theme_data":[3100],"update_page_cache":[3136],"clean_page_cache":[3155],"wp_explain_nonce":[3174],"sticky_class":[3189],"_get_post_ancestors":[3205],"wp_load_image":[3219],"image_resize":[3265],"wp_get_single_post":[3300],"user_pass_ok":[3317],"gd_edit_image_support":[3344],"generate_random_password":[23],"is_site_admin":[44],"graceful_fail":[68],"get_user_details":[105],"clear_global_post_cache":[116],"is_main_blog":[126],"validate_email":[137],"get_blog_list":[147],"get_most_active_blogs":[174],"wpmu_admin_do_redirect":[223],"wpmu_admin_redirect_add_updated_param":[263],"set_current_user":[34],"get_userdatabylogin":[51],"get_user_by_email":[68],"wp_setcookie":[90],"__main":[95,112,133,169],"wp_clearcookie":[108],"wp_get_cookie_login":[129],"wp_login":[157],"wp_atom_server::__call":[185],"wp_atom_server::__callStatic":[189],"wpdb::supports_collation":[1667]}},"WP_Object_Cache::add":{"doc":"\/**\n * Adds data to the cache if it doesn't already exist.\n *\n * @uses WP_Object_Cache::_exists Checks to see if the cache already has data.\n * @uses WP_Object_Cache::set Sets the data after the checking the cache\n *\t\tcontents existence.\n *\n * @since 2.0.0\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if cache key and group already exist, true on success\n *\/","file":"cache.php","line":323,"missingDoc":false,"filters":[],"uses":{"wp_suspend_cache_addition":[324],"_exists":[334],"set":[337]},"used_by":[]},"wp_suspend_cache_addition":{"doc":"\/**\n * Temporarily suspend cache additions.\n *\n * Stops more data being added to the cache, but still allows cache retrieval.\n * This is useful for actions, such as imports, when a lot of data would otherwise\n * be almost uselessly added to the cache.\n *\n * Suspension lasts for a single page load at most. Remember to call this\n * function again if you wish to re-enable cache adds earlier.\n *\n * @since 3.3.0\n *\n * @param bool $suspend Optional. Suspends additions if true, re-enables them if false.\n * @return bool The current suspend setting\n *\/","file":"functions.php","line":3180,"missingDoc":false,"filters":[],"uses":{"is_bool":[3183]},"used_by":{"WP_Object_Cache::add":[324]}},"WP_Object_Cache::add_global_groups":{"doc":"\/**\n * Sets the list of global groups.\n *\n * @since 3.0.0\n *\n * @param array $groups List of groups that are global.\n *\/","file":"cache.php","line":347,"missingDoc":false,"filters":[],"uses":{"array_fill_keys":[350],"array_merge":[351]},"used_by":[]},"WP_Object_Cache::decr":{"doc":"\/**\n * Decrement numeric cache item's value\n *\n * @since 3.3.0\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to decrement the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":364,"missingDoc":false,"filters":[],"uses":{"_exists":[371],"is_numeric":[374]},"used_by":[]},"WP_Object_Cache::delete":{"doc":"\/**\n * Remove the contents of the cache key in the group\n *\n * If the cache key does not exist in the group and $force parameter is set\n * to false, then nothing will happen. The $force parameter is set to false\n * by default.\n *\n * @since 2.0.0\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param bool $force Optional. Whether to force the unsetting of the cache\n *\t\tkey in the group\n * @return bool False if the contents weren't deleted and true on success\n *\/","file":"cache.php","line":402,"missingDoc":false,"filters":[],"uses":{"_exists":[409]},"used_by":[]},"WP_Object_Cache::flush":{"doc":"\/**\n * Clears the object cache of all data\n *\n * @since 2.0.0\n *\n * @return bool Always returns true\n *\/","file":"cache.php","line":423,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Object_Cache::get":{"doc":"\/**\n * Retrieves the cache contents, if it exists\n *\n * The contents will be first attempted to be retrieved by searching by the\n * key in the cache group. If the cache is hit (success) then the contents\n * are returned.\n *\n * On failure, the number of cache misses will be incremented.\n *\n * @since 2.0.0\n *\n * @param int|string $key What the contents in the cache are called\n * @param string $group Where the cache contents are grouped\n * @param string $force Whether to force a refetch rather than relying on the local cache (default is false)\n * @return bool|mixed False on failure to retrieve contents or the cache\n *\t\tcontents on success\n *\/","file":"cache.php","line":446,"missingDoc":false,"filters":[],"uses":{"is_object":[456],"_exists":[453]},"used_by":[]},"WP_Object_Cache::incr":{"doc":"\/**\n * Increment numeric cache item's value\n *\n * @since 3.3.0\n *\n * @param int|string $key The cache key to increment\n * @param int $offset The amount by which to increment the item's value. Default is 1.\n * @param string $group The group the key is in.\n * @return false|int False on failure, the item's new value on success.\n *\/","file":"cache.php","line":477,"missingDoc":false,"filters":[],"uses":{"_exists":[484],"is_numeric":[487]},"used_by":[]},"WP_Object_Cache::replace":{"doc":"\/**\n * Replace the contents in the cache, if contents already exist\n *\n * @since 2.0.0\n * @see WP_Object_Cache::set()\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire When to expire the cache contents\n * @return bool False if not exists, true if contents were replaced\n *\/","file":"cache.php","line":512,"missingDoc":false,"filters":[],"uses":{"_exists":[520],"set":[523]},"used_by":[]},"WP_Object_Cache::reset":{"doc":"\/**\n * Reset keys\n *\n * @since 3.0.0\n * @deprecated 3.5.0\n *\/","file":"cache.php","line":532,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[533],"array_keys":[536]},"used_by":[]},"WP_Object_Cache::set":{"doc":"\/**\n * Sets the data contents into the cache\n *\n * The cache contents is grouped by the $group parameter followed by the\n * $key. This allows for duplicate ids in unique groups. Therefore, naming of\n * the group should be used with care and should follow normal function\n * naming guidelines outside of core WordPress usage.\n *\n * The $expire parameter is not used, because the cache will automatically\n * expire for each time a page is accessed and PHP finishes. The method is\n * more for cache plugins which use files.\n *\n * @since 2.0.0\n *\n * @param int|string $key What to call the contents in the cache\n * @param mixed $data The contents to store in the cache\n * @param string $group Where to group the cache contents\n * @param int $expire Not Used\n * @return bool Always returns true\n *\/","file":"cache.php","line":562,"missingDoc":false,"filters":[],"uses":{"is_object":[569]},"used_by":[]},"WP_Object_Cache::stats":{"doc":"\/**\n * Echoes the stats of the caching.\n *\n * Gives the cache hits, and cache misses. Also prints every cached group,\n * key and the data.\n *\n * @since 2.0.0\n *\/","file":"cache.php","line":584,"missingDoc":false,"filters":[],"uses":{"number_format":[591],"strlen":[591],"serialize":[591]},"used_by":[]},"WP_Object_Cache::switch_to_blog":{"doc":"\/**\n * Switch the interal blog id.\n *\n * This changes the blog id used to create keys in blog specific groups.\n *\n * @since 3.5.0\n *\n * @param int $blog_id Blog ID\n *\/","file":"cache.php","line":605,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Object_Cache::_exists":{"doc":"\/**\n * Utility function to determine whether a key exists in the cache.\n *\n * @since 3.4.0\n *\n * @access protected\n *\/","file":"cache.php","line":617,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[618]},"used_by":[]},"WP_Object_Cache::__construct":{"doc":"\/**\n * Sets up object properties; PHP 5 style constructor\n *\n * @since 2.0.8\n * @return null|WP_Object_Cache If cache is disabled, returns null.\n *\/","file":"cache.php","line":627,"missingDoc":false,"filters":[],"uses":{"is_multisite":[630],"register_shutdown_function":[638]},"used_by":[]},"WP_Object_Cache::__destruct":{"doc":"\/**\n * Will save the object cache before object is completely destroyed.\n *\n * Called upon object destruction, which should be when PHP ends.\n *\n * @since 2.0.8\n *\n * @return bool True value. Won't be used by PHP\n *\/","file":"cache.php","line":650,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"redirect_canonical":{"doc":"\/**\n * Redirects incoming links to the proper URL based on the site url.\n *\n * Search engines consider www.somedomain.com and somedomain.com to be two\n * different URLs when they both go to the same location. This SEO enhancement\n * prevents penalty for duplicate content by redirecting all incoming links to\n * one or the other.\n *\n * Prevents redirection for feeds, trackbacks, searches, comment popup, and\n * admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7,\n * page\/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST\n * requests.\n *\n * Will also attempt to find the correct link when a user enters a URL that does\n * not exist based on exact WordPress query. Will instead try to parse the URL\n * or query in an attempt to figure the correct page to go to.\n *\n * @since 2.3.0\n * @uses $wp_rewrite\n * @uses $is_IIS\n *\n * @param string $requested_url Optional. The URL that was requested, used to\n *\t\tfigure if redirect is needed.\n * @param bool $do_redirect Optional. Redirect to the new URL.\n * @return null|false|string Null, if redirect not needed. False, if redirect\n *\t\tnot needed or the string of the URL\n *\/","file":"canonical.php","line":39,"missingDoc":false,"filters":["'wp_signup_location'","'redirect_canonical'"],"uses":{"is_trackback":[42],"is_search":[42],"is_comments_popup":[42],"is_admin":[42],"is_preview":[42],"is_robots":[42],"iis7_supports_permalinks":[42],"is_ssl":[47],"parse_url":[52,74,189,297,311,314],"_remove_qs_args_if_not_in_url":[73,87,100,106],"get_post_comments_feed_link":[72],"get_query_var":[72,71,78,95,95,95,113,116,122,126,130,145,145,146,146,146,148,149,149,152,155,206,217,214,233,238,238,238,235,235,240,231,257,256,271,270,270,222,222,353,351],"is_feed":[71,124,240,231,259,222],"get_results":[80],"prepare":[80,156],"get_permalink":[86,99,116,119,122,127,210,216],"is_singular":[78,214,233],"max":[95],"get_post_type_object":[97],"get_post":[96],"redirect_guess_404_permalink":[105],"is_object":[110,351],"using_permalinks":[110,351],"remove_query_arg":[114,117,120,123,128,143,147,150,153,158,186,200,218,239,258,272],"get_attachment_link":[113],"is_single":[115,118,206,262,260],"get_queried_object_id":[119,208,210,216],"is_page":[121,124],"get_option":[124,124,126,126,127,270,270,270],"home_url":[125,314],"is_home":[126],"is_year":[129,151],"is_month":[129,148],"is_day":[129,145],"strlen":[131],"get_year_link":[133,152],"get_month_link":[136,149],"substr":[136,136,139,139,139],"get_day_link":[139,146],"is_author":[154],"preg_match":[154,223,223,223],"get_userdata":[155],"get_author_posts_url":[157],"get_var":[156],"is_category":[160,171],"is_tag":[160,174],"is_tax":[160],"count":[164],"get_queried_object":[166],"get_taxonomy":[178],"array_diff":[183,185],"array_keys":[183,183,185],"parse_str":[191,296,300],"add_query_arg":[192,266,307],"get_term_link":[167],"is_wp_error":[167,209,209],"strpos":[206,276,370,412],"get_category_by_path":[207],"wp_get_object_terms":[208],"in_array":[209,231],"is_attachment":[112],"trailingslashit":[217,232,261,263,271,277,279,366,375,374,374],"user_trailingslashit":[217,236,238,261,271,275,364],"is_front_page":[214,365,351,351],"preg_replace":[225,226,227,275,294,327,330,334,337,340,343,371],"get_default_feed":[236,238,235,244],"get_feed_link":[250],"basename":[250,249,283],"wp_redirect":[251,288,430],"using_index_permalinks":[276,347],"network_site_url":[285],"site_url":[287],"is_multisite":[284],"is_404":[92,351],"rawurlencode_deep":[306],"trim":[337],"str_replace":[348],"call_user_func":[358],"strtolower":[379,379,380,380,380,380],"function_exists":[413],"preg_replace_callback":[418],"redirect_canonical":[429]},"used_by":{"redirect_canonical":[429]}},"is_trackback":{"doc":"\/**\n * Is the query for a trackback endpoint call?\n *\n * @see WP_Query::is_trackback()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":664,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[668],"__":[668],"is_trackback":[672]},"used_by":{"redirect_canonical":[42],"is_trackback":[672],"__main":[20]}},"is_search":{"doc":"\/**\n * Is the query for a search?\n *\n * @see WP_Query::is_search()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":568,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[572],"__":[572],"is_search":[576]},"used_by":{"redirect_canonical":[42],"WP::handle_404":[522],"__main":[20,33,23,28,43,27],"wp_title":[578],"feed_links_extra":[1663],"get_body_class":[416,541],"is_search":[576]}},"is_comments_popup":{"doc":"\/**\n * Whether the current URL is within the comments popup window.\n *\n * @see WP_Query::is_comments_popup()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":301,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[305],"__":[305],"is_comments_popup":[309]},"used_by":{"redirect_canonical":[42],"is_comments_popup":[309],"__main":[41]}},"is_preview":{"doc":"\/**\n * Is the query for a post or page preview?\n *\n * @see WP_Query::is_preview()\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":528,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[532],"__":[532],"is_preview":[536]},"used_by":{"redirect_canonical":[42],"WP_Customize_Manager::start_previewing_theme":[165],"WP_Customize_Manager::stop_previewing_theme":[195],"WP_Customize_Manager::wp_loaded":[280],"WP_Customize_Manager::wp_redirect_status":[296],"WP_Customize_Manager::save":[495],"is_preview":[536]}},"is_robots":{"doc":"\/**\n * Is the query for the robots file?\n *\n * @see WP_Query::is_robots()\n * @since 2.1.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":548,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[552],"__":[552],"is_robots":[556]},"used_by":{"redirect_canonical":[42],"WP::handle_404":[507],"is_robots":[556],"__main":[14]}},"iis7_supports_permalinks":{"doc":"\/**\n * Check if IIS 7 supports pretty permalinks.\n *\n * @since 2.8.0\n *\n * @return bool\n *\/","file":"functions.php","line":3034,"missingDoc":false,"filters":["'iis7_supports_permalinks'"],"uses":{"class_exists":[3049],"php_sapi_name":[3049]},"used_by":{"redirect_canonical":[42]}},"_remove_qs_args_if_not_in_url":{"doc":"\/**\n * Removes arguments from a query string if they are not present in a URL\n * DO NOT use this in plugin code.\n *\n * @since 3.4\n * @access private\n *\n * @return string The altered query string\n *\/","file":"canonical.php","line":451,"missingDoc":false,"filters":[],"uses":{"parse_url":[452],"parse_str":[454],"remove_query_arg":[457,460]},"used_by":{"redirect_canonical":[73,87,100,106]}},"get_post_comments_feed_link":{"doc":"\/**\n * Retrieve the permalink for the post comments feed.\n *\n * @since 2.2.0\n *\n * @param int $post_id Optional. Post ID.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":465,"missingDoc":false,"filters":["'post_comments_feed_link'"],"uses":{"absint":[466],"get_the_ID":[469],"get_default_feed":[472,481],"_get_page_link":[476],"get_permalink":[478],"get_option":[475,475,474],"trailingslashit":[480],"user_trailingslashit":[483],"get_post_field":[485],"add_query_arg":[487,489],"home_url":[487,489]},"used_by":{"redirect_canonical":[72],"redirect_guess_404_permalink":[496],"comments_rss":[1218],"__main":[31,32,51,54,35],"feed_links_extra":[1646],"post_comments_feed_link":[512]}},"get_query_var":{"doc":"\/**\n * Retrieve variable in the WP_Query class.\n *\n * @see WP_Query::get()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string $var The variable key to retrieve.\n * @return mixed\n *\/","file":"query.php","line":24,"missingDoc":false,"filters":[],"uses":{"get":[27]},"used_by":{"redirect_canonical":[72,71,78,95,95,95,113,116,122,126,130,145,145,146,146,146,148,149,149,152,155,206,217,214,233,238,238,238,235,235,240,231,257,256,271,270,270,222,222,353,351],"redirect_guess_404_permalink":[477,481,480,486,485,488,487,490,489,496,497,498,495,476],"wp_dropdown_categories":[313],"get_comment_link":[497],"comments_template":[902],"wp_list_comments":[1453,1469],"get_comment_pages_count":[794],"get_page_of_comment":[835],"do_feed":[999],"wp_title":[524,525,526,527,528],"single_month_title":[770,771,772],"feed_links_extra":[1659],"get_search_query":[1828],"get_posts_nav_link":[1648],"get_next_comments_link":[1730],"get_previous_comments_link":[1773],"paginate_comments_links":[1812],"rel_canonical":[2322],"get_body_class":[456],"wp_old_slug_redirect":[3574,3573],"setup_postdata":[3635],"get_archive_template":[62],"get_page_template":[239],"wp_dropdown_users":[1029]}},"is_feed":{"doc":"\/**\n * Is the query for a feed?\n *\n * @see WP_Query::is_feed()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string|array $feeds Optional feed types to check.\n * @return bool\n *\/","file":"query.php","line":362,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[366],"__":[366],"is_feed":[370]},"used_by":{"redirect_canonical":[71,124,240,231,259,222],"SimplePie::fetch_data":[1571],"gallery_shortcode":[729],"is_feed":[370],"setup_postdata":[3638],"SimplePie_Locator::find":[96],"SimplePie_Locator::search_elements_by_tag":[252],"SimplePie_Locator::extension":[331],"SimplePie_Locator::body":[359],"__main":[17]}},"is_singular":{"doc":"\/**\n * Is the query for an existing single post of any post type (post, attachment, page, ... )?\n *\n * If the $post_types parameter is specified, this function will additionally\n * check if the query is for one of the Posts Types specified.\n *\n * @see is_page()\n * @see is_single()\n *\n * @see WP_Query::is_singular()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $post_types Optional. Post Type or array of Post Types\n * @return bool\n *\/","file":"query.php","line":624,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[628],"__":[628],"is_singular":[632]},"used_by":{"redirect_canonical":[78,214,233],"_close_comments_for_old_posts":[2012],"__main":[18,29,49,21,41,36],"adjacent_posts_rel_link_wp_head":[1261],"get_posts_nav_link":[1639],"get_next_comments_link":[1727],"get_previous_comments_link":[1770],"paginate_comments_links":[1809],"rel_canonical":[2313],"is_singular":[632]}},"redirect_guess_404_permalink":{"doc":"\/**\n * Attempts to guess the correct URL based on query vars\n *\n * @since 2.3.0\n * @uses $wpdb\n *\n * @return bool|string The correct URL if one is found. False on failure.\n *\/","file":"canonical.php","line":473,"missingDoc":false,"filters":[],"uses":{"prepare":[477,481,486,488,490],"like_escape":[477],"get_query_var":[477,481,480,486,485,488,487,490,489,496,497,498,495,476],"implode":[483],"get_post_types":[483],"get_var":[492],"get_post_comments_feed_link":[496],"trailingslashit":[498],"get_permalink":[498,500],"user_trailingslashit":[498]},"used_by":{"redirect_canonical":[105]}},"remove_query_arg":{"doc":"\/**\n * Removes an item or list from the query string.\n *\n * @since 1.5.0\n *\n * @param string|array $key Query key or keys to remove.\n * @param bool $query When false uses the $_SERVER value.\n * @return string New URL query string.\n *\/","file":"functions.php","line":716,"missingDoc":false,"filters":[],"uses":{"add_query_arg":[719,722],"is_array":[717]},"used_by":{"redirect_canonical":[114,117,120,123,128,143,147,150,153,158,186,200,218,239,258,272],"_remove_qs_args_if_not_in_url":[457,460],"get_cancel_comment_reply_link":[1142],"wp_nonce_ays":[2026],"get_pagenum_link":[1423],"_post_format_link":[5464]}},"get_attachment_link":{"doc":"\/**\n * Retrieve permalink for attachment.\n *\n * This can be used in the WordPress Loop or outside of it.\n *\n * @since 2.0.0\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional. Leave name.\n * @return string\n *\/","file":"link-template.php","line":298,"missingDoc":false,"filters":["'attachment_link'"],"uses":{"get_post":[303,306],"_get_page_link":[308],"get_permalink":[310],"is_numeric":[312],"strpos":[312,317],"get_option":[312],"user_trailingslashit":[318],"trailingslashit":[318],"str_replace":[321],"using_permalinks":[305],"home_url":[325]},"used_by":{"redirect_canonical":[113],"get_the_attachment_link":[1901],"get_permalink":[109],"wp_prepare_attachment_for_js":[1331],"wp_get_attachment_link":[1169]}},"is_single":{"doc":"\/**\n * Is the query for an existing single post?\n *\n * Works for any post type, except attachments and pages\n *\n * If the $post parameter is specified, this function will additionally\n * check if the query is for one of the Posts specified.\n *\n * @see is_page()\n * @see is_singular()\n *\n * @see WP_Query::is_single()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $post Post ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":597,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[601],"__":[601],"is_single":[605]},"used_by":{"redirect_canonical":[115,118,206,262,260],"WP::register_globals":[461],"comments_template":[851],"__main":[29,34,27],"wp_title":[534],"feed_links_extra":[1640],"get_boundary_post":[1307],"get_next_posts_page_link":[1488],"get_next_posts_link":[1537],"get_previous_posts_page_link":[1570],"get_previous_posts_link":[1608],"wp_get_shortlink":[2351],"get_body_class":[427,529],"is_single":[605],"setup_postdata":[3638]}},"get_queried_object_id":{"doc":"\/**\n * Retrieve ID of the current queried object. Wrapper for $wp_query->get_queried_object_id()\n *\n * @uses WP_Query::get_queried_object_id()\n *\n * @since 3.1.0\n * @access public\n *\n * @return int\n *\/","file":"query.php","line":55,"missingDoc":false,"filters":[],"uses":{"get_queried_object_id":[57]},"used_by":{"redirect_canonical":[119,208,210,216],"wp_list_categories":[471],"rel_canonical":[2317],"wp_get_shortlink":[2352],"get_body_class":[428,489],"wp_list_pages":[846],"is_page_template":[1250],"get_queried_object_id":[57],"get_page_template":[237]}},"is_page":{"doc":"\/**\n * Is the query for an existing single page?\n *\n * If the $page parameter is specified, this function will additionally\n * check if the query is for one of the pages specified.\n *\n * @see is_single()\n * @see is_singular()\n *\n * @see WP_Query::is_page()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $page Page ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":488,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[492],"__":[492],"is_page":[496]},"used_by":{"redirect_canonical":[121,124],"WP::register_globals":[461],"comments_template":[851],"wp_title":[534],"feed_links_extra":[1640],"get_body_class":[486,531],"wp_list_pages":[845],"is_page_template":[1247],"is_page":[496],"WP_Query::is_front_page":[3323],"setup_postdata":[3638],"__main":[35,66]}},"is_home":{"doc":"\/**\n * Is the query for the blog homepage?\n *\n * This is the page which shows the time based blog content of your site.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_for_posts'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true only on the page you set as the \"Posts page\".\n *\n * @see is_front_page()\n *\n * @see WP_Query::is_home()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool True if blog view homepage.\n *\/","file":"query.php","line":441,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[445],"__":[445],"is_home":[449]},"used_by":{"redirect_canonical":[126],"WP::handle_404":[522],"wp_title":[534],"get_post_class":[345],"get_body_class":[410],"is_home":[449],"WP_Query::is_front_page":[3321],"__main":[31,66]}},"is_year":{"doc":"\/**\n * Is the query for an existing year archive?\n *\n * @see WP_Query::is_year()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":684,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[688],"__":[688],"is_year":[692]},"used_by":{"redirect_canonical":[129,151],"is_year":[692],"__main":[40,27]}},"is_month":{"doc":"\/**\n * Is the query for an existing month archive?\n *\n * @see WP_Query::is_month()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":461,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[465],"__":[465],"is_month":[469]},"used_by":{"redirect_canonical":[129,148],"is_month":[469],"__main":[37,26]}},"is_day":{"doc":"\/**\n * Is the query for an existing day archive?\n *\n * @see WP_Query::is_day()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":341,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[345],"__":[345],"is_day":[349]},"used_by":{"redirect_canonical":[129,145],"is_day":[349],"__main":[34,26]}},"get_year_link":{"doc":"\/**\n * Retrieve the permalink for the year archives.\n *\n * @since 1.5.0\n *\n * @param int|bool $year False for current year or year for permalink.\n * @return string\n *\/","file":"link-template.php","line":338,"missingDoc":false,"filters":["'year_link'","'year_link'"],"uses":{"gmdate":[341],"current_time":[341],"get_year_permastruct":[342],"str_replace":[344],"home_url":[345,347],"user_trailingslashit":[345]},"used_by":{"redirect_canonical":[133,152],"wp_get_archives":[957]}},"get_month_link":{"doc":"\/**\n * Retrieve the permalink for the month archives with year.\n *\n * @since 1.0.0\n *\n * @param bool|int $year False for current year. Integer of year.\n * @param bool|int $month False for current month. Integer of month.\n * @return string\n *\/","file":"link-template.php","line":360,"missingDoc":false,"filters":["'month_link'","'month_link'"],"uses":{"gmdate":[363,365],"current_time":[363,365],"get_month_permastruct":[366],"str_replace":[368,369],"zeroise":[369,372],"intval":[369],"home_url":[370,372],"user_trailingslashit":[370]},"used_by":{"redirect_canonical":[136,149],"wp_get_archives":[935],"get_calendar":[1172,1180]}},"get_day_link":{"doc":"\/**\n * Retrieve the permalink for the day archives with year and month.\n *\n * @since 1.0.0\n *\n * @param bool|int $year False for current year. Integer of year.\n * @param bool|int $month False for current month. Integer of month.\n * @param bool|int $day False for current day. Integer of day.\n * @return string\n *\/","file":"link-template.php","line":386,"missingDoc":false,"filters":["'day_link'","'day_link'"],"uses":{"gmdate":[389,391,393],"current_time":[389,391,393],"get_day_permastruct":[395],"str_replace":[397,398,399],"zeroise":[398,399,402,402],"intval":[398,399],"home_url":[400,402],"user_trailingslashit":[400]},"used_by":{"redirect_canonical":[139,146],"wp_get_archives":[978],"get_calendar":[1248]}},"is_author":{"doc":"\/**\n * Is the query for an existing author archive page?\n *\n * If the $author parameter is specified, this function will additionally\n * check if the query is for one of the authors specified.\n *\n * @see WP_Query::is_author()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $author Optional. User ID, nickname, nicename, or array of User IDs, nicknames, and nicenames\n * @return bool\n *\/","file":"query.php","line":204,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[208],"__":[208],"is_author":[212]},"used_by":{"redirect_canonical":[154],"WP::handle_404":[516],"wp_title":[551],"feed_links_extra":[1658],"get_body_class":[457,539],"is_author":[212],"__main":[38],"wp_dropdown_users":[1029]}},"is_category":{"doc":"\/**\n * Is the query for an existing category archive page?\n *\n * If the $category parameter is specified, this function will additionally\n * check if the query is for one of the categories specified.\n *\n * @see WP_Query::is_category()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param mixed $category Optional. Category ID, name, slug, or array of Category IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":228,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[232],"__":[232],"is_category":[236]},"used_by":{"redirect_canonical":[160,171],"wp_dropdown_categories":[313],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[539],"single_term_title":[731],"feed_links_extra":[1648],"get_body_class":[464,533],"is_category":[236],"__main":[36,31,26]}},"is_tag":{"doc":"\/**\n * Is the query for an existing tag archive page?\n *\n * If the $tag parameter is specified, this function will additionally\n * check if the query is for one of the tags specified.\n *\n * @see WP_Query::is_tag()\n * @since 2.3.0\n * @uses $wp_query\n *\n * @param mixed $slug Optional. Tag slug or array of slugs.\n * @return bool\n *\/","file":"query.php","line":252,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[256],"__":[256],"is_tag":[260]},"used_by":{"redirect_canonical":[160,174],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[539],"single_term_title":[733],"feed_links_extra":[1653],"get_body_class":[471,535],"is_tag":[260],"__main":[37]}},"is_tax":{"doc":"\/**\n * Is the query for an existing taxonomy archive page?\n *\n * If the $taxonomy parameter is specified, this function will additionally\n * check if the query is for that specific $taxonomy.\n *\n * If the $term parameter is specified in addition to the $taxonomy parameter,\n * this function will additionally check if the query is for one of the terms\n * specified.\n *\n * @see WP_Query::is_tax()\n * @since 2.5.0\n * @uses $wp_query\n *\n * @param mixed $taxonomy Optional. Taxonomy slug or slugs.\n * @param mixed $term Optional. Term ID, name, slug or array of Term IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":281,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[285],"__":[285],"is_tax":[289]},"used_by":{"redirect_canonical":[160],"wp_list_categories":[468],"term_description":[1043],"WP::handle_404":[516],"wp_title":[544],"single_term_title":[735],"get_body_class":[478],"is_tax":[289],"__main":[29]}},"get_category_by_path":{"doc":"\/**\n * Retrieve category based on URL containing the category slug.\n *\n * Breaks the $category_path parameter up to get the category slug.\n *\n * Tries to find the child path and will return it. If it doesn't find a\n * match, then it will return the first category matching slug, if $full_match,\n * is set to false. If it does not, then it will return null.\n *\n * It is also possible that it will return a WP_Error object on failure. Check\n * for it when using this function.\n *\n * @since 2.1.0\n *\n * @param string $category_path URL containing category slugs.\n * @param bool $full_match Optional. Whether full path should be matched.\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @return null|object|array Null on failure. Type is based on $output value.\n *\/","file":"category.php","line":110,"missingDoc":false,"filters":[],"uses":{"rawurlencode":[111],"urldecode":[111],"str_replace":[112,113],"trim":[114],"sanitize_title":[115,119],"basename":[115],"explode":[116],"get_terms":[121],"get_term":[130],"is_wp_error":[131],"get_category":[137,142]},"used_by":{"redirect_canonical":[207]}},"is_attachment":{"doc":"\/**\n * Is the query for an existing attachment page?\n *\n * @see WP_Query::is_attachment()\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":180,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[184],"__":[184],"is_attachment":[188]},"used_by":{"redirect_canonical":[112],"get_adjacent_post_rel_link":[1212],"adjacent_posts_rel_link_wp_head":[1261],"get_boundary_post":[1307],"adjacent_post_link":[1378],"get_body_class":[422,447],"wp_list_pages":[845],"is_attachment":[188],"__main":[32]}},"trailingslashit":{"doc":"\/**\n * Appends a trailing slash.\n *\n * Will remove trailing slash if it exists already before adding a trailing\n * slash. This prevents double slashing a string or path.\n *\n * The primary use of this is for paths and thus should be used for paths. It is\n * not restricted to paths and offers no specific path support.\n *\n * @since 1.2.0\n * @uses untrailingslashit() Unslashes string if it was slashed already.\n *\n * @param string $string What to add the trailing slash to.\n * @return string String with trailing slash added.\n *\/","file":"formatting.php","line":1367,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[1368]},"used_by":{"redirect_canonical":[217,232,261,263,271,277,279,366,375,374,374],"redirect_guess_404_permalink":[498],"WP_Admin_Bar::initialize":[35,39],"_WP_Editors::editor_settings":[251],"WP_Image_Editor::get_output_format":[265],"WP_Image_Editor::generate_filename":[297],"WP_Theme::scandir":[976],"get_comment_link":[500],"get_trackback_url":[708],"weblog_ping":[1949],"get_temp_dir":[1414,1417,1422,1427],"wp_upload_dir":[1541,1548,1586],"load_muplugin_textdomain":[444],"user_trailingslashit":[37],"get_attachment_link":[318],"get_post_comments_feed_link":[480],"get_author_feed_link":[549],"get_term_feed_link":[618],"get_search_feed_link":[786],"get_post_type_archive_feed_link":[872],"get_pagenum_link":[1433,1455,1461],"get_comments_pagenum_link":[1697,1703],"paginate_comments_links":[1825],"insert_blog":[1107],"plugin_dir_path":[587],"plugin_dir_url":[600],"_wp_link_page":[704,706],"WP_Rewrite::mod_rewrite_rules":[1646,1650]}},"is_front_page":{"doc":"\/**\n * Is the query for the front page of the site?\n *\n * This is for what is displayed at your site's main URL.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_on_front'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true when viewing that page.\n *\n * Otherwise the same as @see is_home()\n *\n * @see WP_Query::is_front_page()\n * @since 2.5.0\n * @uses is_home()\n * @uses get_option()\n *\n * @return bool True, if front of site.\n *\/","file":"query.php","line":412,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[416],"__":[416],"is_front_page":[420]},"used_by":{"redirect_canonical":[214,365,351,351],"wp_title":[534,534],"_wp_menu_item_classes_by_context":[393],"get_body_class":[408],"wp_page_menu":[903],"is_front_page":[420],"__main":[30]}},"get_default_feed":{"doc":"\/**\n * Retrieve the default feed.\n *\n * The default feed is 'rss2', unless a plugin changes it through the\n * 'default_feed' filter.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n * @uses apply_filters() Calls 'default_feed' hook on the default feed string.\n *\n * @return string Default feed, or for example 'rss2', 'atom', etc.\n *\/","file":"feed.php","line":65,"missingDoc":false,"filters":["'default_feed'"],"uses":[],"used_by":{"redirect_canonical":[236,238,235,244],"get_the_content_feed":[147],"get_the_category_rss":[303],"feed_content_type":[503],"do_feed":[1005],"feed_links":[1610],"get_feed_link":[437,445],"get_post_comments_feed_link":[472,481],"get_author_feed_link":[538,544],"get_term_feed_link":[597,613],"get_search_feed_link":[779],"get_search_comments_feed_link":[808],"get_post_type_archive_feed_link":[864],"WP_Query::is_feed":[3286]}},"get_feed_link":{"doc":"\/**\n * Retrieve the permalink for the feed type.\n *\n * @since 1.5.0\n *\n * @param string $feed Optional, defaults to default feed. Feed type.\n * @return string\n *\/","file":"link-template.php","line":427,"missingDoc":false,"filters":["'feed_link'"],"uses":{"get_feed_permastruct":[430],"str_replace":[433,440,448],"get_comment_feed_permastruct":[434],"strpos":[432,447],"get_default_feed":[437,445],"preg_replace":[441],"home_url":[442,450],"user_trailingslashit":[442]},"used_by":{"redirect_canonical":[250],"get_bloginfo":[421,424,427,430,433,436],"feed_links":[1609,1610],"the_feed_link":[415]}},"wp_redirect":{"doc":"\/**\n * Redirects to another page.\n *\n * @since 1.5.1\n * @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.\n *\n * @param string $location The path to redirect to\n * @param int $status Status code to use\n * @return bool False if $location is not set\n *\/","file":"pluggable.php","line":863,"missingDoc":false,"filters":["'wp_redirect'","'wp_redirect_status'"],"uses":{"wp_sanitize_redirect":[872],"status_header":[875],"php_sapi_name":[874],"header":[877]},"used_by":{"redirect_canonical":[251,288,430],"wp_redirect_admin_locations":[521,531],"WP_Customize_Manager::after_setup_theme":[151],"spawn_cron":[233],"wp_not_installed":[436],"wpmu_admin_do_redirect":[233,237,248],"maybe_redirect_404":[1656],"auth_redirect":[752,755,771,774,789],"wp_safe_redirect":[924],"wp_old_slug_redirect":[3611]}},"network_site_url":{"doc":"\/**\n * Retrieve the site url for the current network.\n *\n * Returns the site url with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. See set_url_scheme().\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":2103,"missingDoc":false,"filters":["'network_site_url'"],"uses":{"site_url":[2107],"is_multisite":[2106],"set_url_scheme":[2112],"ltrim":[2115],"is_string":[2114],"strpos":[2114]},"used_by":{"redirect_canonical":[285],"wp_lostpassword_url":[319],"network_admin_url":[2170],"user_admin_url":[2189],"wpmu_signup_blog_notification":[728],"wp_version_check":[57]}},"site_url":{"doc":"\/**\n * Retrieve the site url for the current site.\n *\n * Returns the 'site_url' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @uses get_site_url()\n *\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. See set_url_scheme().\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":1944,"missingDoc":false,"filters":[],"uses":{"get_site_url":[1945]},"used_by":{"redirect_canonical":[287],"wp_redirect_admin_locations":[517,518,528,531],"wp_xmlrpc_server::wp_getUsersBlogs":[494],"wp_xmlrpc_server::blogger_getUsersBlogs":[3648],"comment_form":[1559],"spawn_cron":[248],"WP_Widget_RSS::widget":[759],"translate_smiley":[1741],"do_robots":[1081],"wp_logout_url":[218],"wp_login_url":[238],"wp_login_form":[276],"wp_register":[341],"get_bloginfo":[415],"includes_url":[2024],"network_site_url":[2107],"wpmu_signup_user_notification":[796],"newblog_notify_siteadmin":[1024],"get_the_password_form":[1225],"WP_Rewrite::mod_rewrite_rules":[1644],"wp_default_scripts":[52],"wp_default_styles":[494],"get_theme_root_uri":[483]}},"is_404":{"doc":"\/**\n * Is the query a 404 (returns no results)?\n *\n * @see WP_Query::is_404()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":704,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[708],"__":[708],"is_404":[712]},"used_by":{"redirect_canonical":[92,351],"wp_redirect_admin_locations":[510],"WP::handle_404":[503],"wp_title":[584],"maybe_redirect_404":[1653],"get_body_class":[424],"is_404":[712],"wp_old_slug_redirect":[3569],"__main":[27,30,26]}},"rawurlencode_deep":{"doc":"\/**\n * Navigates through an array and raw encodes the values to be used in a URL.\n *\n * @since 3.4.0\n *\n * @param array|string $value The array or string to be encoded.\n * @return array|string $value The encoded array (or string from the callback).\n *\/","file":"formatting.php","line":1452,"missingDoc":false,"filters":[],"uses":{"is_array":[1453],"array_map":[1453],"rawurlencode":[1453]},"used_by":{"redirect_canonical":[306]}},"redirect_canonical::lowercase_octets":{"doc":"","file":"canonical.php","line":414,"missingDoc":true,"filters":[],"uses":{"strtolower":[415]},"used_by":[]},"wp_redirect_admin_locations":{"doc":"","file":"canonical.php","line":508,"missingDoc":true,"filters":[],"uses":{"is_404":[510],"using_permalinks":[510],"home_url":[514,515,516,526,527],"site_url":[517,518,528,531],"wp_redirect":[521,531],"admin_url":[521],"in_array":[520,530],"untrailingslashit":[520,530]},"used_by":[]},"untrailingslashit":{"doc":"\/**\n * Removes trailing slash if it exists.\n *\n * The primary use of this is for paths and thus should be used for paths. It is\n * not restricted to paths and offers no specific path support.\n *\n * @since 2.2.0\n *\n * @param string $string What to remove the trailing slash from.\n * @return string String without the trailing slash.\n *\/","file":"formatting.php","line":1382,"missingDoc":false,"filters":[],"uses":{"rtrim":[1383]},"used_by":{"wp_redirect_admin_locations":[520,530],"WP_Widget_RSS::widget":[759],"trailingslashit":[1368],"wp_upload_dir":[1583],"_config_wp_home":[2376],"_config_wp_siteurl":[2396],"user_trailingslashit":[39],"install_blog":[1153],"recurse_dirsize":[1439],"_wp_menu_item_classes_by_context":[366,369,370,384,384,397],"get_option":[89]}},"WP_Roles::__construct":{"doc":"\/**\n * Constructor\n *\n * @since 2.0.0\n *\/","file":"capabilities.php","line":80,"missingDoc":false,"filters":[],"uses":{"_init":[81]},"used_by":[]},"WP_Roles::_init":{"doc":"\/**\n * Set up the object properties.\n *\n * The role key is set to the current prefix for the $wpdb object with\n * 'user_roles' appended. If the $wp_user_roles global is set, then it will\n * be used and the role option will not be updated or used.\n *\n * @since 2.1.0\n * @access protected\n * @uses $wpdb Used to get the database prefix.\n * @global array $wp_user_roles Used to set the 'roles' property value.\n *\/","file":"capabilities.php","line":96,"missingDoc":false,"filters":[],"uses":{"get_option":[103],"array_keys":[111]},"used_by":[]},"WP_Roles::reinit":{"doc":"\/**\n * Reinitialize the object\n *\n * Recreates the role objects. This is typically called only by switch_to_blog()\n * after switching wpdb to a new blog ID.\n *\n * @since 3.5.0\n * @access public\n *\/","file":"capabilities.php","line":126,"missingDoc":false,"filters":[],"uses":{"get_option":[135],"array_keys":[141]},"used_by":[]},"WP_Roles::add_role":{"doc":"\/**\n * Add role name with capabilities to list.\n *\n * Updates the list of roles, if the role doesn't already exist.\n *\n * The capabilities are defined in the following format `array( 'read' => true );`\n * To explicitly deny a role a capability you set the value for that capability to false.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $display_name Role display name.\n * @param array $capabilities List of role capabilities in the above format.\n * @return null|WP_Role WP_Role object if role is added, null if already exists.\n *\/","file":"capabilities.php","line":163,"missingDoc":false,"filters":[],"uses":{"update_option":[172]},"used_by":[]},"update_option":{"doc":"\/**\n * Update the value of an option that was already added.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * If the option does not exist, then the option will be added with the option\n * value, but you will not be able to set whether it is autoloaded. If you want\n * to set whether an option is autoloaded, then you need to use the add_option().\n *\n * @since 1.0.0\n * @package WordPress\n * @subpackage Option\n *\n * @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'update_option' hook before updating the option.\n * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success.\n *\n * @param string $option Option name. Expected to not be SQL-escaped.\n * @param mixed $newvalue Option value. Expected to not be SQL-escaped.\n * @return bool False if value was not updated and true if value was updated.\n *\/","file":"option.php","line":215,"missingDoc":false,"filters":["'pre_update_option_' . $option","'update_option'","\"update_option_{$option}\"","'updated_option'"],"uses":{"trim":[218],"wp_protect_special_option":[222],"is_object":[224],"sanitize_option":[227],"get_option":[228],"add_option":[236],"wp_cache_get":[238],"wp_cache_set":[241,252,254],"is_array":[239],"maybe_serialize":[245],"wp_load_alloptions":[249],"defined":[248],"update":[258]},"used_by":{"WP_Roles::add_role":[172],"WP_Roles::remove_role":[195],"WP_Roles::add_cap":[214],"WP_Roles::remove_cap":[232],"WP_Customize_Setting::_update_option":[203,209],"WP_Theme::get_allowed_on_site":[1148,1152],"wp_xmlrpc_server::wp_setOptions":[3239],"_set_cron_array":[384],"_upgrade_cron_array":[412],"update_blog_details":[334],"update_blog_option":[473,476],"wpmu_create_blog":[986,990],"install_blog":[1155,1156,1159,1161,1163,1164],"update_posts_count":[1499],"global_terms":[1570],"set_transient":[510,511],"update_site_option":[911],"register_uninstall_hook":[688],"stick_post":[2073],"unstick_post":[2100],"wp_delete_post":[2339],"WP_Rewrite::wp_rewrite_rules":[1620],"WP_Rewrite::set_permalink_structure":[1944],"WP_Rewrite::set_category_base":[1964],"WP_Rewrite::set_tag_base":[1983],"_get_term_hierarchy":[2776],"switch_theme":[679,680,683,684,692,699],"get_theme_mods":[754],"set_theme_mod":[802],"remove_theme_mod":[828],"check_theme_switched":[1617],"WP_Widget::save_settings":[287],"wp_set_sidebars_widgets":[1042],"wp_convert_widget_settings":[1112,1117]}},"WP_Roles::remove_role":{"doc":"\/**\n * Remove role by name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":186,"missingDoc":false,"filters":[],"uses":{"update_option":[195]},"used_by":[]},"WP_Roles::add_cap":{"doc":"\/**\n * Add capability to role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $cap Capability name.\n * @param bool $grant Optional, default is true. Whether role is capable of performing capability.\n *\/","file":"capabilities.php","line":208,"missingDoc":false,"filters":[],"uses":{"update_option":[214]},"used_by":[]},"WP_Roles::remove_cap":{"doc":"\/**\n * Remove capability from role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":226,"missingDoc":false,"filters":[],"uses":{"update_option":[232]},"used_by":[]},"WP_Roles::get_role":{"doc":"\/**\n * Retrieve role object by name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @return object|null Null, if role does not exist. WP_Role object, if found.\n *\/","file":"capabilities.php","line":244,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Roles::get_names":{"doc":"\/**\n * Retrieve list of role names.\n *\n * @since 2.0.0\n * @access public\n *\n * @return array List of role names.\n *\/","file":"capabilities.php","line":259,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Roles::is_role":{"doc":"\/**\n * Whether role name is currently in the list of available roles.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name to look up.\n * @return bool\n *\/","file":"capabilities.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Role::__construct":{"doc":"\/**\n * Constructor - Set up object properties.\n *\n * The list of capabilities, must have the key as the name of the capability\n * and the value a boolean of whether it is granted to the role.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n * @param array $capabilities List of capabilities.\n *\/","file":"capabilities.php","line":315,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Role::add_cap":{"doc":"\/**\n * Assign role a capability.\n *\n * @see WP_Roles::add_cap() Method uses implementation for role.\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @param bool $grant Whether role has capability privilege.\n *\/","file":"capabilities.php","line":330,"missingDoc":false,"filters":[],"uses":{"add_cap":[337]},"used_by":[]},"WP_Role::remove_cap":{"doc":"\/**\n * Remove capability from role.\n *\n * This is a container for {@link WP_Roles::remove_cap()} to remove the\n * capability from the role. That is to say, that {@link\n * WP_Roles::remove_cap()} implements the functionality, but it also makes\n * sense to use this class, because you don't need to enter the role name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":353,"missingDoc":false,"filters":[],"uses":{"remove_cap":[360]},"used_by":[]},"WP_Role::has_cap":{"doc":"\/**\n * Whether role has capability.\n *\n * The capabilities is passed through the 'role_has_cap' filter. The first\n * parameter for the hook is the list of capabilities the class has\n * assigned. The second parameter is the capability name to look for. The\n * third and final parameter for the hook is the role name.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @return bool True, if user has capability. False, if doesn't have capability.\n *\/","file":"capabilities.php","line":377,"missingDoc":false,"filters":["'role_has_cap'"],"uses":[],"used_by":[]},"WP_User::__construct":{"doc":"\/**\n * Constructor\n *\n * Retrieves the userdata and passes it to {@link WP_User::init()}.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int|string|stdClass|WP_User $id User's ID, a WP_User object, or a user object from the DB.\n * @param string $name Optional. User's username\n * @param int $blog_id Optional Blog ID, defaults to current blog.\n * @return WP_User\n *\/","file":"capabilities.php","line":473,"missingDoc":false,"filters":[],"uses":{"init":[487,490,505],"is_object":[489],"is_a":[486],"is_numeric":[494]},"used_by":[]},"init":{"doc":"\/**\n * Set up constants with default values, unless user overrides.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\/","file":"rss.php","line":628,"missingDoc":false,"filters":[],"uses":{"define":[633,637,641,645,649,653,666,670,675],"defined":[629,636,640,644,648,652,656,669,674]},"used_by":{"WP_User::__construct":[487,490,505],"SimplePie::__construct":[710],"SimplePie::init":[1311],"SimplePie::fetch_data":[1489],"WP::main":[546],"WP_Scripts::__construct":[34],"fetch_feed":[542],"WP_Locale::__construct":[317],"get_user_by":[142],"WP_Query::parse_query":[1429],"WP_Query::query":[2970],"WP_Rewrite::set_permalink_structure":[1945],"WP_Rewrite::set_category_base":[1965],"WP_Rewrite::set_tag_base":[1984],"WP_Rewrite::__construct":[1997],"fetch_rss":[402]}},"WP_User::init":{"doc":"\/**\n * Sets up object properties, including capabilities.\n *\n * @param object $data User DB row object\n * @param int $blog_id Optional. The blog id to initialize for\n *\/","file":"capabilities.php","line":514,"missingDoc":false,"filters":[],"uses":{"for_blog":[518]},"used_by":[]},"WP_User::get_data_by":{"doc":"\/**\n * Return only the main user fields\n *\n * @since 3.3.0\n *\n * @param string $field The field to query against: 'id', 'slug', 'email' or 'login'\n * @param string|int $value The field value\n * @return object Raw user object\n *\/","file":"capabilities.php","line":530,"missingDoc":false,"filters":[],"uses":{"is_numeric":[536],"absint":[538],"trim":[540],"wp_cache_get":[552,556,561,569],"sanitize_user":[560],"get_row":[573],"prepare":[573],"update_user_caches":[578]},"used_by":[]},"absint":{"doc":"\/**\n * Converts value to nonnegative integer.\n *\n * @since 2.5.0\n *\n * @param mixed $maybeint Data you wish to have converted to a nonnegative integer\n * @return int An nonnegative integer\n *\/","file":"functions.php","line":2790,"missingDoc":false,"filters":[],"uses":{"abs":[2791],"intval":[2791]},"used_by":{"WP_User::get_data_by":[538],"_WP_Editors::wp_link_query":[770],"wp_xmlrpc_server::_insert_post":[1041,1099],"wp_xmlrpc_server::wp_getPosts":[1473,1476],"wp_xmlrpc_server::wp_getTerms":[1855,1858],"wp_xmlrpc_server::wp_getUsers":[2094,2095],"wp_xmlrpc_server::wp_getComments":[2776,2780,2784],"wp_xmlrpc_server::wp_newComment":[2968,3008],"wp_xmlrpc_server::wp_getMediaLibrary":[3327,3329,3330],"wp_xmlrpc_server::blogger_getRecentPosts":[3780],"wp_xmlrpc_server::mw_getRecentPosts":[4753],"wp_xmlrpc_server::mt_getRecentPostTitles":[5007],"get_comments_number":[548],"WP_Comment_Query::query":[260,310,311],"wp_new_comment":[1386],"WP_Widget_Recent_Posts::widget":[562],"WP_Widget_Recent_Posts::form":[612],"WP_Widget_Recent_Comments::widget":[679],"WP_Widget_Recent_Comments::update":[708],"WP_Widget_Recent_Comments::form":[720],"sanitize_option":[2788],"number_format_i18n":[155],"get_status_header_desc":[796],"wp_get_archives":[888],"get_post_comments_feed_link":[466],"get_current_blog_id":[677],"add_image_size":[190,190],"add_metadata":[35],"update_metadata":[105],"delete_metadata":[188],"get_metadata":[271],"metadata_exists":[319],"get_metadata_by_mid":[354],"update_metadata_by_mid":[394],"delete_metadata_by_mid":[474],"get_post_custom":[1851],"is_sticky":[1913],"wp_get_recent_posts":[2634],"set_post_thumbnail":[5378],"WP_Query::parse_query":[1442,1443,1444,1445,1446,1447,1448,1449,1453,1454,1455,1456,1464],"WP_Query::parse_tax_query":[1808],"WP_Query::get_posts":[2025,2154,2158,2298,2306,2326,2529,2536],"url_to_postid":[288],"get_terms":[1208,1209],"WP_User_Query::prepare_query":[486]}},"sanitize_user":{"doc":"\/**\n * Sanitize username stripping out unsafe characters.\n *\n * Removes tags, octets, entities, and if strict is enabled, will only keep\n * alphanumeric, _, space, ., -, @. After sanitizing, it passes the username,\n * raw username (the username in the parameter), and the value of $strict as\n * parameters for the 'sanitize_user' filter.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'sanitize_user' hook on username, raw username,\n *\t\tand $strict parameter.\n *\n * @param string $username The username to be sanitized.\n * @param bool $strict If set limits $username to specific characters. Default false.\n * @return string The sanitized username, after passing through filters.\n *\/","file":"formatting.php","line":886,"missingDoc":false,"filters":["'sanitize_user'"],"uses":{"wp_strip_all_tags":[888],"remove_accents":[889],"preg_replace":[891,892,896,900],"trim":[898]},"used_by":{"WP_User::get_data_by":[560],"wpmu_validate_user_signup":[436],"wpmu_signup_user":[677],"wpmu_create_user":[913],"wpmu_create_blog":[955],"wp_authenticate":[471],"validate_username":[1231],"wp_insert_user":[1303]}},"update_user_caches":{"doc":"\/**\n * Update all user caches\n *\n * @since 3.0.0\n *\n * @param object $user User object to be cached\n *\/","file":"user.php","line":1162,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[1163,1164,1165,1166]},"used_by":{"WP_User::get_data_by":[578],"cache_users":[170]}},"WP_User::__isset":{"doc":"\/**\n * Magic method for checking the existence of a certain custom field\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":588,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[590],"__":[590],"metadata_exists":[600]},"used_by":[]},"metadata_exists":{"doc":"\/**\n * Determine if a meta key is set for a given object\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key.\n * @return boolean true of the key is set, false if not.\n *\/","file":"meta.php","line":315,"missingDoc":false,"filters":["\"get_{$meta_type}_metadata\""],"uses":{"absint":[319],"wp_cache_get":[326],"update_meta_cache":[329]},"used_by":{"WP_User::__isset":[600],"WP_Post::__isset":[612]}},"WP_User::__get":{"doc":"\/**\n * Magic method for accessing custom fields\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":608,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[610],"__":[610],"get_user_meta":[619],"sanitize_user_field":[623]},"used_by":[]},"get_user_meta":{"doc":"\/**\n * Retrieve user meta field for a user.\n *\n * @since 3.0.0\n * @uses get_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"user.php","line":836,"missingDoc":false,"filters":[],"uses":{"get_metadata":[837]},"used_by":{"WP_User::__get":[619],"WP_User::_init_caps":[714],"get_active_blog_for_user":[79,105,107],"add_user_to_blog":[188],"remove_user_from_blog":[226],"wpmu_create_blog":[992],"get_blogs_of_user":[690],"wp_update_user":[1462]}},"sanitize_user_field":{"doc":"\/**\n * Sanitize user field based on context.\n *\n * Possible context values are: 'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The\n * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'\n * when calling filters.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'edit_$field' passing $value and $user_id if $context == 'edit'.\n * $field is prefixed with 'user_' if it isn't already.\n * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db'. $field is prefixed with\n * 'user_' if it isn't already.\n * @uses apply_filters() Calls '$field' passing $value, $user_id and $context if $context == anything\n * other than 'raw', 'edit' and 'db'. $field is prefixed with 'user_' if it isn't already.\n *\n * @param string $field The user Object field name.\n * @param mixed $value The user Object value.\n * @param int $user_id user ID.\n * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',\n * 'attribute' and 'js'.\n * @return mixed Sanitized value.\n *\/","file":"user.php","line":1106,"missingDoc":false,"filters":["\"edit_{$field}\"","\"edit_user_{$field}\"","\"pre_{$field}\"","\"pre_user_{$field}\"","\"user_{$field}\""],"uses":{"in_array":[1108],"is_string":[1114],"is_numeric":[1114],"strpos":[1117],"esc_html":[1127],"esc_attr":[1129,1148],"esc_url":[1145],"esc_js":[1150]},"used_by":{"WP_User::__get":[623],"sanitize_user_object":[2691,2699]}},"WP_User::__set":{"doc":"\/**\n * Magic method for setting custom fields\n *\n * @since 3.3.0\n *\/","file":"capabilities.php","line":634,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[636],"__":[636]},"used_by":[]},"WP_User::exists":{"doc":"\/**\n * Determine whether the user exists in the database.\n *\n * @since 3.4.0\n * @access public\n *\n * @return bool True if user exists in the database, false if not.\n *\/","file":"capabilities.php","line":652,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User::get":{"doc":"\/**\n * Retrieve the value of a property or meta key.\n *\n * Retrieves from the users and usermeta table.\n *\n * @since 3.3.0\n *\n * @param string $key Property\n *\/","file":"capabilities.php","line":665,"missingDoc":false,"filters":[],"uses":{"__get":[666]},"used_by":[]},"WP_User::has_prop":{"doc":"\/**\n * Determine whether a property or meta key is set\n *\n * Consults the users and usermeta tables.\n *\n * @since 3.3.0\n *\n * @param string $key Property\n *\/","file":"capabilities.php","line":678,"missingDoc":false,"filters":[],"uses":{"__isset":[679]},"used_by":[]},"WP_User::to_array":{"doc":"","file":"capabilities.php","line":689,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[690]},"used_by":[]},"WP_User::_init_caps":{"doc":"\/**\n * Set up capability object properties.\n *\n * Will set the value for the 'cap_key' property to current database table\n * prefix, followed by 'capabilities'. Will then check to see if the\n * property matching the 'cap_key' exists and is an array. If so, it will be\n * used.\n *\n * @access protected\n * @since 2.1.0\n *\n * @param string $cap_key Optional capability key\n *\/","file":"capabilities.php","line":706,"missingDoc":false,"filters":[],"uses":{"get_user_meta":[714],"is_array":[716],"get_role_caps":[719]},"used_by":[]},"WP_User::get_role_caps":{"doc":"\/**\n * Retrieve all of the role capabilities and merge with individual capabilities.\n *\n * All of the capabilities of the roles the user belongs to are merged with\n * the users individual roles. This also means that the user can be denied\n * specific roles that their role might have, but the specific user isn't\n * granted permission to.\n *\n * @since 2.0.0\n * @uses $wp_roles\n * @access public\n *\/","file":"capabilities.php","line":734,"missingDoc":false,"filters":[],"uses":{"array_filter":[742],"array_keys":[742],"is_array":[741],"get_role":[747],"array_merge":[748,750]},"used_by":[]},"get_role":{"doc":"\/**\n * Retrieve role object.\n *\n * @see WP_Roles::get_role() Uses method to retrieve role object.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @return object\n *\/","file":"capabilities.php","line":1376,"missingDoc":false,"filters":[],"uses":{"get_role":[1382]},"used_by":{"WP_User::get_role_caps":[747],"get_role":[1382],"wp_xmlrpc_server::wp_getUsers":[2105]}},"WP_User::add_role":{"doc":"\/**\n * Add role to user.\n *\n * Updates the user's meta data option with capabilities and roles.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":763,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[765],"get_role_caps":[766],"update_user_level_from_caps":[767]},"used_by":[]},"update_user_meta":{"doc":"\/**\n * Update user meta field based on user ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and user ID.\n *\n * If the meta field for the user does not exist, it will be added.\n *\n * @since 3.0.0\n * @uses update_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"user.php","line":858,"missingDoc":false,"filters":[],"uses":{"update_metadata":[859]},"used_by":{"WP_User::add_role":[765],"WP_User::remove_role":[782],"WP_User::set_role":[812],"WP_User::update_user_level_from_caps":[859],"WP_User::add_cap":[873],"WP_User::remove_cap":[888],"get_active_blog_for_user":[83,91,106,108],"add_user_to_blog":[189,191],"remove_user_from_blog":[239,240,254,255],"wpmu_create_blog":[993],"add_new_user_to_blog":[1725],"update_user_option":[284],"wp_insert_user":[1407]}},"WP_User::remove_role":{"doc":"\/**\n * Remove role from user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":778,"missingDoc":false,"filters":[],"uses":{"in_array":[779],"update_user_meta":[782],"get_role_caps":[783],"update_user_level_from_caps":[784]},"used_by":[]},"WP_User::set_role":{"doc":"\/**\n * Set the role of the user.\n *\n * This will remove the previous roles of the user and assign the user the\n * new one. You can set the role to an empty string and it will remove all\n * of the roles from the user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $role Role name.\n *\/","file":"capabilities.php","line":799,"missingDoc":false,"filters":["'set_user_role'"],"uses":{"count":[800],"current":[800],"update_user_meta":[812],"get_role_caps":[813],"update_user_level_from_caps":[814]},"used_by":[]},"WP_User::level_reduction":{"doc":"\/**\n * Choose the maximum level the user has.\n *\n * Will compare the level from the $item parameter against the $max\n * parameter. If the item is incorrect, then just the $max parameter value\n * will be returned.\n *\n * Used to get the max level based on the capabilities the user has. This\n * is also based on roles, so if the user is assigned the Administrator role\n * then the capability 'level_10' will exist and the user will get that\n * value.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int $max Max level of user.\n * @param string $item Level capability name.\n * @return int Max Level.\n *\/","file":"capabilities.php","line":837,"missingDoc":false,"filters":[],"uses":{"intval":[839],"max":[840],"preg_match":[838]},"used_by":[]},"WP_User::update_user_level_from_caps":{"doc":"\/**\n * Update the maximum user level for the user.\n *\n * Updates the 'user_level' user metadata (includes prefix that is the\n * database table prefix) with the maximum user level. Gets the value from\n * the all of the capabilities that the user has.\n *\n * @since 2.0.0\n * @access public\n *\/","file":"capabilities.php","line":856,"missingDoc":false,"filters":[],"uses":{"array_reduce":[858],"array_keys":[858],"update_user_meta":[859]},"used_by":[]},"WP_User::add_cap":{"doc":"\/**\n * Add capability and grant or deny access to capability.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n * @param bool $grant Whether to grant capability to user.\n *\/","file":"capabilities.php","line":871,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[873]},"used_by":[]},"WP_User::remove_cap":{"doc":"\/**\n * Remove capability from user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string $cap Capability name.\n *\/","file":"capabilities.php","line":884,"missingDoc":false,"filters":[],"uses":{"update_user_meta":[888]},"used_by":[]},"WP_User::remove_all_caps":{"doc":"\/**\n * Remove all of the capabilities of the user.\n *\n * @since 2.1.0\n * @access public\n *\/","file":"capabilities.php","line":897,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[900,901],"get_role_caps":[902]},"used_by":[]},"delete_user_meta":{"doc":"\/**\n * Remove metadata matching criteria from a user.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 3.0.0\n * @uses delete_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_user_meta\n *\n * @param int $user_id user ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"user.php","line":819,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[820]},"used_by":{"WP_User::remove_all_caps":[900,901],"update_user_option":[282],"delete_user_option":[307]}},"WP_User::has_cap":{"doc":"\/**\n * Whether user has capability or role name.\n *\n * This is useful for looking up whether the user has a specific role\n * assigned to the user. The second optional parameter can also be used to\n * check for capabilities against a specific object, such as a post or user.\n *\n * @since 2.0.0\n * @access public\n *\n * @param string|int $cap Capability or role name to search.\n * @return bool True, if user has capability; false, if user does not have capability.\n *\/","file":"capabilities.php","line":918,"missingDoc":false,"filters":["'user_has_cap'"],"uses":{"_deprecated_argument":[920],"__":[920],"translate_level_to_cap":[921],"is_numeric":[919],"array_slice":[924],"func_get_args":[924],"array_merge":[925],"call_user_func_array":[926],"in_array":[930],"is_multisite":[929],"is_super_admin":[929]},"used_by":[]},"WP_User::translate_level_to_cap":{"doc":"\/**\n * Convert numeric level to level capability name.\n *\n * Prepends 'level_' to level number.\n *\n * @since 2.0.0\n * @access public\n *\n * @param int $level Level number, 1 to 10.\n * @return string\n *\/","file":"capabilities.php","line":957,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User::for_blog":{"doc":"\/**\n * Set the blog to operate on. Defaults to the current blog.\n *\n * @since 3.0.0\n *\n * @param int $blog_id Optional Blog ID, defaults to current blog.\n *\/","file":"capabilities.php","line":968,"missingDoc":false,"filters":[],"uses":{"get_blog_prefix":[971],"_init_caps":[974]},"used_by":[]},"map_meta_cap":{"doc":"\/**\n * Map meta capabilities to primitive capabilities.\n *\n * This does not actually compare whether the user ID has the actual capability,\n * just what the capability or capabilities are. Meta capability list value can\n * be 'delete_user', 'edit_user', 'remove_user', 'promote_user', 'delete_post',\n * 'delete_page', 'edit_post', 'edit_page', 'read_post', or 'read_page'.\n *\n * @since 2.0.0\n *\n * @param string $cap Capability name.\n * @param int $user_id User ID.\n * @return array Actual capabilities for meta capability.\n *\/","file":"capabilities.php","line":992,"missingDoc":false,"filters":["\"auth_post_meta_{$meta_key}\"","'map_meta_cap'"],"uses":{"array_slice":[993],"func_get_args":[993],"is_multisite":[1010,1183,1192,1205,1221,1228,1238,1244],"is_super_admin":[1010,1183,1192,1205,1221,1238,1246],"get_post":[1017,1020,1067,1070,1115,1118,1153,1161,1177],"get_post_type_object":[1023,1073,1121,1154,1162,1178],"get_current_user_id":[1039,1089,1143],"wp_get_current_user":[1039,1089,1143],"get_userdata":[1039,1089,1143],"get_post_meta":[1047,1097],"is_object":[1042,1092,1145],"get_post_status_object":[1131],"map_meta_cap":[1150,1163,1180],"is_protected_meta":[1171],"has_filter":[1167],"get_comment":[1176],"defined":[1183,1190,1203,1201,1219],"get_site_option":[1230,1246],"get_option":[1252],"_post_type_meta_capabilities":[1259],"array_merge":[1261],"call_user_func_array":[1262]},"used_by":{"map_meta_cap":[1150,1163,1180]}},"get_post_status_object":{"doc":"\/**\n * Retrieve a post status object by name\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses\n * @see register_post_status\n * @see get_post_statuses\n *\n * @param string $post_status The name of a registered post status\n * @return object A post status object\n *\/","file":"post.php","line":999,"missingDoc":false,"filters":[],"uses":[],"used_by":{"map_meta_cap":[1131],"wp_xmlrpc_server::_insert_post":[1033],"WP_Query::get_posts":[2701]}},"is_protected_meta":{"doc":"\/**\n * Determine whether a meta key is protected\n *\n * @since 3.1.3\n *\n * @param string $meta_key Meta key\n * @return bool True if the key is protected, false otherwise.\n *\/","file":"meta.php","line":862,"missingDoc":false,"filters":["'is_protected_meta'"],"uses":[],"used_by":{"map_meta_cap":[1171],"register_meta":[898],"the_meta":[747]}},"has_filter":{"doc":"\/**\n * Check if any filter has been registered for a hook.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @global array $wp_filter Stores all of the filters\n *\n * @param string $tag The name of the filter hook.\n * @param callback $function_to_check optional.\n * @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.\n * \tWhen checking a specific function, the priority of that hook is returned, or false if the function is not attached.\n * \tWhen using the $function_to_check argument, this function may return a non-boolean value that evaluates to false\n * \t(e.g.) 0, so use the === operator for testing the return value.\n *\/","file":"plugin.php","line":89,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[96],"array_keys":[99]},"used_by":{"map_meta_cap":[1167],"WP::build_query_string":[430],"has_action":[510],"get_terms":[1241]}},"get_comment":{"doc":"\/**\n * Retrieves comment data given a comment ID or comment object.\n *\n * If an object is passed then the comment data will be cached and then returned\n * after being passed through a filter. If the comment is empty, then the global\n * comment variable will be used, if it is set.\n *\n * If the comment is empty, then the global comment variable will be used, if it\n * is set.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param object|string|int $comment Comment to retrieve.\n * @param string $output Optional. OBJECT or ARRAY_A or ARRAY_N constants.\n * @return object|array|null Depends on $output value.\n *\/","file":"comment.php","line":130,"missingDoc":false,"filters":["'get_comment'"],"uses":{"is_object":[139],"wp_cache_add":[140,149],"wp_cache_get":[145],"get_row":[146],"prepare":[146],"get_object_vars":[158,161],"array_values":[161]},"used_by":{"map_meta_cap":[1176],"wp_xmlrpc_server::wp_getComment":[2728],"wp_xmlrpc_server::wp_deleteComment":[2827],"wp_xmlrpc_server::wp_editComment":[2882],"get_comment_author":[24],"get_comment_author_email":[62],"get_comment_author_IP":[182],"get_comment_author_url":[208],"get_comment_class":[302],"get_comment_date":[373],"get_comment_excerpt":[408],"get_comment_link":[475],"get_comment_text":[599],"comment_text":[613],"get_comment_type":[661],"get_comment_reply_link":[1048],"comment_form_title":[1204],"get_page_of_comment":[828],"wp_delete_comment":[999],"wp_trash_comment":[1051],"wp_spam_comment":[1107],"wp_get_comment_status":[1159],"wp_insert_comment":[1290],"wp_set_comment_status":[1444,1458,1469],"wp_update_comment":[1495,1527],"get_commentdata":[1264],"__main":[77],"get_comment_guid":[228],"wp_scheduled_delete":[3500],"get_edit_comment_link":[981],"wp_notify_postauthor":[990],"wp_notify_moderator":[1100]}},"get_site_option":{"doc":"\/**\n * Retrieve site option value based on name of option.\n *\n * @see get_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses apply_filters() Calls 'pre_site_option_$option' before checking the option.\n * \tAny value other than false will \"short-circuit\" the retrieval of the option\n *\tand return the returned value.\n * @uses apply_filters() Calls 'site_option_$option', after checking the option, with\n * \tthe option value.\n *\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional value to return if option doesn't exist. Default false.\n * @param bool $use_cache Whether to use cache. Multisite only. Default true.\n * @return mixed Value set for the option.\n *\/","file":"option.php","line":759,"missingDoc":false,"filters":["'pre_site_option_' . $option","'default_site_option_' . $option","'default_site_option_' . $option","'site_option_' . $option"],"uses":{"get_option":[769],"wp_cache_get":[773],"get_row":[776],"prepare":[776],"maybe_unserialize":[781],"wp_cache_set":[782],"is_object":[779],"is_multisite":[767]},"used_by":{"map_meta_cap":[1230,1246],"get_super_admins":[1438],"WP_Theme::get_allowed_on_network":[1091],"wp_cookie_constants":[159],"wp_upload_dir":[1546,1554],"global_terms_enabled":[3250],"get_locale":[42],"ms_upload_constants":[24],"get_user_count":[131],"get_blog_count":[145],"is_email_address_unsafe":[377],"wpmu_validate_user_signup":[448,474],"wpmu_validate_blog_signup":[551],"wpmu_signup_blog_notification":[733,736,736],"wpmu_signup_user_notification":[786,789,789],"wpmu_create_blog":[989],"newblog_notify_siteadmin":[1013,1016],"newuser_notify_siteadmin":[1051,1054],"install_blog":[1158],"wpmu_welcome_notification":[1220,1246,1251,1251],"wpmu_welcome_user_notification":[1284,1294,1299,1299],"check_upload_mimes":[1477],"upload_is_file_too_big":[1606,1610,1609],"get_dashboard_blog":[1788],"users_can_register_signup_filter":[1830],"get_space_allowed":[1964],"get_upload_space_available":[1981],"is_upload_space_available":[1999],"upload_size_limit_filter":[2011,2012],"wp_get_active_network_plugins":[40],"ms_site_check":[96],"add_site_option":[820],"update_site_option":[901],"get_site_transient":[997,1005],"set_site_transient":[1041],"wp_salt":[1361,1370],"script_concat_settings":[859,865]}},"_post_type_meta_capabilities":{"doc":"\/**\n * Stores or returns a list of post type meta caps for map_meta_cap().\n *\n * @since 3.1.0\n * @access private\n *\/","file":"post.php","line":1460,"missingDoc":false,"filters":[],"uses":{"in_array":[1465]},"used_by":{"map_meta_cap":[1259],"get_post_type_capabilities":[1449]}},"current_user_can_for_blog":{"doc":"\/**\n * Whether current user has a capability or role for a given blog.\n *\n * @since 3.0.0\n *\n * @param int $blog_id Blog ID\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1301,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[1303],"is_multisite":[1302,1315],"wp_get_current_user":[1305],"array_slice":[1310],"func_get_args":[1310],"array_merge":[1311],"call_user_func_array":[1313],"restore_current_blog":[1316]},"used_by":[]},"author_can":{"doc":"\/**\n * Whether author of supplied post has capability or role.\n *\n * @since 2.9.0\n *\n * @param int|object $post Post ID or post object.\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1330,"missingDoc":false,"filters":[],"uses":{"get_post":[1331],"get_userdata":[1334],"array_slice":[1339],"func_get_args":[1339],"array_merge":[1340],"call_user_func_array":[1342]},"used_by":{"WP_Embed::shortcode":[182]}},"user_can":{"doc":"\/**\n * Whether a particular user has capability or role.\n *\n * @since 3.1.0\n *\n * @param int|object $user User ID or object.\n * @param string $capability Capability or role name.\n * @return bool\n *\/","file":"capabilities.php","line":1354,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1356],"is_object":[1355],"exists":[1358],"array_slice":[1361],"func_get_args":[1361],"array_merge":[1362],"call_user_func_array":[1364]},"used_by":{"wp_notify_moderator":[1105]}},"add_role":{"doc":"\/**\n * Add role, if it does not exist.\n *\n * @see WP_Roles::add_role() Uses method to add role.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @param string $display_name Display name for role.\n * @param array $capabilities List of capabilities, e.g. array( 'edit_posts' => true, 'delete_posts' => false );\n * @return null|WP_Role WP_Role object if role is added, null if already exists.\n *\/","file":"capabilities.php","line":1396,"missingDoc":false,"filters":[],"uses":{"add_role":[1402]},"used_by":{"add_role":[1402]}},"remove_role":{"doc":"\/**\n * Remove role, if it exists.\n *\n * @see WP_Roles::remove_role() Uses method to remove role.\n * @since 2.0.0\n *\n * @param string $role Role name.\n * @return null\n *\/","file":"capabilities.php","line":1414,"missingDoc":false,"filters":[],"uses":{"remove_role":[1420]},"used_by":{"remove_role":[1420]}},"get_super_admins":{"doc":"\/**\n * Retrieve a list of super admins.\n *\n * @since 3.0.0\n *\n * @uses $super_admins Super admins global variable, if set.\n *\n * @return array List of super admin logins\n *\/","file":"capabilities.php","line":1432,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1438]},"used_by":{"is_super_admin":[1459]}},"get_category_link":{"doc":"\/**\n * Retrieve category link URL.\n *\n * @since 1.0.0\n * @see get_term_link()\n *\n * @param int|object $category Category ID or object.\n * @return string Link on success, empty string if category does not exist.\n *\/","file":"category-template.php","line":18,"missingDoc":false,"filters":[],"uses":{"is_object":[19],"get_term_link":[22],"is_wp_error":[24]},"used_by":{"get_category_parents":[59],"get_the_category_list":[174,177,184,197,200,207],"wp_xmlrpc_server::mw_getCategories":[4885]}},"get_category_parents":{"doc":"\/**\n * Retrieve category parents with separator.\n *\n * @since 1.2.0\n *\n * @param int $id Category ID.\n * @param bool $link Optional, default is false. Whether to format with link.\n * @param string $separator Optional, default is '\/'. How to separate categories.\n * @param bool $nicename Optional, default is false. Whether to use nice name for display.\n * @param array $visited Optional. Already linked to categories to prevent duplicates.\n * @return string\n *\/","file":"category-template.php","line":42,"missingDoc":false,"filters":[],"uses":{"get_category":[44],"is_wp_error":[45],"get_category_parents":[55],"in_array":[53],"esc_url":[59],"get_category_link":[59],"esc_attr":[59],"sprintf":[59],"__":[59]},"used_by":{"get_category_parents":[55],"get_the_category_list":[173,179,196,202],"get_permalink":[129]}},"get_category":{"doc":"\/**\n * Retrieves category data given a category ID or category object.\n *\n * If you pass the $category parameter an object, which is assumed to be the\n * category row object retrieved the database. It will cache the category data.\n *\n * If you pass $category an integer of the category ID, then that category will\n * be retrieved from the database, if it isn't already cached, and pass it back.\n *\n * If you look at get_term(), then both types will be passed through several\n * filters and finally sanitized based on the $filter parameter value.\n *\n * The category will converted to maintain backwards compatibility.\n *\n * @since 1.5.1\n * @uses get_term() Used to get the category data from the taxonomy.\n *\n * @param int|object $category Category ID or Category row object\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional. Default is raw or no WordPress defined filter will applied.\n * @return mixed Category data in type defined by $output parameter.\n *\/","file":"category.php","line":81,"missingDoc":false,"filters":[],"uses":{"get_term":[82],"is_wp_error":[83],"_make_cat_compat":[86]},"used_by":{"get_category_parents":[44],"get_the_category_by_ID":[138],"get_category_by_path":[137,142],"get_cat_name":[188],"get_linkcatname":[1144],"get_category_children":[1309],"get_permalink":[134]}},"get_the_category":{"doc":"\/**\n * Retrieve post categories.\n *\n * @since 0.71\n * @uses $post\n *\n * @param int $id Optional, default to current post ID. The post ID.\n * @return array\n *\/","file":"category-template.php","line":74,"missingDoc":false,"filters":["'get_the_categories'"],"uses":{"get_the_terms":[75],"is_wp_error":[76],"array_values":[79],"_make_cat_compat":[82],"array_keys":[81]},"used_by":{"get_the_category_list":[159],"the_category_ID":[85],"the_category_head":[111],"get_the_category_rss":[304],"get_permalink":[122],"get_post_class":[353]}},"get_the_terms":{"doc":"\/**\n * Retrieve the terms of the taxonomy that are attached to the post.\n *\n * @since 2.5.0\n *\n * @param mixed $post Post ID or object.\n * @param string $taxonomy Taxonomy name.\n * @return array|bool False on failure. Array of term objects on success.\n *\/","file":"category-template.php","line":1061,"missingDoc":false,"filters":["'get_the_terms'"],"uses":{"get_post":[1062],"get_object_term_cache":[1065],"wp_get_object_terms":[1067],"wp_cache_add":[1068]},"used_by":{"get_the_category":[75],"get_the_tags":[986],"get_the_term_list":[1092],"WP_Post::__get":[622,632],"get_post_format":[771]}},"_make_cat_compat":{"doc":"\/**\n * Update category structure to old pre 2.3 from new taxonomy structure.\n *\n * This function was added for the taxonomy support to update the new category\n * structure with the old category one. This will maintain compatibility with\n * plugins and themes which depend on the old key or property names.\n *\n * The parameter should only be passed a variable and not create the array or\n * object inline to the parameter. The reason for this is that parameter is\n * passed by reference and PHP will fail unless it has the variable.\n *\n * There is no return value, because everything is updated on the variable you\n * pass to it. This is one of the features with using pass by reference in PHP.\n *\n * @since 2.3.0\n * @access private\n *\n * @param array|object $category Category Row object or array\n *\/","file":"category.php","line":320,"missingDoc":false,"filters":[],"uses":{"is_array":[328],"is_object":[321]},"used_by":{"get_the_category":[82],"get_categories":[54],"get_category":[86],"get_category_by_slug":[158],"WP_Query::get_queried_object":[3009]}},"_usort_terms_by_name":{"doc":"\/**\n * Sort categories by name.\n *\n * Used by usort() as a callback, should not be used directly. Can actually be\n * used to sort any term object.\n *\n * @since 2.3.0\n * @access private\n *\n * @param object $a\n * @param object $b\n * @return int\n *\/","file":"category-template.php","line":102,"missingDoc":false,"filters":[],"uses":{"strcmp":[103]},"used_by":[]},"_usort_terms_by_ID":{"doc":"\/**\n * Sort categories by ID.\n *\n * Used by usort() as a callback, should not be used directly. Can actually be\n * used to sort any term object.\n *\n * @since 2.3.0\n * @access private\n *\n * @param object $a\n * @param object $b\n * @return int\n *\/","file":"category-template.php","line":119,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_the_category_by_ID":{"doc":"\/**\n * Retrieve category name based on category ID.\n *\n * @since 0.71\n *\n * @param int $cat_ID Category ID.\n * @return string Category name.\n *\/","file":"category-template.php","line":136,"missingDoc":false,"filters":[],"uses":{"get_category":[138],"is_wp_error":[139]},"used_by":{"the_category_head":[115]}},"get_the_category_list":{"doc":"\/**\n * Retrieve category list in either HTML list or custom format.\n *\n * @since 1.5.1\n *\n * @param string $separator Optional, default is empty string. Separator for between the categories.\n * @param string $parents Optional. How to display the parents.\n * @param int $post_id Optional. Post ID to retrieve categories.\n * @return string\n *\/","file":"category-template.php","line":154,"missingDoc":false,"filters":["'the_category'","'the_category'","'the_category'"],"uses":{"is_object_in_taxonomy":[156],"get_post_type":[156],"get_the_category":[159],"__":[161,174,177,184,197,200,207],"is_object":[163],"using_permalinks":[163],"strtolower":[170,193],"get_category_parents":[173,179,196,202],"esc_url":[174,177,184,197,200,207],"get_category_link":[174,177,184,197,200,207],"esc_attr":[174,177,184,197,200,207],"sprintf":[174,177,184,197,200,207]},"used_by":{"the_category":[250]}},"is_object_in_taxonomy":{"doc":"\/**\n * Determine if the given object type is associated with the given taxonomy.\n *\n * @since 3.0.0\n * @uses get_object_taxonomies()\n *\n * @param string $object_type Object type string\n * @param string $taxonomy Single taxonomy name\n * @return bool True if object is associated with the taxonomy, otherwise false.\n *\/","file":"taxonomy.php","line":3205,"missingDoc":false,"filters":[],"uses":{"get_object_taxonomies":[3206],"in_array":[3211]},"used_by":{"get_the_category_list":[156],"get_adjacent_post":[1136],"get_post_class":[352,361],"WP_Post::__get":[621,631],"wp_insert_post":[2903,2906],"wp_insert_attachment":[4024,4027]}},"get_post_type":{"doc":"\/**\n * Retrieve the post type of the current post or of a given post.\n *\n * @since 2.1.0\n *\n * @uses $post The Loop current post global\n *\n * @param mixed $post Optional. Post object or post ID.\n * @return bool|string post type or false on failure.\n *\/","file":"post.php","line":1074,"missingDoc":false,"filters":[],"uses":{"get_post":[1075]},"used_by":{"get_the_category_list":[156],"wp_xmlrpc_server::_insert_post":[1012],"is_nav_menu_item":[154],"wp_set_post_categories":[3232]}},"in_category":{"doc":"\/**\n * Check if the current post in within any of the given categories.\n *\n * The given categories are checked against the post's categories' term_ids, names and slugs.\n * Categories given as integers will only be checked against the post's categories' term_ids.\n *\n * Prior to v2.5 of WordPress, category names were not supported.\n * Prior to v2.7, category slugs were not supported.\n * Prior to v2.7, only one category could be compared: in_category( $single_category ).\n * Prior to v2.7, this function could only be used in the WordPress Loop.\n * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.\n *\n * @since 1.2.0\n *\n * @param int|string|array $category Category ID, name or slug, or array of said.\n * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)\n * @return bool True if the current post is in any of the given categories.\n *\/","file":"category-template.php","line":233,"missingDoc":false,"filters":[],"uses":{"has_term":[237]},"used_by":[]},"has_term":{"doc":"\/**\n * Check if the current post has any of given terms.\n *\n * The given terms are checked against the post's terms' term_ids, names and slugs.\n * Terms given as integers will only be checked against the post's terms' term_ids.\n * If no terms are given, determines if post has any terms.\n *\n * @since 3.1.0\n *\n * @param string|int|array $term Optional. The term name\/term_id\/slug or array of them to check for.\n * @param string $taxonomy Taxonomy name\n * @param int|object $post Optional. Post to check instead of the current post.\n * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).\n *\/","file":"category-template.php","line":1181,"missingDoc":false,"filters":[],"uses":{"get_post":[1182],"is_object_in_term":[1187],"is_wp_error":[1188]},"used_by":{"in_category":[237],"has_category":[1143],"has_tag":[1164],"has_post_format":[792]}},"the_category":{"doc":"\/**\n * Display the category list for the post.\n *\n * @since 0.71\n *\n * @param string $separator Optional, default is empty string. Separator for between the categories.\n * @param string $parents Optional. How to display the parents.\n * @param int $post_id Optional. Post ID to retrieve categories.\n *\/","file":"category-template.php","line":249,"missingDoc":false,"filters":[],"uses":{"get_the_category_list":[250]},"used_by":[]},"category_description":{"doc":"\/**\n * Retrieve category description.\n *\n * @since 1.0.0\n *\n * @param int $category Optional. Category ID. Will use global category ID by default.\n * @return string Category description, available.\n *\/","file":"category-template.php","line":261,"missingDoc":false,"filters":[],"uses":{"term_description":[262]},"used_by":[]},"term_description":{"doc":"\/**\n * Retrieve term description.\n *\n * @since 2.8\n *\n * @param int $term Optional. Term ID. Will use global term ID by default.\n * @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'.\n * @return string Term description, available.\n *\/","file":"category-template.php","line":1042,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[1044],"is_tax":[1043],"is_tag":[1043],"is_category":[1043],"get_term_field":[1048],"is_wp_error":[1049]},"used_by":{"category_description":[262],"tag_description":[1030]}},"wp_dropdown_categories":{"doc":"\/**\n * Display or retrieve the HTML dropdown list of categories.\n *\n * The list of arguments is below:\n * 'show_option_all' (string) - Text to display for showing all categories.\n * 'show_option_none' (string) - Text to display for showing no categories.\n * 'orderby' (string) default is 'ID' - What column to use for ordering the\n * categories.\n * 'order' (string) default is 'ASC' - What direction to order categories.\n * 'show_count' (bool|int) default is 0 - Whether to show how many posts are\n * in the category.\n * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that\n * don't have any posts attached to them.\n * 'child_of' (int) default is 0 - See {@link get_categories()}.\n * 'exclude' (string) - See {@link get_categories()}.\n * 'echo' (bool|int) default is 1 - Whether to display or retrieve content.\n * 'depth' (int) - The max depth.\n * 'tab_index' (int) - Tab index for select element.\n * 'name' (string) - The name attribute value for select element.\n * 'id' (string) - The ID attribute value for select element. Defaults to name if omitted.\n * 'class' (string) - The class attribute value for select element.\n * 'selected' (int) - Which category ID is selected.\n * 'taxonomy' (string) - The name of the taxonomy to retrieve. Defaults to category.\n *\n * The 'hierarchical' argument, which is disabled by default, will override the\n * depth argument, unless it is true. When the argument is false, it will\n * display all of the categories. When it is enabled it will use the value in\n * the 'depth' argument.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override default arguments.\n * @return string HTML content only if 'echo' argument is 0.\n *\/","file":"category-template.php","line":299,"missingDoc":false,"filters":["'list_cats'","'list_cats'","'list_cats'","'wp_dropdown_cats'"],"uses":{"is_category":[313],"get_query_var":[313],"_deprecated_argument":[317],"wp_parse_args":[321],"extract":[327],"get_terms":[333],"esc_attr":[334,335,336],"strval":[352,358],"walk_category_dropdown_tree":[367]},"used_by":{"WP_Widget_Categories::widget":[463],"dropdown_cats":[712]}},"walk_category_dropdown_tree":{"doc":"\/**\n * Retrieve HTML dropdown (select) content for category list.\n *\n * @uses Walker_CategoryDropdown to create HTML dropdown content.\n * @since 2.1.0\n * @see Walker_CategoryDropdown::walk() for parameters and return description.\n *\/","file":"category-template.php","line":748,"missingDoc":false,"filters":[],"uses":{"func_get_args":[749],"is_a":[751],"call_user_func_array":[756]},"used_by":{"wp_dropdown_categories":[367]}},"wp_list_categories":{"doc":"\/**\n * Display or retrieve the HTML list of categories.\n *\n * The list of arguments is below:\n * 'show_option_all' (string) - Text to display for showing all categories.\n * 'orderby' (string) default is 'ID' - What column to use for ordering the\n * categories.\n * 'order' (string) default is 'ASC' - What direction to order categories.\n * 'show_count' (bool|int) default is 0 - Whether to show how many posts are\n * in the category.\n * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that\n * don't have any posts attached to them.\n * 'use_desc_for_title' (bool|int) default is 1 - Whether to use the\n * description instead of the category title.\n * 'feed' - See {@link get_categories()}.\n * 'feed_type' - See {@link get_categories()}.\n * 'feed_image' - See {@link get_categories()}.\n * 'child_of' (int) default is 0 - See {@link get_categories()}.\n * 'exclude' (string) - See {@link get_categories()}.\n * 'exclude_tree' (string) - See {@link get_categories()}.\n * 'echo' (bool|int) default is 1 - Whether to display or retrieve content.\n * 'current_category' (int) - See {@link get_categories()}.\n * 'hierarchical' (bool) - See {@link get_categories()}.\n * 'title_li' (string) - See {@link get_categories()}.\n * 'depth' (int) - The max depth.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override default arguments.\n * @return string HTML content only if 'echo' argument is 0.\n *\/","file":"category-template.php","line":412,"missingDoc":false,"filters":["'wp_list_categories'"],"uses":{"__":[414,422],"wp_parse_args":[427],"extract":[440],"taxonomy_exists":[442],"get_categories":[445],"esc_attr":[449],"get_option":[460,460,460],"get_permalink":[460],"home_url":[460],"esc_url":[461],"get_queried_object":[469],"get_queried_object_id":[471],"is_category":[468],"is_tax":[468],"is_tag":[468],"walk_category_tree":[479]},"used_by":{"WP_Widget_Categories::widget":[484],"wp_list_cats":[675],"__main":[63]}},"taxonomy_exists":{"doc":"\/**\n * Checks that the taxonomy name exists.\n *\n * Formerly is_taxonomy(), introduced in 2.3.0.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n *\n * @uses $wp_taxonomies\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy exists.\n *\/","file":"taxonomy.php","line":228,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_list_categories":[442],"wp_xmlrpc_server::wp_newTerm":[1544],"wp_xmlrpc_server::wp_editTerm":[1632],"wp_xmlrpc_server::wp_deleteTerm":[1724],"wp_xmlrpc_server::wp_getTerm":[1791],"wp_xmlrpc_server::wp_getTerms":[1844],"wp_xmlrpc_server::wp_getTaxonomy":[1923],"WP_Widget_Tag_Cloud::_get_current_taxonomy":[1082],"is_taxonomy":[2542],"get_taxonomy":[208],"is_taxonomy_hierarchical":[253],"get_objects_in_term":[517],"WP_Tax_Query::clean_query":[747],"get_term":[879],"get_term_by":[947],"get_term_children":[1008],"get_terms":[1196],"wp_get_object_terms":[1900],"wp_insert_term":[2044],"wp_set_object_terms":[2175],"wp_update_term":[2352]}},"get_categories":{"doc":"\/**\n * Retrieve list of category objects.\n *\n * If you change the type to 'link' in the arguments, then the link categories\n * will be returned instead. Also all categories will be updated to be backwards\n * compatible with pre-2.3 plugins and themes.\n *\n * @since 2.1.0\n * @see get_terms() Type of arguments that can be changed.\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_categories\n *\n * @param string|array $args Optional. Change the defaults retrieving categories.\n * @return array List of categories.\n *\/","file":"category.php","line":39,"missingDoc":false,"filters":["'get_categories_taxonomy'"],"uses":{"wp_parse_args":[41],"_deprecated_argument":[47],"get_terms":[51],"_make_cat_compat":[54],"array_keys":[53]},"used_by":{"wp_list_categories":[445],"SimplePie::get_category":[2082],"wp_xmlrpc_server::wp_suggestCategories":[2694],"wp_xmlrpc_server::mw_getCategories":[4878],"wp_xmlrpc_server::mt_getCategoryList":[5077],"get_links_list":[1057],"SimplePie_Enclosure::get_category":[336],"SimplePie_Item::get_category":[419],"SimplePie_Source::get_category":[142]}},"walk_category_tree":{"doc":"\/**\n * Retrieve HTML list content for category list.\n *\n * @uses Walker_Category to create HTML list content.\n * @since 2.1.0\n * @see Walker_Category::walk() for parameters and return description.\n *\/","file":"category-template.php","line":730,"missingDoc":false,"filters":[],"uses":{"func_get_args":[731],"is_a":[733],"call_user_func_array":[738]},"used_by":{"wp_list_categories":[479]}},"wp_tag_cloud":{"doc":"\/**\n * Display tag cloud.\n *\n * The text size is set by the 'smallest' and 'largest' arguments, which will\n * use the 'unit' argument value for the CSS text size unit. The 'format'\n * argument can be 'flat' (default), 'list', or 'array'. The flat value for the\n * 'format' argument will separate tags with spaces. The list value for the\n * 'format' argument will format the tags in a UL HTML list. The array value for\n * the 'format' argument will return in PHP array type format.\n *\n * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.\n * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC'.\n *\n * The 'number' argument is how many tags to return. By default, the limit will\n * be to return the top 45 tags in the tag cloud list.\n *\n * The 'topic_count_text_callback' argument is a function, which, given the count\n * of the posts with that tag, returns a text for the tooltip of the tag link.\n *\n * The 'exclude' and 'include' arguments are used for the {@link get_tags()}\n * function. Only one should be used, because only one will be used and the\n * other ignored, if they are both set.\n *\n * @since 2.3.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument.\n *\/","file":"category-template.php","line":521,"missingDoc":false,"filters":["'wp_tag_cloud'"],"uses":{"wp_parse_args":[527],"get_terms":[529],"array_merge":[529],"is_wp_error":[531,539],"get_edit_tag_link":[536],"get_term_link":[538],"intval":[538],"wp_generate_tag_cloud":[546]},"used_by":{"WP_Widget_Tag_Cloud::widget":[1053]}},"get_edit_tag_link":{"doc":"\/**\n * Retrieve edit tag link.\n *\n * @since 2.7.0\n *\n * @param int $tag_id Tag ID\n * @param string $taxonomy Taxonomy\n * @return string\n *\/","file":"link-template.php","line":653,"missingDoc":false,"filters":["'get_edit_tag_link'"],"uses":{"get_edit_term_link":[654]},"used_by":{"wp_tag_cloud":[536]}},"wp_generate_tag_cloud":{"doc":"\/**\n * Generates a tag cloud (heatmap) from provided data.\n *\n * The text size is set by the 'smallest' and 'largest' arguments, which will\n * use the 'unit' argument value for the CSS text size unit. The 'format'\n * argument can be 'flat' (default), 'list', or 'array'. The flat value for the\n * 'format' argument will separate tags with spaces. The list value for the\n * 'format' argument will format the tags in a UL HTML list. The array value for\n * the 'format' argument will return in PHP array type format.\n *\n * The 'tag_cloud_sort' filter allows you to override the sorting.\n * Passed to the filter: $tags array and $args array, has to return the $tags array\n * after sorting it.\n *\n * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.\n * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or\n * 'RAND'.\n *\n * The 'number' argument is how many tags to return. By default, the limit will\n * be to return the entire tag cloud list.\n *\n * The 'topic_count_text_callback' argument is a function, which given the count\n * of the posts with that tag returns a text for the tooltip of the tag link.\n *\n * @todo Complete functionality.\n * @since 2.3.0\n *\n * @param array $tags List of tags.\n * @param string|array $args Optional, override default arguments.\n * @return string\n *\/","file":"category-template.php","line":607,"missingDoc":false,"filters":["'tag_cloud_sort'","'wp_generate_tag_cloud'"],"uses":{"var_export":[617,617],"create_function":[619],"wp_parse_args":[622],"extract":[623],"shuffle":[634],"uasort":[638,640],"array_reverse":[643],"array_slice":[648],"min":[657],"max":[658],"esc_url":[671],"esc_attr":[674],"call_user_func":[674],"str_replace":[675],"join":[685,689]},"used_by":{"wp_tag_cloud":[546]}},"default_topic_count_text":{"doc":"\/**\n * Default text for tooltip for tag links\n *\n * @param integer $count number of posts with that tag\n * @return string text for the tooltip of a tag link.\n *\/","file":"category-template.php","line":562,"missingDoc":false,"filters":[],"uses":{"sprintf":[563],"_n":[563],"number_format_i18n":[563]},"used_by":[]},"default_topic_count_scale":{"doc":"\/**\n * Default topic count scaling for tag links\n *\n * @param integer $count number of posts with that tag\n * @return integer scaled count\n *\/","file":"category-template.php","line":572,"missingDoc":false,"filters":[],"uses":{"round":[573],"log10":[573]},"used_by":[]},"_wp_object_name_sort_cb":{"doc":"\/**\n * Callback for comparing objects based on name\n *\n * @since 3.1.0\n * @access private\n *\/","file":"category-template.php","line":705,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[706]},"used_by":[]},"_wp_object_count_sort_cb":{"doc":"\/**\n * Callback for comparing objects based on count\n *\n * @since 3.1.0\n * @access private\n *\/","file":"category-template.php","line":715,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Category::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of category. Used for tab indentation.\n * @param array $args Will only append content if style argument value is 'list'.\n *\/","file":"category-template.php","line":790,"missingDoc":false,"filters":[],"uses":{"str_repeat":[794]},"used_by":[]},"Walker_Category::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of category. Used for tab indentation.\n * @param array $args Will only append content if style argument value is 'list'.\n *\/","file":"category-template.php","line":806,"missingDoc":false,"filters":[],"uses":{"str_repeat":[810]},"used_by":[]},"Walker_Category::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $category Category data object.\n * @param int $depth Depth of category in reference to parents.\n * @param array $args\n *\/","file":"category-template.php","line":823,"missingDoc":false,"filters":["'list_cats'","'category_description'"],"uses":{"extract":[824],"esc_attr":[826,830,832],"esc_url":[828,842],"get_term_link":[828],"sprintf":[830,845],"__":[830,845],"strip_tags":[832],"get_term_feed_link":[842],"intval":[867],"get_term":[873]},"used_by":[]},"get_term_feed_link":{"doc":"\/**\n * Retrieve the feed link for a term.\n *\n * Returns a link to the feed for all posts in a given term. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @since 3.0\n *\n * @param int $term_id ID of a category.\n * @param string $taxonomy Optional. Taxonomy of $term_id\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the term specified by $term_id and $taxonomy.\n*\/","file":"link-template.php","line":588,"missingDoc":false,"filters":["'category_feed_link'","'tag_feed_link'","'taxonomy_feed_link'"],"uses":{"get_term":[591],"is_wp_error":[593],"get_default_feed":[597,613],"get_option":[599],"home_url":[603,606,609],"get_taxonomy":[608],"get_term_link":[612],"trailingslashit":[618],"user_trailingslashit":[618]},"used_by":{"Walker_Category::start_el":[842],"get_category_feed_link":[572],"get_tag_feed_link":[641]}},"get_term":{"doc":"\/**\n * Get all Term data from database by Term ID.\n *\n * The usage of the get_term function is to apply filters to a term object. It\n * is possible to get a term object from the database before applying the\n * filters.\n *\n * $term ID must be part of $taxonomy, to get from the database. Failure, might\n * be able to be captured by the hooks. Failure would be the same value as $wpdb\n * returns for the get_row method.\n *\n * There are two hooks, one is specifically for each term, named 'get_term', and\n * the second is for the taxonomy name, 'term_$taxonomy'. Both hooks gets the\n * term object, and the taxonomy name as parameters. Both hooks are expected to\n * return a Term object.\n *\n * 'get_term' hook - Takes two parameters the term Object and the taxonomy name.\n * Must return term object. Used in get_term() as a catch-all filter for every\n * $term.\n *\n * 'get_$taxonomy' hook - Takes two parameters the term Object and the taxonomy\n * name. Must return term object. $taxonomy will be the taxonomy name, so for\n * example, if 'category', it would be 'get_category' as the filter name. Useful\n * for custom taxonomies or plugging into default taxonomies.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses sanitize_term() Cleanses the term based on $filter context before returning.\n * @see sanitize_term_field() The $context param lists the available values for get_term_by() $filter param.\n *\n * @param int|object $term If integer, will get from database. If object will apply filters and return $term.\n * @param string $taxonomy Taxonomy name that $term is part of.\n * @param string $output Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional, default is raw or no WordPress defined filter will applied.\n * @return mixed|null|WP_Error Term Row from database. Will return null if $term is empty. If taxonomy does not\n * exist then WP_Error will be returned.\n *\/","file":"taxonomy.php","line":870,"missingDoc":false,"filters":["'get_term'","\"get_{$taxonomy}\""],"uses":{"__":[875,880],"taxonomy_exists":[879],"wp_cache_add":[885,896],"is_object":[888,884],"get_row":[893],"prepare":[893],"wp_cache_get":[892],"sanitize_term":[902],"get_object_vars":[907,910],"array_values":[910]},"used_by":{"Walker_Category::start_el":[873],"get_category":[82],"get_category_by_path":[130],"get_tag":[284],"wp_xmlrpc_server::wp_newTerm":[1566],"wp_xmlrpc_server::wp_editTerm":[1645,1665],"wp_xmlrpc_server::wp_deleteTerm":[1732],"wp_xmlrpc_server::wp_getTerm":[1799],"get_permalink":[126],"get_term_feed_link":[591],"get_edit_term_link":[688],"wp_get_nav_menu_object":[25],"WP_Query::get_queried_object":[3000],"SimplePie_Category::get_label":[153],"get_term_by":[960],"get_term_field":[1049],"get_term_to_edit":[1079],"term_is_ancestor_of":[1544,1546,1553],"wp_delete_term":[1794,1826],"wp_unique_term_slug":[2282],"wp_update_term":[2358],"_get_term_children":[2811],"get_term_link":[2995,3027],"get_ancestors":[3234,3237],"wp_get_term_taxonomy_parent_id":[3257]}},"Walker_Category::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Not used.\n * @param int $depth Depth of category. Not used.\n * @param array $args Only uses 'list' for whether should append to output.\n *\/","file":"category-template.php","line":895,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_CategoryDropdown::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $category Category data object.\n * @param int $depth Depth of category. Used for padding.\n * @param array $args Uses 'selected' and 'show_count' keys, if they exist.\n *\/","file":"category-template.php","line":936,"missingDoc":false,"filters":["'list_cats'"],"uses":{"str_repeat":[937]},"used_by":[]},"get_tag_link":{"doc":"\/**\n * Retrieve the link to the tag.\n *\n * @since 2.3.0\n * @see get_term_link()\n *\n * @param int|object $tag Tag ID or object.\n * @return string Link on success, empty string if tag does not exist.\n *\/","file":"category-template.php","line":964,"missingDoc":false,"filters":[],"uses":{"is_object":[965],"get_term_link":[968],"is_wp_error":[970]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2564]}},"get_the_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'get_the_tags' filter on the list of post tags.\n *\n * @param int $id Post ID.\n * @return array\n *\/","file":"category-template.php","line":985,"missingDoc":false,"filters":["'get_the_tags'"],"uses":{"get_the_terms":[986]},"used_by":{"get_the_category_rss":[305],"get_post_class":[362]}},"get_the_tag_list":{"doc":"\/**\n * Retrieve the tags for a post formatted as a string.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'the_tags' filter on string list of tags.\n *\n * @param string $before Optional. Before tags.\n * @param string $sep Optional. Between tags.\n * @param string $after Optional. After tags.\n * @param int $id Optional. Post ID. Defaults to the current post.\n * @return string\n *\/","file":"category-template.php","line":1001,"missingDoc":false,"filters":["'the_tags'"],"uses":{"get_the_term_list":[1002]},"used_by":{"the_tags":[1018]}},"get_the_term_list":{"doc":"\/**\n * Retrieve a post's terms as a list with specified format.\n *\n * @since 2.5.0\n *\n * @param int $id Post ID.\n * @param string $taxonomy Taxonomy name.\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return string\n *\/","file":"category-template.php","line":1091,"missingDoc":false,"filters":["\"term_links-{$taxonomy}\""],"uses":{"get_the_terms":[1092],"is_wp_error":[1094,1102],"get_term_link":[1101],"esc_url":[1104],"join":[1109]},"used_by":{"get_the_tag_list":[1002],"the_terms":[1125]}},"the_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * @since 2.3.0\n *\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return string\n *\/","file":"category-template.php","line":1015,"missingDoc":false,"filters":[],"uses":{"__":[1017],"get_the_tag_list":[1018]},"used_by":[]},"tag_description":{"doc":"\/**\n * Retrieve tag description.\n *\n * @since 2.8\n *\n * @param int $tag Optional. Tag ID. Will use global tag ID by default.\n * @return string Tag description, available.\n *\/","file":"category-template.php","line":1029,"missingDoc":false,"filters":[],"uses":{"term_description":[1030]},"used_by":[]},"get_term_field":{"doc":"\/**\n * Get sanitized Term field.\n *\n * Does checks for $term, based on the $taxonomy. The function is for contextual\n * reasons and for simplicity of usage. See sanitize_term_field() for more\n * information.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term_field() Passes the return value in sanitize_term_field on success.\n *\n * @param string $field Term field to fetch\n * @param int $term Term ID\n * @param string $taxonomy Taxonomy Name\n * @param string $context Optional, default is display. Look at sanitize_term_field() for available options.\n * @return mixed Will return an empty string if $term is not an object or if $field is not set in $term.\n *\/","file":"taxonomy.php","line":1047,"missingDoc":false,"filters":[],"uses":{"get_term":[1049],"is_wp_error":[1050],"is_object":[1053],"sanitize_term_field":[1059]},"used_by":{"term_description":[1048],"wp_update_nav_menu_item":[321,322],"wp_setup_nav_menu_item":[606,661]}},"get_object_term_cache":{"doc":"\/**\n * Retrieves the taxonomy relationship to the term object id.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses wp_cache_get() Retrieves taxonomy relationship from cache\n *\n * @param int|array $id Term object ID\n * @param string $taxonomy Taxonomy Name\n * @return bool|array Empty array if $terms found, but not $taxonomy. False if nothing is in cache for $taxonomy and $id.\n *\/","file":"taxonomy.php","line":2651,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[2652]},"used_by":{"get_the_terms":[1065],"get_the_taxonomies":[3115],"is_object_in_term":[3165]}},"the_terms":{"doc":"\/**\n * Display the terms in a list.\n *\n * @since 2.5.0\n *\n * @param int $id Post ID.\n * @param string $taxonomy Taxonomy name.\n * @param string $before Optional. Before list.\n * @param string $sep Optional. Separate items using this.\n * @param string $after Optional. After list.\n * @return null|bool False on WordPress error. Returns null when displaying.\n *\/","file":"category-template.php","line":1124,"missingDoc":false,"filters":["'the_terms'"],"uses":{"get_the_term_list":[1125],"is_wp_error":[1127]},"used_by":[]},"has_category":{"doc":"\/**\n * Check if the current post has any of given category.\n *\n * @since 3.1.0\n *\n * @param string|int|array $category Optional. The category name\/term_id\/slug or array of them to check for.\n * @param int|object $post Optional. Post to check instead of the current post.\n * @return bool True if the current post has any of the given categories (or any category, if no category specified).\n *\/","file":"category-template.php","line":1142,"missingDoc":false,"filters":[],"uses":{"has_term":[1143]},"used_by":[]},"has_tag":{"doc":"\/**\n * Check if the current post has any of given tags.\n *\n * The given tags are checked against the post's tags' term_ids, names and slugs.\n * Tags given as integers will only be checked against the post's tags' term_ids.\n * If no tags are given, determines if post has any tags.\n *\n * Prior to v2.7 of WordPress, tags given as integers would also be checked against the post's tags' names and slugs (in addition to term_ids)\n * Prior to v2.7, this function could only be used in the WordPress Loop.\n * As of 2.7, the function can be used anywhere if it is provided a post ID or post object.\n *\n * @since 2.6.0\n *\n * @param string|int|array $tag Optional. The tag name\/term_id\/slug or array of them to check for.\n * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0)\n * @return bool True if the current post has any of the given tags (or any tag, if no tag specified).\n *\/","file":"category-template.php","line":1163,"missingDoc":false,"filters":[],"uses":{"has_term":[1164]},"used_by":[]},"is_object_in_term":{"doc":"\/**\n * Determine if the given object is associated with any of the given terms.\n *\n * The given terms are checked against the object's terms' term_ids, names and slugs.\n * Terms given as integers will only be checked against the object's terms' term_ids.\n * If no terms are given, determines if object is associated with any terms in the given taxonomy.\n *\n * @since 2.7.0\n * @uses get_object_term_cache()\n * @uses wp_get_object_terms()\n *\n * @param int $object_id ID of the object (post ID, link ID, ...)\n * @param string $taxonomy Single taxonomy name\n * @param int|string|array $terms Optional. Term term_id, name, slug or array of said\n * @return bool|WP_Error. WP_Error on input error.\n *\/","file":"taxonomy.php","line":3161,"missingDoc":false,"filters":[],"uses":{"__":[3163],"get_object_term_cache":[3165],"wp_get_object_terms":[3167],"is_wp_error":[3169],"array_diff":[3179],"array_filter":[3178],"in_array":[3184,3186,3187,3188]},"used_by":{"has_term":[1187],"wp_update_nav_menu_item":[353]}},"get_all_category_ids":{"doc":"\/**\n * Retrieves all category IDs.\n *\n * @since 2.0.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_all_category_ids\n *\n * @return object List of all of the category IDs.\n *\/","file":"category.php","line":16,"missingDoc":false,"filters":[],"uses":{"get_terms":[18],"wp_cache_add":[19],"wp_cache_get":[17]},"used_by":{"get_category_children":[1304]}},"sanitize_title":{"doc":"\/**\n * Sanitizes title or use fallback title.\n *\n * Specifically, HTML and PHP tags are stripped. Further actions can be added\n * via the plugin API. If $title is empty and $fallback_title is set, the latter\n * will be used.\n *\n * @since 1.0.0\n *\n * @param string $title The string to be sanitized.\n * @param string $fallback_title Optional. A title to use if $title is empty.\n * @param string $context Optional. The operation for which the string is sanitized\n * @return string The sanitized string.\n *\/","file":"formatting.php","line":936,"missingDoc":false,"filters":["'sanitize_title'"],"uses":{"remove_accents":[940]},"used_by":{"get_category_by_path":[115,119],"WP_Admin_Bar::add_node":[98],"register_sidebar_widget":[2177],"register_widget_control":[2234],"sanitize_title_for_query":[951],"permalink_anchor":[61],"wp_insert_post":[2774,2779,2783,2899],"wp_insert_attachment":[3953,3955,4020],"get_term_by":[952],"get_terms":[1331],"term_exists":[1499],"wp_insert_term":[2069,2120],"wp_update_term":[2384,2417],"wp_insert_user":[1316],"dynamic_sidebar":[858,860],"is_active_sidebar":[985]}},"get_category_by_slug":{"doc":"\/**\n * Retrieve category object by category slug.\n *\n * @since 2.3.0\n *\n * @param string $slug The category slug.\n * @return object Category data object\n *\/","file":"category.php","line":155,"missingDoc":false,"filters":[],"uses":{"get_term_by":[156],"_make_cat_compat":[158]},"used_by":[]},"get_cat_ID":{"doc":"\/**\n * Retrieve the ID of a category from its name.\n *\n * @since 1.0.0\n *\n * @param string $cat_name Category name.\n * @return int 0, if failure and ID of category on success.\n *\/","file":"category.php","line":171,"missingDoc":false,"filters":[],"uses":{"get_term_by":[172]},"used_by":{"wp_xmlrpc_server::mw_newPost":[4253],"wp_xmlrpc_server::mw_editPost":[4506]}},"get_cat_name":{"doc":"\/**\n * Retrieve the name of a category from its ID.\n *\n * @since 1.0.0\n *\n * @param int $cat_id Category ID\n * @return string Category name, or an empty string if category doesn't exist.\n *\/","file":"category.php","line":186,"missingDoc":false,"filters":[],"uses":{"get_category":[188],"is_wp_error":[189]},"used_by":{"wp_xmlrpc_server::_prepare_page":[801],"wp_xmlrpc_server::mw_getPost":[4650],"wp_xmlrpc_server::mw_getRecentPosts":[4780],"wp_xmlrpc_server::mt_getPostCategories":[5122],"get_catname":[1280]}},"cat_is_ancestor_of":{"doc":"\/**\n * Check if a category is an ancestor of another category.\n *\n * You can use either an id or the category object for both parameters. If you\n * use an integer the category will be retrieved.\n *\n * @since 2.1.0\n *\n * @param int|object $cat1 ID or object to check if this is the parent category.\n * @param int|object $cat2 The child category.\n * @return bool Whether $cat2 is child of $cat1\n *\/","file":"category.php","line":206,"missingDoc":false,"filters":[],"uses":{"term_is_ancestor_of":[207]},"used_by":[]},"term_is_ancestor_of":{"doc":"\/**\n * Check if a term is an ancestor of another term.\n *\n * You can use either an id or the term object for both parameters.\n *\n * @since 3.4.0\n *\n * @param int|object $term1 ID or object to check if this is the parent term.\n * @param int|object $term2 The child term.\n * @param string $taxonomy Taxonomy name that $term1 and $term2 belong to.\n * @return bool Whether $term2 is child of $term1\n *\/","file":"taxonomy.php","line":1542,"missingDoc":false,"filters":[],"uses":{"get_term":[1544,1546,1553],"term_is_ancestor_of":[1553]},"used_by":{"cat_is_ancestor_of":[207],"term_is_ancestor_of":[1553]}},"sanitize_category":{"doc":"\/**\n * Sanitizes category data based on context.\n *\n * @since 2.3.0\n * @uses sanitize_term() See this function for what context are supported.\n *\n * @param object|array $category Category data\n * @param string $context Optional. Default is 'display'.\n * @return object|array Same type as $category with sanitized data for safe use.\n *\/","file":"category.php","line":220,"missingDoc":false,"filters":[],"uses":{"sanitize_term":[221]},"used_by":[]},"sanitize_term":{"doc":"\/**\n * Sanitize Term all fields.\n *\n * Relies on sanitize_term_field() to sanitize the term. The difference is that\n * this function will sanitize <strong>all<\/strong> fields. The context is based\n * on sanitize_term_field().\n *\n * The $term is expected to be either an array or an object.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term_field Used to sanitize all fields in a term\n *\n * @param array|object $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param string $context Default is 'display'.\n * @return array|object Term with all fields sanitized\n *\/","file":"taxonomy.php","line":1576,"missingDoc":false,"filters":[],"uses":{"is_object":[1584],"sanitize_term_field":[1592,1595]},"used_by":{"sanitize_category":[221],"get_term":[902],"get_term_by":[974],"get_term_to_edit":[1087],"wp_insert_term":[2061],"wp_update_term":[2371]}},"sanitize_category_field":{"doc":"\/**\n * Sanitizes data in single category key field.\n *\n * @since 2.3.0\n * @uses sanitize_term_field() See function for more details.\n *\n * @param string $field Category key to sanitize\n * @param mixed $value Category value to sanitize\n * @param int $cat_id Category ID\n * @param string $context What filter to use, 'raw', 'display', etc.\n * @return mixed Same type as $value after $value has been sanitized.\n *\/","file":"category.php","line":236,"missingDoc":false,"filters":[],"uses":{"sanitize_term_field":[237]},"used_by":[]},"sanitize_term_field":{"doc":"\/**\n * Cleanse the field value in the term based on the context.\n *\n * Passing a term field value through the function should be assumed to have\n * cleansed the value for whatever context the term field is going to be used.\n *\n * If no context or an unsupported context is given, then default filters will\n * be applied.\n *\n * There are enough filters for each context to support a custom filtering\n * without creating your own filter function. Simply create a function that\n * hooks into the filter you need.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n *\n * @param string $field Term field to sanitize\n * @param string $value Search for this term value\n * @param int $term_id Term ID\n * @param string $taxonomy Taxonomy Name\n * @param string $context Either edit, db, display, attribute, or js.\n * @return mixed sanitized field\n *\/","file":"taxonomy.php","line":1633,"missingDoc":false,"filters":["\"edit_term_{$field}\"","\"edit_{$taxonomy}_{$field}\"","\"pre_term_{$field}\"","\"pre_{$taxonomy}_{$field}\"","'pre_category_nicename'","\"term_{$field}_rss\"","\"{$taxonomy}_{$field}_rss\"","\"term_{$field}\"","\"{$taxonomy}_{$field}\""],"uses":{"esc_html":[1647],"esc_attr":[1649,1667],"esc_js":[1669]},"used_by":{"sanitize_category_field":[237],"get_the_category_rss":[314,318],"WP_Query::parse_tax_query":[1792,1798,1802],"get_term_field":[1059],"sanitize_term":[1592,1595]}},"get_tags":{"doc":"\/**\n * Retrieves all post tags.\n *\n * @since 2.3.0\n * @see get_terms() For list of arguments to pass.\n * @uses apply_filters() Calls 'get_tags' hook on array of tags and with $args.\n *\n * @param string|array $args Tag arguments to use when retrieving tags.\n * @return array List of tags.\n *\/","file":"category.php","line":252,"missingDoc":false,"filters":["'get_tags'"],"uses":{"get_terms":[253]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2558]}},"get_tag":{"doc":"\/**\n * Retrieve post tag by tag ID or tag object.\n *\n * If you pass the $tag parameter an object, which is assumed to be the tag row\n * object retrieved the database. It will cache the tag data.\n *\n * If you pass $tag an integer of the tag ID, then that tag will\n * be retrieved from the database, if it isn't already cached, and pass it back.\n *\n * If you look at get_term(), then both types will be passed through several\n * filters and finally sanitized based on the $filter parameter value.\n *\n * @since 2.3.0\n *\n * @param int|object $tag\n * @param string $output Optional. Constant OBJECT, ARRAY_A, or ARRAY_N\n * @param string $filter Optional. Default is raw or no WordPress defined filter will applied.\n * @return object|array Return type based on $output value.\n *\/","file":"category.php","line":283,"missingDoc":false,"filters":[],"uses":{"get_term":[284]},"used_by":[]},"clean_category_cache":{"doc":"\/**\n * Remove the category cache data based on ID.\n *\n * @since 2.1.0\n * @uses clean_term_cache() Clears the cache for the category based on ID\n *\n * @param int $id Category ID\n *\/","file":"category.php","line":297,"missingDoc":false,"filters":[],"uses":{"clean_term_cache":[298]},"used_by":[]},"clean_term_cache":{"doc":"\/**\n * Will remove all of the term ids from the cache.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $ids Single or list of Term IDs\n * @param string $taxonomy Can be empty and will assume tt_ids, else will use for context.\n * @param bool $clean_taxonomy Whether to clean taxonomy wide caches (true), or just individual term object caches (false). Default is true.\n *\/","file":"taxonomy.php","line":2590,"missingDoc":false,"filters":["'clean_term_cache'"],"uses":{"is_array":[2594],"array_map":[2600],"implode":[2601],"get_results":[2602],"wp_cache_delete":[2607,2614,2625,2626],"array_unique":[2609],"delete_option":[2627],"_get_term_hierarchy":[2629],"wp_cache_set":[2635],"time":[2635]},"used_by":{"clean_category_cache":[298],"global_terms":[1576],"wp_delete_term":[1836],"wp_insert_term":[2139],"wp_update_term":[2432],"wp_update_term_count_now":[2538]}},"WP_Feed_Cache::create":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @static\n * @access public\n *\/","file":"class-feed.php","line":13,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Feed_Cache_Transient::__construct":{"doc":"","file":"class-feed.php","line":23,"missingDoc":true,"filters":["'wp_feed_cache_transient_lifetime'"],"uses":[],"used_by":[]},"WP_Feed_Cache_Transient::save":{"doc":"","file":"class-feed.php","line":29,"missingDoc":true,"filters":[],"uses":{"is_a":[30],"set_transient":[33,34],"time":[34]},"used_by":[]},"set_transient":{"doc":"\/**\n * Set\/update the value of a transient.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is set.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the\n * \ttransient value to be stored.\n * @uses do_action() Calls 'set_transient_$transient' and 'setted_transient' hooks on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @param mixed $value Transient value. Expected to not be SQL-escaped.\n * @param int $expiration Time until expiration in seconds, default 0\n * @return bool False if value was not set and true if value was set.\n *\/","file":"option.php","line":491,"missingDoc":false,"filters":["'pre_set_transient_' . $transient","'set_transient_' . $transient","'setted_transient'"],"uses":{"wp_cache_set":[497],"add_option":[505,507],"time":[505,510],"update_option":[510,511],"get_option":[501]},"used_by":{"WP_Feed_Cache_Transient::save":[33,34],"WP_Feed_Cache_Transient::touch":[47],"spawn_cron":[230,245],"get_dirsize":[1421],"wp_rand":[1532],"RSSCache::set":[728]}},"WP_Feed_Cache_Transient::load":{"doc":"","file":"class-feed.php","line":38,"missingDoc":true,"filters":[],"uses":{"get_transient":[39]},"used_by":[]},"get_transient":{"doc":"\/**\n * Get the value of a transient.\n *\n * If the transient does not exist or does not have a value, then the return value\n * will be false.\n *\n * @uses apply_filters() Calls 'pre_transient_$transient' hook before checking the transient.\n * \tAny value other than false will \"short-circuit\" the retrieval of the transient\n *\tand return the returned value.\n * @uses apply_filters() Calls 'transient_$option' hook, after checking the transient, with\n * \tthe transient value.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped\n * @return mixed Value of transient\n *\/","file":"option.php","line":442,"missingDoc":false,"filters":["'pre_transient_' . $transient","'transient_' . $transient"],"uses":{"wp_cache_get":[450],"wp_load_alloptions":[455],"delete_option":[459,460],"get_option":[458,466],"time":[458],"defined":[453]},"used_by":{"WP_Feed_Cache_Transient::load":[39],"WP_Feed_Cache_Transient::mtime":[43],"spawn_cron":[207],"get_dirsize":[1412],"wp_rand":[1526],"RSSCache::get":[743],"RSSCache::check_cache":[764]}},"WP_Feed_Cache_Transient::mtime":{"doc":"","file":"class-feed.php","line":42,"missingDoc":true,"filters":[],"uses":{"get_transient":[43]},"used_by":[]},"WP_Feed_Cache_Transient::touch":{"doc":"","file":"class-feed.php","line":46,"missingDoc":true,"filters":[],"uses":{"set_transient":[47],"time":[47]},"used_by":[]},"WP_Feed_Cache_Transient::unlink":{"doc":"","file":"class-feed.php","line":50,"missingDoc":true,"filters":[],"uses":{"delete_transient":[51,52]},"used_by":[]},"delete_transient":{"doc":"\/**\n * Delete a transient.\n *\n * @since 2.8.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses do_action() Calls 'delete_transient_$transient' hook before transient is deleted.\n * @uses do_action() Calls 'deleted_transient' hook on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return bool true if successful, false otherwise\n *\/","file":"option.php","line":403,"missingDoc":false,"filters":["'delete_transient_' . $transient","'deleted_transient'"],"uses":{"wp_cache_delete":[409],"delete_option":[413,415]},"used_by":{"WP_Feed_Cache_Transient::unlink":[51,52],"wp_delete_attachment":[4102]}},"WP_SimplePie_File::__construct":{"doc":"","file":"class-feed.php","line":59,"missingDoc":true,"filters":[],"uses":{"wp_remote_request":[77],"get_error_message":[80],"wp_remote_retrieve_headers":[83],"wp_remote_retrieve_body":[84],"wp_remote_retrieve_response_code":[85],"is_wp_error":[79],"file_exists":[88],"file_get_contents":[88],"preg_match":[68]},"used_by":[]},"wp_remote_request":{"doc":"\/**\n * Retrieve the raw response from the HTTP request.\n *\n * The array structure is a little complex.\n *\n * <code>\n * $res = array( 'headers' => array(), 'response' => array('code' => int, 'message' => string) );\n * <\/code>\n *\n * All of the headers in $res['headers'] are with the name as the key and the\n * value as the value. So to get the User-Agent, you would do the following.\n *\n * <code>\n * $user_agent = $res['headers']['user-agent'];\n * <\/code>\n *\n * The body is the raw response content and can be retrieved from $res['body'].\n *\n * This function is called first to make the request and there are other API\n * functions to abstract out the above convoluted setup.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":58,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[59],"request":[60]},"used_by":{"WP_SimplePie_File::__construct":[77],"wp_get_http":[505],"_fetch_remote_file":[539]}},"wp_remote_retrieve_headers":{"doc":"\/**\n * Retrieve only the headers from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return array The headers of the response. Empty array if incorrect parameter given.\n *\/","file":"http.php","line":119,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[120],"is_array":[120]},"used_by":{"WP_SimplePie_File::__construct":[83],"wp_get_http":[510],"wp_get_http_headers":[551],"_fetch_remote_file":[553]}},"wp_remote_retrieve_body":{"doc":"\/**\n * Retrieve only the body from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string The body of the response. Empty string if no body or incorrect parameter given.\n *\/","file":"http.php","line":187,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[188]},"used_by":{"WP_SimplePie_File::__construct":[84],"WP_oEmbed::discover":[111],"WP_oEmbed::_fetch_with_format":[196],"WP_HTTP_IXR_Client::query":[73,76],"discover_pingback_server_uri":[1682],"wp_get_http":[526],"wp_remote_fopen":[767],"_fetch_remote_file":[566],"wp_version_check":[94],"wp_update_plugins":[210],"wp_update_themes":[319]}},"wp_remote_retrieve_response_code":{"doc":"\/**\n * Retrieve only the response code from the raw response.\n *\n * Will return an empty array if incorrect parameter value is given.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string the response code. Empty string on incorrect parameter given.\n *\/","file":"http.php","line":155,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[156],"is_array":[156]},"used_by":{"WP_SimplePie_File::__construct":[85],"WP_oEmbed::_fetch_with_format":[194],"WP_HTTP_IXR_Client::query":[68,67],"wp_get_http":[511],"_fetch_remote_file":[563,564],"wp_version_check":[91],"wp_update_plugins":[207],"wp_update_themes":[312]}},"WP_SimplePie_Sanitize_KSES::sanitize":{"doc":"","file":"class-feed.php","line":106,"missingDoc":true,"filters":[],"uses":{"trim":[107],"preg_match":[109],"base64_decode":[117],"wp_kses_post":[120],"call":[122]},"used_by":[]},"wp_kses_post":{"doc":"\/**\n * Sanitize content for allowed HTML tags for post content.\n *\n * Post content refers to the page contents of the 'post' type and not $_POST\n * data from forms.\n *\n * @since 2.9.0\n *\n * @param string $data Post content to filter\n * @return string Filtered post content with allowed HTML tags and attributes intact.\n *\/","file":"kses.php","line":1299,"missingDoc":false,"filters":[],"uses":{"wp_kses":[1300]},"used_by":{"WP_SimplePie_Sanitize_KSES::sanitize":[120],"sanitize_option":[2809]}},"WP_Http::request":{"doc":"\/**\n * Send a HTTP request to a URI.\n *\n * The body and headers are part of the arguments. The 'body' argument is for the body and will\n * accept either a string or an array. The 'headers' argument should be an array, but a string\n * is acceptable. If the 'body' argument is an array, then it will automatically be escaped\n * using http_build_query().\n *\n * The only URI that are supported in the HTTP Transport implementation are the HTTP and HTTPS\n * protocols. HTTP and HTTPS are assumed so the server might not know how to handle the send\n * headers. Other protocols are unsupported and most likely will fail.\n *\n * The defaults are 'method', 'timeout', 'redirection', 'httpversion', 'blocking' and\n * 'user-agent'.\n *\n * Accepted 'method' values are 'GET', 'POST', and 'HEAD', some transports technically allow\n * others, but should not be assumed. The 'timeout' is used to sent how long the connection\n * should stay open before failing when no response. 'redirection' is used to track how many\n * redirects were taken and used to sent the amount for other transports, but not all transports\n * accept setting that value.\n *\n * The 'httpversion' option is used to sent the HTTP version and accepted values are '1.0', and\n * '1.1' and should be a string. Version 1.1 is not supported, because of chunk response. The\n * 'user-agent' option is the user-agent and is used to replace the default user-agent, which is\n * 'WordPress\/WP_Version', where WP_Version is the value from $wp_version.\n *\n * 'blocking' is the default, which is used to tell the transport, whether it should halt PHP\n * while it performs the request or continue regardless. Actually, that isn't entirely correct.\n * Blocking mode really just means whether the fread should just pull what it can whenever it\n * gets bytes or if it should wait until it has enough in the buffer to read or finishes reading\n * the entire content. It doesn't actually always mean that PHP will continue going after making\n * the request.\n *\n * @access public\n * @since 2.7.0\n * @todo Refactor this code. The code in this method extends the scope of its original purpose\n *\t\tand should be refactored to allow for cleaner abstraction and reduce duplication of the\n *\t\tcode. One suggestion is to create a class specifically for the arguments, however\n *\t\tpreliminary refactoring to this affect has affect more than just the scope of the\n *\t\targuments. Something to ponder at least.\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":81,"missingDoc":false,"filters":["'http_request_timeout'","'http_request_redirection_count'","'http_request_version'","'http_headers_useragent'","'http_request_args'","'pre_http_request'"],"uses":{"get_bloginfo":[89,132],"wp_parse_args":[102,108],"parse_url":[119,132],"__":[122,125,145],"block_request":[124],"get_temp_dir":[139],"basename":[139],"wp_is_writable":[144],"dirname":[144],"is_null":[148,172],"is_array":[151,173],"http_build_query":[174],"get_option":[177],"is_object":[173],"strlen":[184],"_dispatch_request":[187]},"used_by":[]},"get_temp_dir":{"doc":"\/**\n * Determines a writable directory for temporary files.\n * Function's preference is the return value of <code>sys_get_temp_dir()<\/code>,\n * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR,\n * before finally defaulting to \/tmp\/\n *\n * In the event that this function does not find a writable location,\n * It may be overridden by the <code>WP_TEMP_DIR<\/code> constant in\n * your <code>wp-config.php<\/code> file.\n *\n * @since 2.5.0\n *\n * @return string Writable temporary directory\n *\/","file":"functions.php","line":1411,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[1414,1417,1422,1427],"defined":[1413],"rtrim":[1417,1422,1427],"sys_get_temp_dir":[1420],"is_dir":[1421,1426,1430],"wp_is_writable":[1421,1426,1430],"function_exists":[1419],"ini_get":[1425]},"used_by":{"WP_Http::request":[139]}},"wp_is_writable":{"doc":"\/**\n * Determine if a directory is writable.\n *\n * This function is used to work around certain ACL issues \n * in PHP primarily affecting Windows Servers.\n *\n * @see win_is_writable()\n *\n * @since 3.6.0\n *\n * @param string $path\n * @return bool\n *\/","file":"functions.php","line":1450,"missingDoc":false,"filters":[],"uses":{"win_is_writable":[1452],"is_writable":[1454],"strtoupper":[1451],"substr":[1451]},"used_by":{"WP_Http::request":[144],"get_temp_dir":[1421,1426,1430]}},"WP_Http::_get_first_available_transport":{"doc":"\/**\n * Tests which transports are capable of supporting the request.\n *\n * @since 3.2.0\n * @access private\n *\n * @param array $args Request arguments\n * @param string $url URL to Request\n *\n * @return string|bool Class name for the first transport that claims to support the request. False if no transport claims to support the request.\n *\/","file":"class-http.php","line":201,"missingDoc":false,"filters":[],"uses":{"call_user_func":[209]},"used_by":[]},"WP_Http::_dispatch_request":{"doc":"\/**\n * Dispatches a HTTP request to a supporting transport.\n *\n * Tests each transport in order to find a transport which matches the request arguments.\n * Also caches the transport instance to be used later.\n *\n * The order for blocking requests is cURL, Streams, and finally Fsockopen.\n * The order for non-blocking requests is cURL, Streams and Fsockopen().\n *\n * There are currently issues with \"localhost\" not resolving correctly with DNS. This may cause\n * an error \"failed to open stream: A connection attempt failed because the connected party did\n * not properly respond after a period of time, or established connection failed because [the]\n * connected host has failed to respond.\"\n *\n * @since 3.2.0\n * @access private\n *\n * @param string $url URL to Request\n * @param array $args Request arguments\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":239,"missingDoc":false,"filters":["'http_api_debug'","'http_response'"],"uses":{"_get_first_available_transport":[242],"__":[244],"request":[250],"is_wp_error":[254]},"used_by":[]},"WP_Http::post":{"doc":"\/**\n * Uses the POST HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":272,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[274],"request":[275]},"used_by":[]},"WP_Http::get":{"doc":"\/**\n * Uses the GET HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":290,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[292],"request":[293]},"used_by":[]},"WP_Http::head":{"doc":"\/**\n * Uses the HEAD HTTP method.\n *\n * Used for sending data that is expected to be in the body.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array|object Array containing 'headers', 'body', 'response', 'cookies', 'filename'. A WP_Error instance upon error\n *\/","file":"class-http.php","line":308,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[310],"request":[311]},"used_by":[]},"WP_Http::processResponse":{"doc":"\/**\n * Parses the responses and splits the parts into headers and body.\n *\n * @access public\n * @static\n * @since 2.7.0\n *\n * @param string $strResponse The full response string\n * @return array Array with 'headers' and 'body' keys.\n *\/","file":"class-http.php","line":324,"missingDoc":false,"filters":[],"uses":{"explode":[325]},"used_by":[]},"WP_Http::processHeaders":{"doc":"\/**\n * Transform header string into an array.\n *\n * If an array is given then it is assumed to be raw header data with numeric keys with the\n * headers as the values. No headers must be passed that were already processed.\n *\n * @access public\n * @static\n * @since 2.7.0\n *\n * @param string|array $headers\n * @return array Processed string headers. If duplicate headers are encountered,\n * \t\t\t\t\tThen a numbered array is returned as the value of that header-key.\n *\/","file":"class-http.php","line":344,"missingDoc":false,"filters":[],"uses":{"str_replace":[348],"preg_replace":[350],"explode":[352,373,379],"is_string":[346],"count":[359],"array_splice":[361],"strpos":[360,372],"strtolower":[381],"trim":[382],"is_array":[385]},"used_by":[]},"WP_Http::buildCookieHeader":{"doc":"\/**\n * Takes the arguments for a ::request() and checks for the cookie array.\n *\n * If it's found, then it's assumed to contain WP_Http_Cookie objects, which are each parsed\n * into strings and added to the Cookie: header (within the arguments array). Edits the array by\n * reference.\n *\n * @access public\n * @version 2.8.0\n * @static\n *\n * @param array $r Full array of args passed into ::request()\n *\/","file":"class-http.php","line":411,"missingDoc":false,"filters":[],"uses":{"getHeaderValue":[415],"substr":[417]},"used_by":[]},"WP_Http::chunkTransferDecode":{"doc":"\/**\n * Decodes chunk transfer-encoding, based off the HTTP 1.1 specification.\n *\n * Based off the HTTP http_encoding_dechunk function. Does not support UTF-8. Does not support\n * returning footer headers. Shouldn't be too difficult to support it though.\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc2616#section-19.4.6 Process for chunked decoding.\n *\n * @todo Add support for footer chunked headers.\n * @access public\n * @since 2.7.0\n * @static\n *\n * @param string $body Body content\n * @return string Chunked decoded body on success or raw body on failure.\n *\/","file":"class-http.php","line":438,"missingDoc":false,"filters":[],"uses":{"str_replace":[439,460],"preg_match":[441,448],"trim":[441,462],"hexdec":[454],"strlen":[455],"substr":[457],"ltrim":[460]},"used_by":[]},"WP_Http::block_request":{"doc":"\/**\n * Block requests through the proxy.\n *\n * Those who are behind a proxy and want to prevent access to certain hosts may do so. This will\n * prevent plugins from working and core functionality, if you don't include api.wordpress.org.\n *\n * You block external URL requests by defining WP_HTTP_BLOCK_EXTERNAL as true in your wp-config.php\n * file and this will only allow localhost and your blog to make requests. The constant\n * WP_ACCESSIBLE_HOSTS will allow additional hosts to go through for requests. The format of the\n * WP_ACCESSIBLE_HOSTS constant is a comma separated list of hostnames to allow, wildcard domains\n * are supported, eg *.wordpress.org will allow for all subdomains of wordpress.org to be contacted.\n *\n * @since 2.8.0\n * @link http:\/\/core.trac.wordpress.org\/ticket\/8927 Allow preventing external requests.\n * @link http:\/\/core.trac.wordpress.org\/ticket\/14636 Allow wildcard domains in WP_ACCESSIBLE_HOSTS\n *\n * @param string $uri URI of url.\n * @return bool True to block, false to allow.\n *\/","file":"class-http.php","line":489,"missingDoc":false,"filters":["'block_local_requests'"],"uses":{"defined":[491,514],"parse_url":[496,508],"get_option":[508],"preg_split":[520],"str_replace":[525],"preg_quote":[525],"implode":[526],"strpos":[522],"preg_match":[531],"in_array":[533]},"used_by":[]},"WP_Http::make_absolute_url":{"doc":"","file":"class-http.php","line":537,"missingDoc":true,"filters":[],"uses":{"strpos":[542,571],"parse_url":[545,548],"substr":[565],"strrpos":[565],"preg_replace":[572,576],"ltrim":[583]},"used_by":[]},"WP_Http_Fsockopen::request":{"doc":"\/**\n * Send a HTTP request to a URI using fsockopen().\n *\n * Does not support non-blocking mode.\n *\n * @see WP_Http::request For default options descriptions.\n *\n * @since 2.7\n * @access public\n * @param string $url URI resource.\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":611,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[619],"parse_url":[635],"extension_loaded":[642],"strtolower":[653],"error_reporting":[659,773],"time":[661,677],"fsockopen":[667,669,672,674],"host":[667,672],"port":[667,672],"is_enabled":[666,671,692,702],"send_through_proxy":[666,671,692,702],"add_option":[683],"floor":[688],"stream_set_timeout":[690],"strtoupper":[700],"is_array":[710],"authentication_header":[718],"use_authentication":[717],"is_null":[722],"fwrite":[725,747,753],"fclose":[728,760,770],"fopen":[738,740],"sprintf":[742],"__":[742,782],"feof":[744,763],"fread":[745,764],"strpos":[750],"request":[780]},"used_by":[]},"add_option":{"doc":"\/**\n * Add a new option.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * You can create options without values and then update the values later.\n * Existing options will not be updated and checks are performed to ensure that you\n * aren't adding a protected WordPress option. Care should be taken to not name\n * options the same as the ones which are protected.\n *\n * @package WordPress\n * @subpackage Option\n * @since 1.0.0\n *\n * @uses do_action() Calls 'add_option' hook before adding the option.\n * @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success.\n *\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @param mixed $deprecated Optional. Description. Not used anymore.\n * @param bool $autoload Optional. Default is enabled. Whether to load the option when WordPress starts up.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"option.php","line":293,"missingDoc":false,"filters":["'add_option'","\"add_option_{$option}\"","'added_option'"],"uses":{"_deprecated_argument":[297],"trim":[299],"wp_protect_special_option":[303],"is_object":[305],"sanitize_option":[308],"wp_cache_get":[311,331],"get_option":[313],"is_array":[312,332],"maybe_serialize":[317],"wp_load_alloptions":[322],"wp_cache_set":[324,326,334],"defined":[320],"query":[337],"prepare":[337]},"used_by":{"WP_Http_Fsockopen::request":[683],"add_blog_option":[422,425],"wpmu_create_blog":[989],"update_option":[236],"set_transient":[505,507],"add_site_option":[816],"switch_theme":[696]}},"WP_Http_Fsockopen::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @since 2.7.0\n * @static\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":803,"missingDoc":false,"filters":["'use_fsockopen_transport'"],"uses":{"function_exists":[804],"get_option":[807],"time":[807],"extension_loaded":[812]},"used_by":[]},"WP_Http_Streams::request":{"doc":"\/**\n * Send a HTTP request to a URI using streams with fopen().\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":842,"missingDoc":false,"filters":["'https_local_ssl_verify'","'https_ssl_verify'"],"uses":{"wp_parse_args":[850],"parse_url":[863],"sprintf":[866,924,943],"__":[866,924,943,966],"preg_replace":[869],"preg_quote":[869],"is_string":[876],"is_array":[873],"strtoupper":[888],"host":[905],"port":[905],"authentication_header":[910],"use_authentication":[909],"is_enabled":[904],"send_through_proxy":[904],"is_null":[913],"stream_context_create":[916],"fopen":[919,921,938,940],"floor":[926],"stream_set_timeout":[928],"stream_set_blocking":[931],"fclose":[932,947,955],"stream_copy_to_stream":[945],"stream_get_contents":[950],"stream_get_meta_data":[953]},"used_by":[]},"WP_Http_Streams::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @static\n * @access public\n * @since 2.7.0\n *\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":986,"missingDoc":false,"filters":["'use_streams_transport'"],"uses":{"function_exists":[987,990],"ini_get":[990],"extension_loaded":[995]},"used_by":[]},"WP_Http_Curl::request":{"doc":"\/**\n * Send a HTTP request to a URI using cURL extension.\n *\n * @access public\n * @since 2.7.0\n *\n * @param string $url\n * @param str|array $args Optional. Override the defaults.\n * @return array 'headers', 'body', 'response', 'cookies' and 'filename' keys.\n *\/","file":"class-http.php","line":1032,"missingDoc":false,"filters":["'https_local_ssl_verify'","'https_ssl_verify'","'http_api_curl'"],"uses":{"wp_parse_args":[1040],"curl_init":[1053],"curl_setopt":[1060,1061,1062,1065,1066,1080,1081,1083,1084,1085,1086,1087,1090,1094,1097,1098,1101,1102,1105,1107,1112,1114,1124,1133,1137,1139],"host":[1061],"port":[1062],"authentication":[1066],"use_authentication":[1064],"is_enabled":[1058],"send_through_proxy":[1058],"ceil":[1079],"is_null":[1106],"fopen":[1119,1121],"sprintf":[1123],"__":[1123,1164,1183],"curl_exec":[1147,1152],"curl_close":[1148,1173],"strlen":[1156,1160],"is_bool":[1156],"curl_error":[1161],"in_array":[1163],"curl_getinfo":[1163,1170],"get_status_header_desc":[1171],"fclose":[1176],"request":[1181]},"used_by":[]},"get_status_header_desc":{"doc":"\/**\n * Retrieve the description for the HTTP status.\n *\n * @since 2.3.0\n *\n * @param int $code HTTP status code.\n * @return string Empty string if not found, or description if found.\n *\/","file":"functions.php","line":793,"missingDoc":false,"filters":[],"uses":{"absint":[796]},"used_by":{"WP_Http_Curl::request":[1171],"status_header":[876]}},"WP_Http_Curl::stream_headers":{"doc":"\/**\n * Grab the headers of the cURL request\n *\n * Each header is sent individually to this callback, so we append to the $header property for temporary storage\n *\n * @since 3.2.0\n * @access private\n * @return int\n *\/","file":"class-http.php","line":1202,"missingDoc":false,"filters":[],"uses":{"strlen":[1204]},"used_by":[]},"WP_Http_Curl::test":{"doc":"\/**\n * Whether this class can be used for retrieving an URL.\n *\n * @static\n * @since 2.7.0\n *\n * @return boolean False means this class can not be used, true means it can.\n *\/","file":"class-http.php","line":1215,"missingDoc":false,"filters":["'use_curl_transport'"],"uses":{"function_exists":[1216,1216],"curl_version":[1222]},"used_by":[]},"WP_HTTP_Proxy::is_enabled":{"doc":"\/**\n * Whether proxy connection should be used.\n *\n * @since 2.8\n * @use WP_PROXY_HOST\n * @use WP_PROXY_PORT\n *\n * @return bool\n *\/","file":"class-http.php","line":1274,"missingDoc":false,"filters":[],"uses":{"defined":[1275,1275]},"used_by":[]},"WP_HTTP_Proxy::use_authentication":{"doc":"\/**\n * Whether authentication should be used.\n *\n * @since 2.8\n * @use WP_PROXY_USERNAME\n * @use WP_PROXY_PASSWORD\n *\n * @return bool\n *\/","file":"class-http.php","line":1287,"missingDoc":false,"filters":[],"uses":{"defined":[1288,1288]},"used_by":[]},"WP_HTTP_Proxy::host":{"doc":"\/**\n * Retrieve the host for the proxy server.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1298,"missingDoc":false,"filters":[],"uses":{"defined":[1299]},"used_by":[]},"WP_HTTP_Proxy::port":{"doc":"\/**\n * Retrieve the port for the proxy server.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1312,"missingDoc":false,"filters":[],"uses":{"defined":[1313]},"used_by":[]},"WP_HTTP_Proxy::username":{"doc":"\/**\n * Retrieve the username for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1326,"missingDoc":false,"filters":[],"uses":{"defined":[1327]},"used_by":[]},"WP_HTTP_Proxy::password":{"doc":"\/**\n * Retrieve the password for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1340,"missingDoc":false,"filters":[],"uses":{"defined":[1341]},"used_by":[]},"WP_HTTP_Proxy::authentication":{"doc":"\/**\n * Retrieve authentication string for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1354,"missingDoc":false,"filters":[],"uses":{"username":[1355],"password":[1355]},"used_by":[]},"WP_HTTP_Proxy::authentication_header":{"doc":"\/**\n * Retrieve header string for proxy authentication.\n *\n * @since 2.8\n *\n * @return string\n *\/","file":"class-http.php","line":1365,"missingDoc":false,"filters":[],"uses":{"base64_encode":[1366],"authentication":[1366]},"used_by":[]},"WP_HTTP_Proxy::send_through_proxy":{"doc":"\/**\n * Whether URL should be sent through the proxy server.\n *\n * We want to keep localhost and the blog URL from being sent through the proxy server, because\n * some proxies can not handle this. We also have the constant available for defining other\n * hosts that won't be sent through the proxy.\n *\n * @uses WP_PROXY_BYPASS_HOSTS\n * @since 2.8.0\n *\n * @param string $uri URI to check.\n * @return bool True, to send through the proxy and false if, the proxy should not be used.\n *\/","file":"class-http.php","line":1382,"missingDoc":false,"filters":["'pre_http_send_through_proxy'"],"uses":{"parse_url":[1385,1391],"get_option":[1391],"is_null":[1394],"defined":[1400],"preg_split":[1406],"str_replace":[1411],"preg_quote":[1411],"implode":[1412],"strpos":[1408],"preg_match":[1417],"in_array":[1419]},"used_by":[]},"WP_Http_Cookie::__construct":{"doc":"\/**\n * Sets up this cookie object.\n *\n * The parameter $data should be either an associative array containing the indices names below\n * or a header string detailing it.\n *\n * If it's an array, it should include the following elements:\n * <ol>\n * <li>Name<\/li>\n * <li>Value - should NOT be urlencoded already.<\/li>\n * <li>Expires - (optional) String or int (UNIX timestamp).<\/li>\n * <li>Path (optional)<\/li>\n * <li>Domain (optional)<\/li>\n * <\/ol>\n *\n * @access public\n * @since 2.8.0\n *\n * @param string|array $data Raw cookie data.\n *\/","file":"class-http.php","line":1497,"missingDoc":false,"filters":[],"uses":{"explode":[1500,1515],"trim":[1503,1516],"substr":[1503,1504],"strpos":[1503,1504,1515],"urldecode":[1506],"array_shift":[1507],"rtrim":[1511],"strtolower":[1516],"strtotime":[1518,1532],"is_int":[1532],"is_string":[1498]},"used_by":[]},"WP_Http_Cookie::test":{"doc":"\/**\n * Confirms that it's OK to send this cookie to the URL checked against.\n *\n * Decision is based on RFC 2109\/2965, so look there for details on validity.\n *\n * @access public\n * @since 2.8.0\n *\n * @param string $url URL you intend to send this cookie to\n * @return boolean true if allowed, false otherwise.\n *\/","file":"class-http.php","line":1549,"missingDoc":false,"filters":[],"uses":{"time":[1551],"parse_url":[1555],"strtolower":[1562,1562],"stripos":[1563],"substr":[1567,1567,1568,1576],"strlen":[1568,1576],"in_array":[1572],"explode":[1572]},"used_by":[]},"stripos":{"doc":"","file":"class-pop3.php","line":649,"missingDoc":true,"filters":[],"uses":{"strpos":[650],"stristr":[650]},"used_by":{"WP_Http_Cookie::test":[1563],"WP_Http_Encoding::should_decode":[1771],"WP_oEmbed::discover":[121,126],"POP3::is_ok":[605],"_WP_Editors::editor_js":[519],"WP::send_headers":[393],"trackback_rdf":[746],"add_query_arg":[661,658],"nocache_headers":[937],"get_calendar":[1205,1205],"__main":[30,53,54,61,76],"wp_mail":[250,285,283,433]}},"WP_Http_Cookie::getHeaderValue":{"doc":"\/**\n * Convert cookie name and value back to header string.\n *\n * @access public\n * @since 2.8.0\n *\n * @return string Header encoded cookie name and value.\n *\/","file":"class-http.php","line":1590,"missingDoc":false,"filters":["'wp_http_cookie_value'"],"uses":[],"used_by":[]},"WP_Http_Cookie::getFullHeader":{"doc":"\/**\n * Retrieve cookie header for usage in the rest of the WordPress HTTP API.\n *\n * @access public\n * @since 2.8.0\n *\n * @return string\n *\/","file":"class-http.php","line":1605,"missingDoc":false,"filters":[],"uses":{"getHeaderValue":[1606]},"used_by":[]},"WP_Http_Encoding::compress":{"doc":"\/**\n * Compress raw string using the deflate format.\n *\n * Supports the RFC 1951 standard.\n *\n * @since 2.8\n *\n * @param string $raw String to compress.\n * @param int $level Optional, default is 9. Compression level, 9 is highest.\n * @param string $supports Optional, not used. When implemented it will choose the right compression based on what the server supports.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1633,"missingDoc":false,"filters":[],"uses":{"gzdeflate":[1634]},"used_by":[]},"WP_Http_Encoding::decompress":{"doc":"\/**\n * Decompression of deflated string.\n *\n * Will attempt to decompress using the RFC 1950 standard, and if that fails\n * then the RFC 1951 standard deflate will be attempted. Finally, the RFC\n * 1952 standard gzip decode will be attempted. If all fail, then the\n * original compressed string will be returned.\n *\n * @since 2.8\n *\n * @param string $compressed String to decompress.\n * @param int $length The optional length of the compressed data.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1651,"missingDoc":false,"filters":[],"uses":{"gzinflate":[1656],"gzuncompress":[1662],"gzdecode":[1666],"function_exists":[1665]},"used_by":[]},"WP_Http_Encoding::compatible_gzinflate":{"doc":"\/**\n * Decompression of deflated string while staying compatible with the majority of servers.\n *\n * Certain Servers will return deflated data with headers which PHP's gzinflate()\n * function cannot handle out of the box. The following function has been created from\n * various snippets on the gzinflate() PHP documentation.\n *\n * Warning: Magic numbers within. Due to the potential different formats that the compressed\n * data may be returned in, some \"magic offsets\" are needed to ensure proper decompression\n * takes place. For a simple progmatic way to determine the magic offset in use, see:\n * http:\/\/core.trac.wordpress.org\/ticket\/18273\n *\n * @since 2.8.1\n * @link http:\/\/core.trac.wordpress.org\/ticket\/18273\n * @link http:\/\/au2.php.net\/manual\/en\/function.gzinflate.php#70875\n * @link http:\/\/au2.php.net\/manual\/en\/function.gzinflate.php#77336\n *\n * @param string $gzData String to decompress.\n * @return string|bool False on failure.\n *\/","file":"class-http.php","line":1695,"missingDoc":false,"filters":[],"uses":{"ord":[1700],"substr":[1700,1703,1713,1698,1719],"unpack":[1703],"strpos":[1707,1709],"gzinflate":[1713,1719]},"used_by":[]},"WP_Http_Encoding::accept_encoding":{"doc":"\/**\n * What encoding types to accept and their priority values.\n *\n * @since 2.8\n *\n * @return string Types of encoding to accept.\n *\/","file":"class-http.php","line":1733,"missingDoc":false,"filters":[],"uses":{"function_exists":[1735,1738,1741],"implode":[1744]},"used_by":[]},"WP_Http_Encoding::content_encoding":{"doc":"\/**\n * What encoding the content used when it was compressed to send in the headers.\n *\n * @since 2.8\n *\n * @return string Content-Encoding string to send in the header.\n *\/","file":"class-http.php","line":1754,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Http_Encoding::should_decode":{"doc":"\/**\n * Whether the content be decoded based on the headers.\n *\n * @since 2.8\n *\n * @param array|string $headers All of the available headers.\n * @return bool\n *\/","file":"class-http.php","line":1766,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[1768],"stripos":[1771],"is_string":[1770],"is_array":[1767]},"used_by":[]},"WP_Http_Encoding::is_available":{"doc":"\/**\n * Whether decompression and compression are supported by the PHP version.\n *\n * Each function is tested instead of checking for the zlib extension, to\n * ensure that the functions all exist in the PHP version and aren't\n * disabled.\n *\n * @since 2.8\n *\n * @return bool\n *\/","file":"class-http.php","line":1788,"missingDoc":false,"filters":[],"uses":{"function_exists":[1789,1789,1789]},"used_by":[]},"IXR_Value::IXR_Value":{"doc":"","file":"class-IXR.php","line":52,"missingDoc":true,"filters":[],"uses":{"calculateType":[56],"count":[66]},"used_by":[]},"IXR_Value::calculateType":{"doc":"","file":"class-IXR.php","line":72,"missingDoc":true,"filters":[],"uses":{"is_integer":[77],"is_double":[80],"is_object":[85,88,93],"is_a":[85,88],"get_object_vars":[94],"is_array":[97],"isStruct":[102]},"used_by":[]},"IXR_Value::getXml":{"doc":"","file":"class-IXR.php","line":109,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[123,136],"getXml":[128,138,145]},"used_by":[]},"IXR_Value::isStruct":{"doc":"\/**\n * Checks whether or not the supplied array is a struct or not\n *\n * @param unknown_type $array\n * @return boolean\n *\/","file":"class-IXR.php","line":157,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"IXR_Message::IXR_Message":{"doc":"","file":"class-IXR.php","line":197,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::parse":{"doc":"","file":"class-IXR.php","line":202,"missingDoc":true,"filters":[],"uses":{"preg_replace":[206],"substr":[206,224,225],"substr_replace":[207],"trim":[208],"xml_parser_create":[211],"xml_parser_set_option":[213],"xml_set_object":[215],"xml_set_element_handler":[216],"xml_set_character_data_handler":[217],"strlen":[221],"xml_parse":[226],"xml_parser_free":[233]},"used_by":[]},"IXR_Message::tag_open":{"doc":"","file":"class-IXR.php","line":243,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::cdata":{"doc":"","file":"class-IXR.php","line":265,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Message::tag_close":{"doc":"","file":"class-IXR.php","line":270,"missingDoc":true,"filters":[],"uses":{"trim":[276,280,284,288,293,299,317,320],"base64_decode":[303],"array_pop":[309,310,314],"count":[329,329,332,327,325]},"used_by":[]},"IXR_Server::IXR_Server":{"doc":"","file":"class-IXR.php","line":356,"missingDoc":true,"filters":[],"uses":{"setCapabilities":[358],"setCallbacks":[362],"serve":[364]},"used_by":[]},"IXR_Server::serve":{"doc":"","file":"class-IXR.php","line":368,"missingDoc":true,"filters":[],"uses":{"header":[372],"file_get_contents":[379],"error":[386,389,395],"parse":[385],"call":[391],"is_a":[394],"getXml":[400],"output":[416]},"used_by":[]},"error":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":77,"missingDoc":true,"filters":[],"uses":{"func_get_args":[78],"getLogger":[80],"error":[81],"implode":[81]},"used_by":{"IXR_Server::serve":[386,389,395],"SimplePie::init":[1315],"fetch_feed":[546,545],"error":[81],"MagpieRSS::MagpieRSS":[87],"RSSCache::debug":[816],"SimplePie_Misc::debug":[2201,2199]}},"IXR_Server::call":{"doc":"","file":"class-IXR.php","line":419,"missingDoc":true,"filters":[],"uses":{"hasMethod":[421],"count":[427],"substr":[435,433],"method_exists":[436],"is_callable":[445],"function_exists":[448],"is_array":[444],"call_user_func":[453],"is_string":[433]},"used_by":[]},"IXR_Server::error":{"doc":"","file":"class-IXR.php","line":458,"missingDoc":true,"filters":[],"uses":{"is_object":[461],"output":[464],"getXml":[464]},"used_by":[]},"IXR_Server::output":{"doc":"","file":"class-IXR.php","line":467,"missingDoc":true,"filters":[],"uses":{"function_exists":[469],"get_option":[469],"strlen":[474],"header":[475,476,478,480,481],"date":[481]},"used_by":[]},"IXR_Server::hasMethod":{"doc":"","file":"class-IXR.php","line":486,"missingDoc":true,"filters":[],"uses":{"in_array":[488],"array_keys":[488]},"used_by":[]},"IXR_Server::setCapabilities":{"doc":"","file":"class-IXR.php","line":491,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::getCapabilities":{"doc":"","file":"class-IXR.php","line":510,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::setCallbacks":{"doc":"","file":"class-IXR.php","line":515,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Server::listMethods":{"doc":"","file":"class-IXR.php","line":522,"missingDoc":true,"filters":[],"uses":{"array_reverse":[526],"array_keys":[526]},"used_by":[]},"IXR_Server::multiCall":{"doc":"","file":"class-IXR.php","line":529,"missingDoc":true,"filters":[],"uses":{"call":[539],"is_a":[541]},"used_by":[]},"IXR_Request::IXR_Request":{"doc":"","file":"class-IXR.php","line":566,"missingDoc":true,"filters":[],"uses":{"getXml":[580]},"used_by":[]},"IXR_Request::getLength":{"doc":"","file":"class-IXR.php","line":586,"missingDoc":true,"filters":[],"uses":{"strlen":[588]},"used_by":[]},"IXR_Request::getXml":{"doc":"","file":"class-IXR.php","line":591,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::IXR_Client":{"doc":"","file":"class-IXR.php","line":619,"missingDoc":true,"filters":[],"uses":{"parse_url":[623]},"used_by":[]},"IXR_Client::query":{"doc":"","file":"class-IXR.php","line":641,"missingDoc":true,"filters":[],"uses":{"func_get_args":[643],"array_shift":[644],"getLength":[646],"getXml":[647],"htmlspecialchars":[666,705],"fsockopen":[670,672],"fputs":[678],"feof":[683],"fgets":[684],"strstr":[687],"trim":[693],"parse":[710]},"used_by":[]},"IXR_Client::getResponse":{"doc":"","file":"class-IXR.php","line":726,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::isError":{"doc":"","file":"class-IXR.php","line":732,"missingDoc":true,"filters":[],"uses":{"is_object":[734]},"used_by":[]},"IXR_Client::getErrorCode":{"doc":"","file":"class-IXR.php","line":737,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Client::getErrorMessage":{"doc":"","file":"class-IXR.php","line":742,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Error::IXR_Error":{"doc":"","file":"class-IXR.php","line":760,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[763]},"used_by":[]},"IXR_Error::getXml":{"doc":"","file":"class-IXR.php","line":766,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Date::IXR_Date":{"doc":"","file":"class-IXR.php","line":806,"missingDoc":true,"filters":[],"uses":{"parseTimestamp":[810],"parseIso":[812],"is_numeric":[809]},"used_by":[]},"IXR_Date::parseTimestamp":{"doc":"","file":"class-IXR.php","line":816,"missingDoc":true,"filters":[],"uses":{"date":[818,819,820,821,822,823]},"used_by":[]},"IXR_Date::parseIso":{"doc":"","file":"class-IXR.php","line":827,"missingDoc":true,"filters":[],"uses":{"substr":[829,830,831,832,833,834,835]},"used_by":[]},"IXR_Date::getIso":{"doc":"","file":"class-IXR.php","line":838,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Date::getXml":{"doc":"","file":"class-IXR.php","line":843,"missingDoc":true,"filters":[],"uses":{"getIso":[845]},"used_by":[]},"IXR_Date::getTimestamp":{"doc":"","file":"class-IXR.php","line":848,"missingDoc":true,"filters":[],"uses":{"mktime":[850]},"used_by":[]},"IXR_Base64::IXR_Base64":{"doc":"","file":"class-IXR.php","line":864,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_Base64::getXml":{"doc":"","file":"class-IXR.php","line":869,"missingDoc":true,"filters":[],"uses":{"base64_encode":[871]},"used_by":[]},"IXR_IntrospectionServer::IXR_IntrospectionServer":{"doc":"","file":"class-IXR.php","line":886,"missingDoc":true,"filters":[],"uses":{"setCallbacks":[888],"setCapabilities":[889],"addCallback":[894,900,906,912]},"used_by":[]},"IXR_IntrospectionServer::addCallback":{"doc":"","file":"class-IXR.php","line":920,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_IntrospectionServer::call":{"doc":"","file":"class-IXR.php","line":927,"missingDoc":true,"filters":[],"uses":{"is_array":[930,956],"hasMethod":[935],"array_shift":[940,951,952],"count":[943,943,950],"is_int":[956],"is_string":[962],"is_float":[973],"is_a":[979]},"used_by":[]},"IXR_IntrospectionServer::methodSignature":{"doc":"","file":"class-IXR.php","line":992,"missingDoc":true,"filters":[],"uses":{"hasMethod":[994],"time":[1013]},"used_by":[]},"IXR_IntrospectionServer::methodHelp":{"doc":"","file":"class-IXR.php","line":1032,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_ClientMulticall::IXR_ClientMulticall":{"doc":"","file":"class-IXR.php","line":1048,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"IXR_ClientMulticall::addCall":{"doc":"","file":"class-IXR.php","line":1054,"missingDoc":true,"filters":[],"uses":{"func_get_args":[1056],"array_shift":[1057]},"used_by":[]},"IXR_ClientMulticall::query":{"doc":"","file":"class-IXR.php","line":1065,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Services_JSON::Services_JSON":{"doc":"\/**\n * constructs a new JSON instance\n *\n * @param int $use object behavior flags; combine with boolean-OR\n *\n *\t\t\t\t\t\tpossible values:\n *\t\t\t\t\t\t- SERVICES_JSON_LOOSE_TYPE: loose typing.\n *\t\t\t\t\t\t\t\t\"{...}\" syntax creates associative arrays\n *\t\t\t\t\t\t\t\tinstead of objects in decode().\n *\t\t\t\t\t\t- SERVICES_JSON_SUPPRESS_ERRORS: error suppression.\n *\t\t\t\t\t\t\t\tValues which can't be encoded (e.g. resources)\n *\t\t\t\t\t\t\t\tappear as NULL instead of throwing errors.\n *\t\t\t\t\t\t\t\tBy default, a deeply-nested resource will\n *\t\t\t\t\t\t\t\tbubble up with an error, so all return values\n *\t\t\t\t\t\t\t\tfrom encode() should be checked with isError()\n *\/","file":"class-json.php","line":133,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Services_JSON::utf162utf8":{"doc":"\/**\n * convert a string from one UTF-16 char to one UTF-8 char\n *\n * Normally should be handled by mb_convert_encoding, but\n * provides a slower PHP-only method for installations\n * that lack the multibye string extension.\n *\n * @param\tstring $utf16 UTF-16 character\n * @return string UTF-8 character\n * @access private\n *\/","file":"class-json.php","line":149,"missingDoc":false,"filters":[],"uses":{"mb_convert_encoding":[153],"function_exists":[152],"ord":[156,156],"chr":[162,167,168,173,174,175]},"used_by":[]},"Services_JSON::utf82utf16":{"doc":"\/**\n * convert a string from one UTF-8 char to one UTF-16 char\n *\n * Normally should be handled by mb_convert_encoding, but\n * provides a slower PHP-only method for installations\n * that lack the multibye string extension.\n *\n * @param\tstring $utf8 UTF-8 character\n * @return string UTF-16 character\n * @access private\n *\/","file":"class-json.php","line":193,"missingDoc":false,"filters":[],"uses":{"mb_convert_encoding":[197],"function_exists":[196],"strlen":[200],"chr":[209,210,216,218],"ord":[209,210,211,216,217,218,219]},"used_by":[]},"Services_JSON::encode":{"doc":"\/**\n * encodes an arbitrary variable into JSON format (and sends JSON Header)\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":237,"missingDoc":false,"filters":[],"uses":{"header":[239],"_encode":[240]},"used_by":[]},"Services_JSON::encodeUnsafe":{"doc":"\/**\n * encodes an arbitrary variable into JSON format without JSON Header - warning - may allow CSS!!!!)\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":253,"missingDoc":false,"filters":[],"uses":{"_encode":[255]},"used_by":[]},"Services_JSON::_encode":{"doc":"\/**\n * PRIVATE CODE that does the work of encodes an arbitrary variable into JSON format\n *\n * @param\tmixed $var\tany number, boolean, string, array, or object to be encoded.\n *\t\t\t\t\t\tsee argument 1 to Services_JSON() above for array-parsing behavior.\n *\t\t\t\t\t\tif var is a strng, note that encode() always expects it\n *\t\t\t\t\t\tto be in ASCII or UTF-8 format!\n *\n * @return mixed JSON string representation of input var or an error if a problem occurs\n * @access public\n *\/","file":"class-json.php","line":268,"missingDoc":false,"filters":[],"uses":{"gettype":[271,478],"strlen":[288],"ord":[296,336,351,352,367,368,369,384,385,386,387,402,403,404,405,406],"pack":[336,350,366,383,401],"utf82utf16":[338,354,371,389,408],"sprintf":[339,355,372,390,409],"bin2hex":[339,355,372,390,409],"array_map":[436,450,463],"array_keys":[437,435,464],"array_values":[438,465],"join":[446,458,473],"is_array":[435],"count":[435],"range":[435],"sizeof":[435],"get_object_vars":[461]},"used_by":[]},"Services_JSON::name_value":{"doc":"\/**\n * array-walking function for use in generating JSON-formatted name-value pairs\n *\n * @param\tstring $name name of key to use\n * @param\tmixed $value reference to an array element to be encoded\n *\n * @return string JSON-formatted name-value pair, like '\"name\":value'\n * @access private\n *\/","file":"class-json.php","line":491,"missingDoc":false,"filters":[],"uses":{"_encode":[493,499],"strval":[499]},"used_by":[]},"Services_JSON::reduce_string":{"doc":"\/**\n * reduce a string by removing leading and trailing comments and whitespace\n *\n * @param\t$str\tstring\tstring value to strip of comments and whitespace\n *\n * @return string string value stripped of comments and whitespace\n * @access private\n *\/","file":"class-json.php","line":510,"missingDoc":false,"filters":[],"uses":{"preg_replace":[512],"trim":[526]},"used_by":[]},"Services_JSON::decode":{"doc":"\/**\n * decodes a JSON string into appropriate variable\n *\n * @param\tstring $str\tJSON-formatted string\n *\n * @return mixed number, boolean, string, array, or object\n *\t\t\t\tcorresponding to given JSON input string.\n *\t\t\t\tSee argument 1 to Services_JSON() above for object-output behavior.\n *\t\t\t\tNote that decode() always returns strings\n *\t\t\t\tin ASCII or UTF-8 format!\n * @access public\n *\/","file":"class-json.php","line":541,"missingDoc":false,"filters":[],"uses":{"reduce_string":[543,688],"strtolower":[545],"preg_match":[570,614,667,667,737,727],"substr":[572,573,579,614,616,617,629,636,643,650,657,687,707,712,758,758],"strlen":[575,702,758,758],"ord":[580],"chr":[584,588,592,596,600,616,617],"hexdec":[616,617],"utf162utf8":[618],"array_push":[683,713,718,753,768,779,790],"reset":[691,720,716,811,808],"end":[706],"decode":[718,729,730,740],"rtrim":[758],"array_pop":[762,773,784,796],"in_array":[766,777,788],"substr_replace":[800],"is_numeric":[558]},"used_by":[]},"Services_JSON::isError":{"doc":"\/**\n * @todo Ultimately, this should just call PEAR::isError()\n *\/","file":"class-json.php","line":823,"missingDoc":false,"filters":[],"uses":{"is_object":[827],"get_class":[827],"is_subclass_of":[828],"class_exists":[825]},"used_by":[]},"Services_JSON_Error::Services_JSON_Error":{"doc":"","file":"class-json.php","line":854,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_oEmbed::__construct":{"doc":"\/**\n * Constructor\n *\n * @uses apply_filters() Filters a list of pre-defined oEmbed providers.\n *\/","file":"class-oembed.php","line":28,"missingDoc":false,"filters":["'oembed_providers'"],"uses":{"add_filter":[57]},"used_by":[]},"add_filter":{"doc":"\/**\n * Hooks a function or method to a specific filter action.\n *\n * Filters are the hooks that WordPress launches to modify text of various types\n * before adding it to the database or sending it to the browser screen. Plugins\n * can specify that one or more of its PHP functions is executed to\n * modify specific types of text at these times, using the Filter API.\n *\n * To use the API, the following code should be used to bind a callback to the\n * filter.\n *\n * <code>\n * function example_hook($example) { echo $example; }\n * add_filter('example_filter', 'example_hook');\n * <\/code>\n *\n * In WordPress 1.5.1+, hooked functions can take extra arguments that are set\n * when the matching do_action() or apply_filters() call is run. The\n * $accepted_args allow for calling functions only when the number of args\n * match. Hooked functions can take extra arguments that are set when the\n * matching do_action() or apply_filters() call is run. For example, the action\n * comment_id_not_found will pass any functions that hook onto it the ID of the\n * requested comment.\n *\n * <strong>Note:<\/strong> the function will return true no matter if the\n * function was hooked fails or not. There are no checks for whether the\n * function exists beforehand and no checks to whether the <tt>$function_to_add\n * is even a string. It is up to you to take care and this is done for\n * optimization purposes, so everything is as quick as possible.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 0.71\n * @global array $wp_filter Stores all of the filters added in the form of\n *\twp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)']']\n * @global array $merged_filters Tracks the tags that need to be merged for later. If the hook is added, it doesn't need to run through that process.\n *\n * @param string $tag The name of the filter to hook the $function_to_add to.\n * @param callback $function_to_add The name of the function to be called when the filter is applied.\n * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action.\n * @param int $accepted_args optional. The number of arguments the function accept (default 1).\n * @return boolean true\n *\/","file":"plugin.php","line":65,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[68]},"used_by":{"WP_oEmbed::__construct":[57],"WP_Customize_Manager::__construct":[35],"WP_Customize_Manager::start_previewing_theme":[171,172,173,176,177,180,181],"WP_Customize_Manager::customize_preview_init":[337],"WP_Customize_Setting::__construct":[56,59],"WP_Customize_Setting::preview":[72,76,78,79],"_WP_Editors::editor":[108,110],"WP_Embed::__construct":[20,26],"__main":[17,18,19,26,27,29,34,40,42,47,48,49,54,56,62,63,64,70,71,73,78,83,87,88,92,97,98,99,104,105,109,110,115,116,117,118,123,127,128,131,132,133,135,136,137,138,139,140,142,143,144,145,146,147,149,150,151,152,153,154,156,158,160,163,164,165,166,167,168,169,170,171,172,173,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,194,279,286,289,17,24,33,36,44,45,46,47,54,56,58,59,66,1836,1865,494,5449,5468,5482,5506,5522,871,872,875,335,29,71],"kses_init_filters":[1329,1333,1335,1338,1339,1340],"_wp_post_thumbnail_class_filter_add":[597],"register_meta":[895,905],"ms_upload_constants":[22],"add_action":[334],"_show_post_preview":[5253],"register_taxonomy":[390],"preview_theme":[568,574,578],"wp_signon":[51]}},"WP_oEmbed::get_html":{"doc":"\/**\n * The do-it-all function that takes a URL and attempts to return the HTML.\n *\n * @see WP_oEmbed::discover()\n * @see WP_oEmbed::fetch()\n * @see WP_oEmbed::data2html()\n *\n * @param string $url The URL to the content that should be attempted to be embedded.\n * @param array $args Optional arguments. Usually passed from a shortcode.\n * @return bool|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed.\n *\/","file":"class-oembed.php","line":71,"missingDoc":false,"filters":["'oembed_result'"],"uses":{"str_replace":[82,82,87],"preg_quote":[82],"preg_replace":[83],"preg_match":[86],"discover":[93],"fetch":[95],"data2html":[98]},"used_by":[]},"WP_oEmbed::discover":{"doc":"\/**\n * Attempts to find oEmbed provider discovery <link> tags at the given URL.\n *\n * @param string $url The URL that should be inspected for discovery <link> tags.\n * @return bool|string False on failure, otherwise the oEmbed provider URL.\n *\/","file":"class-oembed.php","line":107,"missingDoc":false,"filters":["'oembed_linktypes'"],"uses":{"substr":[121],"stripos":[121,126],"shortcode_parse_atts":[134],"preg_match_all":[132],"wp_remote_retrieve_body":[111],"wp_remote_get":[111]},"used_by":[]},"shortcode_parse_atts":{"doc":"\/**\n * Retrieve all attributes from the shortcodes tag.\n *\n * The attributes list has the attribute name as the key and the value of the\n * attribute as the value in the key\/value pair. This allows for easier\n * retrieval of the attributes, since all attributes have to be known.\n *\n * @since 2.5\n *\n * @param string $text\n * @return array List of attributes and their value.\n *\/","file":"shortcodes.php","line":255,"missingDoc":false,"filters":[],"uses":{"preg_replace":[258],"strtolower":[262,264,266],"stripcslashes":[262,264,266,268,270],"strlen":[267],"ltrim":[273],"preg_match_all":[259]},"used_by":{"WP_oEmbed::discover":[134],"do_shortcode_tag":[232]}},"wp_remote_get":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the GET method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":74,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[75],"get":[76]},"used_by":{"WP_oEmbed::discover":[111],"WP_oEmbed::_fetch_with_format":[193],"discover_pingback_server_uri":[1677],"wp_remote_fopen":[762],"wp_version_check":[89]}},"WP_oEmbed::fetch":{"doc":"\/**\n * Connects to a oEmbed provider and returns the result.\n *\n * @param string $provider The URL to the oEmbed provider.\n * @param string $url The URL to the content that is desired to be embedded.\n * @param array $args Optional arguments. Usually passed from a shortcode.\n * @return bool|object False on failure, otherwise the result in the form of an object.\n *\/","file":"class-oembed.php","line":164,"missingDoc":false,"filters":["'oembed_fetch_url'"],"uses":{"wp_parse_args":[165],"wp_embed_defaults":[165],"add_query_arg":[167,168,169],"urlencode":[169],"_fetch_with_format":[174],"is_wp_error":[175,177],"get_error_code":[175]},"used_by":[]},"wp_embed_defaults":{"doc":"\/**\n * Create default array of embed parameters.\n *\n * The width defaults to the content width as specified by the theme. If the\n * theme does not specify a content width, then 500px is used.\n *\n * The default height is 1.5 times the width, or 1000px, whichever is smaller.\n *\n * The 'embed_defaults' filter can be used to adjust either of these values.\n *\n * @since 2.9.0\n *\n * @return array Default embed parameters.\n *\/","file":"media.php","line":972,"missingDoc":false,"filters":["'embed_defaults'"],"uses":{"min":[979],"ceil":[979],"compact":[981]},"used_by":{"WP_oEmbed::fetch":[165],"WP_Embed::shortcode":[144]}},"WP_oEmbed::_fetch_with_format":{"doc":"\/**\n * Fetches result from an oEmbed provider for a specific format and complete provider URL\n *\n * @since 3.0.0\n * @access private\n * @param string $provider_url_with_args URL to the provider with full arguments list (url, maxheight, etc.)\n * @param string $format Format to use\n * @return bool|object False on failure, otherwise the result in the form of an object.\n *\/","file":"class-oembed.php","line":191,"missingDoc":false,"filters":[],"uses":{"add_query_arg":[192],"wp_remote_get":[193],"wp_remote_retrieve_response_code":[194],"wp_remote_retrieve_body":[196]},"used_by":[]},"WP_oEmbed::_parse_json":{"doc":"\/**\n * Parses a json response body.\n *\n * @since 3.0.0\n * @access private\n *\/","file":"class-oembed.php","line":208,"missingDoc":false,"filters":[],"uses":{"json_decode":[209],"trim":[209],"is_object":[209]},"used_by":[]},"json_decode":{"doc":"","file":"compat.php","line":78,"missingDoc":true,"filters":[],"uses":{"is_a":[81],"decode":[86],"_json_decode_object_helper":[88]},"used_by":{"WP_oEmbed::_parse_json":[209],"WP_Customize_Manager::post_value":[313]}},"WP_oEmbed::_parse_xml":{"doc":"\/**\n * Parses an XML response body.\n *\n * @since 3.0.0\n * @access private\n *\/","file":"class-oembed.php","line":218,"missingDoc":false,"filters":[],"uses":{"function_exists":[219,228],"class_exists":[223],"libxml_use_internal_errors":[226,238],"libxml_disable_entity_loader":[229,236],"loadXML":[233],"is_null":[235],"simplexml_import_dom":[244],"is_object":[245]},"used_by":[]},"WP_oEmbed::data2html":{"doc":"\/**\n * Converts a data object from {@link WP_oEmbed::fetch()} and returns the HTML.\n *\n * @param object $data A data object result from an oEmbed provider.\n * @param string $url The URL to the content that is desired to be embedded.\n * @return bool|string False on error, otherwise the HTML needed to embed.\n *\/","file":"class-oembed.php","line":261,"missingDoc":false,"filters":["'oembed_dataparse'"],"uses":{"is_object":[262],"is_string":[271,274,280,285],"is_numeric":[271,271],"esc_url":[275,275,286],"esc_attr":[275,275,275],"esc_html":[286]},"used_by":[]},"WP_oEmbed::_strip_newlines":{"doc":"\/**\n * Strip any new lines from the HTML.\n *\n * @access private\n * @param string $html Existing HTML.\n * @param object $data Data object from WP_oEmbed::data2html()\n * @param string $url The original URL passed to oEmbed.\n * @return string Possibly modified $html\n *\/","file":"class-oembed.php","line":306,"missingDoc":false,"filters":[],"uses":{"str_replace":[308],"strpos":[307]},"used_by":[]},"_wp_oembed_get_object":{"doc":"\/**\n * Returns the initialized {@link WP_oEmbed} object\n *\n * @since 2.9.0\n * @access private\n *\n * @see WP_oEmbed\n * @uses WP_oEmbed\n *\n * @return WP_oEmbed object.\n *\/","file":"class-oembed.php","line":325,"missingDoc":false,"filters":[],"uses":{"is_null":[328]},"used_by":{"wp_oembed_get":[1020],"wp_oembed_add_provider":[1038],"wp_oembed_remove_provider":[1055]}},"PasswordHash::PasswordHash":{"doc":"","file":"class-phpass.php","line":42,"missingDoc":true,"filters":[],"uses":{"microtime":[52],"uniqid":[52],"rand":[52]},"used_by":[]},"PasswordHash::get_random_bytes":{"doc":"","file":"class-phpass.php","line":55,"missingDoc":true,"filters":[],"uses":{"fread":[60],"fclose":[61],"is_readable":[58],"fopen":[59],"md5":[68,70],"microtime":[68],"pack":[70],"substr":[72],"strlen":[64]},"used_by":[]},"PasswordHash::encode64":{"doc":"","file":"class-phpass.php","line":78,"missingDoc":true,"filters":[],"uses":{"ord":[83,86,91]},"used_by":[]},"PasswordHash::gensalt_private":{"doc":"","file":"class-phpass.php","line":101,"missingDoc":true,"filters":[],"uses":{"min":[104],"encode64":[106]},"used_by":[]},"PasswordHash::crypt_private":{"doc":"","file":"class-phpass.php","line":111,"missingDoc":true,"filters":[],"uses":{"substr":[114,117,128,150],"strpos":[122],"strlen":[129],"md5":[139,141,144,146],"pack":[144,146],"encode64":[151]},"used_by":[]},"PasswordHash::gensalt_extended":{"doc":"","file":"class-phpass.php","line":156,"missingDoc":true,"filters":[],"uses":{"min":[158],"encode64":[169]},"used_by":[]},"PasswordHash::gensalt_blowfish":{"doc":"","file":"class-phpass.php","line":174,"missingDoc":true,"filters":[],"uses":{"chr":[187,188],"ord":[187,188,193,201,206]},"used_by":[]},"PasswordHash::HashPassword":{"doc":"","file":"class-phpass.php","line":215,"missingDoc":true,"filters":[],"uses":{"get_random_bytes":[220,229,237],"crypt":[222,231],"gensalt_blowfish":[222],"strlen":[223,228,232,236,241],"gensalt_extended":[231],"crypt_private":[239],"gensalt_private":[240]},"used_by":[]},"PasswordHash::CheckPassword":{"doc":"","file":"class-phpass.php","line":250,"missingDoc":true,"filters":[],"uses":{"crypt_private":[252],"crypt":[254]},"used_by":[]},"PHPMailer::__construct":{"doc":"\/**\n * Constructor\n * @param boolean $exceptions Should we throw external exceptions?\n *\/","file":"class-phpmailer.php","line":372,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsHTML":{"doc":"\/**\n * Sets message type to HTML.\n * @param bool $ishtml\n * @return void\n *\/","file":"class-phpmailer.php","line":381,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsSMTP":{"doc":"\/**\n * Sets Mailer to send message using SMTP.\n * @return void\n *\/","file":"class-phpmailer.php","line":393,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsMail":{"doc":"\/**\n * Sets Mailer to send message using PHP mail() function.\n * @return void\n *\/","file":"class-phpmailer.php","line":401,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::IsSendmail":{"doc":"\/**\n * Sets Mailer to send message using the $Sendmail program.\n * @return void\n *\/","file":"class-phpmailer.php","line":409,"missingDoc":false,"filters":[],"uses":{"stristr":[410],"ini_get":[410]},"used_by":[]},"PHPMailer::IsQmail":{"doc":"\/**\n * Sets Mailer to send message using the qmail MTA.\n * @return void\n *\/","file":"class-phpmailer.php","line":420,"missingDoc":false,"filters":[],"uses":{"stristr":[421],"ini_get":[421]},"used_by":[]},"PHPMailer::AddAddress":{"doc":"\/**\n * Adds a \"To\" address.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":437,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[438]},"used_by":[]},"PHPMailer::AddCC":{"doc":"\/**\n * Adds a \"Cc\" address.\n * Note: this function works with the SMTP mailer on win32, not with the \"mail\" mailer.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":448,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[449]},"used_by":[]},"PHPMailer::AddBCC":{"doc":"\/**\n * Adds a \"Bcc\" address.\n * Note: this function works with the SMTP mailer on win32, not with the \"mail\" mailer.\n * @param string $address\n * @param string $name\n * @return boolean true on success, false if address already used\n *\/","file":"class-phpmailer.php","line":459,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[460]},"used_by":[]},"PHPMailer::AddReplyTo":{"doc":"\/**\n * Adds a \"Reply-to\" address.\n * @param string $address\n * @param string $name\n * @return boolean\n *\/","file":"class-phpmailer.php","line":469,"missingDoc":false,"filters":[],"uses":{"AddAnAddress":[470]},"used_by":[]},"PHPMailer::AddAnAddress":{"doc":"\/**\n * Adds an address to one of the recipient arrays\n * Addresses that have been added already return false, but do not throw exceptions\n * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo'\n * @param string $address The email address to send to\n * @param string $name\n * @return boolean true on success, false if address already used or invalid in some way\n * @access protected\n *\/","file":"class-phpmailer.php","line":482,"missingDoc":false,"filters":[],"uses":{"SetError":[484,496],"Lang":[484,489,496,498,501],"preg_match":[483],"trim":[493,494],"preg_replace":[494],"array_push":[507],"strtolower":[508,506,513,512],"array_key_exists":[512]},"used_by":[]},"PHPMailer::SetFrom":{"doc":"\/**\n * Set the From and FromName properties\n * @param string $address\n * @param string $name\n * @return boolean\n *\/","file":"class-phpmailer.php","line":526,"missingDoc":false,"filters":[],"uses":{"trim":[527,528],"preg_replace":[528],"SetError":[530],"Lang":[530,532,535],"AddAnAddress":[543]},"used_by":[]},"PHPMailer::ValidateAddress":{"doc":"\/**\n * Check that a string looks roughly like an email address should\n * Static so it can be used without instantiation\n * Tries to use PHP built-in validator in the filter extension (from PHP 5.2), falls back to a reasonably competent regex validator\n * Conforms approximately to RFC2822\n * @link http:\/\/www.hexillion.com\/samples\/#Regex Original pattern found here\n * @param string $address The email address to check\n * @return boolean\n * @static\n * @access public\n *\/","file":"class-phpmailer.php","line":563,"missingDoc":false,"filters":[],"uses":{"filter_var":[565],"preg_match":[571],"function_exists":[564]},"used_by":[]},"PHPMailer::Send":{"doc":"\/**\n * Creates message and assigns Mailer. If the message is\n * not sent successfully then it returns false. Use the ErrorInfo\n * variable to view description of the error.\n * @return bool\n *\/","file":"class-phpmailer.php","line":585,"missingDoc":false,"filters":[],"uses":{"PreSend":[587],"PostSend":[588],"SetError":[591],"getMessage":[591]},"used_by":[]},"PHPMailer::PreSend":{"doc":"","file":"class-phpmailer.php","line":599,"missingDoc":true,"filters":[],"uses":{"Lang":[603,615],"count":[602,602,602,624],"SetMessageType":[612],"CreateHeader":[618],"CreateBody":[619],"AddrAppend":[625],"HeaderLine":[627,629],"EncodeHeader":[629,637],"SecureHeader":[629,637],"trim":[629],"DKIM_Add":[637],"str_replace":[638],"sprintf":[641],"SetError":[645],"getMessage":[645]},"used_by":[]},"PHPMailer::PostSend":{"doc":"","file":"class-phpmailer.php","line":653,"missingDoc":true,"filters":[],"uses":{"SendmailSend":[658],"SmtpSend":[660],"MailSend":[662,664],"SetError":[668],"getMessage":[668,673]},"used_by":[]},"PHPMailer::SendmailSend":{"doc":"\/**\n * Sends mail using the $Sendmail program.\n * @param string $header The message headers\n * @param string $body The message body\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":686,"missingDoc":false,"filters":[],"uses":{"sprintf":[688,690],"escapeshellcmd":[688,690],"escapeshellarg":[688],"Lang":[695,705,710,719],"popen":[694,709],"fputs":[697,698,699,712,713],"pclose":[700,714],"doCallback":[703,717]},"used_by":[]},"PHPMailer::MailSend":{"doc":"\/**\n * Sends mail using the PHP mail() function.\n * @param string $header The message headers\n * @param string $body The message body\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":732,"missingDoc":false,"filters":[],"uses":{"AddrFormat":[735],"implode":[737],"sprintf":[742],"ini_get":[745,744],"ini_set":[746,776],"mail":[749,755,763,769],"EncodeHeader":[749,755,763,769],"SecureHeader":[749,755,763,769],"doCallback":[752,758,766,772],"count":[747,761],"Lang":[779]},"used_by":[]},"PHPMailer::SmtpSend":{"doc":"\/**\n * Sends mail via SMTP using PhpSMTP\n * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.\n * @param string $header The message headers\n * @param string $body The message body\n * @uses SMTP\n * @access protected\n * @return bool\n *\/","file":"class-phpmailer.php","line":793,"missingDoc":false,"filters":[],"uses":{"Lang":[798,802,846,849],"SmtpConnect":[797],"Mail":[801],"doCallback":[811,815,823,827,835,839],"Recipient":[807,819,831],"implode":[845],"count":[844],"Data":[848],"Reset":[852]},"used_by":[]},"PHPMailer::SmtpConnect":{"doc":"\/**\n * Initiates a connection to an SMTP server.\n * Returns false if the operation failed.\n * @uses SMTP\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":864,"missingDoc":false,"filters":[],"uses":{"is_null":[865],"explode":[870],"Connected":[872],"count":[876],"preg_match":[878],"ServerHostname":[891],"Hello":[892,900],"Lang":[896,906,912],"StartTLS":[895],"Authenticate":[905],"Connect":[889],"Reset":[916]},"used_by":[]},"PHPMailer::SmtpClose":{"doc":"\/**\n * Closes the active SMTP session if one exists.\n * @return void\n *\/","file":"class-phpmailer.php","line":928,"missingDoc":false,"filters":[],"uses":{"Quit":[931],"Close":[932],"Connected":[930],"is_null":[929]},"used_by":[]},"PHPMailer::SetLanguage":{"doc":"\/**\n * Sets the language for all class error messages.\n * Returns false if it cannot load the language file. The default language is English.\n * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: \"br\")\n * @param string $lang_path Path to the language file directory\n * @access public\n *\/","file":"class-phpmailer.php","line":944,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::GetTranslations":{"doc":"\/**\n * Return the current array of language strings\n * @return array\n *\/","file":"class-phpmailer.php","line":978,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AddrAppend":{"doc":"\/**\n * Creates recipient headers.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":991,"missingDoc":false,"filters":[],"uses":{"AddrFormat":[995],"implode":[997]},"used_by":[]},"PHPMailer::AddrFormat":{"doc":"\/**\n * Formats an address correctly.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1008,"missingDoc":false,"filters":[],"uses":{"SecureHeader":[1010,1012,1012],"EncodeHeader":[1012]},"used_by":[]},"PHPMailer::WrapText":{"doc":"\/**\n * Wraps message for use with mailers that do not\n * automatically perform wrapping and for quoted-printable.\n * Original written by philippe.\n * @param string $message The message to wrap\n * @param integer $length The line length to wrap to\n * @param boolean $qp_mode Whether to run in Quoted-Printable mode\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1026,"missingDoc":false,"filters":[],"uses":{"sprintf":[1027,1059,1078],"strtolower":[1030],"FixEOL":[1032],"substr":[1034,1033,1051,1053,1056,1057,1069,1071,1074,1075],"explode":[1037,1040],"count":[1039,1042],"strlen":[1045,1065,1077,1087,1044],"UTF8CharBoundary":[1050,1068]},"used_by":[]},"PHPMailer::UTF8CharBoundary":{"doc":"\/**\n * Finds last character boundary prior to maxLength in a utf-8\n * quoted (printable) encoded string.\n * Original written by Colin Brown.\n * @access public\n * @param string $encodedText utf-8 QP text\n * @param int $maxLength find last character boundary prior to this length\n * @return int\n *\/","file":"class-phpmailer.php","line":1108,"missingDoc":false,"filters":[],"uses":{"substr":[1112,1117],"strpos":[1113],"hexdec":[1118]},"used_by":[]},"PHPMailer::SetWordWrap":{"doc":"\/**\n * Set the body wrapping.\n * @access public\n * @return void\n *\/","file":"class-phpmailer.php","line":1146,"missingDoc":false,"filters":[],"uses":{"WrapText":[1156,1159]},"used_by":[]},"PHPMailer::CreateHeader":{"doc":"\/**\n * Assembles message header.\n * @access public\n * @return string The assembled header\n *\/","file":"class-phpmailer.php","line":1169,"missingDoc":false,"filters":[],"uses":{"md5":[1173],"uniqid":[1173],"time":[1173],"HeaderLine":[1178,1180,1182,1195,1221,1225,1229,1231,1233,1237,1242,1245],"trim":[1180,1182,1201,1237,1242,1242],"AddrFormat":[1189],"AddrAppend":[1193,1203,1207,1212,1216],"count":[1194,1192,1206,1211,1215,1241],"EncodeHeader":[1221,1242],"SecureHeader":[1221],"sprintf":[1227],"ServerHostname":[1227],"GetMailMIME":[1246]},"used_by":[]},"PHPMailer::GetMailMIME":{"doc":"\/**\n * Returns the message MIME.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1257,"missingDoc":false,"filters":[],"uses":{"HeaderLine":[1261,1265,1272,1277],"TextLine":[1262,1266,1273,1278]},"used_by":[]},"PHPMailer::GetSentMIMEMessage":{"doc":"\/**\n * Returns the MIME message (headers and body). Only really valid post PreSend().\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1294,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::CreateBody":{"doc":"\/**\n * Assembles the message body. Returns an empty string on failure.\n * @access public\n * @return string The assembled message body\n *\/","file":"class-phpmailer.php","line":1304,"missingDoc":false,"filters":[],"uses":{"GetMailMIME":[1308],"SetWordWrap":[1311],"EncodeString":[1315,1319,1325,1335,1343,1346,1352,1359,1371,1374,1386,1393],"GetBoundary":[1318,1324,1334,1342,1345,1351,1358,1370,1373,1385,1392],"AttachAll":[1321,1327,1337,1339,1361,1378,1395,1399],"TextLine":[1330,1332,1354,1356,1366,1368,1381,1383,1388,1390],"HeaderLine":[1331,1355,1367,1382,1389],"EndBoundary":[1348,1363,1376,1397],"tempnam":[1407,1409],"file_put_contents":[1408],"unlink":[1411,1413,1415,1416],"file_get_contents":[1412],"Lang":[1417],"openssl_error_string":[1417],"openssl_pkcs7_sign":[1410],"IsError":[1403]},"used_by":[]},"unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Base.php","line":113,"missingDoc":false,"filters":[],"uses":[],"used_by":{"PHPMailer::CreateBody":[1411,1413,1415,1416],"SimplePie::fetch_data":[1470,1492,1540],"Snoopy::_httpsrequest":[1081],"win_is_writable":[1487],"PSpellShell::checkWords":[32],"PSpellShell::getSuggestions":[76],"Moxiecode_Logger::_logMsg":[247],"wp_delete_attachment":[4130,4137,4144,4151],"SimplePie_Cache_File::unlink":[169],"Text_Diff_Engine_shell::diff":[51,52]}},"PHPMailer::GetBoundary":{"doc":"\/**\n * Returns the start of a message boundary.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1435,"missingDoc":false,"filters":[],"uses":{"TextLine":[1446],"sprintf":[1447],"HeaderLine":[1449]},"used_by":[]},"PHPMailer::EndBoundary":{"doc":"\/**\n * Returns the end of a message boundary.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1460,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::SetMessageType":{"doc":"\/**\n * Sets the message type.\n * @access protected\n * @return void\n *\/","file":"class-phpmailer.php","line":1469,"missingDoc":false,"filters":[],"uses":{"AlternativeExists":[1471],"InlineImageExists":[1472],"AttachmentExists":[1473],"implode":[1474]},"used_by":[]},"PHPMailer::HeaderLine":{"doc":"\/**\n * Returns a formatted header line.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1483,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::TextLine":{"doc":"\/**\n * Returns a formatted mail line.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1492,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AddAttachment":{"doc":"\/**\n * Adds an attachment from a path on the filesystem.\n * Returns false if the file could not be found\n * or accessed.\n * @param string $path Path to the attachment.\n * @param string $name Overrides the attachment name.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return bool\n *\/","file":"class-phpmailer.php","line":1510,"missingDoc":false,"filters":[],"uses":{"Lang":[1513],"is_file":[1512],"basename":[1515],"SetError":[1532],"getMessage":[1532,1537],"getCode":[1539]},"used_by":[]},"PHPMailer::GetAttachments":{"doc":"\/**\n * Return the current array of attachments\n * @return array\n *\/","file":"class-phpmailer.php","line":1550,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AttachAll":{"doc":"\/**\n * Attaches all fs, string, and binary attachments to the message.\n * Returns an empty string on failure.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1560,"missingDoc":false,"filters":[],"uses":{"md5":[1578],"serialize":[1578],"in_array":[1579],"sprintf":[1590,1591,1592,1595,1598,1617],"EncodeHeader":[1591,1598],"SecureHeader":[1591,1598],"EncodeString":[1602],"IsError":[1603,1609],"EncodeFile":[1608],"implode":[1619]},"used_by":[]},"PHPMailer::EncodeFile":{"doc":"\/**\n * Encodes attachment in requested format.\n * Returns an empty string on failure.\n * @param string $path The full path to the file\n * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n * @see EncodeFile()\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":1631,"missingDoc":false,"filters":[],"uses":{"Lang":[1634],"is_readable":[1633],"function_exists":[1636],"get_magic_quotes_runtime":[1641],"set_magic_quotes_runtime":[1644,1653],"ini_set":[1646,1655],"version_compare":[1643,1652],"file_get_contents":[1649],"EncodeString":[1650],"SetError":[1660],"getMessage":[1660]},"used_by":[]},"PHPMailer::EncodeFile::get_magic_quotes":{"doc":"","file":"class-phpmailer.php","line":1637,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PHPMailer::EncodeString":{"doc":"\/**\n * Encodes string to requested format.\n * Returns an empty string on failure.\n * @param string $str The text to encode\n * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1673,"missingDoc":false,"filters":[],"uses":{"strtolower":[1675],"chunk_split":[1677],"base64_encode":[1677],"FixEOL":[1681],"substr":[1683],"strlen":[1683],"EncodeQP":[1690],"SetError":[1693],"Lang":[1693]},"used_by":[]},"PHPMailer::EncodeHeader":{"doc":"\/**\n * Encode a header string to best (shortest) of Q, B, quoted or none.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1704,"missingDoc":false,"filters":[],"uses":{"strtolower":[1707],"addcslashes":[1711],"preg_match":[1712,1709],"preg_match_all":[1718,1721,1725],"strlen":[1733,1735],"Base64EncodeWrapMB":[1740],"base64_encode":[1742],"trim":[1744,1750,1754],"chunk_split":[1744],"function_exists":[1737],"HasMultiBytes":[1737],"EncodeQ":[1748],"WrapText":[1749],"str_replace":[1750,1754],"preg_replace":[1753]},"used_by":[]},"PHPMailer::HasMultiBytes":{"doc":"\/**\n * Checks if a string contains multibyte characters.\n * @access public\n * @param string $str multi-byte text to wrap encode\n * @return bool\n *\/","file":"class-phpmailer.php","line":1765,"missingDoc":false,"filters":[],"uses":{"strlen":[1767],"mb_strlen":[1767],"function_exists":[1766]},"used_by":[]},"PHPMailer::Base64EncodeWrapMB":{"doc":"\/**\n * Correctly encodes and wraps long multibyte strings for mail headers\n * without breaking lines within a character.\n * Adapted from a function by paravoid at http:\/\/uk.php.net\/manual\/en\/function.mb-encode-mimeheader.php\n * @access public\n * @param string $str multi-byte text to wrap encode\n * @return string\n *\/","file":"class-phpmailer.php","line":1781,"missingDoc":false,"filters":[],"uses":{"mb_strlen":[1786],"strlen":[1788,1788,1790,1803,1809],"floor":[1792],"mb_substr":[1799],"base64_encode":[1800],"substr":[1809]},"used_by":[]},"mb_substr":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":123,"missingDoc":true,"filters":[],"uses":{"_mb_substr":[18],"strlen":[124],"substr":[141,157]},"used_by":{"PHPMailer::Base64EncodeWrapMB":[1799],"wp_html_excerpt":[3095],"GoogleSpell::checkWords":[24],"POMO_Reader::substr":[64]}},"PHPMailer::EncodeQPphp":{"doc":"\/**\n * Encode string to quoted-printable.\n * Only uses standard PHP, slow, but will always work\n * @access public\n * @param string $string the text to encode\n * @param integer $line_max Number of chars allowed on a line before wrapping\n * @return string\n *\/","file":"class-phpmailer.php","line":1821,"missingDoc":false,"filters":[],"uses":{"preg_split":[1823],"each":[1827],"strlen":[1828,1847,1847],"substr":[1831],"ord":[1832],"floor":[1843,1844]},"used_by":[]},"PHPMailer::EncodeQP":{"doc":"\/**\n * Encode string to RFC2045 (6.7) quoted-printable format\n * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version\n * Also results in same content as you started with after decoding\n * @see EncodeQPphp()\n * @access public\n * @param string $string the text to encode\n * @param integer $line_max Number of chars allowed on a line before wrapping\n * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function\n * @return string\n * @author Marcus Bointon\n *\/","file":"class-phpmailer.php","line":1874,"missingDoc":false,"filters":[],"uses":{"quoted_printable_encode":[1876],"function_exists":[1875],"stream_get_filters":[1878],"EncodeQPphp":[1880],"in_array":[1879],"fopen":[1882],"preg_replace":[1883,1890],"stream_filter_append":[1885],"fputs":[1886],"rewind":[1887],"stream_get_contents":[1888],"stream_filter_remove":[1889],"fclose":[1891]},"used_by":[]},"PHPMailer::EncodeQ":{"doc":"\/**\n * Encode string to q encoding.\n * @link http:\/\/tools.ietf.org\/html\/rfc2047\n * @param string $str the text to encode\n * @param string $position Where the text is going to be used, see the RFC for what that means\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":1903,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1905,1909,1912,1917],"strtolower":[1907],"str_replace":[1923]},"used_by":[]},"PHPMailer::AddStringAttachment":{"doc":"\/**\n * Adds a string or binary attachment (non-filesystem) to the list.\n * This method can be used to attach ascii or binary data,\n * such as a BLOB record from a database.\n * @param string $string String attachment data.\n * @param string $filename Name of the attachment.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return void\n *\/","file":"class-phpmailer.php","line":1938,"missingDoc":false,"filters":[],"uses":{"basename":[1943]},"used_by":[]},"PHPMailer::AddEmbeddedImage":{"doc":"\/**\n * Adds an embedded attachment. This can include images, sounds, and\n * just about any other document. Make sure to set the $type to an\n * image type. For JPEG images use \"image\/jpeg\" and for GIF images\n * use \"image\/gif\".\n * @param string $path Path to the attachment.\n * @param string $cid Content ID of the attachment. Use this to identify\n * the Id for accessing the image in an HTML form.\n * @param string $name Overrides the attachment name.\n * @param string $encoding File encoding (see $Encoding).\n * @param string $type File extension (MIME) type.\n * @return bool\n *\/","file":"class-phpmailer.php","line":1965,"missingDoc":false,"filters":[],"uses":{"SetError":[1968],"Lang":[1968],"is_file":[1967],"basename":[1972]},"used_by":[]},"PHPMailer::AddStringEmbeddedImage":{"doc":"","file":"class-phpmailer.php","line":1992,"missingDoc":true,"filters":[],"uses":{"basename":[1997]},"used_by":[]},"PHPMailer::InlineImageExists":{"doc":"\/**\n * Returns true if an inline attachment is present.\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":2011,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AttachmentExists":{"doc":"","file":"class-phpmailer.php","line":2020,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PHPMailer::AlternativeExists":{"doc":"","file":"class-phpmailer.php","line":2029,"missingDoc":true,"filters":[],"uses":{"strlen":[2030]},"used_by":[]},"PHPMailer::ClearAddresses":{"doc":"\/**\n * Clears all recipients assigned in the TO array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2041,"missingDoc":false,"filters":[],"uses":{"strtolower":[2043]},"used_by":[]},"PHPMailer::ClearCCs":{"doc":"\/**\n * Clears all recipients assigned in the CC array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2052,"missingDoc":false,"filters":[],"uses":{"strtolower":[2054]},"used_by":[]},"PHPMailer::ClearBCCs":{"doc":"\/**\n * Clears all recipients assigned in the BCC array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2063,"missingDoc":false,"filters":[],"uses":{"strtolower":[2065]},"used_by":[]},"PHPMailer::ClearReplyTos":{"doc":"\/**\n * Clears all recipients assigned in the ReplyTo array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2074,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearAllRecipients":{"doc":"\/**\n * Clears all recipients assigned in the TO, CC and BCC\n * array. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2083,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearAttachments":{"doc":"\/**\n * Clears all previously set filesystem, string, and binary\n * attachments. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2095,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::ClearCustomHeaders":{"doc":"\/**\n * Clears all custom headers. Returns void.\n * @return void\n *\/","file":"class-phpmailer.php","line":2103,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::SetError":{"doc":"\/**\n * Adds the error message to the error container.\n * @access protected\n * @return void\n *\/","file":"class-phpmailer.php","line":2116,"missingDoc":false,"filters":[],"uses":{"getError":[2119],"Lang":[2121],"array_key_exists":[2120],"is_null":[2118]},"used_by":[]},"PHPMailer::RFCDate":{"doc":"\/**\n * Returns the proper RFC 822 formatted date.\n * @access public\n * @return string\n * @static\n *\/","file":"class-phpmailer.php","line":2133,"missingDoc":false,"filters":[],"uses":{"date":[2134,2138],"abs":[2136],"sprintf":[2138]},"used_by":[]},"PHPMailer::ServerHostname":{"doc":"\/**\n * Returns the server hostname or 'localhost.localdomain' if unknown.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":2148,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::Lang":{"doc":"\/**\n * Returns a message in the appropriate language.\n * @access protected\n * @return string\n *\/","file":"class-phpmailer.php","line":2165,"missingDoc":false,"filters":[],"uses":{"SetLanguage":[2167],"count":[2166]},"used_by":[]},"PHPMailer::IsError":{"doc":"\/**\n * Returns true if an error occurred.\n * @access public\n * @return bool\n *\/","file":"class-phpmailer.php","line":2182,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::FixEOL":{"doc":"\/**\n * Changes every end of line from CR or LF to CRLF.\n * @access public\n * @return string\n *\/","file":"class-phpmailer.php","line":2191,"missingDoc":false,"filters":[],"uses":{"str_replace":[2192,2193,2194]},"used_by":[]},"PHPMailer::AddCustomHeader":{"doc":"\/**\n * Adds a custom header.\n * @access public\n * @return void\n *\/","file":"class-phpmailer.php","line":2203,"missingDoc":false,"filters":[],"uses":{"explode":[2204]},"used_by":[]},"PHPMailer::MsgHTML":{"doc":"\/**\n * Evaluates the message and returns modifications for inline images and backgrounds\n * @access public\n * @return $message\n *\/","file":"class-phpmailer.php","line":2212,"missingDoc":false,"filters":[],"uses":{"preg_match_all":[2213],"basename":[2218],"dirname":[2219],"md5":[2221,2226],"pathinfo":[2222],"strlen":[2224,2225],"substr":[2224,2225],"preg_replace":[2227,2235],"preg_quote":[2227],"AddEmbeddedImage":[2226],"preg_match":[2217],"IsHTML":[2232],"trim":[2235],"strip_tags":[2235],"html_entity_decode":[2237]},"used_by":[]},"PHPMailer::_mime_types":{"doc":"\/**\n * Gets the MIME type of the embedded or inline image\n * @param string File extension\n * @access public\n * @return string MIME type of ext\n * @static\n *\/","file":"class-phpmailer.php","line":2253,"missingDoc":false,"filters":[],"uses":{"strtolower":[2343,2343]},"used_by":[]},"PHPMailer::set":{"doc":"\/**\n * Set (or reset) Class Objects (variables)\n *\n * Usage Example:\n * $page->set('X-Priority', '3');\n *\n * @access public\n * @param string $name Parameter Name\n * @param mixed $value Parameter Value\n * NOTE: will not work with arrays, there are no arrays to set\/reset\n * @todo Should this not be using __set() magic function?\n *\/","file":"class-phpmailer.php","line":2358,"missingDoc":false,"filters":[],"uses":{"Lang":[2363],"SetError":[2366],"getMessage":[2366],"getCode":[2367]},"used_by":[]},"PHPMailer::SecureHeader":{"doc":"\/**\n * Strips newlines to prevent header injection.\n * @access public\n * @param string $str String\n * @return string\n *\/","file":"class-phpmailer.php","line":2380,"missingDoc":false,"filters":[],"uses":{"str_replace":[2381,2382],"trim":[2383]},"used_by":[]},"PHPMailer::Sign":{"doc":"\/**\n * Set the private key file and password to sign the message.\n *\n * @access public\n * @param string $key_filename Parameter File Name\n * @param string $key_pass Password for private key\n *\/","file":"class-phpmailer.php","line":2393,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PHPMailer::DKIM_QP":{"doc":"\/**\n * Set the private key file and password to sign the message.\n *\n * @access public\n * @param string $key_filename Parameter File Name\n * @param string $key_pass Password for private key\n *\/","file":"class-phpmailer.php","line":2406,"missingDoc":false,"filters":[],"uses":{"strlen":[2409],"ord":[2410],"sprintf":[2414]},"used_by":[]},"PHPMailer::DKIM_Sign":{"doc":"\/**\n * Generate DKIM signature\n *\n * @access public\n * @param string $s Header\n *\/","file":"class-phpmailer.php","line":2426,"missingDoc":false,"filters":[],"uses":{"file_get_contents":[2427],"openssl_pkey_get_private":[2429],"base64_encode":[2434],"openssl_sign":[2433]},"used_by":[]},"PHPMailer::DKIM_HeaderC":{"doc":"\/**\n * Generate DKIM Canonicalization Header\n *\n * @access public\n * @param string $s Header\n *\/","file":"class-phpmailer.php","line":2444,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2445,2450],"explode":[2446,2448],"strtolower":[2449],"trim":[2451],"implode":[2453]},"used_by":[]},"PHPMailer::DKIM_BodyC":{"doc":"\/**\n * Generate DKIM Canonicalization Body\n *\n * @access public\n * @param string $body Message Body\n *\/","file":"class-phpmailer.php","line":2463,"missingDoc":false,"filters":[],"uses":{"str_replace":[2466,2467],"substr":[2469,2470],"strlen":[2469,2470]},"used_by":[]},"PHPMailer::DKIM_Add":{"doc":"\/**\n * Create the DKIM header, body, as new header\n *\n * @access public\n * @param string $headers_line Header lines\n * @param string $subject Subject\n * @param string $body Body\n *\/","file":"class-phpmailer.php","line":2483,"missingDoc":false,"filters":[],"uses":{"time":[2487],"explode":[2489],"strpos":[2493,2491],"str_replace":[2497,2498,2499],"DKIM_QP":[2497,2498,2499],"DKIM_BodyC":[2500],"strlen":[2501],"base64_encode":[2502],"pack":[2502],"sha1":[2502],"DKIM_HeaderC":[2513],"DKIM_Sign":[2514]},"used_by":[]},"PHPMailer::doCallback":{"doc":"","file":"class-phpmailer.php","line":2518,"missingDoc":true,"filters":[],"uses":{"call_user_func_array":[2521],"function_exists":[2519]},"used_by":[]},"phpmailerException::errorMessage":{"doc":"","file":"class-phpmailer.php","line":2527,"missingDoc":true,"filters":[],"uses":{"getMessage":[2528]},"used_by":[]},"POP3::POP3":{"doc":"","file":"class-pop3.php","line":47,"missingDoc":true,"filters":[],"uses":{"settype":[48,57],"set_time_limit":[60],"ini_get":[59]},"used_by":[]},"POP3::update_timer":{"doc":"","file":"class-pop3.php","line":65,"missingDoc":true,"filters":[],"uses":{"set_time_limit":[67],"ini_get":[66]},"used_by":[]},"POP3::connect":{"doc":"","file":"class-pop3.php","line":71,"missingDoc":true,"filters":[],"uses":{"_":[82,90,102],"fsockopen":[87],"socket_set_blocking":[95],"update_timer":[96],"fgets":[97],"strip_clf":[98],"error_log":[100],"is_ok":[101],"parse_banner":[107]},"used_by":[]},"_":{"doc":"","file":"compat.php","line":11,"missingDoc":true,"filters":[],"uses":[],"used_by":{"POP3::connect":[82,90,102],"POP3::user":[115,118,123],"POP3::pass":[135,138,143],"POP3::apop":[162,168,171,176,176,186,186],"POP3::login":[205],"POP3::top":[230,246],"POP3::pop_list":[272,300,311,323],"POP3::get":[346,359],"POP3::last":[386,393],"POP3::reset":[416,426],"POP3::send_cmd":[450,456],"POP3::quit":[476],"POP3::uidl":[513,525,548],"POP3::delete":[578,583,589]}},"POP3::user":{"doc":"","file":"class-pop3.php","line":111,"missingDoc":true,"filters":[],"uses":{"_":[115,118,123],"send_cmd":[121],"is_ok":[122]},"used_by":[]},"POP3::pass":{"doc":"","file":"class-pop3.php","line":130,"missingDoc":true,"filters":[],"uses":{"_":[135,138,143],"send_cmd":[141],"quit":[144],"last":[148],"is_ok":[142]},"used_by":[]},"POP3::apop":{"doc":"","file":"class-pop3.php","line":155,"missingDoc":true,"filters":[],"uses":{"_":[162,168,171,176,176,186,186],"login":[165,177,187],"md5":[182],"send_cmd":[184],"last":[191],"is_ok":[185]},"used_by":[]},"POP3::login":{"doc":"","file":"class-pop3.php","line":199,"missingDoc":true,"filters":[],"uses":{"_":[205],"pass":[213],"user":[209]},"used_by":[]},"POP3::top":{"doc":"","file":"class-pop3.php","line":223,"missingDoc":true,"filters":[],"uses":{"_":[230,246],"update_timer":[233],"fwrite":[238],"fgets":[239,253,258],"strip_clf":[240],"error_log":[242],"is_ok":[244],"preg_match":[254]},"used_by":[]},"POP3::pop_list":{"doc":"","file":"class-pop3.php","line":265,"missingDoc":true,"filters":[],"uses":{"_":[272,300,311,323],"update_timer":[287],"fwrite":[292],"fgets":[293,319],"strip_clf":[294,310,320],"error_log":[296],"is_ok":[298,308],"preg_split":[303,326],"send_cmd":[307],"strpos":[321],"settype":[327]},"used_by":[]},"POP3::get":{"doc":"","file":"class-pop3.php","line":340,"missingDoc":true,"filters":[],"uses":{"_":[346,359],"update_timer":[350],"send_cmd":[355],"is_ok":[357],"fgets":[366,372],"preg_match":[367],"substr":[369]},"used_by":[]},"POP3::last":{"doc":"","file":"class-pop3.php","line":378,"missingDoc":true,"filters":[],"uses":{"_":[386,393],"send_cmd":[390],"is_ok":[391],"preg_split":[397],"settype":[400,401]},"used_by":[]},"POP3::reset":{"doc":"","file":"class-pop3.php","line":409,"missingDoc":true,"filters":[],"uses":{"_":[416,426],"send_cmd":[419],"error_log":[427],"is_ok":[420],"quit":[429]},"used_by":[]},"POP3::send_cmd":{"doc":"","file":"class-pop3.php","line":433,"missingDoc":true,"filters":[],"uses":{"_":[450,456],"update_timer":[462],"fwrite":[463],"fgets":[464],"strip_clf":[465],"error_log":[466]},"used_by":[]},"POP3::quit":{"doc":"","file":"class-pop3.php","line":470,"missingDoc":true,"filters":[],"uses":{"_":[476],"fwrite":[481],"fgets":[482],"strip_clf":[483],"error_log":[484],"fclose":[485]},"used_by":[]},"POP3::popstat":{"doc":"","file":"class-pop3.php","line":490,"missingDoc":true,"filters":[],"uses":{"last":[494]},"used_by":[]},"POP3::uidl":{"doc":"","file":"class-pop3.php","line":505,"missingDoc":true,"filters":[],"uses":{"_":[513,525,548],"send_cmd":[522],"is_ok":[523,546],"preg_split":[528,556],"update_timer":[531],"fwrite":[542],"fgets":[543,554,566],"strip_clf":[544,557],"error_log":[545],"preg_match":[555]},"used_by":[]},"POP3::delete":{"doc":"","file":"class-pop3.php","line":572,"missingDoc":true,"filters":[],"uses":{"_":[578,583,589],"send_cmd":[586],"is_ok":[587]},"used_by":[]},"POP3::is_ok":{"doc":"","file":"class-pop3.php","line":599,"missingDoc":true,"filters":[],"uses":{"stripos":[605]},"used_by":[]},"POP3::strip_clf":{"doc":"","file":"class-pop3.php","line":608,"missingDoc":true,"filters":[],"uses":{"str_replace":[614]},"used_by":[]},"POP3::parse_banner":{"doc":"","file":"class-pop3.php","line":619,"missingDoc":true,"filters":[],"uses":{"strlen":[622],"substr":[625],"strip_clf":[641]},"used_by":[]},"wp_simplepie_autoload":{"doc":"\/**\n * WordPress autoloader for SimplePie.\n *\n * @since 3.5.0\n *\/","file":"class-simplepie.php","line":24,"missingDoc":false,"filters":[],"uses":{"strpos":[25],"str_replace":[28]},"used_by":[]},"SimplePie::__construct":{"doc":"\/**\n * The SimplePie class contains feed level data and options\n *\n * To use SimplePie, create the SimplePie object with no parameters. You can\n * then set configuration options using the provided methods. After setting\n * them, you must initialise the feed using $feed->init(). At that point the\n * object's methods and properties will be available to you.\n *\n * Previously, it was possible to pass in the feed URL along with cache\n * options directly into the constructor. This has been removed as of 1.3 as\n * it caused a lot of confusion.\n *\n * @since 1.0 Preview Release\n *\/","file":"class-simplepie.php","line":685,"missingDoc":false,"filters":[],"uses":{"trigger_error":[689,700],"version_compare":[687],"defined":[699],"func_get_args":[702],"count":[703],"set_cache_duration":[705],"set_cache_location":[707],"set_feed_url":[709],"init":[710],"func_num_args":[697]},"used_by":[]},"SimplePie::__toString":{"doc":"\/**\n * Used for converting object to a string\n *\/","file":"class-simplepie.php","line":718,"missingDoc":false,"filters":[],"uses":{"md5":[720],"serialize":[720]},"used_by":[]},"SimplePie::__destruct":{"doc":"\/**\n * Remove items that link back to this before destroying this object\n *\/","file":"class-simplepie.php","line":726,"missingDoc":false,"filters":[],"uses":{"__destruct":[734,742],"version_compare":[728],"gc_enabled":[728],"ini_get":[728]},"used_by":[]},"SimplePie::force_feed":{"doc":"\/**\n * Force the given data\/URL to be treated as a feed\n *\n * This tells SimplePie to ignore the content-type provided by the server.\n * Be careful when using this option, as it will also disable autodiscovery.\n *\n * @since 1.1\n * @param bool $enable Force the given data\/URL to be treated as a feed\n *\/","file":"class-simplepie.php","line":758,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_feed_url":{"doc":"\/**\n * Set the URL of the feed you want to parse\n *\n * This allows you to enter the URL of the feed you want to parse, or the\n * website you want to try to use auto-discovery on. This takes priority\n * over any set raw data.\n *\n * You can set multiple feeds to mash together by passing an array instead\n * of a string for the $url. Remember that with each additional feed comes\n * additional processing and resources.\n *\n * @since 1.0 Preview Release\n * @see set_raw_data()\n * @param string|array $url This is the URL (or array of URLs) that you want to parse.\n *\/","file":"class-simplepie.php","line":778,"missingDoc":false,"filters":[],"uses":{"call":[785,790],"is_array":[781]},"used_by":[]},"SimplePie::set_file":{"doc":"\/**\n * Set an instance of {@see SimplePie_File} to use as a feed\n *\n * @param SimplePie_File &$file\n * @return bool True on success, false on failure\n *\/","file":"class-simplepie.php","line":800,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_raw_data":{"doc":"\/**\n * Set the raw XML data to parse\n *\n * Allows you to use a string of RSS\/Atom data instead of a remote feed.\n *\n * If you have a feed available as a string in PHP, you can tell SimplePie\n * to parse that data string instead of a remote feed. Any set feed URL\n * takes precedence.\n *\n * @since 1.0 Beta 3\n * @param string $data RSS or Atom data as a string.\n * @see set_feed_url()\n *\/","file":"class-simplepie.php","line":824,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_timeout":{"doc":"\/**\n * Set the the default timeout for fetching remote feeds\n *\n * This allows you to change the maximum time the feed's server to respond\n * and send the feed back.\n *\n * @since 1.0 Beta 3\n * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.\n *\/","file":"class-simplepie.php","line":838,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::force_fsockopen":{"doc":"\/**\n * Force SimplePie to use fsockopen() instead of cURL\n *\n * @since 1.0 Beta 3\n * @param bool $enable Force fsockopen() to be used\n *\/","file":"class-simplepie.php","line":849,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::enable_cache":{"doc":"\/**\n * Enable\/disable caching in SimplePie.\n *\n * This option allows you to disable caching all-together in SimplePie.\n * However, disabling the cache can lead to longer load times.\n *\n * @since 1.0 Preview Release\n * @param bool $enable Enable caching\n *\/","file":"class-simplepie.php","line":863,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_duration":{"doc":"\/**\n * Set the length of time (in seconds) that the contents of a feed will be\n * cached\n *\n * @param int $seconds The feed content cache duration\n *\/","file":"class-simplepie.php","line":874,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_autodiscovery_cache_duration":{"doc":"\/**\n * Set the length of time (in seconds) that the autodiscovered feed URL will\n * be cached\n *\n * @param int $seconds The autodiscovered feed URL cache duration.\n *\/","file":"class-simplepie.php","line":885,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_location":{"doc":"\/**\n * Set the file system location where the cached files should be stored\n *\n * @param string $location The file system location.\n *\/","file":"class-simplepie.php","line":895,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::enable_order_by_date":{"doc":"\/**\n * Set whether feed items should be sorted into reverse chronological order\n *\n * @param bool $enable Sort as reverse chronological order.\n *\/","file":"class-simplepie.php","line":905,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_input_encoding":{"doc":"\/**\n * Set the character encoding used to parse the feed\n *\n * This overrides the encoding reported by the feed, however it will fall\n * back to the normal encoding detection if the override fails\n *\n * @param string $encoding Character encoding\n *\/","file":"class-simplepie.php","line":918,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_autodiscovery_level":{"doc":"\/**\n * Set how much feed autodiscovery to do\n *\n * @see SIMPLEPIE_LOCATOR_NONE\n * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY\n * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION\n * @see SIMPLEPIE_LOCATOR_LOCAL_BODY\n * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION\n * @see SIMPLEPIE_LOCATOR_REMOTE_BODY\n * @see SIMPLEPIE_LOCATOR_ALL\n * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)\n *\/","file":"class-simplepie.php","line":942,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_registry":{"doc":"\/**\n * Get the class registry\n *\n * Use this to override SimplePie's default classes\n * @see SimplePie_Registry\n * @return SimplePie_Registry\n *\/","file":"class-simplepie.php","line":954,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_class":{"doc":"\/**\n * Set which class SimplePie uses for caching\n *\/","file":"class-simplepie.php","line":970,"missingDoc":false,"filters":[],"uses":{"register":[972]},"used_by":[]},"SimplePie::set_locator_class":{"doc":"\/**\n * Set which class SimplePie uses for auto-discovery\n *\/","file":"class-simplepie.php","line":978,"missingDoc":false,"filters":[],"uses":{"register":[980]},"used_by":[]},"SimplePie::set_parser_class":{"doc":"\/**\n * Set which class SimplePie uses for XML parsing\n *\/","file":"class-simplepie.php","line":986,"missingDoc":false,"filters":[],"uses":{"register":[988]},"used_by":[]},"SimplePie::set_file_class":{"doc":"\/**\n * Set which class SimplePie uses for remote file fetching\n *\/","file":"class-simplepie.php","line":994,"missingDoc":false,"filters":[],"uses":{"register":[996]},"used_by":[]},"SimplePie::set_sanitize_class":{"doc":"\/**\n * Set which class SimplePie uses for data sanitization\n *\/","file":"class-simplepie.php","line":1002,"missingDoc":false,"filters":[],"uses":{"register":[1004]},"used_by":[]},"SimplePie::set_item_class":{"doc":"\/**\n * Set which class SimplePie uses for handling feed items\n *\/","file":"class-simplepie.php","line":1010,"missingDoc":false,"filters":[],"uses":{"register":[1012]},"used_by":[]},"SimplePie::set_author_class":{"doc":"\/**\n * Set which class SimplePie uses for handling author data\n *\/","file":"class-simplepie.php","line":1018,"missingDoc":false,"filters":[],"uses":{"register":[1020]},"used_by":[]},"SimplePie::set_category_class":{"doc":"\/**\n * Set which class SimplePie uses for handling category data\n *\/","file":"class-simplepie.php","line":1026,"missingDoc":false,"filters":[],"uses":{"register":[1028]},"used_by":[]},"SimplePie::set_enclosure_class":{"doc":"\/**\n * Set which class SimplePie uses for feed enclosures\n *\/","file":"class-simplepie.php","line":1034,"missingDoc":false,"filters":[],"uses":{"register":[1036]},"used_by":[]},"SimplePie::set_caption_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:text>` captions\n *\/","file":"class-simplepie.php","line":1042,"missingDoc":false,"filters":[],"uses":{"register":[1044]},"used_by":[]},"SimplePie::set_copyright_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:copyright>`\n *\/","file":"class-simplepie.php","line":1050,"missingDoc":false,"filters":[],"uses":{"register":[1052]},"used_by":[]},"SimplePie::set_credit_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:credit>`\n *\/","file":"class-simplepie.php","line":1058,"missingDoc":false,"filters":[],"uses":{"register":[1060]},"used_by":[]},"SimplePie::set_rating_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:rating>`\n *\/","file":"class-simplepie.php","line":1066,"missingDoc":false,"filters":[],"uses":{"register":[1068]},"used_by":[]},"SimplePie::set_restriction_class":{"doc":"\/**\n * Set which class SimplePie uses for `<media:restriction>`\n *\/","file":"class-simplepie.php","line":1074,"missingDoc":false,"filters":[],"uses":{"register":[1076]},"used_by":[]},"SimplePie::set_content_type_sniffer_class":{"doc":"\/**\n * Set which class SimplePie uses for content-type sniffing\n *\/","file":"class-simplepie.php","line":1082,"missingDoc":false,"filters":[],"uses":{"register":[1084]},"used_by":[]},"SimplePie::set_source_class":{"doc":"\/**\n * Set which class SimplePie uses item sources\n *\/","file":"class-simplepie.php","line":1090,"missingDoc":false,"filters":[],"uses":{"register":[1092]},"used_by":[]},"SimplePie::set_useragent":{"doc":"\/**\n * Set the user agent string\n *\n * @param string $ua New user agent string.\n *\/","file":"class-simplepie.php","line":1101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::set_cache_name_function":{"doc":"\/**\n * Set callback function to create cache filename with\n *\n * @param mixed $function Callback function\n *\/","file":"class-simplepie.php","line":1111,"missingDoc":false,"filters":[],"uses":{"is_callable":[1113]},"used_by":[]},"SimplePie::set_stupidly_fast":{"doc":"\/**\n * Set options to make SP as fast as possible\n *\n * Forgoes a substantial amount of data sanitization in favor of speed. This\n * turns SimplePie into a dumb parser of feeds.\n *\n * @param bool $set Whether to set them or not\n *\/","file":"class-simplepie.php","line":1127,"missingDoc":false,"filters":[],"uses":{"enable_order_by_date":[1131],"remove_div":[1132],"strip_comments":[1133],"strip_htmltags":[1134],"strip_attributes":[1135],"set_image_handler":[1136]},"used_by":[]},"SimplePie::set_max_checked_feeds":{"doc":"\/**\n * Set maximum number of feeds to check with autodiscovery\n *\n * @param int $max Maximum number of feeds to check\n *\/","file":"class-simplepie.php","line":1145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::remove_div":{"doc":"","file":"class-simplepie.php","line":1150,"missingDoc":true,"filters":[],"uses":{"remove_div":[1152]},"used_by":[]},"SimplePie::strip_htmltags":{"doc":"","file":"class-simplepie.php","line":1155,"missingDoc":true,"filters":[],"uses":{"strip_htmltags":[1161],"encode_instead_of_strip":[1164]},"used_by":[]},"SimplePie::encode_instead_of_strip":{"doc":"","file":"class-simplepie.php","line":1168,"missingDoc":true,"filters":[],"uses":{"encode_instead_of_strip":[1170]},"used_by":[]},"SimplePie::strip_attributes":{"doc":"","file":"class-simplepie.php","line":1173,"missingDoc":true,"filters":[],"uses":{"strip_attributes":[1179]},"used_by":[]},"SimplePie::set_output_encoding":{"doc":"\/**\n * Set the output encoding\n *\n * Allows you to override SimplePie's output to match that of your webpage.\n * This is useful for times when your webpages are not being served as\n * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and\n * is similar to {@see set_input_encoding()}.\n *\n * It should be noted, however, that not all character encodings can support\n * all characters. If your page is being served as ISO-8859-1 and you try\n * to display a Japanese feed, you'll likely see garbled characters.\n * Because of this, it is highly recommended to ensure that your webpages\n * are served as UTF-8.\n *\n * The number of supported character encodings depends on whether your web\n * host supports {@link http:\/\/php.net\/mbstring mbstring},\n * {@link http:\/\/php.net\/iconv iconv}, or both. See\n * {@link http:\/\/simplepie.org\/wiki\/faq\/Supported_Character_Encodings} for\n * more information.\n *\n * @param string $encoding\n *\/","file":"class-simplepie.php","line":1204,"missingDoc":false,"filters":[],"uses":{"set_output_encoding":[1206]},"used_by":[]},"SimplePie::strip_comments":{"doc":"","file":"class-simplepie.php","line":1209,"missingDoc":true,"filters":[],"uses":{"strip_comments":[1211]},"used_by":[]},"SimplePie::set_url_replacements":{"doc":"\/**\n * Set element\/attribute key\/value pairs of HTML attributes\n * containing URLs that need to be resolved relative to the feed\n *\n * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,\n * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,\n * |q|@cite\n *\n * @since 1.0\n * @param array|null $element_attribute Element\/attribute key\/value pairs, null for default\n *\/","file":"class-simplepie.php","line":1225,"missingDoc":false,"filters":[],"uses":{"set_url_replacements":[1227]},"used_by":[]},"SimplePie::set_image_handler":{"doc":"\/**\n * Set the handler to enable the display of cached images.\n *\n * @param str $page Web-accessible path to the handler_image.php file.\n * @param str $qs The query string that the value should be passed to.\n *\/","file":"class-simplepie.php","line":1236,"missingDoc":false,"filters":[],"uses":{"set_image_handler":[1240]},"used_by":[]},"SimplePie::set_item_limit":{"doc":"\/**\n * Set the limit for items returned per-feed with multifeeds\n *\n * @param integer $limit The maximum number of items to return.\n *\/","file":"class-simplepie.php","line":1253,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::init":{"doc":"\/**\n * Initialize the feed object\n *\n * This is what makes everything happen. Period. This is where all of the\n * configuration options get processed, feeds are fetched, cached, and\n * parsed, and all of that other good stuff.\n *\n * @return boolean True if successful, false otherwise\n *\/","file":"class-simplepie.php","line":1267,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[1275,1270,1270],"xml_parser_create":[1280],"xml_parse_into_struct":[1281],"xml_parser_free":[1282],"set_registry":[1293],"method_exists":[1291],"pass_cache_data":[1298],"get_class":[1298,1299],"pass_file_data":[1299],"set_feed_url":[1310],"init":[1311],"error":[1315],"call":[1333,1338,1374,1393,1416,1404,1446],"call_user_func":[1338],"fetch_data":[1342],"strtoupper":[1372],"preg_match":[1370,1379],"array_merge":[1374,1393],"in_array":[1377,1368],"substr":[1377,1377,1386,1368,1368],"array_unique":[1398],"create":[1407],"get_data":[1412],"get_type":[1413],"trigger_error":[1429],"save":[1427],"parse":[1410],"sprintf":[1439],"get_error_string":[1439],"get_current_line":[1439],"get_current_column":[1439]},"used_by":[]},"save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/Base.php","line":85,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::init":[1427],"SimplePie::fetch_data":[1594],"WP_Customize_Manager::save":[512],"image_resize":[3277],"image_make_intermediate_size":[396],"SimplePie_Sanitize::sanitize":[323]}},"SimplePie::fetch_data":{"doc":"\/**\n * Fetch the data via SimplePie_File\n *\n * If the data is already cached, attempt to fetch it from there instead\n * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache\n * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type\n *\/","file":"class-simplepie.php","line":1458,"missingDoc":false,"filters":[],"uses":{"load":[1464],"unlink":[1470,1492,1540],"set_feed_url":[1488],"init":[1489],"mtime":[1483,1497],"time":[1483,1497],"create":[1514,1556,1569,1608],"touch":[1520],"call":[1580,1588,1598],"find":[1577],"getMessage":[1587],"getFile":[1588],"getLine":[1588],"trigger_error":[1596],"save":[1594],"call_user_func":[1598],"is_feed":[1571],"get_type":[1609]},"used_by":[]},"load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/Base.php","line":92,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1464],"wp_get_image_editor":[1179],"SimplePie_Sanitize::sanitize":[312]}},"mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/Base.php","line":99,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1483,1497]}},"touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Base.php","line":106,"missingDoc":false,"filters":[],"uses":[],"used_by":{"SimplePie::fetch_data":[1520],"SimplePie_Cache_File::touch":[155]}},"SimplePie::error":{"doc":"\/**\n * Get the error message for the occured error\n *\n * @return string|array Error message, or array of messages for multifeeds\n *\/","file":"class-simplepie.php","line":1619,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_raw_data":{"doc":"\/**\n * Get the raw XML\n *\n * This is the same as the old `$feed->enable_xml_dump(true)`, but returns\n * the data instead of printing it.\n *\n * @return string|boolean Raw XML data, false if the cache is used\n *\/","file":"class-simplepie.php","line":1632,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_encoding":{"doc":"\/**\n * Get the character encoding used for output\n *\n * @since Preview Release\n * @return string\n *\/","file":"class-simplepie.php","line":1643,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie::handle_content_type":{"doc":"\/**\n * Send the content-type header with correct encoding\n *\n * This method ensures that the SimplePie-enabled page is being served with\n * the correct {@link http:\/\/www.iana.org\/assignments\/media-types\/ mime-type}\n * and character encoding HTTP headers (character encoding determined by the\n * {@see set_output_encoding} config option).\n *\n * This won't work properly if any content or whitespace has already been\n * sent to the browser, because it relies on PHP's\n * {@link http:\/\/php.net\/header header()} function, and these are the\n * circumstances under which the function works.\n *\n * Because it's setting these settings for the entire page (as is the nature\n * of HTTP headers), this should only be used once per page (again, at the\n * top).\n *\n * @param string $mime MIME type to serve the page as\n *\/","file":"class-simplepie.php","line":1667,"missingDoc":false,"filters":[],"uses":{"get_encoding":[1674,1672],"header":[1680],"headers_sent":[1669]},"used_by":[]},"SimplePie::get_type":{"doc":"\/**\n * Get the type of the feed\n *\n * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against\n * using {@link http:\/\/php.net\/language.operators.bitwise bitwise operators}\n *\n * @since 0.8 (usage changed to using constants in 1.0)\n * @see SIMPLEPIE_TYPE_NONE Unknown.\n * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90.\n * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).\n * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland).\n * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91.\n * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92.\n * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93.\n * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94.\n * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0.\n * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x.\n * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS.\n * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).\n * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS.\n * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3.\n * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0.\n * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom.\n * @see SIMPLEPIE_TYPE_ALL Any known\/supported feed type.\n * @return int SIMPLEPIE_TYPE_* constant\n *\/","file":"class-simplepie.php","line":1710,"missingDoc":false,"filters":[],"uses":{"trim":[1745,1751]},"used_by":[]},"SimplePie::subscribe_url":{"doc":"\/**\n * Get the URL for the feed\n *\n * May or may not be different from the URL passed to {@see set_feed_url()},\n * depending on whether auto-discovery was used.\n *\n * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)\n * @todo If we have a perm redirect we should return the new URL\n * @todo When we make the above change, let's support <itunes:new-feed-url> as well\n * @todo Also, |atom:link|@rel=self\n * @return string|null\n *\/","file":"class-simplepie.php","line":1802,"missingDoc":false,"filters":[],"uses":{"sanitize":[1806]},"used_by":[]},"SimplePie::get_feed_tags":{"doc":"\/**\n * Get data for an feed-level element\n *\n * This method allows you to get access to ANY element\/attribute that is a\n * sub-element of the opening feed tag.\n *\n * The return value is an indexed array of elements matching the given\n * namespace and tag name. Each element has `attribs`, `data` and `child`\n * subkeys. For `attribs` and `child`, these contain namespace subkeys.\n * `attribs` then has one level of associative name => value data (where\n * `value` is a string) after the namespace. `child` has tag-indexed keys\n * after the namespace, each member of which is an indexed array matching\n * this same format.\n *\n * For example:\n * <pre>\n * \/\/ This is probably a bad example because we already support\n * \/\/ <media:content> natively, but it shows you how to parse through\n * \/\/ the nodes.\n * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group');\n * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'];\n * $file = $content[0]['attribs']['']['url'];\n * echo $file;\n * <\/pre>\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1845,"missingDoc":false,"filters":[],"uses":{"get_type":[1847]},"used_by":[]},"SimplePie::get_channel_tags":{"doc":"\/**\n * Get data for an channel-level element\n *\n * This method allows you to get access to ANY element\/attribute in the\n * channel\/header section of the feed.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1893,"missingDoc":false,"filters":[],"uses":{"get_type":[1895],"get_feed_tags":[1898,1905,1915,1925]},"used_by":[]},"SimplePie::get_image_tags":{"doc":"\/**\n * Get data for an channel-level element\n *\n * This method allows you to get access to ANY element\/attribute in the\n * image\/logo section of the feed.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"class-simplepie.php","line":1950,"missingDoc":false,"filters":[],"uses":{"get_type":[1952],"get_feed_tags":[1955,1965],"get_channel_tags":[1975]},"used_by":[]},"SimplePie::get_base":{"doc":"\/**\n * Get the base URL value from the feed\n *\n * Uses `<xml:base>` if available, otherwise uses the first link in the\n * feed, or failing that, the URL of the feed itself.\n *\n * @see get_link\n * @see subscribe_url\n *\n * @param array $element\n * @return string\n *\/","file":"class-simplepie.php","line":1998,"missingDoc":false,"filters":[],"uses":{"get_link":[2004,2006],"subscribe_url":[2010],"get_type":[2000]},"used_by":[]},"get_link":{"doc":"\/**\n * Retrieve bookmark data based on ID.\n *\n * @since 2.0.0\n * @deprecated 2.1.0\n * @deprecated Use get_bookmark()\n * @see get_bookmark()\n *\n * @param int $bookmark_id ID of link\n * @param string $output OBJECT, ARRAY_N, or ARRAY_A\n * @return object|array\n *\/","file":"deprecated.php","line":2049,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2050],"get_bookmark":[2051]},"used_by":{"SimplePie::get_base":[2004,2006],"SimplePie::get_permalink":[2376],"SimplePie::get_favicon":[3008],"WP_Customize_Control::link":[225],"WP_Customize_Control::render_content":[299],"wp_widget_rss_output":[855],"SimplePie_Enclosure::embed":[1129,1133,1144,1148,1161,1165,1170,1180,1184,1189],"SimplePie_Item::get_permalink":[929,937],"SimplePie_Source::get_permalink":[382]}},"SimplePie::sanitize":{"doc":"\/**\n * Sanitize feed data\n *\n * @access private\n * @see SimplePie_Sanitize::sanitize()\n * @param string $data Data to sanitize\n * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants\n * @param string $base Base URL to resolve URLs against\n * @return string Sanitized data\n *\/","file":"class-simplepie.php","line":2024,"missingDoc":false,"filters":[],"uses":{"sanitize":[2026]},"used_by":[]},"SimplePie::get_title":{"doc":"\/**\n * Get the title of the feed\n *\n * Uses `<atom:title>`, `<title>` or `<dc:title>`\n *\n * @since 1.0 (previously called `get_feed_title` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2037,"missingDoc":false,"filters":[],"uses":{"sanitize":[2041,2045,2049,2053,2057,2061,2065],"call":[2041,2045],"get_base":[2041,2045,2049,2053,2057],"get_channel_tags":[2043,2047,2051,2055,2059,2063,2039]},"used_by":[]},"SimplePie::get_category":{"doc":"\/**\n * Get a category for the feed\n *\n * @since Unknown\n * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Category|null\n *\/","file":"class-simplepie.php","line":2080,"missingDoc":false,"filters":[],"uses":{"get_categories":[2082]},"used_by":[]},"SimplePie::get_categories":{"doc":"\/**\n * Get all categories for the feed\n *\n * Uses `<atom:category>`, `<category>` or `<dc:subject>`\n *\n * @since Unknown\n * @return array|null List of {@see SimplePie_Category} objects\n *\/","file":"class-simplepie.php","line":2101,"missingDoc":false,"filters":[],"uses":{"sanitize":[2112,2116,2120,2128,2131,2141,2145],"create":[2122,2137,2141,2145],"get_channel_tags":[2105,2124,2139,2143],"array_unique":[2150]},"used_by":[]},"SimplePie::get_author":{"doc":"\/**\n * Get an author for the feed\n *\n * @since 1.1\n * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"class-simplepie.php","line":2165,"missingDoc":false,"filters":[],"uses":{"get_authors":[2167]},"used_by":[]},"SimplePie::get_authors":{"doc":"\/**\n * Get all authors for the feed\n *\n * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"class-simplepie.php","line":2186,"missingDoc":false,"filters":[],"uses":{"sanitize":[2196,2200,2204,2218,2222,2226,2235,2239,2243],"get_base":[2200,2222],"create":[2208,2230,2235,2239,2243],"get_channel_tags":[2189,2211,2233,2237,2241],"array_unique":[2248]},"used_by":[]},"SimplePie::get_contributor":{"doc":"\/**\n * Get a contributor for the feed\n *\n * @since 1.1\n * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"class-simplepie.php","line":2263,"missingDoc":false,"filters":[],"uses":{"get_contributors":[2265]},"used_by":[]},"SimplePie::get_contributors":{"doc":"\/**\n * Get all contributors for the feed\n *\n * Uses `<atom:contributor>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"class-simplepie.php","line":2284,"missingDoc":false,"filters":[],"uses":{"sanitize":[2294,2298,2302,2316,2320,2324],"get_base":[2298,2320],"create":[2306,2328],"get_channel_tags":[2287,2309],"array_unique":[2334]},"used_by":[]},"SimplePie::get_link":{"doc":"\/**\n * Get a single link for the feed\n *\n * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)\n * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1\n * @param string $rel The relationship of the link to return\n * @return string|null Link URL\n *\/","file":"class-simplepie.php","line":2350,"missingDoc":false,"filters":[],"uses":{"get_links":[2352]},"used_by":[]},"get_links":{"doc":"\/**\n * Gets the links associated with category by id.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $before the html to output before the link\n * @param string $after the html to output after the link\n * @param string $between the html to output between the link\/image and its description.\n *\t\tNot used if no image or show_images == true\n * @param bool $show_images whether to show images (if defined).\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the order\n *\t\twhich will return links in a random order.\n * @param bool $show_description whether to show the description if show_images=false\/not defined.\n * @param bool $show_rating show rating stars\/chars\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated whether to show last updated timestamp\n * @param bool $echo whether to echo the results, or return them instead\n * @return null|string\n *\/","file":"deprecated.php","line":948,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[950],"substr":[955,953,986],"get_bookmarks":[961],"get_option":[973,987,987,1004,1012],"esc_url":[976],"esc_attr":[981,982],"sanitize_bookmark_field":[981,982],"__":[987],"date":[987],"strpos":[1001],"get_linkrating":[1018]},"used_by":{"SimplePie::get_link":[2352],"get_linksbyname":[417],"get_links_withrating":[592],"get_links_list":[1067],"SimplePie_Item::get_link":[955],"SimplePie_Locator::find":[120],"SimplePie_Source::get_link":[366]}},"SimplePie::get_permalink":{"doc":"\/**\n * Get the permalink for the item\n *\n * Returns the first link available with a relationship of \"alternate\".\n * Identical to {@see get_link()} with key 0\n *\n * @see get_link\n * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)\n * @internal Added for parity between the parent-level and the item\/entry-level.\n * @return string|null Link URL\n *\/","file":"class-simplepie.php","line":2374,"missingDoc":false,"filters":[],"uses":{"get_link":[2376]},"used_by":[]},"SimplePie::get_links":{"doc":"\/**\n * Get all links for the feed\n *\n * Uses `<atom:link>` or `<link>`\n *\n * @since Beta 2\n * @param string $rel The relationship of links to return\n * @return array|null Links found for the feed (strings)\n *\/","file":"class-simplepie.php","line":2388,"missingDoc":false,"filters":[],"uses":{"sanitize":[2400,2411,2418,2422,2426],"get_base":[2400,2411,2418,2422,2426],"get_channel_tags":[2393,2404,2416,2420,2424],"array_keys":[2429],"array_merge":[2436],"substr":[2444,2446],"call":[2432],"array_unique":[2448]},"used_by":[]},"SimplePie::get_all_discovered_feeds":{"doc":"","file":"class-simplepie.php","line":2462,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie::get_description":{"doc":"\/**\n * Get the content for the item\n *\n * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,\n * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`\n *\n * @since 1.0 (previously called `get_feed_description()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2476,"missingDoc":false,"filters":[],"uses":{"sanitize":[2480,2484,2488,2492,2496,2500,2504,2508,2512],"call":[2480,2484],"get_base":[2480,2484,2488,2492,2496,2508,2512],"get_channel_tags":[2482,2486,2490,2494,2498,2502,2506,2510,2478]},"used_by":[]},"SimplePie::get_copyright":{"doc":"\/**\n * Get the copyright info for the feed\n *\n * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`\n *\n * @since 1.0 (previously called `get_feed_copyright()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2528,"missingDoc":false,"filters":[],"uses":{"sanitize":[2532,2536,2540,2544,2548],"call":[2532,2536],"get_base":[2532,2536],"get_channel_tags":[2534,2538,2542,2546,2530]},"used_by":[]},"SimplePie::get_language":{"doc":"\/**\n * Get the language for the feed\n *\n * Uses `<language>`, `<dc:language>`, or @xml_lang\n *\n * @since 1.0 (previously called `get_feed_language()` since 0.8)\n * @return string|null\n *\/","file":"class-simplepie.php","line":2564,"missingDoc":false,"filters":[],"uses":{"sanitize":[2568,2572,2576,2580,2584,2588,2592],"get_channel_tags":[2570,2574,2566]},"used_by":[]},"SimplePie::get_latitude":{"doc":"\/**\n * Get the latitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:lat>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"class-simplepie.php","line":2612,"missingDoc":false,"filters":[],"uses":{"get_channel_tags":[2619,2615],"preg_match":[2619],"trim":[2619]},"used_by":[]},"SimplePie::get_longitude":{"doc":"\/**\n * Get the longitude coordinates for the feed\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"class-simplepie.php","line":2641,"missingDoc":false,"filters":[],"uses":{"get_channel_tags":[2647,2651,2643],"preg_match":[2651],"trim":[2651]},"used_by":[]},"SimplePie::get_image_title":{"doc":"\/**\n * Get the feed logo's title\n *\n * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a \"feed logo\" title.\n *\n * Uses `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2670,"missingDoc":false,"filters":[],"uses":{"sanitize":[2674,2678,2682,2686,2690],"get_image_tags":[2676,2680,2684,2688,2672]},"used_by":[]},"SimplePie::get_image_url":{"doc":"\/**\n * Get the feed logo's URL\n *\n * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to\n * have a \"feed logo\" URL. This points directly to the image itself.\n *\n * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,\n * `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2709,"missingDoc":false,"filters":[],"uses":{"sanitize":[2713,2717,2721,2725,2729,2733],"get_channel_tags":[2715,2719,2711],"get_base":[2717,2721,2725,2729,2733],"get_image_tags":[2723,2727,2731]},"used_by":[]},"SimplePie::get_image_link":{"doc":"\/**\n * Get the feed logo's link\n *\n * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a \"feed logo\" link. This\n * points to a human-readable page that the image should link to.\n *\n * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,\n * `<image><title>` or `<image><dc:title>`\n *\n * @return string|null\n *\/","file":"class-simplepie.php","line":2753,"missingDoc":false,"filters":[],"uses":{"sanitize":[2757,2761,2765],"get_base":[2757,2761,2765],"get_image_tags":[2759,2763,2755]},"used_by":[]},"SimplePie::get_image_width":{"doc":"\/**\n * Get the feed logo's link\n *\n * RSS 2.0 feeds are allowed to have a \"feed logo\" width.\n *\n * Uses `<image><width>` or defaults to 88.0 if no width is specified and\n * the feed is an RSS 2.0 feed.\n *\n * @return int|float|null\n *\/","file":"class-simplepie.php","line":2783,"missingDoc":false,"filters":[],"uses":{"round":[2787],"get_type":[2789],"get_image_tags":[2789,2785]},"used_by":[]},"SimplePie::get_image_height":{"doc":"\/**\n * Get the feed logo's height\n *\n * RSS 2.0 feeds are allowed to have a \"feed logo\" height.\n *\n * Uses `<image><height>` or defaults to 31.0 if no height is specified and\n * the feed is an RSS 2.0 feed.\n *\n * @return int|float|null\n *\/","file":"class-simplepie.php","line":2809,"missingDoc":false,"filters":[],"uses":{"round":[2813],"get_type":[2815],"get_image_tags":[2815,2811]},"used_by":[]},"SimplePie::get_item_quantity":{"doc":"\/**\n * Get the number of items in the feed\n *\n * This is well-suited for {@link http:\/\/php.net\/for for()} loops with\n * {@see get_item()}\n *\n * @param int $max Maximum value to return. 0 for no limit\n * @return int Number of items in the feed\n *\/","file":"class-simplepie.php","line":2834,"missingDoc":false,"filters":[],"uses":{"count":[2837],"get_items":[2837]},"used_by":[]},"SimplePie::get_item":{"doc":"\/**\n * Get a single item from the feed\n *\n * This is better suited for {@link http:\/\/php.net\/for for()} loops, whereas\n * {@see get_items()} is better suited for\n * {@link http:\/\/php.net\/foreach foreach()} loops.\n *\n * @see get_item_quantity()\n * @since Beta 2\n * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Item|null\n *\/","file":"class-simplepie.php","line":2860,"missingDoc":false,"filters":[],"uses":{"get_items":[2862]},"used_by":[]},"SimplePie::get_items":{"doc":"\/**\n * Get all items from the feed\n *\n * This is better suited for {@link http:\/\/php.net\/for for()} loops, whereas\n * {@see get_items()} is better suited for\n * {@link http:\/\/php.net\/foreach foreach()} loops.\n *\n * @see get_item_quantity\n * @since Beta 2\n * @param int $start Index to start at\n * @param int $end Number of items to return. 0 for all items after `$start`\n * @return array|null List of {@see SimplePie_Item} objects\n *\/","file":"class-simplepie.php","line":2886,"missingDoc":false,"filters":[],"uses":{"array_keys":[2899,2907,2915,2923,2931],"create":[2902,2910,2918,2926,2934],"get_feed_tags":[2897,2905,2913,2921],"get_channel_tags":[2929],"get_date":[2950],"usort":[2960],"get_class":[2960],"array_slice":[2973,2977]},"used_by":[]},"SimplePie::set_favicon_handler":{"doc":"\/**\n * Set the favicon handler\n *\n * @deprecated Use your own favicon handling instead\n *\/","file":"class-simplepie.php","line":2991,"missingDoc":false,"filters":[],"uses":{"defined":[2993],"trigger_error":[2994]},"used_by":[]},"SimplePie::get_favicon":{"doc":"\/**\n * Get the favicon for the current feed\n *\n * @deprecated Use your own favicon handling instead\n *\/","file":"class-simplepie.php","line":3003,"missingDoc":false,"filters":[],"uses":{"defined":[3005],"trigger_error":[3006],"urlencode":[3010],"get_link":[3008]},"used_by":[]},"SimplePie::__call":{"doc":"\/**\n * Magic method handler\n *\n * @param string $method Method name\n * @param array $args Arguments to the method\n * @return mixed\n *\/","file":"class-simplepie.php","line":3023,"missingDoc":false,"filters":[],"uses":{"defined":[3027,3033],"trigger_error":[3028,3034,3042],"strpos":[3025],"get_class":[3038],"debug_backtrace":[3039]},"used_by":[]},"SimplePie::sort_items":{"doc":"\/**\n * Sorting callback for items\n *\n * @access private\n * @param SimplePie $a\n * @param SimplePie $b\n * @return boolean\n *\/","file":"class-simplepie.php","line":3053,"missingDoc":false,"filters":[],"uses":{"get_date":[3055,3055]},"used_by":[]},"SimplePie::merge_items":{"doc":"\/**\n * Merge items from several feeds into one\n *\n * If you're merging multiple feeds together, they need to all have dates\n * for the items or else SimplePie will refuse to sort them.\n *\n * @link http:\/\/simplepie.org\/wiki\/tutorial\/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings\n * @param array $urls List of SimplePie feed objects to merge\n * @param int $start Starting item\n * @param int $end Number of items to return\n * @param int $limit Maximum number of items per feed\n * @return array\n *\/","file":"class-simplepie.php","line":3071,"missingDoc":false,"filters":[],"uses":{"array_merge":[3080],"get_items":[3080],"trigger_error":[3084,3114],"get_date":[3091],"usort":[3100],"get_class":[3100],"array_slice":[3105,3109],"is_array":[3073],"sizeof":[3073]},"used_by":[]},"SMTP::__construct":{"doc":"\/**\n * Initialize the class so that the data is in a known state.\n * @access public\n * @return void\n *\/","file":"class-smtp.php","line":90,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::Connect":{"doc":"\/**\n * Connect to the server specified on the port specified.\n * If the port is not specified use the default SMTP_PORT.\n * If tval is specified then a connection will try and be\n * established with the server for that number of seconds.\n * If tval is not specified the default is 30 seconds to\n * try on the connection.\n *\n * SMTP CODE SUCCESS: 220\n * SMTP CODE FAILURE: 421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":115,"missingDoc":false,"filters":[],"uses":{"connected":[120],"fsockopen":[131],"socket_set_timeout":[150],"substr":[149],"get_lines":[153]},"used_by":[]},"SMTP::StartTLS":{"doc":"\/**\n * Initiate a TLS communication with the server.\n *\n * SMTP CODE 220 Ready to start TLS\n * SMTP CODE 501 Syntax error (no parameters allowed)\n * SMTP CODE 454 TLS not available due to temporary reason\n * @access public\n * @return bool success\n *\/","file":"class-smtp.php","line":171,"missingDoc":false,"filters":[],"uses":{"connected":[174],"fputs":[179],"get_lines":[181],"substr":[182,192],"stream_socket_enable_crypto":[200]},"used_by":[]},"SMTP::Authenticate":{"doc":"\/**\n * Performs SMTP authentication. Must be run after running the\n * Hello() method. Returns true if successfully authenticated.\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":213,"missingDoc":false,"filters":[],"uses":{"fputs":[215,232,249],"get_lines":[217,234,251],"substr":[218,224,235,241,252,258],"base64_encode":[232,249]},"used_by":[]},"SMTP::Connected":{"doc":"\/**\n * Returns true if connected to a server otherwise false\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":273,"missingDoc":false,"filters":[],"uses":{"socket_get_status":[275],"Close":[281]},"used_by":[]},"SMTP::Close":{"doc":"\/**\n * Closes the socket and cleans up the state of the class.\n * It is not considered good to use this function without\n * first trying to use QUIT.\n * @access public\n * @return void\n *\/","file":"class-smtp.php","line":296,"missingDoc":false,"filters":[],"uses":{"fclose":[301]},"used_by":[]},"SMTP::Data":{"doc":"\/**\n * Issues a data command and sends the msg_data to the server\n * finializing the mail transaction. $msg_data is the message\n * that is to be send with the headers. Each header needs to be\n * on a single line followed by a <CRLF> with the message headers\n * and the message body being seperated by and additional <CRLF>.\n *\n * Implements rfc 821: DATA <CRLF>\n *\n * SMTP CODE INTERMEDIATE: 354\n * [data]\n * <CRLF>.<CRLF>\n * SMTP CODE SUCCESS: 250\n * SMTP CODE FAILURE: 552,554,451,452\n * SMTP CODE FAILURE: 451,554\n * SMTP CODE ERROR : 500,501,503,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":329,"missingDoc":false,"filters":[],"uses":{"connected":[332],"fputs":[338,427,432],"get_lines":[340,434],"substr":[341,351,383,398,403,404,406,407,423,435,445],"str_replace":[370,371],"explode":[372],"strpos":[383],"strstr":[385],"each":[391,420],"strlen":[397,421],"strrpos":[398]},"used_by":[]},"SMTP::Hello":{"doc":"\/**\n * Sends the HELO command to the smtp server.\n * This makes sure that we and the server are in\n * the same known state.\n *\n * Implements from rfc 821: HELO <SP> <domain> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE ERROR : 500, 501, 504, 421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":466,"missingDoc":false,"filters":[],"uses":{"connected":[469],"SendHello":[483,482]},"used_by":[]},"SMTP::SendHello":{"doc":"\/**\n * Sends a HELO\/EHLO command.\n * @access private\n * @return bool\n *\/","file":"class-smtp.php","line":496,"missingDoc":false,"filters":[],"uses":{"fputs":[497],"get_lines":[499],"substr":[500,510]},"used_by":[]},"SMTP::Mail":{"doc":"\/**\n * Starts a mail transaction from the email address specified in\n * $from. Returns true if successful or false otherwise. If True\n * the mail transaction is started and then one or more Recipient\n * commands may be called followed by a Data command.\n *\n * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE SUCCESS: 552,451,452\n * SMTP CODE SUCCESS: 500,501,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":536,"missingDoc":false,"filters":[],"uses":{"connected":[539],"fputs":[546],"get_lines":[548],"substr":[549,559]},"used_by":[]},"SMTP::Quit":{"doc":"\/**\n * Sends the quit command to the server and then closes the socket\n * if there is no error or the $close_on_error argument is true.\n *\n * Implements from rfc 821: QUIT <CRLF>\n *\n * SMTP CODE SUCCESS: 221\n * SMTP CODE ERROR : 500\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":579,"missingDoc":false,"filters":[],"uses":{"connected":[582],"fputs":[589],"get_lines":[592],"substr":[601,606],"Close":[614]},"used_by":[]},"SMTP::Recipient":{"doc":"\/**\n * Sends the command RCPT to the SMTP server with the TO: argument of $to.\n * Returns true if the recipient was accepted false if it was rejected.\n *\n * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250,251\n * SMTP CODE FAILURE: 550,551,552,553,450,451,452\n * SMTP CODE ERROR : 500,501,503,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":632,"missingDoc":false,"filters":[],"uses":{"connected":[635],"fputs":[641],"get_lines":[643],"substr":[644,654]},"used_by":[]},"SMTP::Reset":{"doc":"\/**\n * Sends the RSET command to abort and transaction that is\n * currently in progress. Returns true if successful false\n * otherwise.\n *\n * Implements rfc 821: RSET <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE ERROR : 500,501,504,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":675,"missingDoc":false,"filters":[],"uses":{"connected":[678],"fputs":[684],"get_lines":[686],"substr":[687,697]},"used_by":[]},"SMTP::SendAndMail":{"doc":"\/**\n * Starts a mail transaction from the email address specified in\n * $from. Returns true if successful or false otherwise. If True\n * the mail transaction is started and then one or more Recipient\n * commands may be called followed by a Data command. This command\n * will send the message to the users terminal if they are logged\n * in and send them an email.\n *\n * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE SUCCESS: 552,451,452\n * SMTP CODE SUCCESS: 500,501,502,421\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":723,"missingDoc":false,"filters":[],"uses":{"connected":[726],"fputs":[732],"get_lines":[734],"substr":[735,745]},"used_by":[]},"SMTP::Turn":{"doc":"\/**\n * This is an optional command for SMTP that this class does not\n * support. This method is here to make the RFC821 Definition\n * complete for this class and __may__ be implimented in the future\n *\n * Implements from rfc 821: TURN <CRLF>\n *\n * SMTP CODE SUCCESS: 250\n * SMTP CODE FAILURE: 502\n * SMTP CODE ERROR : 500, 503\n * @access public\n * @return bool\n *\/","file":"class-smtp.php","line":767,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::getError":{"doc":"\/**\n * Get the current error\n * @access public\n * @return array\n *\/","file":"class-smtp.php","line":781,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SMTP::get_lines":{"doc":"\/**\n * Read in as many lines as possible\n * either before eof or socket timeout occurs on the operation.\n * With SMTP we can tell if we have more lines to read if the\n * 4th character is '-' symbol. If it is a space then we don't\n * need to read anything else.\n * @access private\n * @return string\n *\/","file":"class-smtp.php","line":798,"missingDoc":false,"filters":[],"uses":{"feof":[800],"fgets":[801],"substr":[811]},"used_by":[]},"_deprecated_file":{"doc":"\/**\n * Marks a file as deprecated and informs when it has been used.\n *\n * There is a hook deprecated_file_included that will be called that can be used\n * to get the backtrace up to what file and function included the deprecated\n * file.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * This function is to be used in every file that is deprecated.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 2.5.0\n * @access private\n *\n * @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead,\n * the version in which the file was deprecated, and any message regarding the change.\n * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $file The file that was included\n * @param string $version The version of WordPress that deprecated the file\n * @param string $replacement Optional. The file that should have been included based on ABSPATH\n * @param string $message Optional. A message regarding the change\n *\/","file":"functions.php","line":2893,"missingDoc":false,"filters":["'deprecated_file_included'","'deprecated_file_trigger_error'"],"uses":{"trigger_error":[2901,2903],"sprintf":[2901,2903],"__":[2901,2903],"is_null":[2900]},"used_by":{"__main":[6,7,7,8,18,10,10,10,10,10],"wp_get_active_and_valid_plugins":[485]}},"Snoopy::fetch":{"doc":"","file":"class-snoopy.php","line":129,"missingDoc":true,"filters":[],"uses":{"parse_url":[133],"strtolower":[143],"_httprequest":[154,160],"_disconnect":[163],"fetch":[176,190,236,250],"preg_match":[171,231],"preg_quote":[171,231],"each":[186,246],"count":[181,241],"_connect":[149],"is_executable":[208],"function_exists":[207],"_httpsrequest":[216,222]},"used_by":[]},"Snoopy::submit":{"doc":"","file":"class-snoopy.php","line":279,"missingDoc":true,"filters":[],"uses":{"_prepare_post_body":[283],"parse_url":[285],"strtolower":[295],"_httprequest":[306,312],"_disconnect":[315],"_expandlinks":[323,390],"preg_match":[322,326,389,393],"fetch":[332,348,399,415],"submit":[334,401],"strpos":[331,398],"preg_quote":[326,393],"each":[344,411],"count":[339,406],"_connect":[301],"is_executable":[367],"function_exists":[366],"_httpsrequest":[375,381]},"used_by":[]},"Snoopy::fetchlinks":{"doc":"","file":"class-snoopy.php","line":441,"missingDoc":true,"filters":[],"uses":{"count":[449],"_striplinks":[450,453],"is_array":[447],"_expandlinks":[456],"fetch":[443]},"used_by":[]},"Snoopy::fetchform":{"doc":"","file":"class-snoopy.php","line":470,"missingDoc":true,"filters":[],"uses":{"count":[478],"_stripform":[479,482],"is_array":[476],"fetch":[473]},"used_by":[]},"Snoopy::fetchtext":{"doc":"","file":"class-snoopy.php","line":498,"missingDoc":true,"filters":[],"uses":{"count":[504],"_striptext":[505,508],"is_array":[502],"fetch":[500]},"used_by":[]},"Snoopy::submitlinks":{"doc":"","file":"class-snoopy.php","line":522,"missingDoc":true,"filters":[],"uses":{"count":[530],"_striplinks":[532,539],"_expandlinks":[534,541],"is_array":[528],"submit":[524]},"used_by":[]},"Snoopy::submittext":{"doc":"","file":"class-snoopy.php","line":556,"missingDoc":true,"filters":[],"uses":{"count":[564],"_striptext":[566,573],"_expandlinks":[568,575],"is_array":[562],"submit":[558]},"used_by":[]},"Snoopy::set_submit_multipart":{"doc":"","file":"class-snoopy.php","line":590,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Snoopy::set_submit_normal":{"doc":"","file":"class-snoopy.php","line":601,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Snoopy::_striplinks":{"doc":"","file":"class-snoopy.php","line":621,"missingDoc":true,"filters":[],"uses":{"preg_match_all":[623],"each":[632,638]},"used_by":[]},"Snoopy::_stripform":{"doc":"","file":"class-snoopy.php","line":655,"missingDoc":true,"filters":[],"uses":{"preg_match_all":[657],"implode":[660]},"used_by":[]},"Snoopy::_striptext":{"doc":"","file":"class-snoopy.php","line":675,"missingDoc":true,"filters":[],"uses":{"chr":[714,715,716,717,718,719,720,721,722,723,724,725,726,727,728],"preg_replace":[731]},"used_by":[]},"Snoopy::_expandlinks":{"doc":"","file":"class-snoopy.php","line":744,"missingDoc":true,"filters":[],"uses":{"preg_match":[747],"preg_replace":[749,750,769],"parse_url":[751],"preg_quote":[755]},"used_by":[]},"Snoopy::_httprequest":{"doc":"","file":"class-snoopy.php","line":784,"missingDoc":true,"filters":[],"uses":{"setcookies":[788],"parse_url":[790],"is_array":[808,822,929],"reset":[811],"urlencode":[815],"substr":[817],"count":[812,925],"each":[824],"strlen":[834,850,901],"base64_encode":[836,840],"socket_set_timeout":[847],"fwrite":[850],"fgets":[855],"_check_timeout":[857,907],"preg_match":[870,877,872,867,888,886,915],"chop":[870],"fread":[900],"_expandlinks":[918,926],"preg_match_all":[922]},"used_by":[]},"Snoopy::_httpsrequest":{"doc":"","file":"class-snoopy.php","line":947,"missingDoc":true,"filters":[],"uses":{"setcookies":[950],"parse_url":[954],"is_array":[972,986,1075],"reset":[975],"urlencode":[979],"substr":[981],"count":[976,1002,1031,1071],"each":[988],"strlen":[998],"base64_encode":[1000],"strtr":[1003],"tempnam":[1013],"exec":[1015],"escapeshellcmd":[1015],"implode":[1024],"file":[1026],"preg_match":[1038,1045,1040,1035,1054,1062],"chop":[1038],"_expandlinks":[1064,1072],"preg_match_all":[1068],"unlink":[1081]},"used_by":[]},"Snoopy::setcookies":{"doc":"","file":"class-snoopy.php","line":1091,"missingDoc":true,"filters":[],"uses":{"count":[1093],"urldecode":[1096],"preg_match":[1095]},"used_by":[]},"Snoopy::_check_timeout":{"doc":"","file":"class-snoopy.php","line":1107,"missingDoc":true,"filters":[],"uses":{"socket_get_status":[1110]},"used_by":[]},"Snoopy::_connect":{"doc":"","file":"class-snoopy.php","line":1125,"missingDoc":true,"filters":[],"uses":{"fsockopen":[1142]},"used_by":[]},"Snoopy::_disconnect":{"doc":"","file":"class-snoopy.php","line":1178,"missingDoc":true,"filters":[],"uses":{"fclose":[1180]},"used_by":[]},"Snoopy::_prepare_post_body":{"doc":"","file":"class-snoopy.php","line":1192,"missingDoc":true,"filters":[],"uses":{"settype":[1194,1195,1234],"count":[1198,1198],"reset":[1203,1217,1232],"each":[1204,1206,1218,1220,1233,1235],"urlencode":[1207,1207,1210,1210],"is_array":[1205,1219],"is_object":[1205,1219],"md5":[1215],"uniqid":[1215],"microtime":[1215],"is_readable":[1236],"fopen":[1238],"fread":[1239],"filesize":[1239],"fclose":[1240],"basename":[1241]},"used_by":[]},"WP_Admin_Bar::__get":{"doc":"","file":"class-wp-admin-bar.php","line":15,"missingDoc":true,"filters":[],"uses":{"is_ssl":[18],"_deprecated_argument":[21]},"used_by":[]},"WP_Admin_Bar::initialize":{"doc":"","file":"class-wp-admin-bar.php","line":27,"missingDoc":true,"filters":["'admin_bar_init'"],"uses":{"get_blogs_of_user":[32],"get_current_user_id":[32,34],"get_active_blog_for_user":[34],"user_admin_url":[35],"trailingslashit":[35,39],"get_home_url":[35],"get_current_blog_id":[38],"home_url":[39],"is_multisite":[33],"is_user_logged_in":[30],"add_action":[44,46,56],"get_theme_support":[49],"current_theme_supports":[48],"wp_enqueue_script":[58],"wp_enqueue_style":[59]},"used_by":[]},"get_blogs_of_user":{"doc":"\/**\n * Get the blogs a user belongs to.\n *\n * @since 3.0.0\n *\n * @param int $user_id User ID\n * @param bool $all Whether to retrieve all blogs, or only blogs that are not marked as deleted, archived, or spam.\n * @return array A list of the user's blogs. An empty array if the user doesn't exist or belongs to no blogs.\n *\/","file":"user.php","line":681,"missingDoc":false,"filters":["'get_blogs_of_user'"],"uses":{"get_user_meta":[690],"get_current_blog_id":[695],"get_option":[698,702],"is_multisite":[694],"get_blog_details":[712,741],"defined":[711],"array_keys":[729],"substr":[732],"strpos":[734],"str_replace":[736],"is_numeric":[737]},"used_by":{"WP_Admin_Bar::initialize":[32],"wp_xmlrpc_server::wp_getUsersBlogs":[475],"get_dashboard_url":[2263],"get_active_blog_for_user":[72,96],"remove_user_from_blog":[230,252],"get_most_recent_post_of_user":[1367],"wp_user_settings":[544],"wp_set_all_user_settings":[706],"is_user_member_of_blog":[780]}},"get_active_blog_for_user":{"doc":"\/**\n * Get one of a user's active blogs\n *\n * Returns the user's primary blog, if she has one and\n * it is active. If it's inactive, function returns another\n * active blog of the user. If none are found, the user\n * is added as a Subscriber to the Dashboard Blog and that blog\n * is returned.\n *\n * @since MU 1.0\n * @uses get_blogs_of_user()\n * @uses add_user_to_blog()\n * @uses get_blog_details()\n *\n * @param int $user_id The unique ID of the user\n * @return object The blog object\n *\/","file":"ms-functions.php","line":70,"missingDoc":false,"filters":[],"uses":{"get_blogs_of_user":[72,96],"is_multisite":[76],"get_user_meta":[79,105,107],"current":[80],"update_user_meta":[83,91,106,108],"get_blog_details":[84,86,102],"add_user_to_blog":[90],"is_object":[103,95],"is_array":[98],"count":[98]},"used_by":{"WP_Admin_Bar::initialize":[34],"get_dashboard_url":[2273]}},"user_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for the current user.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2188,"missingDoc":false,"filters":["'user_admin_url'"],"uses":{"network_site_url":[2189],"ltrim":[2192],"is_string":[2191],"strpos":[2191]},"used_by":{"WP_Admin_Bar::initialize":[35],"self_admin_url":[2211],"get_dashboard_url":[2265,2277],"get_edit_profile_url":[2297]}},"get_theme_support":{"doc":"\/**\n * Gets the theme support arguments passed when registering that support\n *\n * @since 3.1\n * @param string $feature the feature to check\n * @return array The array of extra arguments\n *\/","file":"theme.php","line":1429,"missingDoc":false,"filters":[],"uses":{"func_num_args":[1434],"array_slice":[1437],"func_get_args":[1437]},"used_by":{"WP_Admin_Bar::initialize":[49],"WP_Customize_Manager::register_controls":[752,775,797,817,877],"wp_xmlrpc_server::wp_getPostFormats":[3374],"get_header_textcolor":[854],"display_header_text":[877],"get_header_image":[889],"is_random_header_image":[968],"get_custom_header":[1040,1058,1059],"get_background_image":[1109],"get_background_color":[1129],"_custom_header_background_just_in_time":[1397,1411],"_remove_theme_support":[1494,1504]}},"wp_enqueue_script":{"doc":"\/**\n * Enqueues script.\n *\n * Registers the script if src provided (does NOT overwrite) and enqueues.\n *\n * @since r16\n * @see wp_register_script() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":125,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[129],"sprintf":[129],"__":[129],"did_action":[128],"is_a":[127],"explode":[135],"add":[136],"add_data":[138],"enqueue":[140]},"used_by":{"WP_Admin_Bar::initialize":[58],"WP_Customize_Color_Control::enqueue":[354],"WP_Customize_Upload_Control::enqueue":[413],"WP_Customize_Manager::customize_preview_init":[332],"_WP_Editors::enqueue_scripts":[479,482,485,488,489,494,498],"add_thickbox":[2117],"wp_enqueue_media":[1542],"__main":[36]}},"wp_enqueue_style":{"doc":"\/**\n * Enqueue a CSS style file.\n *\n * Registers the style if src provided (does NOT overwrite) and enqueues.\n *\n * @since r79\n * @see WP_Styles::add(), WP_Styles::enqueue()\n * @global object $wp_styles The WP_Styles object for printing styles.\n * @link http:\/\/www.w3.org\/TR\/CSS2\/media.html#media-types List of CSS media types.\n *\n * @param string $handle Name of the stylesheet.\n * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '\/css\/mystyle.css'.\n * @param array $deps Array of handles (names) of any stylesheet that this stylesheet depends on.\n * (Stylesheets that must be loaded before this stylesheet.) Pass an empty array if there are no dependencies.\n * @param string|bool $ver String specifying the stylesheet version number, if it has one. This parameter\n * is used to ensure that the correct version is sent to the client regardless of caching, and so should be included\n * if a version number is available and makes sense for the stylesheet.\n * @param string $media The media for which this stylesheet has been defined.\n *\/","file":"functions.wp-styles.php","line":133,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[137],"sprintf":[137],"__":[137],"did_action":[136],"is_a":[135],"explode":[143],"add":[144],"enqueue":[146]},"used_by":{"WP_Admin_Bar::initialize":[59],"WP_Customize_Color_Control::enqueue":[355],"_WP_Editors::enqueue_scripts":[490],"wp_admin_css":[2098],"add_thickbox":[2118],"wp_enqueue_media":[1543]}},"WP_Admin_Bar::add_menu":{"doc":"","file":"class-wp-admin-bar.php","line":64,"missingDoc":true,"filters":[],"uses":{"add_node":[65]},"used_by":[]},"WP_Admin_Bar::remove_menu":{"doc":"","file":"class-wp-admin-bar.php","line":68,"missingDoc":true,"filters":[],"uses":{"remove_node":[69]},"used_by":[]},"WP_Admin_Bar::add_node":{"doc":"\/**\n * Add a node to the menu.\n *\n * @param array $args - The arguments for each node.\n * - id - string - The ID of the item.\n * - title - string - The title of the node.\n * - parent - string - The ID of the parent node. Optional.\n * - href - string - The link for the item. Optional.\n * - group - boolean - If the node is a group. Optional. Default false.\n * - meta - array - Meta data including the following keys: html, class, onclick, target, title, tabindex.\n *\/","file":"class-wp-admin-bar.php","line":83,"missingDoc":false,"filters":[],"uses":{"array_merge":[86],"func_get_arg":[86,86,85],"func_num_args":[85],"is_string":[85],"get_object_vars":[89,112],"is_object":[88],"_doing_it_wrong":[96],"__":[96],"esc_attr":[98],"sanitize_title":[98],"trim":[98],"get_node":[111],"wp_parse_args":[116,118],"_deprecated_argument":[127],"sprintf":[127],"_set_node":[131]},"used_by":[]},"_doing_it_wrong":{"doc":"\/**\n * Marks something as being incorrectly called.\n *\n * There is a hook doing_it_wrong_run that will be called that can be used\n * to get the backtrace up to what file and function called the deprecated\n * function.\n *\n * The current behavior is to trigger a user error if WP_DEBUG is true.\n *\n * @package WordPress\n * @subpackage Debug\n * @since 3.1.0\n * @access private\n *\n * @uses do_action() Calls 'doing_it_wrong_run' and passes the function arguments.\n * @uses apply_filters() Calls 'doing_it_wrong_trigger_error' and expects boolean value of true to do\n * trigger or false to not trigger error.\n *\n * @param string $function The function that was called.\n * @param string $message A message explaining what has been done incorrectly.\n * @param string $version The version of WordPress where the message was added.\n *\/","file":"functions.php","line":2973,"missingDoc":false,"filters":["'doing_it_wrong_run'","'doing_it_wrong_trigger_error'"],"uses":{"is_null":[2979],"sprintf":[2979,2981],"__":[2979,2980,2981],"trigger_error":[2981]},"used_by":{"WP_Admin_Bar::add_node":[96],"wp_print_scripts":[29],"wp_register_script":[56],"wp_localize_script":[90],"wp_deregister_script":[109],"wp_enqueue_script":[129],"wp_dequeue_script":[153],"wp_script_is":[179],"wp_print_styles":[30],"wp_add_inline_style":[57],"wp_register_style":[85],"wp_deregister_style":[106],"wp_enqueue_style":[137],"wp_dequeue_style":[159],"wp_style_is":[186],"check_admin_referer":[808],"register_uninstall_hook":[679],"is_archive":[143],"is_post_type_archive":[164],"is_attachment":[184],"is_author":[208],"is_category":[232],"is_tag":[256],"is_tax":[285],"is_comments_popup":[305],"is_date":[325],"is_day":[345],"is_feed":[366],"is_comment_feed":[386],"is_front_page":[416],"is_home":[445],"is_month":[465],"is_page":[492],"is_paged":[512],"is_preview":[532],"is_robots":[552],"is_search":[572],"is_single":[601],"is_singular":[628],"is_time":[648],"is_trackback":[668],"is_year":[688],"is_404":[708]}},"WP_Admin_Bar::_set_node":{"doc":"","file":"class-wp-admin-bar.php","line":134,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::get_node":{"doc":"\/**\n * Gets a node.\n *\n * @return object Node.\n *\/","file":"class-wp-admin-bar.php","line":143,"missingDoc":false,"filters":[],"uses":{"_get_node":[144]},"used_by":[]},"WP_Admin_Bar::_get_node":{"doc":"","file":"class-wp-admin-bar.php","line":148,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::get_nodes":{"doc":"","file":"class-wp-admin-bar.php","line":159,"missingDoc":true,"filters":[],"uses":{"_get_nodes":[160]},"used_by":[]},"WP_Admin_Bar::_get_nodes":{"doc":"","file":"class-wp-admin-bar.php","line":169,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::add_group":{"doc":"\/**\n * Add a group to a menu node.\n *\n * @since 3.3.0\n *\n * @param array $args - The arguments for each node.\n * - id - string - The ID of the item.\n * - parent - string - The ID of the parent node. Optional. Default root.\n * - meta - array - Meta data including the following keys: class, onclick, target, title.\n *\/","file":"class-wp-admin-bar.php","line":186,"missingDoc":false,"filters":[],"uses":{"add_node":[189]},"used_by":[]},"WP_Admin_Bar::remove_node":{"doc":"\/**\n * Remove a node.\n *\n * @param string The ID of the item.\n *\/","file":"class-wp-admin-bar.php","line":197,"missingDoc":false,"filters":[],"uses":{"_unset_node":[198]},"used_by":[]},"WP_Admin_Bar::_unset_node":{"doc":"","file":"class-wp-admin-bar.php","line":201,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Admin_Bar::render":{"doc":"","file":"class-wp-admin-bar.php","line":205,"missingDoc":true,"filters":[],"uses":{"_bind":[206],"_render":[208]},"used_by":[]},"WP_Admin_Bar::_bind":{"doc":"","file":"class-wp-admin-bar.php","line":211,"missingDoc":true,"filters":[],"uses":{"remove_node":[217],"add_node":[218],"_get_nodes":[224,234],"_get_node":[239,256,274,283,299,302,327],"_set_node":[263,289],"array_search":[307],"array_splice":[311]},"used_by":[]},"WP_Admin_Bar::_render":{"doc":"","file":"class-wp-admin-bar.php","line":332,"missingDoc":true,"filters":[],"uses":{"strpos":[341,343,339],"wp_is_mobile":[345],"_e":[351,357],"esc_attr_e":[352],"_render_group":[354],"esc_url":[357],"wp_logout_url":[357]},"used_by":[]},"wp_is_mobile":{"doc":"\/**\n * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)\n *\n * @return bool true|false\n *\/","file":"vars.php","line":106,"missingDoc":false,"filters":[],"uses":{"strpos":[114,115,116,117,118,119,120]},"used_by":{"WP_Admin_Bar::_render":[345],"_device_can_upload":[3846],"user_can_richedit":[1759,1760],"wp_plupload_default_settings":[1271,1287],"_wp_customize_loader_settings":[1653,1654]}},"_e":{"doc":"\/**\n * Displays the returned translated text from translate().\n *\n * @see translate() Echoes returned translate() string\n * @since 1.2.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":141,"missingDoc":false,"filters":[],"uses":{"translate":[142]},"used_by":{"WP_Admin_Bar::_render":[351,357],"WP_Customize_Upload_Control::render_content":[444,445],"WP_Customize_Image_Control::render_content":[558],"WP_Customize_Image_Control::tab_upload_new":[597,602,605],"_WP_Editors::wp_fullscreen_html":[669,673,718,718,737],"_WP_Editors::wp_link_dialog":[815,817,820,823,827,831,843,856],"Walker_Comment::start_el":[1357],"WP_Widget_Pages::form":[66,68,70,71,72,76,78],"WP_Widget_Links::form":[148,159,161,162,163,169,171,173,175,178],"WP_Widget_Search::form":[215],"WP_Widget_Archives::form":[281,283,285],"WP_Widget_Meta::widget":[316,317,320],"WP_Widget_Meta::form":[339],"WP_Widget_Calendar::form":[379],"WP_Widget_Text::form":[425,430],"WP_Widget_Categories::form":[511,515,518,521],"WP_Widget_Recent_Posts::form":[615,618,622],"WP_Widget_Recent_Comments::form":[722,725],"wp_widget_rss_form":[943,946,949,958,961,964],"WP_Widget_Tag_Cloud::form":[1067,1069],"WP_Nav_Menu_Widget::form":[1140,1144],"dead_db":[2771,2775],"__main":[16,162,163,164,165,171,172,173,174,175,179,180,181,182,183,184,185,186,187,191,192,195,195,195,195,196,196,197,197,198,198,200,200,201,201,202,202,203,203,204,204,207,209,209,209,209,210,210,211,211,212,212,213,213,214,214,215,215,216,216,217,217,220,222,223,224,229,231,233,234,33,35,62,66,75,80,85,90,103,108,114,17,49,72,77,77,80,80,83,21,57,69,73,74],"wp_maintenance":[174,178],"wp_print_media_templates":[40,51,53,58,59,110,111,125,148,152,176,203,204,209,222,226,231,236,245,248,255,259,284,310,340,343,360,372,379,391,397,402,420],"wp_list_post_revisions":[1443,1444],"wp_rss":[895]}},"esc_attr_e":{"doc":"\/**\n * Displays translated text that has been escaped for safe use in an attribute.\n *\n * @see translate() Echoes returned translate() string\n * @see esc_attr()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":155,"missingDoc":false,"filters":[],"uses":{"esc_attr":[156],"translate":[156]},"used_by":{"WP_Admin_Bar::_render":[352],"WP_Customize_Color_Control::render_content":[387],"_WP_Editors::wp_link_dialog":[853],"WP_Widget_Meta::widget":[318],"__main":[162,163,164,165,237,245,245,98,72,91,73,74,75],"wp_print_media_templates":[32,160,164,166,168,267,270,273,276,292,295,298,301,351,354,405,408,411,414,423,426,429],"wp_list_post_revisions":[1424]}},"WP_Admin_Bar::_render_container":{"doc":"","file":"class-wp-admin-bar.php","line":363,"missingDoc":true,"filters":[],"uses":{"esc_attr":[367],"_render_group":[369]},"used_by":[]},"WP_Admin_Bar::_render_group":{"doc":"","file":"class-wp-admin-bar.php","line":374,"missingDoc":true,"filters":[],"uses":{"_render_container":[376],"esc_attr":[382,386],"trim":[382],"_render_item":[388]},"used_by":[]},"WP_Admin_Bar::_render_item":{"doc":"","file":"class-wp-admin-bar.php","line":393,"missingDoc":true,"filters":[],"uses":{"esc_attr":[414,418,425,428,434],"trim":[414],"esc_url":[420],"esc_js":[422],"_render_group":[450]},"used_by":[]},"WP_Admin_Bar::recursive_render":{"doc":"","file":"class-wp-admin-bar.php","line":462,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[463],"_render_item":[464]},"used_by":[]},"WP_Admin_Bar::add_menus":{"doc":"","file":"class-wp-admin-bar.php","line":467,"missingDoc":true,"filters":["'add_admin_bar_menus'"],"uses":{"add_action":[469,470,471,474,475,476,477,481,482,484,486],"is_network_admin":[480],"is_user_admin":[480]},"used_by":[]},"WP_Ajax_Response::__construct":{"doc":"\/**\n * Constructor - Passes args to {@link WP_Ajax_Response::add()}.\n *\n * @since 2.1.0\n * @see WP_Ajax_Response::add()\n *\n * @param string|array $args Optional. Will be passed to add() method.\n * @return WP_Ajax_Response\n *\/","file":"class-wp-ajax-response.php","line":27,"missingDoc":false,"filters":[],"uses":{"add":[29]},"used_by":[]},"WP_Ajax_Response::add":{"doc":"\/**\n * Append to XML response based on given arguments.\n *\n * The arguments that can be passed in the $args parameter are below. It is\n * also possible to pass a WP_Error object in either the 'id' or 'data'\n * argument. The parameter isn't actually optional, content should be given\n * in order to send the correct response.\n *\n * 'what' argument is a string that is the XMLRPC response type.\n * 'action' argument is a boolean or string that acts like a nonce.\n * 'id' argument can be WP_Error or an integer.\n * 'old_id' argument is false by default or an integer of the previous ID.\n * 'position' argument is an integer or a string with -1 = top, 1 = bottom,\n * html ID = after, -html ID = before.\n * 'data' argument is a string with the content or message.\n * 'supplemental' argument is an array of strings that will be children of\n * the supplemental element.\n *\n * @since 2.1.0\n *\n * @param string|array $args Override defaults.\n * @return string XML response.\n *\/","file":"class-wp-ajax-response.php","line":55,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[63],"extract":[64],"preg_replace":[65],"is_wp_error":[67,73],"get_error_message":[75],"get_error_data":[76],"get_class":[80],"get_object_vars":[81],"is_object":[79],"is_array":[88,100],"is_scalar":[86],"get_error_codes":[74]},"used_by":[]},"WP_Ajax_Response::send":{"doc":"\/**\n * Display XML formatted responses.\n *\n * Sets the content type header to text\/xml.\n *\n * @since 2.1.0\n *\/","file":"class-wp-ajax-response.php","line":128,"missingDoc":false,"filters":[],"uses":{"header":[129],"get_option":[129,130],"wp_die":[135],"defined":[134]},"used_by":[]},"wp_die":{"doc":"\/**\n * Kill WordPress execution and display HTML message with error message.\n *\n * This function complements the die() PHP function. The difference is that\n * HTML will be displayed to the user. It is recommended to use this function\n * only, when the execution should not continue any further. It is not\n * recommended to call this function very often and try to handle as many errors\n * as possible silently.\n *\n * @since 2.0.4\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2047,"missingDoc":false,"filters":["'wp_die_ajax_handler'","'wp_die_xmlrpc_handler'","'wp_die_handler'"],"uses":{"defined":[2050,2048],"call_user_func":[2055]},"used_by":{"WP_Ajax_Response::send":[135],"WP_Customize_Manager::wp_die":[80,85],"WP_Customize_Manager::setup_theme":[115,120,131,135,138],"wp_allow_comment":[681],"check_comment_flood_db":[740],"do_feed":[1010],"wp_nonce_ays":[2029],"wp_send_json":[2323],"dead_db":[2758],"wp_set_wpdb_vars":[370],"wp_not_installed":[428],"signup_nonce_check":[1641],"maybe_add_existing_user_to_blog":[1686,1688],"ms_site_check":[89,96,103],"wpmu_current_site":[219,221],"ms_not_installed":[257],"__main":[35,122],"wp_protect_special_option":[109],"check_ajax_referer":[841],"_show_post_preview":[5251],"wpdb::print_error":[1045],"wpdb::bail":[1636]}},"WP_Customize_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":88,"missingDoc":false,"filters":[],"uses":{"array_keys":[89],"get_object_vars":[89],"get_setting":[106,109],"is_array":[104]},"used_by":[]},"WP_Customize_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":120,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Control::value":{"doc":"\/**\n * Fetch a setting's value.\n * Grabs the main setting by default.\n *\n * @since 3.4.0\n *\n * @param string $setting_key\n * @return mixed The requested setting's value, if the setting exists.\n *\/","file":"class-wp-customize-control.php","line":132,"missingDoc":false,"filters":[],"uses":{"value":[134]},"used_by":[]},"WP_Customize_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":142,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Control::check_capabilities":{"doc":"\/**\n * Check if the theme supports the control and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true.\n *\/","file":"class-wp-customize-control.php","line":158,"missingDoc":false,"filters":[],"uses":{"check_capabilities":[160,165],"get_section":[164]},"used_by":[]},"WP_Customize_Control::maybe_render":{"doc":"\/**\n * Check capabilities and render the control.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::render()\n *\/","file":"class-wp-customize-control.php","line":177,"missingDoc":false,"filters":["'customize_render_control'","'customize_render_control_' . $this->id"],"uses":{"check_capabilities":[178],"render":[184]},"used_by":[]},"WP_Customize_Control::render":{"doc":"\/**\n * Render the control. Renders the control wrapper, then calls $this->render_content().\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":192,"missingDoc":false,"filters":[],"uses":{"str_replace":[193,193],"esc_attr":[196,196],"render_content":[197]},"used_by":[]},"WP_Customize_Control::get_link":{"doc":"\/**\n * Get the data link parameter for a setting.\n *\n * @since 3.4.0\n *\n * @param string $setting_key\n * @return string Data link parameter, if $setting_key is a valid setting, empty string otherwise.\n *\/","file":"class-wp-customize-control.php","line":209,"missingDoc":false,"filters":[],"uses":{"esc_attr":[213]},"used_by":[]},"WP_Customize_Control::link":{"doc":"\/**\n * Render the data link parameter for a setting\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::get_link()\n *\n * @param string $setting_key\n *\/","file":"class-wp-customize-control.php","line":224,"missingDoc":false,"filters":[],"uses":{"get_link":[225]},"used_by":[]},"WP_Customize_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * Allows the content to be overriden without having to rewrite the wrapper.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":235,"missingDoc":false,"filters":[],"uses":{"esc_html":[240,249,260,266,277],"esc_attr":[241,248,265,265,281],"value":[241,248,248,265,281,294],"link":[241,248,265,278],"checked":[248,265],"selected":[281],"wp_dropdown_pages":[288],"__":[292],"str_replace":[299],"get_link":[299],"printf":[301]},"used_by":[]},"checked":{"doc":"\/**\n * Outputs the html checked attribute.\n *\n * Compares the first two arguments and if identical marks as checked\n *\n * @since 1.0.0\n *\n * @param mixed $checked One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2226,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2227]},"used_by":{"WP_Customize_Control::render_content":[248,265],"WP_Widget_Links::form":[168,170,172,174],"WP_Widget_Text::form":[430],"WP_Widget_Categories::form":[514,517,520],"WP_Widget_Recent_Posts::form":[621]}},"selected":{"doc":"\/**\n * Outputs the html selected attribute.\n *\n * Compares the first two arguments and if identical marks as selected\n *\n * @since 1.0.0\n *\n * @param mixed $selected One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2242,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2243]},"used_by":{"WP_Customize_Control::render_content":[281],"WP_Widget_Pages::form":[70,71,72],"WP_Widget_Links::form":[154,161,162,163,164],"wp_widget_rss_form":[953],"WP_Widget_Tag_Cloud::form":[1076],"WP_Nav_Menu_Widget::form":[1149],"wp_print_media_templates":[329,364],"wp_dropdown_users":[1052,1059,1068]}},"wp_dropdown_pages":{"doc":"\/**\n * Retrieve or display list of pages as a dropdown (select list).\n *\n * @since 2.1.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return string HTML content, if not displaying.\n *\/","file":"post-template.php","line":769,"missingDoc":false,"filters":["'wp_dropdown_pages'"],"uses":{"wp_parse_args":[778],"extract":[779],"get_pages":[781],"esc_attr":[788,788,792],"walk_page_dropdown_tree":[793]},"used_by":{"WP_Customize_Control::render_content":[288]}},"WP_Customize_Color_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":343,"missingDoc":false,"filters":[],"uses":{"__":[344]},"used_by":[]},"WP_Customize_Color_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":353,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[354],"wp_enqueue_style":[355]},"used_by":[]},"WP_Customize_Color_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":364,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Color_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":374,"missingDoc":false,"filters":[],"uses":{"strpos":[378],"esc_attr":[380],"esc_html":[385],"esc_attr_e":[387]},"used_by":[]},"WP_Customize_Upload_Control::enqueue":{"doc":"\/**\n * Enqueue control related scripts\/styles.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":412,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[413]},"used_by":[]},"WP_Customize_Upload_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":422,"missingDoc":false,"filters":[],"uses":{"implode":[431]},"used_by":[]},"WP_Customize_Upload_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":439,"missingDoc":false,"filters":[],"uses":{"esc_html":[442],"_e":[444,445]},"used_by":[]},"WP_Customize_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * If $args['settings'] is not defined, use the $id as the setting ID.\n *\n * @since 3.4.0\n * @uses WP_Customize_Upload_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n * @param string $id\n * @param array $args\n *\/","file":"class-wp-customize-control.php","line":479,"missingDoc":false,"filters":[],"uses":{"__":[480,484,485],"add_tab":[484,485],"add_action":[488]},"used_by":[]},"WP_Customize_Image_Control::prepare_control":{"doc":"\/**\n * Prepares the control.\n *\n * If no tabs exist, removes the control from the manager.\n *\n * @since 3.4.2\n *\/","file":"class-wp-customize-control.php","line":498,"missingDoc":false,"filters":[],"uses":{"remove_control":[500]},"used_by":[]},"WP_Customize_Image_Control::to_json":{"doc":"\/**\n * Refresh the parameters passed to the JavaScript via JSON.\n *\n * @since 3.4.0\n * @uses WP_Customize_Upload_Control::to_json()\n *\/","file":"class-wp-customize-control.php","line":509,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::render_content":{"doc":"\/**\n * Render the control's content.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":519,"missingDoc":false,"filters":[],"uses":{"value":[520],"call_user_func":[522,552],"esc_html":[526,546],"esc_url":[534],"set_url_scheme":[534],"esc_attr":[545,551],"_e":[558]},"used_by":[]},"set_url_scheme":{"doc":"\/**\n * Set the scheme for a URL\n *\n * @since 3.4.0\n *\n * @param string $url Absolute url that includes a scheme\n * @param string $scheme Optional. Scheme to give $url. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'.\n * @return string $url URL with chosen scheme.\n *\/","file":"link-template.php","line":2225,"missingDoc":false,"filters":["'set_url_scheme'"],"uses":{"force_ssl_admin":[2230,2232,2228],"is_ssl":[2235],"force_ssl_login":[2228],"in_array":[2227],"preg_replace":[2239,2241]},"used_by":{"WP_Customize_Image_Control::render_content":[534],"WP_Customize_Image_Control::print_tab_image":[627,628],"WP_Customize_Header_Image_Control::print_header_image":[783,784],"_WP_Editors::editor_settings":[240],"wp_xmlrpc_server::_multisite_getUsersBlogs":[3665],"self_link":[491],"url_is_accessable_via_ssl":[2808],"get_home_url":[1920],"get_site_url":[1972],"content_url":[2042],"plugins_url":[2075],"network_site_url":[2112],"network_home_url":[2148],"filter_SSL":[1902],"_wp_menu_item_classes_by_context":[367],"auth_redirect":[752,771,785],"get_header_image":[897],"_custom_background_cb":[1149]}},"WP_Customize_Image_Control::add_tab":{"doc":"\/**\n * Add a tab to the control.\n *\n * @since 3.4.0\n *\n * @param string $id\n * @param string $label\n * @param mixed $callback\n *\/","file":"class-wp-customize-control.php","line":573,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::remove_tab":{"doc":"\/**\n * Remove a tab from the control.\n *\n * @since 3.4.0\n *\n * @param string $id\n *\/","file":"class-wp-customize-control.php","line":587,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::tab_upload_new":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":594,"missingDoc":false,"filters":[],"uses":{"_e":[597,602,605],"_device_can_upload":[595]},"used_by":[]},"_device_can_upload":{"doc":"\/**\n * Test if the current device has the capability to upload files.\n *\n * @since 3.4.0\n * @access private\n *\n * @return bool true|false\n *\/","file":"functions.php","line":3845,"missingDoc":false,"filters":[],"uses":{"wp_is_mobile":[3846],"preg_match":[3854],"version_compare":[3854],"strpos":[3851,3852,3853]},"used_by":{"WP_Customize_Image_Control::tab_upload_new":[595],"wp_print_media_templates":[50],"wp_plupload_default_settings":[1288]}},"WP_Customize_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":614,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Image_Control::print_tab_image":{"doc":"\/**\n * @since 3.4.0\n *\n * @param string $url\n * @param string $thumbnail_url\n *\/","file":"class-wp-customize-control.php","line":626,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[627,628],"esc_url":[630,631]},"used_by":[]},"WP_Customize_Background_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::__construct()\n *\n * @param WP_Customize_Manager $manager\n *\/","file":"class-wp-customize-control.php","line":654,"missingDoc":false,"filters":[],"uses":{"__":[656,663],"add_tab":[663]},"used_by":[]},"WP_Customize_Background_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":669,"missingDoc":false,"filters":[],"uses":{"get_posts":[670],"get_stylesheet":[673],"print_tab_image":[684],"esc_url_raw":[684]},"used_by":[]},"get_posts":{"doc":"\/**\n * Retrieve list of latest posts or posts matching criteria.\n *\n * The defaults are as follows:\n * 'numberposts' - Default is 5. Total number of posts to retrieve.\n * 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n * 'category' - What category to pull the posts from.\n * 'orderby' - Default is 'post_date'. How to order the posts.\n * 'order' - Default is 'DESC'. The order to retrieve the posts.\n * 'include' - See {@link WP_Query::query()} for more.\n * 'exclude' - See {@link WP_Query::query()} for more.\n * 'meta_key' - See {@link WP_Query::query()} for more.\n * 'meta_value' - See {@link WP_Query::query()} for more.\n * 'post_type' - Default is 'post'. Can be 'page', or 'attachment' to name a few.\n * 'post_parent' - The parent of the post or post type.\n * 'post_status' - Default is 'publish'. Post status to retrieve.\n *\n * @since 1.2.0\n * @uses $wpdb\n * @uses WP_Query::query() See for more default arguments and information.\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/get_posts\n *\n * @param array $args Optional. Overrides defaults.\n * @return array List of posts.\n *\/","file":"post.php","line":1699,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1709],"wp_parse_id_list":[1717,1721],"count":[1718],"query":[1727]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[670],"wp_xmlrpc_server::wp_getPages":[2310],"wp_xmlrpc_server::wp_getMediaLibrary":[3332],"get_boundary_post":[1333],"gallery_shortcode":[714],"wp_get_nav_menu_items":[493,516],"get_children":[311],"wp_get_recent_posts":[2649],"WP_Query::get_posts":[2757],"WP_Query::query":[2972],"get_uploaded_header_images":[1003]}},"get_stylesheet":{"doc":"\/**\n * Retrieve name of the current stylesheet.\n *\n * The theme name that the administrator has currently set the front end theme\n * as.\n *\n * For all extensive purposes, the template name and the stylesheet name are\n * going to be the same for most cases.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet' filter on stylesheet name.\n *\n * @return string Stylesheet name.\n *\/","file":"theme.php","line":146,"missingDoc":false,"filters":["'stylesheet'"],"uses":{"get_option":[147]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[673],"WP_Customize_Manager::setup_theme":[122],"WP_Customize_Manager::is_theme_active":[269],"WP_Customize_Manager::customize_preview_init":[328],"WP_Customize_Manager::customize_preview_settings":[386,387],"WP_Customize_Manager::get_stylesheet":[452],"WP_Customize_Manager::get_stylesheet_root":[474],"WP_Customize_Manager::save":[498,505],"WP_Theme::__get":[330],"WP_Theme::offsetGet":[404],"WP_Theme::markup_header":[644],"WP_Theme::is_allowed":[1053,1059],"get_themes":[2938],"wp_get_themes":[38],"wp_get_theme":[96],"get_stylesheet_directory":[159],"get_stylesheet_directory_uri":[174],"switch_theme":[699],"validate_current_theme":[726],"wp_update_themes":[251,253,260]}},"esc_url_raw":{"doc":"\/**\n * Performs esc_url() for database usage.\n *\n * @since 2.8.0\n * @uses esc_url()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols An array of acceptable protocols.\n * @return string The cleaned URL.\n *\/","file":"formatting.php","line":2622,"missingDoc":false,"filters":[],"uses":{"esc_url":[2623]},"used_by":{"WP_Customize_Background_Image_Control::tab_uploaded":[684],"WP_Theme::sanitize_header":[619],"wp_widget_rss_process":[997],"sanitize_url":[2068],"sanitize_option":[2848,2858,2910],"get_pagenum_link":[1472],"wp_update_nav_menu_item":[382],"get_header_image":[897],"get_uploaded_header_images":[1009]}},"WP_Customize_Background_Image_Control::tab_default_background":{"doc":"\/**\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::print_tab_image()\n *\/","file":"class-wp-customize-control.php","line":691,"missingDoc":false,"filters":[],"uses":{"print_tab_image":[692]},"used_by":[]},"WP_Customize_Header_Image_Control::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n * @uses WP_Customize_Image_Control::__construct()\n * @uses WP_Customize_Image_Control::add_tab()\n *\n * @param WP_Customize_Manager $manager\n *\/","file":"class-wp-customize-control.php","line":727,"missingDoc":false,"filters":[],"uses":{"__":[729,739,740,741,742],"remove_tab":[747]},"used_by":[]},"WP_Customize_Header_Image_Control::prepare_control":{"doc":"\/**\n * Prepares the control.\n *\n * If no tabs exist, removes the control from the manager.\n *\n * @since 3.4.2\n *\/","file":"class-wp-customize-control.php","line":757,"missingDoc":false,"filters":[],"uses":{"process_default_headers":[763],"get_uploaded_header_images":[765],"add_tab":[768],"__":[768],"remove_tab":[771]},"used_by":[]},"get_uploaded_header_images":{"doc":"\/**\n * Get the header images uploaded for the current theme.\n *\n * @since 3.2.0\n *\n * @return array\n *\/","file":"theme.php","line":999,"missingDoc":false,"filters":[],"uses":{"get_posts":[1003],"get_option":[1003],"esc_url_raw":[1009],"wp_get_attachment_metadata":[1010],"basename":[1011]},"used_by":{"WP_Customize_Header_Image_Control::prepare_control":[765],"_get_random_header_data":[919]}},"WP_Customize_Header_Image_Control::print_header_image":{"doc":"\/**\n * @since 3.4.0\n *\n * @param mixed $choice Which header image to select. (@see Custom_Image_Header::get_header_image() )\n * @param array $header\n *\/","file":"class-wp-customize-control.php","line":782,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[783,784],"esc_url":[795,797],"esc_attr":[796],"json_encode":[796]},"used_by":[]},"json_encode":{"doc":"","file":"compat.php","line":65,"missingDoc":true,"filters":[],"uses":{"is_a":[68],"encodeUnsafe":[73]},"used_by":{"WP_Customize_Header_Image_Control::print_header_image":[796],"WP_Customize_Manager::customize_preview_settings":[397],"WP_Scripts::localize":[148],"wp_send_json":[2321],"wp_mce_translation":[554,555,556,557,558,559],"wp_plupload_default_settings":[1293],"_wp_customize_loader_settings":[1663]}},"WP_Customize_Header_Image_Control::tab_uploaded":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":805,"missingDoc":false,"filters":[],"uses":{"print_header_image":[809]},"used_by":[]},"WP_Customize_Header_Image_Control::tab_default_headers":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-control.php","line":815,"missingDoc":false,"filters":[],"uses":{"print_header_image":[817]},"used_by":[]},"WP_Customize_Manager::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":30,"missingDoc":false,"filters":[],"uses":{"add_filter":[35],"add_action":[37,38,41,51,53,54,55],"remove_action":[44,47,48,49]},"used_by":[]},"remove_action":{"doc":"\/**\n * Removes a function from a specified action hook.\n *\n * This function removes a function attached to a specified action hook. This\n * method can be used to remove default functions attached to a specific filter\n * hook and possibly replace them with a substitute.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The action hook to which the function to be removed is hooked.\n * @param callback $function_to_remove The name of the function which should be removed.\n * @param int $priority optional The priority of the function (default: 10).\n * @return boolean Whether the function is removed.\n *\/","file":"plugin.php","line":529,"missingDoc":false,"filters":[],"uses":{"remove_filter":[530]},"used_by":{"WP_Customize_Manager::__construct":[44,47,48,49],"WP_Customize_Manager::remove_preview_signature":[417],"automatic_feed_links":[2456],"wp_print_media_templates":[69],"wp_get_post_autosave":[4999],"add_feed":[92],"_remove_theme_support":[1496,1497,1505,1506]}},"WP_Customize_Manager::doing_ajax":{"doc":"\/**\n * Return true if it's an AJAX request.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"class-wp-customize-manager.php","line":65,"missingDoc":false,"filters":[],"uses":{"defined":[66]},"used_by":[]},"WP_Customize_Manager::wp_die":{"doc":"\/**\n * Custom wp_die wrapper. Returns either the standard message for UI\n * or the AJAX message.\n *\n * @since 3.4.0\n *\n * @param mixed $ajax_message AJAX return\n * @param mixed $message UI message\n *\/","file":"class-wp-customize-manager.php","line":78,"missingDoc":false,"filters":[],"uses":{"wp_die":[80,85],"doing_ajax":[79],"__":[83]},"used_by":[]},"WP_Customize_Manager::wp_die_handler":{"doc":"\/**\n * Return the AJAX wp_die() handler if it's a customized request.\n *\n * @since 3.4.0\n *\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":95,"missingDoc":false,"filters":[],"uses":{"doing_ajax":[96]},"used_by":[]},"WP_Customize_Manager::setup_theme":{"doc":"\/**\n * Start preview and customize theme.\n *\n * Check if customize query variable exist. Init filters to filter the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":109,"missingDoc":false,"filters":[],"uses":{"send_origin_headers":[110],"auth_redirect":[113],"doing_ajax":[114,112],"is_user_logged_in":[114],"wp_die":[115,120,131,135,138],"is_admin":[112],"show_admin_bar":[117],"current_user_can":[119,130],"get_stylesheet":[122],"wp_get_theme":[124],"add_action":[128],"errors":[134],"theme":[134,137],"is_allowed":[137],"is_theme_active":[126],"start_previewing_theme":[141]},"used_by":[]},"send_origin_headers":{"doc":"\/**\n * Send Access-Control-Allow-Origin and related headers if the current request\n * is from an allowed origin.\n *\n * If the request is an OPTIONS request, the script exits with either access\n * control headers sent, or a 403 response if the origin is not allowed. For\n * other request methods, you will receive a return value.\n *\n * @since 3.4.0\n *\n * @return bool|string Returns the origin URL if headers are sent. Returns false\n * if headers are not sent.\n *\/","file":"http.php","line":296,"missingDoc":false,"filters":[],"uses":{"get_http_origin":[297],"header":[300,301],"is_allowed_http_origin":[299],"status_header":[308]},"used_by":{"WP_Customize_Manager::setup_theme":[110]}},"auth_redirect":{"doc":"\/**\n * Checks if a user is logged in, if not it redirects them to the login page.\n *\n * @since 1.5\n *\/","file":"pluggable.php","line":742,"missingDoc":false,"filters":["'secure_auth_redirect'","'auth_redirect_scheme'","'auth_redirect'"],"uses":{"is_ssl":[745,750],"force_ssl_admin":[745],"wp_redirect":[752,755,771,774,789],"set_url_scheme":[752,771,785],"strpos":[751,750,770,769,785],"is_user_admin":[760],"get_user_option":[769],"wp_validate_auth_cookie":[765],"nocache_headers":[783],"wp_get_referer":[785,785],"wp_login_url":[787]},"used_by":{"WP_Customize_Manager::setup_theme":[113]}},"wp_get_theme":{"doc":"\/**\n * Gets a WP_Theme object for a theme.\n *\n * @since 3.4.0\n *\n * @param string $stylesheet Directory name for the theme. Optional. Defaults to current theme.\n * @param string $theme_root Absolute path of the theme root to look in. Optional. If not specified, get_raw_theme_root()\n * \tis used to calculate the theme root for the $stylesheet provided (or current theme).\n * @return WP_Theme Theme object. Be sure to check the object's exists() method if you need to confirm the theme's existence.\n *\/","file":"theme.php","line":92,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[96],"get_raw_theme_root":[99],"in_array":[102]},"used_by":{"WP_Customize_Manager::setup_theme":[124],"get_current_theme":[2982],"wp_insert_post":[2932],"switch_theme":[669,670],"get_theme_mods":[751],"remove_theme_mods":[842],"check_theme_switched":[1610]}},"WP_Customize_Manager::after_setup_theme":{"doc":"\/**\n * Callback to validate a theme once it is loaded\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":149,"missingDoc":false,"filters":[],"uses":{"wp_redirect":[151],"doing_ajax":[150],"validate_current_theme":[150]},"used_by":[]},"validate_current_theme":{"doc":"\/**\n * Checks that current theme files 'index.php' and 'style.css' exists.\n *\n * Does not check the default theme, which is the fallback and should always exist.\n * Will switch theme to the fallback theme if current theme does not validate.\n * You can use the 'validate_current_theme' filter to return false to\n * disable this functionality.\n *\n * @since 1.5.0\n * @see WP_DEFAULT_THEME\n *\n * @return bool\n *\/","file":"theme.php","line":716,"missingDoc":false,"filters":["'validate_current_theme'"],"uses":{"defined":[718],"switch_theme":[722,727,732],"get_template":[721],"file_exists":[721,726,731],"get_template_directory":[721,726],"get_stylesheet":[726],"is_child_theme":[731],"get_stylesheet_directory":[731]},"used_by":{"WP_Customize_Manager::after_setup_theme":[150]}},"WP_Customize_Manager::start_previewing_theme":{"doc":"\/**\n * Start previewing the selected theme.\n *\n * Adds filters to change the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":163,"missingDoc":false,"filters":["'start_previewing_theme'"],"uses":{"is_preview":[165],"add_filter":[171,172,173,176,177,180,181],"is_theme_active":[170]},"used_by":[]},"WP_Customize_Manager::stop_previewing_theme":{"doc":"\/**\n * Stop previewing the selected theme.\n *\n * Removes filters to change the current theme.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":194,"missingDoc":false,"filters":["'stop_previewing_theme'"],"uses":{"is_preview":[195],"remove_filter":[201,202,203,206,207,210,211],"is_theme_active":[200]},"used_by":[]},"remove_filter":{"doc":"\/**\n * Removes a function from a specified filter hook.\n *\n * This function removes a function attached to a specified filter hook. This\n * method can be used to remove default functions attached to a specific filter\n * hook and possibly replace them with a substitute.\n *\n * To remove a hook, the $function_to_remove and $priority arguments must match\n * when the hook was added. This goes for both filters and actions. No warning\n * will be given on removal failure.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n *\n * @param string $tag The filter hook to which the function to be removed is hooked.\n * @param callback $function_to_remove The name of the function which should be removed.\n * @param int $priority optional. The priority of the function (default: 10).\n * @param int $accepted_args optional. The number of arguments the function accepts (default: 1).\n * @return boolean Whether the function existed before it was removed.\n *\/","file":"plugin.php","line":260,"missingDoc":false,"filters":[],"uses":{"_wp_filter_build_unique_id":[261]},"used_by":{"WP_Customize_Manager::stop_previewing_theme":[201,202,203,206,207,210,211],"kses_remove_filters":[1357,1360,1361,1364,1365,1366],"_wp_post_thumbnail_class_filter_remove":[606],"__main":[62,63,33],"welcome_user_msg_filter":[1848],"remove_action":[530]}},"WP_Customize_Manager::theme":{"doc":"\/**\n * Get the theme being customized.\n *\n * @since 3.4.0\n *\n * @return WP_Theme\n *\/","file":"class-wp-customize-manager.php","line":224,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::settings":{"doc":"\/**\n * Get the registered settings.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":235,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::controls":{"doc":"\/**\n * Get the registered controls.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":246,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::sections":{"doc":"\/**\n * Get the registered sections.\n *\n * @since 3.4.0\n *\n * @return array\n *\/","file":"class-wp-customize-manager.php","line":257,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::is_theme_active":{"doc":"\/**\n * Checks if the current theme is active.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"class-wp-customize-manager.php","line":268,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[269]},"used_by":[]},"WP_Customize_Manager::wp_loaded":{"doc":"\/**\n * Register styles\/scripts and initialize the preview of each setting\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":277,"missingDoc":false,"filters":["'customize_register'"],"uses":{"customize_preview_init":[281],"is_preview":[280],"is_admin":[280]},"used_by":[]},"WP_Customize_Manager::wp_redirect_status":{"doc":"\/**\n * Prevents AJAX requests from following redirects when previewing a theme\n * by issuing a 200 response instead of a 30x.\n *\n * Instead, the JS will sniff out the location header.\n *\n * @since 3.4.0\n *\n * @param $status\n * @return int\n *\/","file":"class-wp-customize-manager.php","line":295,"missingDoc":false,"filters":[],"uses":{"is_preview":[296],"is_admin":[296]},"used_by":[]},"WP_Customize_Manager::post_value":{"doc":"\/**\n * Decode the $_POST attribute used to override the WP_Customize_Setting values.\n *\n * @since 3.4.0\n *\n * @param mixed $setting A WP_Customize_Setting derived object\n * @return string Sanitized attribute\n *\/","file":"class-wp-customize-manager.php","line":310,"missingDoc":false,"filters":[],"uses":{"json_decode":[313],"stripslashes":[313],"sanitize":[319]},"used_by":[]},"WP_Customize_Manager::customize_preview_init":{"doc":"\/**\n * Print javascript settings.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":327,"missingDoc":false,"filters":["'customize_preview_init'"],"uses":{"check_ajax_referer":[328],"get_stylesheet":[328],"prepare_controls":[330],"wp_enqueue_script":[332],"add_action":[333,334,335,336],"add_filter":[337],"preview":[340]},"used_by":[]},"check_ajax_referer":{"doc":"\/**\n * Verifies the AJAX request to prevent processing requests external of the blog.\n *\n * @since 2.0.3\n *\n * @param string $action Action nonce\n * @param string $query_arg where to look for nonce in $_REQUEST (since 2.5)\n *\/","file":"pluggable.php","line":831,"missingDoc":false,"filters":["'check_ajax_referer'"],"uses":{"wp_verify_nonce":[837],"wp_die":[841],"defined":[840]},"used_by":{"WP_Customize_Manager::customize_preview_init":[328],"WP_Customize_Manager::save":[498]}},"WP_Customize_Manager::customize_preview_base":{"doc":"\/**\n * Print base element for preview frame.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":351,"missingDoc":false,"filters":[],"uses":{"home_url":[352]},"used_by":[]},"WP_Customize_Manager::customize_preview_html5":{"doc":"\/**\n * Print a workaround to handle HTML5 tags in IE < 9\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":360,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::customize_preview_settings":{"doc":"\/**\n * Print javascript settings for preview frame.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":378,"missingDoc":false,"filters":[],"uses":{"esc_js":[381],"wp_create_nonce":[386,387],"get_stylesheet":[386,387],"js_value":[392],"json_encode":[397]},"used_by":[]},"wp_create_nonce":{"doc":"\/**\n * Creates a random, one time use token.\n *\n * @since 2.0.3\n *\n * @param string|int $action Scalar value to add context to the nonce.\n * @return string The one use form token\n *\/","file":"pluggable.php","line":1284,"missingDoc":false,"filters":["'nonce_user_logged_out'"],"uses":{"wp_get_current_user":[1285],"wp_nonce_tick":[1290],"substr":[1292],"wp_hash":[1292]},"used_by":{"WP_Customize_Manager::customize_preview_settings":[386,387],"wp_nonce_url":[1177],"wp_nonce_field":[1210],"wp_plupload_default_settings":[1281],"wp_prepare_attachment_for_js":[1355,1360],"wp_enqueue_media":[1464,1477],"signup_nonce_check":[1640]}},"WP_Customize_Manager::customize_preview_signature":{"doc":"\/**\n * Prints a signature so we can ensure the customizer was properly executed.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":407,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_preview_signature":{"doc":"\/**\n * Removes the signature in case we experience a case where the customizer was not properly executed.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":416,"missingDoc":false,"filters":[],"uses":{"remove_action":[417]},"used_by":[]},"WP_Customize_Manager::is_preview":{"doc":"\/**\n * Is it a theme preview?\n *\n * @since 3.4.0\n *\n * @return bool True if it's a preview, false if not.\n *\/","file":"class-wp-customize-manager.php","line":429,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::get_template":{"doc":"\/**\n * Retrieve the template name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Template name.\n *\/","file":"class-wp-customize-manager.php","line":440,"missingDoc":false,"filters":[],"uses":{"get_template":[441],"theme":[441]},"used_by":[]},"get_template":{"doc":"\/**\n * Retrieve name of the current theme.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template' filter on template option.\n *\n * @return string Template name.\n *\/","file":"theme.php","line":239,"missingDoc":false,"filters":["'template'"],"uses":{"get_option":[240]},"used_by":{"WP_Customize_Manager::get_template":[441],"WP_Customize_Manager::get_template_root":[463],"WP_Theme::__get":[328],"WP_Theme::offsetGet":[402],"get_template_directory":[252],"get_template_directory_uri":[268],"switch_theme":[676],"validate_current_theme":[721],"wp_update_themes":[259]}},"WP_Customize_Manager::get_stylesheet":{"doc":"\/**\n * Retrieve the stylesheet name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Stylesheet name.\n *\/","file":"class-wp-customize-manager.php","line":451,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[452],"theme":[452]},"used_by":[]},"WP_Customize_Manager::get_template_root":{"doc":"\/**\n * Retrieve the template root of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Theme root.\n *\/","file":"class-wp-customize-manager.php","line":462,"missingDoc":false,"filters":[],"uses":{"get_raw_theme_root":[463],"get_template":[463]},"used_by":[]},"get_raw_theme_root":{"doc":"\/**\n * Get the raw theme root relative to the content directory with no filters applied.\n *\n * @since 3.1.0\n *\n * @param string $stylesheet_or_template The stylesheet or template name of the theme\n * @param bool $skip_cache Optional. Whether to skip the cache. Defaults to false, meaning the cache is used.\n * @return string Theme root\n *\/","file":"theme.php","line":507,"missingDoc":false,"filters":[],"uses":{"count":[510],"get_option":[518,519,520,517],"get_theme_roots":[524]},"used_by":{"WP_Customize_Manager::get_template_root":[463],"WP_Customize_Manager::get_stylesheet_root":[474],"wp_get_themes":[40],"wp_get_theme":[99],"get_theme_root":[446],"get_theme_root_uri":[475],"switch_theme":[683,684]}},"WP_Customize_Manager::get_stylesheet_root":{"doc":"\/**\n * Retrieve the stylesheet root of the previewed theme.\n *\n * @since 3.4.0\n *\n * @return string Theme root.\n *\/","file":"class-wp-customize-manager.php","line":473,"missingDoc":false,"filters":[],"uses":{"get_raw_theme_root":[474],"get_stylesheet":[474]},"used_by":[]},"WP_Customize_Manager::current_theme":{"doc":"\/**\n * Filter the current theme and return the name of the previewed theme.\n *\n * @since 3.4.0\n *\n * @param $current_theme {@internal Parameter is not used}\n * @return string Theme name.\n *\/","file":"class-wp-customize-manager.php","line":485,"missingDoc":false,"filters":[],"uses":{"display":[486],"theme":[486]},"used_by":[]},"WP_Customize_Manager::save":{"doc":"\/**\n * Switch the theme and trigger the save action of each setting.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":494,"missingDoc":false,"filters":["'customize_save'"],"uses":{"is_preview":[495],"check_ajax_referer":[498],"get_stylesheet":[498,505],"stop_previewing_theme":[504],"switch_theme":[505],"start_previewing_theme":[506],"is_theme_active":[501],"save":[512]},"used_by":[]},"switch_theme":{"doc":"\/**\n * Switches the theme.\n *\n * Accepts one argument: $stylesheet of the theme. It also accepts an additional function signature\n * of two arguments: $template then $stylesheet. This is for backwards compatibility.\n *\n * @since 2.5.0\n * @uses do_action() Calls 'switch_theme' action, passing the new theme.\n *\n * @param string $stylesheet Stylesheet name\n *\/","file":"theme.php","line":663,"missingDoc":false,"filters":["'switch_theme'"],"uses":{"set_theme_mod":[667],"time":[667],"is_array":[666],"wp_get_theme":[669,670],"func_get_arg":[674],"get_template":[676],"func_num_args":[672],"update_option":[679,680,683,684,692,699],"get_raw_theme_root":[683,684],"delete_option":[686,687],"count":[682],"get":[690],"get_option":[695,694],"add_option":[696],"is_admin":[694],"get_stylesheet":[699]},"used_by":{"WP_Customize_Manager::save":[505],"validate_current_theme":[722,727,732]}},"WP_Customize_Manager::add_setting":{"doc":"\/**\n * Add a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting. Can be a\n * theme mod or option name.\n * @param array $args Setting arguments.\n *\/","file":"class-wp-customize-manager.php","line":527,"missingDoc":false,"filters":[],"uses":{"is_a":[528]},"used_by":[]},"WP_Customize_Manager::get_setting":{"doc":"\/**\n * Retrieve a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting.\n * @return object The settings object.\n *\/","file":"class-wp-customize-manager.php","line":544,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_setting":{"doc":"\/**\n * Remove a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the setting.\n *\/","file":"class-wp-customize-manager.php","line":556,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::add_section":{"doc":"\/**\n * Add a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n * @param array $args Section arguments.\n *\/","file":"class-wp-customize-manager.php","line":568,"missingDoc":false,"filters":[],"uses":{"is_a":[569]},"used_by":[]},"WP_Customize_Manager::get_section":{"doc":"\/**\n * Retrieve a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n * @return object The section object.\n *\/","file":"class-wp-customize-manager.php","line":585,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_section":{"doc":"\/**\n * Remove a customize section.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the section.\n *\/","file":"class-wp-customize-manager.php","line":597,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::add_control":{"doc":"\/**\n * Add a customize control.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n * @param array $args Setting arguments.\n *\/","file":"class-wp-customize-manager.php","line":609,"missingDoc":false,"filters":[],"uses":{"is_a":[610]},"used_by":[]},"WP_Customize_Manager::get_control":{"doc":"\/**\n * Retrieve a customize control.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n * @return object The settings object.\n *\/","file":"class-wp-customize-manager.php","line":626,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::remove_control":{"doc":"\/**\n * Remove a customize setting.\n *\n * @since 3.4.0\n *\n * @param string $id A specific ID of the control.\n *\/","file":"class-wp-customize-manager.php","line":638,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::_cmp_priority":{"doc":"\/**\n * Helper function to compare two objects by priority.\n *\n * @since 3.4.0\n *\n * @param object $a Object A.\n * @param object $b Object B.\n * @return int\n *\/","file":"class-wp-customize-manager.php","line":651,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Manager::prepare_controls":{"doc":"\/**\n * Prepare settings and sections.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":665,"missingDoc":false,"filters":[],"uses":{"array_reverse":[669,682],"check_capabilities":[673,687],"uasort":[683],"usort":[690]},"used_by":[]},"WP_Customize_Manager::enqueue_control_scripts":{"doc":"\/**\n * Enqueue scripts for customize controls.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":701,"missingDoc":false,"filters":[],"uses":{"enqueue":[703]},"used_by":[]},"WP_Customize_Manager::register_controls":{"doc":"\/**\n * Register some default controls.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-manager.php","line":712,"missingDoc":false,"filters":[],"uses":{"add_section":[716,745,790,810,890,925],"__":[717,728,739,746,762,768,783,791,811,833,837,838,839,840,850,854,855,856,866,870,871,891,894,898,926,929,940,944,945,956,968],"add_setting":[721,732,750,774,796,801,816,821,827,844,860,908,932,949,961],"get_option":[722,733,933],"add_control":[727,738,760,767,782,806,825,832,849,865,913,939,955,967],"get_theme_support":[752,775,797,817,877],"get_setting":[879],"get_registered_nav_menus":[885],"wp_get_nav_menus":[886],"get_nav_menu_locations":[887],"count":[888],"array_keys":[888],"sprintf":[894],"_n":[894],"number_format_i18n":[894],"wp_html_excerpt":[900],"trim":[901]},"used_by":[]},"get_registered_nav_menus":{"doc":"\/**\n * Returns an array of all registered navigation menus in a theme\n *\n * @since 3.0.0\n * @return array\n *\/","file":"nav-menu.php","line":115,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Customize_Manager::register_controls":[885]}},"wp_get_nav_menus":{"doc":"\/**\n * Returns all navigation menu objects.\n *\n * @since 3.0.0\n *\n * @param array $args Array of arguments passed on to get_terms().\n * @return array menu objects\n *\/","file":"nav-menu.php","line":409,"missingDoc":false,"filters":["'wp_get_nav_menus'"],"uses":{"wp_parse_args":[411],"get_terms":[412]},"used_by":{"WP_Customize_Manager::register_controls":[886],"wp_nav_menu":[156]}},"get_nav_menu_locations":{"doc":"\/**\n * Returns an array with the registered navigation menu locations and the menu assigned to it\n *\n * @since 3.0.0\n * @return array\n *\/","file":"nav-menu.php","line":129,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[130]},"used_by":{"WP_Customize_Manager::register_controls":[887],"wp_nav_menu":[151],"has_nav_menu":[141]}},"WP_Customize_Manager::_sanitize_header_textcolor":{"doc":"\/**\n * Callback for validating the header_textcolor value.\n *\n * Accepts 'blank', and otherwise uses sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":984,"missingDoc":false,"filters":[],"uses":{"sanitize_hex_color_no_hash":[985]},"used_by":[]},"sanitize_hex_color_no_hash":{"doc":"\/**\n * Sanitizes a hex color without a hash. Use sanitize_hex_color() when possible.\n *\n * Saving hex colors without a hash puts the burden of adding the hash on the\n * UI, which makes it difficult to use or upgrade to other color types such as\n * rgba, hsl, rgb, and html color names.\n *\n * Returns either '', a 3 or 6 digit hex color (without a #), or null.\n *\n * @since 3.4.0\n * @uses sanitize_hex_color()\n *\n * @param string $color\n * @return string|null\n *\/","file":"class-wp-customize-manager.php","line":1026,"missingDoc":false,"filters":[],"uses":{"ltrim":[1027],"sanitize_hex_color":[1032]},"used_by":{"WP_Customize_Manager::_sanitize_header_textcolor":[985],"maybe_hash_hex_color":[1047]}},"sanitize_hex_color":{"doc":"\/**\n * Validates a hex color.\n *\n * Returns either '', a 3 or 6 digit hex color (with #), or null.\n * For validating values without a #, see sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string|null\n *\/","file":"class-wp-customize-manager.php","line":1000,"missingDoc":false,"filters":[],"uses":{"preg_match":[1005]},"used_by":{"sanitize_hex_color_no_hash":[1032]}},"maybe_hash_hex_color":{"doc":"\/**\n * Ensures that any hex color is properly hashed.\n * Otherwise, returns value untouched.\n *\n * This method should only be necessary if using sanitize_hex_color_no_hash().\n *\n * @since 3.4.0\n *\n * @param string $color\n * @return string\n *\/","file":"class-wp-customize-manager.php","line":1046,"missingDoc":false,"filters":[],"uses":{"sanitize_hex_color_no_hash":[1047]},"used_by":[]},"WP_Customize_Section::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id An specific ID of the section.\n * @param array $args Section arguments.\n *\/","file":"class-wp-customize-section.php","line":28,"missingDoc":false,"filters":[],"uses":{"array_keys":[29],"get_class_vars":[29]},"used_by":[]},"WP_Customize_Section::check_capabilities":{"doc":"\/**\n * Check if the theme supports the section and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the section or user doesn't have the capability.\n *\/","file":"class-wp-customize-section.php","line":50,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[51,54]},"used_by":[]},"WP_Customize_Section::maybe_render":{"doc":"\/**\n * Check capabilities and render the section.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-section.php","line":65,"missingDoc":false,"filters":["'customize_render_section'","'customize_render_section_' . $this->id"],"uses":{"check_capabilities":[66],"render":[72]},"used_by":[]},"WP_Customize_Section::render":{"doc":"\/**\n * Render the section.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-section.php","line":80,"missingDoc":false,"filters":[],"uses":{"esc_attr":[82,83],"esc_html":[83],"maybe_render":[87]},"used_by":[]},"WP_Customize_Setting::__construct":{"doc":"\/**\n * Constructor.\n *\n * @since 3.4.0\n *\n * @param WP_Customize_Manager $manager\n * @param string $id An specific ID of the setting. Can be a\n * theme mod or option name.\n * @param array $args Setting arguments.\n * @return WP_Customize_Setting\n *\/","file":"class-wp-customize-setting.php","line":36,"missingDoc":false,"filters":[],"uses":{"array_keys":[37],"get_class_vars":[37],"preg_split":[47],"str_replace":[47],"array_shift":[48],"implode":[53],"add_filter":[56,59]},"used_by":[]},"WP_Customize_Setting::preview":{"doc":"\/**\n * Handle previewing the setting.\n *\n * @since 3.4.0\n *\/","file":"class-wp-customize-setting.php","line":69,"missingDoc":false,"filters":["'customize_preview_' . $this->id"],"uses":{"add_filter":[72,76,78,79]},"used_by":[]},"WP_Customize_Setting::_preview_filter":{"doc":"\/**\n * Callback function to filter the theme mods and options.\n *\n * @since 3.4.0\n * @uses WP_Customize_Setting::multidimensional_replace()\n *\n * @param mixed $original Old value.\n * @return mixed New or old value.\n *\/","file":"class-wp-customize-setting.php","line":96,"missingDoc":false,"filters":[],"uses":{"multidimensional_replace":[97],"post_value":[97]},"used_by":[]},"WP_Customize_Setting::save":{"doc":"\/**\n * Set the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @return bool False if cap check fails or value isn't set.\n *\/","file":"class-wp-customize-setting.php","line":107,"missingDoc":false,"filters":["'customize_save_' . $this->id_data['base']"],"uses":{"post_value":[108],"check_capabilities":[110],"update":[115]},"used_by":[]},"WP_Customize_Setting::post_value":{"doc":"\/**\n * Fetches, validates, and sanitizes the $_POST value.\n *\n * @since 3.4.0\n *\n * @param mixed $default A default value which is used as a fallback. Default is null.\n * @return mixed The default value on failure, otherwise the sanitized value.\n *\/","file":"class-wp-customize-setting.php","line":126,"missingDoc":false,"filters":[],"uses":{"post_value":[130]},"used_by":[]},"WP_Customize_Setting::sanitize":{"doc":"\/**\n * Sanitize an input.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to sanitize.\n * @return mixed Null if an input isn't valid, otherwise the sanitized value.\n *\/","file":"class-wp-customize-setting.php","line":146,"missingDoc":false,"filters":["\"customize_sanitize_{$this->id}\""],"uses":{"stripslashes_deep":[147]},"used_by":[]},"stripslashes_deep":{"doc":"\/**\n * Navigates through an array and removes slashes from the values.\n *\n * If an array is passed, the array_map() function causes a callback to pass the\n * value back to the function. The slashes from this value will removed.\n *\n * @since 2.0.0\n *\n * @param mixed $value The value to be stripped.\n * @return mixed Stripped value.\n *\/","file":"formatting.php","line":1415,"missingDoc":false,"filters":[],"uses":{"array_map":[1417],"is_object":[1418],"get_object_vars":[1419],"stripslashes_deep":[1421],"is_string":[1423],"stripslashes":[1424],"is_array":[1416]},"used_by":{"WP_Customize_Setting::sanitize":[147],"wp_xmlrpc_server::set_custom_fields":[286],"wp_insert_comment":[1263],"wp_update_comment":[1508],"stripslashes_deep":[1421],"wp_parse_str":[2935],"wp_magic_quotes":[534,535,536],"add_metadata":[47],"update_metadata":[119],"delete_metadata":[200],"wp_insert_post":[2865],"wp_insert_attachment":[4002],"wp_insert_user":[1393],"WP_Widget::update_callback":[227]}},"WP_Customize_Setting::update":{"doc":"\/**\n * Set the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":159,"missingDoc":false,"filters":["'customize_update_' . $this->type"],"uses":{"_update_theme_mod":[162],"_update_option":[165]},"used_by":[]},"WP_Customize_Setting::_update_theme_mod":{"doc":"\/**\n * Update the theme mod from the value of the parameter.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":180,"missingDoc":false,"filters":[],"uses":{"set_theme_mod":[183,189],"get_theme_mod":[186],"multidimensional_replace":[187]},"used_by":[]},"set_theme_mod":{"doc":"\/**\n * Update theme modification value for the current theme.\n *\n * @since 2.1.0\n *\n * @param string $name Theme modification name.\n * @param string $value theme modification value.\n *\/","file":"theme.php","line":796,"missingDoc":false,"filters":[],"uses":{"get_theme_mods":[797],"get_option":[801],"update_option":[802]},"used_by":{"WP_Customize_Setting::_update_theme_mod":[183,189],"switch_theme":[667]}},"get_theme_mod":{"doc":"\/**\n * Retrieve theme modification value for the current theme.\n *\n * If the modification name does not exist, then the $default will be passed\n * through {@link http:\/\/php.net\/sprintf sprintf()} PHP function with the first\n * string the template directory URI and the second string the stylesheet\n * directory URI.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'theme_mod_$name' filter on the value.\n *\n * @param string $name Theme modification name.\n * @param bool|string $default\n * @return string\n *\/","file":"theme.php","line":776,"missingDoc":false,"filters":["\"theme_mod_{$name}\"","\"theme_mod_{$name}\""],"uses":{"get_theme_mods":[777],"sprintf":[783],"get_template_directory_uri":[783],"get_stylesheet_directory_uri":[783],"is_string":[782]},"used_by":{"WP_Customize_Setting::_update_theme_mod":[186],"get_nav_menu_locations":[130],"get_body_class":[518],"get_header_textcolor":[854],"display_header_text":[877],"get_header_image":[889],"_get_random_header_data":[915],"is_random_header_image":[968],"get_custom_header":[1036],"get_background_image":[1109],"get_background_color":[1129],"_custom_background_cb":[1153,1163,1168,1173],"retrieve_widgets":[1180]}},"WP_Customize_Setting::_update_option":{"doc":"\/**\n * Update the theme mod from the value of the parameter.\n *\n * @since 3.4.0\n *\n * @param mixed $value The value to update.\n * @return mixed The result of saving the value.\n *\/","file":"class-wp-customize-setting.php","line":200,"missingDoc":false,"filters":[],"uses":{"update_option":[203,209],"get_option":[206],"multidimensional_replace":[207]},"used_by":[]},"WP_Customize_Setting::value":{"doc":"\/**\n * Fetch the value of the parameter for a specific theme.\n *\n * @since 3.4.0\n *\n * @return mixed The requested value.\n *\/","file":"class-wp-customize-setting.php","line":219,"missingDoc":false,"filters":["'customize_value_' . $this->id_data['base']"],"uses":{"multidimensional_get":[237]},"used_by":[]},"WP_Customize_Setting::js_value":{"doc":"\/**\n * Escape the parameter's value for use in JavaScript.\n *\n * @since 3.4.0\n *\n * @return mixed The requested escaped value.\n *\/","file":"class-wp-customize-setting.php","line":247,"missingDoc":false,"filters":["\"customize_sanitize_js_{$this->id}\""],"uses":{"value":[248],"html_entity_decode":[251],"is_string":[250]},"used_by":[]},"WP_Customize_Setting::check_capabilities":{"doc":"\/**\n * Check if the theme supports the setting and check user capabilities.\n *\n * @since 3.4.0\n *\n * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true.\n *\/","file":"class-wp-customize-setting.php","line":263,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[264,267]},"used_by":[]},"WP_Customize_Setting::multidimensional":{"doc":"\/**\n * Multidimensional helper function.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param bool $create Default is false.\n * @return null|array Keys are 'root', 'node', and 'key'.\n *\/","file":"class-wp-customize-setting.php","line":283,"missingDoc":false,"filters":[],"uses":{"array_pop":[290],"is_array":[297]},"used_by":[]},"WP_Customize_Setting::multidimensional_replace":{"doc":"\/**\n * Will attempt to replace a specific value in a multidimensional array.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param mixed $value The value to update.\n * @return\n *\/","file":"class-wp-customize-setting.php","line":326,"missingDoc":false,"filters":[],"uses":{"multidimensional":[332]},"used_by":[]},"WP_Customize_Setting::multidimensional_get":{"doc":"\/**\n * Will attempt to fetch a specific value from a multidimensional array.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @param $default A default value which is used as a fallback. Default is null.\n * @return mixed The requested value or the default value.\n *\/","file":"class-wp-customize-setting.php","line":350,"missingDoc":false,"filters":[],"uses":{"multidimensional":[354]},"used_by":[]},"WP_Customize_Setting::multidimensional_isset":{"doc":"\/**\n * Will attempt to check if a specific value in a multidimensional array is set.\n *\n * @since 3.4.0\n *\n * @param $root\n * @param $keys\n * @return bool True if value is set, false if not.\n *\/","file":"class-wp-customize-setting.php","line":367,"missingDoc":false,"filters":[],"uses":{"multidimensional_get":[368]},"used_by":[]},"WP_Customize_Filter_Setting::update":{"doc":"\/**\n * @since 3.4.0\n *\/","file":"class-wp-customize-setting.php","line":387,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Customize_Header_Image_Setting::update":{"doc":"\/**\n * @since 3.4.0\n *\n * @param $value\n *\/","file":"class-wp-customize-setting.php","line":407,"missingDoc":false,"filters":[],"uses":{"post_value":[413],"get_setting":[413],"set_header_image":[416,418],"is_array":[415]},"used_by":[]},"WP_Customize_Background_Image_Setting::update":{"doc":"\/**\n * @since 3.4.0\n * @uses remove_theme_mod()\n *\n * @param $value\n *\/","file":"class-wp-customize-setting.php","line":436,"missingDoc":false,"filters":[],"uses":{"remove_theme_mod":[437]},"used_by":[]},"remove_theme_mod":{"doc":"\/**\n * Remove theme modification name from current theme list.\n *\n * If removing the name also removes all elements, then the entire option will\n * be removed.\n *\n * @since 2.1.0\n *\n * @param string $name Theme modification name.\n * @return null\n *\/","file":"theme.php","line":816,"missingDoc":false,"filters":[],"uses":{"get_theme_mods":[817],"remove_theme_mods":[825],"get_option":[827],"update_option":[828]},"used_by":{"WP_Customize_Background_Image_Setting::update":[437],"_delete_attachment_theme_mod":[1595,1598],"retrieve_widgets":[1184]}},"_WP_Editors::__construct":{"doc":"","file":"class-wp-editor.php","line":28,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"_WP_Editors::parse_settings":{"doc":"","file":"class-wp-editor.php","line":30,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[31],"user_can_richedit":[46],"get_user_setting":[60],"parse_str":[64]},"used_by":[]},"user_can_richedit":{"doc":"\/**\n * Whether the user should have a WYSIWIG editor.\n *\n * Checks that the user requires a WYSIWIG editor and that the editor is\n * supported in the users browser.\n *\n * @since 2.0.0\n *\n * @return bool\n *\/","file":"general-template.php","line":1751,"missingDoc":false,"filters":["'user_can_richedit'"],"uses":{"wp_is_mobile":[1759,1760],"preg_match":[1759],"intval":[1759],"get_user_option":[1757],"is_user_logged_in":[1757]},"used_by":{"_WP_Editors::parse_settings":[46],"wp_default_editor":[1780],"sanitize_post_field":[2025]}},"get_user_setting":{"doc":"\/**\n * Retrieve user interface setting value based on setting name.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @param string $name The name of the setting.\n * @param string $default Optional default value to return when $name is not set.\n * @return mixed the last saved user setting or the default value\/false if it doesn't exist.\n *\/","file":"option.php","line":584,"missingDoc":false,"filters":[],"uses":{"get_all_user_settings":[586]},"used_by":{"_WP_Editors::parse_settings":[60],"_WP_Editors::wp_fullscreen_html":[663],"_WP_Editors::wp_link_dialog":[826],"wp_default_editor":[1782]}},"_WP_Editors::editor":{"doc":"\/**\n * Outputs the HTML for a single instance of the editor.\n *\n * @param string $content The initial content of the editor.\n * @param string $editor_id ID for the textarea and TinyMCE and Quicktags instances (can contain only ASCII letters and numbers).\n * @param array $settings See the _parse_settings() method for description.\n *\/","file":"class-wp-editor.php","line":87,"missingDoc":false,"filters":["'media_buttons'","'the_editor'","'the_editor_content'"],"uses":{"trim":[90],"current_user_can":[100],"add_filter":[108,110],"wp_default_editor":[107],"_x":[114],"__":[115],"wp_print_styles":[121],"function_exists":[135],"printf":[148]},"used_by":[]},"wp_default_editor":{"doc":"\/**\n * Find out which editor should be displayed by default.\n *\n * Works out which of the two editors to display as the current editor for a\n * user. The 'html' setting is for the \"Text\" editor tab.\n *\n * @since 2.5.0\n *\n * @return string Either 'tinymce', or 'html', or 'test'\n *\/","file":"general-template.php","line":1779,"missingDoc":false,"filters":["'wp_default_editor'"],"uses":{"user_can_richedit":[1780],"get_user_setting":[1782],"in_array":[1783],"wp_get_current_user":[1781]},"used_by":{"_WP_Editors::editor":[107],"_WP_Editors::editor_js":[585]}},"wp_print_styles":{"doc":"\/**\n * Display styles that are in the queue or part of $handles.\n *\n * @since r79\n * @uses do_action() Calls 'wp_print_styles' hook.\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param array|bool $handles Styles to be printed. An empty array prints the queue,\n * an array with one string prints that style, and an array of strings prints those styles.\n * @return bool True on success, false on failure.\n *\/","file":"functions.wp-styles.php","line":20,"missingDoc":false,"filters":["'wp_print_styles'"],"uses":{"_doing_it_wrong":[30],"sprintf":[30],"__":[30],"did_action":[29],"is_a":[28],"do_items":[39]},"used_by":{"_WP_Editors::editor":[121],"wp_admin_css":[2096]}},"_WP_Editors::editor_settings":{"doc":"","file":"class-wp-editor.php","line":154,"missingDoc":true,"filters":["'quicktags_settings'","'disable_captions'","'teeny_mce_plugins'","'mce_external_plugins'","'mce_external_languages'","'tiny_mce_plugins'","'mce_spellchecker_languages'","'mce_css'","'teeny_mce_buttons'","'mce_buttons'","'mce_buttons_2'","'mce_buttons_3'","'mce_buttons_4'","'teeny_mce_before_init'","'tiny_mce_before_init'"],"uses":{"add_action":[160,161,163,164],"is_admin":[159],"array_merge":[176,187,436,439],"is_array":[175,355,438],"explode":[187],"includes_url":[193],"get_locale":[194,194],"strtolower":[194],"substr":[194],"is_file":[230,253,256,260,265],"is_readable":[230],"set_url_scheme":[240],"dirname":[244],"str_replace":[247],"content_url":[247],"trailingslashit":[251],"realpath":[251],"function_exists":[250],"file_get_contents":[254,257,261,266],"preg_replace":[262,267],"in_array":[246],"array_unique":[280,357],"__":[295],"implode":[351,376,424,425,426,427],"get_stylesheet_directory_uri":[358],"get_stylesheet_directory":[359],"get_template_directory_uri":[362],"get_template_directory":[363],"file_exists":[366,372],"is_child_theme":[361],"trim":[381],"get_post":[399],"array_search":[411,413,415,409]},"used_by":[]},"includes_url":{"doc":"\/**\n * Retrieve the url to the includes directory.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the includes url.\n * @return string Includes url link with optional path appended.\n*\/","file":"link-template.php","line":2023,"missingDoc":false,"filters":["'includes_url'"],"uses":{"site_url":[2024],"ltrim":[2027],"is_string":[2026],"strpos":[2026]},"used_by":{"_WP_Editors::editor_settings":[193],"WP_Widget_RSS::widget":[781],"translate_smiley":[1741],"wp_plupload_default_settings":[1262,1263],"get_avatar":[1648],"wp_mime_type_icon":[4350],"wp_default_scripts":[192,193]}},"get_locale":{"doc":"\/**\n * Gets the current locale.\n *\n * If the locale is set, then it will filter the locale in the 'locale' filter\n * hook and return the value.\n *\n * If the locale is not set already, then the WPLANG constant is used if it is\n * defined. Then it is filtered through the 'locale' filter hook and the value\n * for the locale global set and the locale is returned.\n *\n * The process to get the locale should only be done once, but the locale will\n * always be filtered using the 'locale' hook.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'locale' hook on locale value.\n * @uses $locale Gets the locale stored in the global.\n *\n * @return string The locale of the blog or from the 'locale' hook.\n *\/","file":"l10n.php","line":28,"missingDoc":false,"filters":["'locale'","'locale'"],"uses":{"defined":[35,41],"get_site_option":[42],"get_option":[41],"is_multisite":[39]},"used_by":{"_WP_Editors::editor_settings":[194,194],"WP_Theme::sort_by_name":[1169],"wp_timezone_choice":[3339],"get_bloginfo":[466],"load_default_textdomain":[386],"load_plugin_textdomain":[417],"load_muplugin_textdomain":[442],"load_theme_textdomain":[460],"get_locale_stylesheet_uri":[221],"wp_version_check":[43]}},"content_url":{"doc":"\/**\n * Retrieve the url to the content directory.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the content url.\n * @return string Content url link with optional path appended.\n*\/","file":"link-template.php","line":2041,"missingDoc":false,"filters":["'content_url'"],"uses":{"set_url_scheme":[2042],"ltrim":[2045],"is_string":[2044],"strpos":[2044]},"used_by":{"_WP_Editors::editor_settings":[247],"get_theme_root_uri":[481,489,492]}},"get_stylesheet_directory_uri":{"doc":"\/**\n * Retrieve stylesheet directory URI.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"theme.php","line":173,"missingDoc":false,"filters":["'stylesheet_directory_uri'"],"uses":{"get_stylesheet":[174],"get_theme_root_uri":[175]},"used_by":{"_WP_Editors::editor_settings":[358],"WP_Theme::get_screenshot":[875,885],"get_bloginfo":[445],"get_stylesheet_uri":[193],"get_locale_stylesheet_uri":[219],"get_theme_mod":[783],"_get_random_header_data":[934,935],"get_custom_header":[1038]}},"get_stylesheet_directory":{"doc":"\/**\n * Retrieve stylesheet directory path for current theme.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet_directory' filter on stylesheet directory and theme name.\n *\n * @return string Path to current theme directory.\n *\/","file":"theme.php","line":158,"missingDoc":false,"filters":["'stylesheet_directory'"],"uses":{"get_stylesheet":[159],"get_theme_root":[160]},"used_by":{"_WP_Editors::editor_settings":[359],"WP_Theme::__get":[326],"WP_Theme::offsetGet":[412],"WP_Theme::get_screenshot":[881],"WP_Theme::get_files":[906],"WP_Theme::load_textdomain":[1026],"wp_templating_constants":[298],"load_child_theme_textdomain":[489],"get_locale_stylesheet_uri":[220],"validate_current_theme":[731]}},"get_template_directory_uri":{"doc":"\/**\n * Retrieve theme directory URI.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template_directory_uri' filter on template directory URI path and template name.\n *\n * @return string Template directory URI.\n *\/","file":"theme.php","line":267,"missingDoc":false,"filters":["'template_directory_uri'"],"uses":{"get_template":[268],"get_theme_root_uri":[269]},"used_by":{"_WP_Editors::editor_settings":[362],"get_bloginfo":[449],"get_theme_mod":[783],"_get_random_header_data":[934,935],"get_custom_header":[1038]}},"get_template_directory":{"doc":"\/**\n * Retrieve current theme directory.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'template_directory' filter on template directory path and template name.\n *\n * @return string Template directory path.\n *\/","file":"theme.php","line":251,"missingDoc":false,"filters":["'template_directory'"],"uses":{"get_template":[252],"get_theme_root":[253]},"used_by":{"_WP_Editors::editor_settings":[363],"WP_Theme::__get":[324],"WP_Theme::offsetGet":[410],"WP_Theme::get_files":[909],"wp_templating_constants":[292],"get_attachment_icon_src":[1943],"load_theme_textdomain":[463],"validate_current_theme":[721,726]}},"is_child_theme":{"doc":"\/**\n * Whether a child theme is in use.\n *\n * @since 3.0.0\n *\n * @return bool true if a child theme is in use, false otherwise.\n **\/","file":"theme.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":{"_WP_Editors::editor_settings":[361],"validate_current_theme":[731]}},"_WP_Editors::_parse_init":{"doc":"","file":"class-wp-editor.php","line":460,"missingDoc":true,"filters":[],"uses":{"is_string":[468],"strlen":[468,468],"preg_match":[468],"is_bool":[464],"trim":[475]},"used_by":[]},"_WP_Editors::enqueue_scripts":{"doc":"","file":"class-wp-editor.php","line":478,"missingDoc":true,"filters":[],"uses":{"wp_enqueue_script":[479,482,485,488,489,494,498],"wp_enqueue_style":[490],"in_array":[487,487,493,493],"add_thickbox":[497]},"used_by":[]},"add_thickbox":{"doc":"\/**\n * Enqueues the default ThickBox js and css.\n *\n * If any of the settings need to be changed, this can be done with another js\n * file similar to media-upload.js. That file should\n * require array('thickbox') to ensure it is loaded after.\n *\n * @since 2.5.0\n *\/","file":"general-template.php","line":2116,"missingDoc":false,"filters":[],"uses":{"wp_enqueue_script":[2117],"wp_enqueue_style":[2118],"add_action":[2121],"is_network_admin":[2120]},"used_by":{"_WP_Editors::enqueue_scripts":[497]}},"_WP_Editors::editor_js":{"doc":"","file":"class-wp-editor.php","line":502,"missingDoc":true,"filters":["'before_wp_tiny_mce'","'after_wp_tiny_mce'"],"uses":{"script_concat_settings":[516],"stripos":[519],"trim":[530,540],"implode":[546],"defined":[551],"wp_default_editor":[585],"admin_url":[642],"is_admin":[641],"in_array":[648,648,651,651]},"used_by":[]},"script_concat_settings":{"doc":"\/**\n * Determine the concatenation and compression settings for scripts and styles.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":846,"missingDoc":false,"filters":[],"uses":{"ini_get":[849,849],"defined":[852,853,858,864],"is_admin":[853],"get_site_option":[859,865]},"used_by":{"_WP_Editors::editor_js":[516],"print_head_scripts":[652],"print_footer_scripts":[674],"print_admin_styles":[778]}},"_WP_Editors::wp_fullscreen_html":{"doc":"","file":"class-wp-editor.php","line":657,"missingDoc":true,"filters":["'wp_fullscreen_buttons'","'enter_title_here'"],"uses":{"get_post":[659],"get_user_setting":[663],"__":[664,664,682,683,685,686,688,689,691,692,694,727,736],"is_rtl":[666],"_e":[669,673,718,718,737],"_ex":[674],"post_type_supports":[726],"printf":[736]},"used_by":[]},"is_rtl":{"doc":"\/**\n * Checks if current locale is RTL.\n *\n * @since 3.0.0\n * @return bool Whether locale is RTL.\n *\/","file":"locale.php","line":338,"missingDoc":false,"filters":[],"uses":{"is_rtl":[340]},"used_by":{"_WP_Editors::wp_fullscreen_html":[666],"_default_wp_die_handler":[2117],"_mce_set_direction":[2418],"dead_db":[2768],"get_bloginfo":[472],"language_attributes":[1861],"wp_admin_css":[2103],"__main":[140],"wp_maintenance":[171],"is_rtl":[340],"gallery_shortcode":[740],"get_body_class":[405],"wp_default_styles":[500],"add_editor_style":[1217]}},"_ex":{"doc":"\/**\n * Displays translated string with gettext context\n *\n * @see _x\n * @since 3.0.0\n *\n * @param string $text Text to translate\n * @param string $context Context information for the translators\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"l10n.php","line":204,"missingDoc":false,"filters":[],"uses":{"_x":[205]},"used_by":{"_WP_Editors::wp_fullscreen_html":[674],"WP_Widget_Links::form":[150,164],"wp_list_post_revisions":[1440,1441,1442]}},"post_type_supports":{"doc":"\/**\n * Checks a post type's support for a given feature\n *\n * @since 3.0.0\n * @param string $post_type The post type being checked\n * @param string $feature the feature being checked\n * @return boolean\n *\/","file":"post.php","line":1633,"missingDoc":false,"filters":[],"uses":{"func_num_args":[1640]},"used_by":{"_WP_Editors::wp_fullscreen_html":[726],"wp_xmlrpc_server::wp_getRevisions":[3538],"wp_xmlrpc_server::wp_restoreRevision":[3605],"wp_enqueue_media":[1480],"get_post_class":[331],"get_body_class":[437],"get_post_format":[768],"wp_insert_post":[2727,2728,2728],"wp_save_post_revision":[4940]}},"_WP_Editors::wp_link_query":{"doc":"\/**\n * Performs post queries for internal linking.\n *\n * @since 3.1.0\n *\n * @param array $args Optional. Accepts 'pagenum' and 's' (search) arguments.\n * @return array Results.\n *\/","file":"class-wp-editor.php","line":755,"missingDoc":false,"filters":[],"uses":{"get_post_types":[756],"array_keys":[757],"absint":[770],"query":[779],"mysql2date":[788],"__":[788],"trim":[794],"esc_html":[794],"strip_tags":[794],"get_the_title":[794],"get_permalink":[795]},"used_by":[]},"mysql2date":{"doc":"\/**\n * Converts given date string into a different format.\n *\n * $format should be either a PHP date format string, e.g. 'U' for a Unix\n * timestamp, or 'G' for a Unix timestamp assuming that $date is GMT.\n *\n * If $translate is true then the given date and format string will\n * be passed to date_i18n() for translation.\n *\n * @since 0.71\n *\n * @param string $format Format of the date to return.\n * @param string $date Date string to convert.\n * @param bool $translate Whether the return date should be translated. Default is true.\n * @return string|int Formatted date string, or Unix timestamp.\n *\/","file":"functions.php","line":26,"missingDoc":false,"filters":[],"uses":{"strtotime":[31,33],"date_i18n":[39],"date":[41]},"used_by":{"_WP_Editors::wp_link_query":[788],"wp_xmlrpc_server::_convert_date":[589],"wp_xmlrpc_server::_convert_date_gmt":[603],"wp_xmlrpc_server::wp_editPost":[1262],"WP::send_headers":[350,352],"get_comment_date":[375,377],"get_comment_time":[633,635],"check_comment_flood_db":[731,732],"get_boundary_post_rel_link":[2734],"get_parent_post_rel_link":[2809],"__main":[27,66,67,22,25,42,17,31,51,28,38],"wp_get_archives":[980],"the_date_xml":[1321],"get_the_date":[1380,1382],"get_post_time":[1475],"get_post_modified_time":[1524],"the_weekday":[1538],"the_weekday_date":[1559],"get_adjacent_post_rel_link":[1225],"adjacent_post_link":[1392],"wp_prepare_attachment_for_js":[1346],"wpmu_validate_user_signup":[492,507],"wpmu_validate_blog_signup":[612],"Walker_Page::start_el":[1059],"wp_insert_post":[2819,2819,2823,2823],"setup_postdata":[3632,3633]}},"get_the_title":{"doc":"\/**\n * Retrieve post title.\n *\n * If the post is protected and the visitor is not an admin, then \"Protected\"\n * will be displayed before the post title. If the post is private, then\n * \"Private\" will be located before the post title.\n *\n * @since 0.71\n *\n * @param mixed $post Optional. Post ID or object.\n * @return string\n *\/","file":"post-template.php","line":102,"missingDoc":false,"filters":["'protected_title_format'","'private_title_format'","'the_title'"],"uses":{"get_post":[103],"__":[110,113],"sprintf":[111,114],"is_admin":[108]},"used_by":{"_WP_Editors::wp_link_query":[794],"wp_xmlrpc_server::_prepare_comment":[872],"trackback_rdf":[758],"WP_Widget_Recent_Posts::widget":[574,574,574],"WP_Widget_Recent_Comments::widget":[694],"__main":[50,42,27],"get_the_title_rss":[116],"feed_links_extra":[1645],"the_title":[43],"the_title_attribute":[72]}},"_WP_Editors::wp_link_dialog":{"doc":"\/**\n * Dialog for internal linking.\n *\n * @since 3.1.0\n *\/","file":"class-wp-editor.php","line":808,"missingDoc":false,"filters":[],"uses":{"wp_nonce_field":[812],"_e":[815,817,820,823,827,831,843,856],"get_user_setting":[826],"esc_attr_e":[853]},"used_by":[]},"wp_nonce_field":{"doc":"\/**\n * Retrieve or display nonce hidden field for forms.\n *\n * The nonce field is used to validate that the contents of the form came from\n * the location on the current site and not somewhere else. The nonce does not\n * offer absolute protection, but should protect against most cases. It is very\n * important to use nonce field in forms.\n *\n * The $action and $name are optional, but if you want to have better security,\n * it is strongly suggested to set those two parameters. It is easier to just\n * call the function without any parameters, because validation of the nonce\n * doesn't require any parameters, but since crackers know what the default is\n * it won't be difficult for them to find a way around your nonce and cause\n * damage.\n *\n * The input name will be whatever $name value you gave. The input value will be\n * the nonce creation value.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $action Optional. Action name.\n * @param string $name Optional. Nonce name.\n * @param bool $referer Optional, default true. Whether to set the referer field for validation.\n * @param bool $echo Optional, default true. Whether to display or return hidden form field.\n * @return string Nonce field.\n *\/","file":"functions.php","line":1208,"missingDoc":false,"filters":[],"uses":{"esc_attr":[1209],"wp_create_nonce":[1210],"wp_referer_field":[1213]},"used_by":{"_WP_Editors::wp_link_dialog":[812],"wp_comment_form_unfiltered_html_nonce":[817],"signup_nonce_fields":[1624]}},"WP_Embed::__construct":{"doc":"\/**\n * Constructor\n *\/","file":"class-wp-embed.php","line":18,"missingDoc":false,"filters":[],"uses":{"add_filter":[20,26],"add_shortcode":[23],"add_action":[29,32]},"used_by":[]},"add_shortcode":{"doc":"\/**\n * Add hook for shortcode tag.\n *\n * There can only be one hook for each shortcode. Which means that if another\n * plugin has a similar shortcode, it will override yours or yours will override\n * theirs depending on which order the plugins are included and\/or ran.\n *\n * Simplest example of a shortcode tag using the API:\n *\n * <code>\n * \/\/ [footag foo=\"bar\"]\n * function footag_func($atts) {\n * \treturn \"foo = {$atts[foo]}\";\n * }\n * add_shortcode('footag', 'footag_func');\n * <\/code>\n *\n * Example with nice attribute defaults:\n *\n * <code>\n * \/\/ [bartag foo=\"bar\"]\n * function bartag_func($atts) {\n * \textract(shortcode_atts(array(\n * \t\t'foo' => 'no foo',\n * \t\t'baz' => 'default baz',\n * \t), $atts));\n *\n * \treturn \"foo = {$foo}\";\n * }\n * add_shortcode('bartag', 'bartag_func');\n * <\/code>\n *\n * Example with enclosed content:\n *\n * <code>\n * \/\/ [baztag]content[\/baztag]\n * function baztag_func($atts, $content='') {\n * \treturn \"content = $content\";\n * }\n * add_shortcode('baztag', 'baztag_func');\n * <\/code>\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $tag Shortcode tag to be searched in post content.\n * @param callable $func Hook to run when shortcode is found.\n *\/","file":"shortcodes.php","line":93,"missingDoc":false,"filters":[],"uses":{"is_callable":[96]},"used_by":{"WP_Embed::__construct":[23],"WP_Embed::run_shortcode":[57],"__main":[609,610,658]}},"WP_Embed::run_shortcode":{"doc":"\/**\n * Process the [embed] shortcode.\n *\n * Since the [embed] shortcode needs to be run earlier than other shortcodes,\n * this function removes all existing shortcodes, registers the [embed] shortcode,\n * calls {@link do_shortcode()}, and then re-registers the old shortcodes.\n *\n * @uses $shortcode_tags\n * @uses remove_all_shortcodes()\n * @uses add_shortcode()\n * @uses do_shortcode()\n *\n * @param string $content Content to parse\n * @return string Content with shortcode parsed\n *\/","file":"class-wp-embed.php","line":50,"missingDoc":false,"filters":[],"uses":{"remove_all_shortcodes":[55],"add_shortcode":[57],"do_shortcode":[60]},"used_by":[]},"remove_all_shortcodes":{"doc":"\/**\n * Clear all shortcodes.\n *\n * This function is simple, it clears all of the shortcode tags by replacing the\n * shortcodes global by a empty array. This is actually a very efficient method\n * for removing all shortcodes.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\/","file":"shortcodes.php","line":124,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Embed::run_shortcode":[55]}},"do_shortcode":{"doc":"\/**\n * Search content for shortcodes and filter shortcodes through their hooks.\n *\n * If there are no shortcode tags defined, then the content will be returned\n * without any filtering. This might cause issues when plugins are disabled but\n * the shortcode will still show up in the post or content.\n *\n * @since 2.5\n * @uses $shortcode_tags\n * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.\n *\n * @param string $content Content to search for shortcodes\n * @return string Content with shortcodes filtered out.\n *\/","file":"shortcodes.php","line":144,"missingDoc":false,"filters":[],"uses":{"is_array":[147],"get_shortcode_regex":[150],"preg_replace_callback":[151]},"used_by":{"WP_Embed::run_shortcode":[60],"img_caption_shortcode":[655]}},"WP_Embed::maybe_run_ajax_cache":{"doc":"\/**\n * If a post\/page was saved, then output JavaScript to make\n * an AJAX request that will call WP_Embed::cache_oembed().\n *\/","file":"class-wp-embed.php","line":72,"missingDoc":false,"filters":[],"uses":{"get_post":[73],"admin_url":[82]},"used_by":[]},"WP_Embed::register_handler":{"doc":"\/**\n * Register an embed handler. Do not use this function directly, use {@link wp_embed_register_handler()} instead.\n * This function should probably also only be used for sites that do not support oEmbed.\n *\n * @param string $id An internal ID\/name for the handler. Needs to be unique.\n * @param string $regex The regex that will be used to see if this handler should be used for a URL.\n * @param callback $callback The callback function that will be called if the regex is matched.\n * @param int $priority Optional. Used to specify the order in which the registered handlers will be tested (default: 10). Lower numbers correspond with earlier testing, and handlers with the same priority are tested in the order in which they were added to the action.\n *\/","file":"class-wp-embed.php","line":98,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Embed::unregister_handler":{"doc":"\/**\n * Unregister a previously registered embed handler. Do not use this function directly, use {@link wp_embed_unregister_handler()} instead.\n *\n * @param string $id The handler ID that should be removed.\n * @param int $priority Optional. The priority of the handler to be removed (default: 10).\n *\/","file":"class-wp-embed.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Embed::shortcode":{"doc":"\/**\n * The {@link do_shortcode()} callback function.\n *\n * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of the registered embed handlers.\n * If none of the regex matches and it's enabled, then the URL will be given to the {@link WP_oEmbed} class.\n *\n * @uses wp_oembed_get()\n * @uses wp_parse_args()\n * @uses wp_embed_defaults()\n * @uses WP_Embed::maybe_make_link()\n * @uses get_option()\n * @uses author_can()\n * @uses wp_cache_get()\n * @uses wp_cache_set()\n * @uses get_post_meta()\n * @uses update_post_meta()\n *\n * @param array $attr Shortcode attributes.\n * @param string $url The URL attempting to be embedded.\n * @return string The embed HTML on success, otherwise the original URL.\n *\/","file":"class-wp-embed.php","line":137,"missingDoc":false,"filters":["'embed_handler_html'","'embed_oembed_html'","'embed_oembed_discover'","'embed_oembed_html'"],"uses":{"get_post":[138],"wp_parse_args":[144],"wp_embed_defaults":[144],"str_replace":[148],"ksort":[151],"call_user_func":[155],"preg_match":[154],"is_callable":[154],"md5":[169],"serialize":[169],"get_post_meta":[171],"maybe_make_link":[175,195],"author_can":[182],"wp_oembed_get":[183],"update_post_meta":[187]},"used_by":[]},"wp_oembed_get":{"doc":"\/**\n * Attempts to fetch the embed HTML for a provided URL using oEmbed.\n *\n * @since 2.9.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n * @uses WP_oEmbed::get_html()\n *\n * @param string $url The URL that should be embedded.\n * @param array $args Additional arguments and parameters.\n * @return bool|string False on failure or the embed HTML on success.\n *\/","file":"media.php","line":1018,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1020],"get_html":[1021]},"used_by":{"WP_Embed::shortcode":[183]}},"update_post_meta":{"doc":"\/**\n * Update post meta field based on post ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and post ID.\n *\n * If the meta field for the post does not exist, it will be added.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"post.php","line":1817,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1819],"update_metadata":[1822]},"used_by":{"WP_Embed::shortcode":[187],"wp_update_nav_menu_item":[372,373,374,375,376,380,381,382,385],"update_attached_file":[214],"wp_insert_post":[2939],"wp_update_attachment_metadata":[4195],"set_post_thumbnail":[5381]}},"WP_Embed::delete_oembed_caches":{"doc":"\/**\n * Delete all oEmbed caches.\n *\n * @param int $post_ID Post ID to delete the caches for.\n *\/","file":"class-wp-embed.php","line":203,"missingDoc":false,"filters":[],"uses":{"get_post_custom_keys":[204],"delete_post_meta":[210],"substr":[209]},"used_by":[]},"get_post_custom_keys":{"doc":"\/**\n * Retrieve meta field names for a post.\n *\n * If there are no meta fields, then nothing (null) will be returned.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom_keys\n *\n * @param int $post_id post ID\n * @return array|null Either array of the keys, or null if keys could not be retrieved.\n *\/","file":"post.php","line":1869,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[1870],"is_array":[1872],"array_keys":[1875]},"used_by":{"WP_Embed::delete_oembed_caches":[204],"the_meta":[743]}},"delete_post_meta":{"doc":"\/**\n * Remove metadata matching criteria from a post.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_post_meta\n *\n * @param int $post_id post ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"post.php","line":1774,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1776],"delete_metadata":[1779]},"used_by":{"WP_Embed::delete_oembed_caches":[210],"wp_scheduled_delete":[3486,3487],"wp_update_nav_menu_item":[387],"update_attached_file":[216],"wp_delete_post":[2319,2320],"wp_untrash_post":[2445,2446],"wp_untrash_post_comments":[2539],"wp_delete_attachment":[4088,4089],"wp_update_attachment_metadata":[4197],"wp_check_for_changed_slugs":[4438],"set_post_thumbnail":[5383],"delete_post_thumbnail":[5399]}},"WP_Embed::cache_oembed":{"doc":"\/**\n * Triggers a caching of all oEmbed results.\n *\n * @param int $post_ID Post ID to do the caching for.\n *\/","file":"class-wp-embed.php","line":219,"missingDoc":false,"filters":["'embed_cache_oembed_types'"],"uses":{"get_post":[220],"in_array":[222],"run_shortcode":[230],"autoembed":[231]},"used_by":[]},"WP_Embed::autoembed":{"doc":"\/**\n * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.\n *\n * @uses WP_Embed::autoembed_callback()\n *\n * @param string $content The content to be searched.\n * @return string Potentially modified $content.\n *\/","file":"class-wp-embed.php","line":245,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[246]},"used_by":[]},"WP_Embed::autoembed_callback":{"doc":"\/**\n * Callback function for {@link WP_Embed::autoembed()}.\n *\n * @uses WP_Embed::shortcode()\n *\n * @param array $match A regex match array.\n * @return string The embed HTML on success, otherwise the original URL.\n *\/","file":"class-wp-embed.php","line":257,"missingDoc":false,"filters":[],"uses":{"shortcode":[260]},"used_by":[]},"WP_Embed::maybe_make_link":{"doc":"\/**\n * Conditionally makes a hyperlink based on an internal class variable.\n *\n * @param string $url URL to potentially be linked.\n * @return string Linked URL or the original URL.\n *\/","file":"class-wp-embed.php","line":272,"missingDoc":false,"filters":["'embed_maybe_make_link'"],"uses":{"esc_attr":[273],"esc_html":[273]},"used_by":[]},"WP_Error::__construct":{"doc":"\/**\n * Constructor - Sets up error message.\n *\n * If code parameter is empty then nothing will be done. It is possible to\n * add multiple messages to the same code, but with other methods in the\n * class.\n *\n * All parameters are optional, but if the code parameter is set, then the\n * data parameter is optional.\n *\n * @since 2.1.0\n *\n * @param string|int $code Error code\n * @param string $message Error message\n * @param mixed $data Optional. Error data.\n * @return WP_Error\n *\/","file":"class-wp-error.php","line":57,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Error::get_error_codes":{"doc":"\/**\n * Retrieve all error codes.\n *\n * @since 2.1.0\n * @access public\n *\n * @return array List of error codes, if available.\n *\/","file":"class-wp-error.php","line":75,"missingDoc":false,"filters":[],"uses":{"array_keys":[79]},"used_by":[]},"WP_Error::get_error_code":{"doc":"\/**\n * Retrieve first error code available.\n *\n * @since 2.1.0\n * @access public\n *\n * @return string|int Empty string, if no error codes.\n *\/","file":"class-wp-error.php","line":90,"missingDoc":false,"filters":[],"uses":{"get_error_codes":[91]},"used_by":[]},"WP_Error::get_error_messages":{"doc":"\/**\n * Retrieve all error messages or error messages matching code.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Retrieve messages matching code, if exists.\n * @return array Error strings on success, or empty array on failure (if using code parameter).\n *\/","file":"class-wp-error.php","line":107,"missingDoc":false,"filters":[],"uses":{"array_merge":[112]},"used_by":[]},"WP_Error::get_error_message":{"doc":"\/**\n * Get single error message.\n *\n * This will get the first message available for the code. If no code is\n * given then the first code available will be used.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Error code to retrieve message.\n * @return string\n *\/","file":"class-wp-error.php","line":134,"missingDoc":false,"filters":[],"uses":{"get_error_code":[136],"get_error_messages":[137]},"used_by":[]},"WP_Error::get_error_data":{"doc":"\/**\n * Retrieve error data for error code.\n *\n * @since 2.1.0\n *\n * @param string|int $code Optional. Error code.\n * @return mixed Null, if no errors.\n *\/","file":"class-wp-error.php","line":151,"missingDoc":false,"filters":[],"uses":{"get_error_code":[153]},"used_by":[]},"WP_Error::add":{"doc":"\/**\n * Append more error messages to list of error messages.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string|int $code Error code.\n * @param string $message Error message.\n * @param mixed $data Optional. Error data.\n *\/","file":"class-wp-error.php","line":170,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Error::add_data":{"doc":"\/**\n * Add data for error code.\n *\n * The error code can only contain one error data.\n *\n * @since 2.1.0\n *\n * @param mixed $data Error data.\n * @param string|int $code Error code.\n *\/","file":"class-wp-error.php","line":186,"missingDoc":false,"filters":[],"uses":{"get_error_code":[188]},"used_by":[]},"WP_HTTP_IXR_Client::__construct":{"doc":"","file":"class-wp-http-ixr-client.php","line":11,"missingDoc":true,"filters":[],"uses":{"parse_url":[14]},"used_by":[]},"WP_HTTP_IXR_Client::query":{"doc":"","file":"class-wp-http-ixr-client.php","line":33,"missingDoc":true,"filters":[],"uses":{"func_get_args":[34],"array_shift":[35],"getXml":[37],"htmlspecialchars":[56,73],"wp_remote_post":[58],"get_error_code":[61],"get_error_message":[62],"is_wp_error":[60],"wp_remote_retrieve_response_code":[68,67],"wp_remote_retrieve_body":[73,76],"parse":[77]},"used_by":[]},"wp_remote_post":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the POST method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":90,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[91],"post":[92]},"used_by":{"WP_HTTP_IXR_Client::query":[58],"trackback":[1918],"spawn_cron":[253],"wp_update_plugins":[205],"wp_update_themes":[310]}},"WP_Image_Editor_GD::__destruct":{"doc":"","file":"class-wp-image-editor-gd.php","line":21,"missingDoc":true,"filters":[],"uses":{"imagedestroy":[24]},"used_by":[]},"WP_Image_Editor_GD::test":{"doc":"\/**\n * Checks to see if current environment supports GD.\n *\n * @since 3.5.0\n * @access public\n *\n * @return boolean\n *\/","file":"class-wp-image-editor-gd.php","line":36,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[37],"function_exists":[37,43],"in_array":[42]},"used_by":[]},"WP_Image_Editor_GD::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor-gd.php","line":60,"missingDoc":false,"filters":[],"uses":{"imagetypes":[61]},"used_by":[]},"WP_Image_Editor_GD::load":{"doc":"\/**\n * Loads image from $this->file into new GD Resource.\n *\n * @since 3.5.0\n * @access protected\n *\n * @return boolean|\\WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":82,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"__":[87,94,98],"is_file":[86],"preg_match":[86],"ini_set":[90],"imagecreatefromstring":[91],"file_get_contents":[91],"is_resource":[93],"getimagesize":[96],"update_size":[100]},"used_by":[]},"WP_Image_Editor_GD::update_size":{"doc":"\/**\n * Sets or updates current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor-gd.php","line":115,"missingDoc":false,"filters":[],"uses":{"imagesx":[117],"imagesy":[120]},"used_by":[]},"WP_Image_Editor_GD::resize":{"doc":"\/**\n * Resizes current image.\n * Wraps _resize, since _resize returns a GD Resource.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":137,"missingDoc":false,"filters":[],"uses":{"_resize":[141],"imagedestroy":[144],"is_wp_error":[148],"is_resource":[143],"__":[151]},"used_by":[]},"WP_Image_Editor_GD::_resize":{"doc":"","file":"class-wp-image-editor-gd.php","line":154,"missingDoc":true,"filters":[],"uses":{"image_resize_dimensions":[155],"__":[157,169],"wp_imagecreatetruecolor":[161],"imagecopyresampled":[162],"update_size":[165],"is_resource":[164]},"used_by":[]},"image_resize_dimensions":{"doc":"\/**\n * Retrieve calculated resized dimensions for use in WP_Image_Editor.\n *\n * Calculate dimensions and coordinates for a resized image that fits within a\n * specified width and height. If $crop is true, the largest matching central\n * portion of the image will be cropped out and resized to the required size.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'image_resize_dimensions' on $orig_w, $orig_h, $dest_w, $dest_h and\n *\t\t$crop to provide custom resize dimensions.\n *\n * @param int $orig_w Original width.\n * @param int $orig_h Original height.\n * @param int $dest_w New width.\n * @param int $dest_h New height.\n * @param bool $crop Optional, default is false. Whether to crop image or resize.\n * @return bool|array False on failure. Returned array matches parameters for imagecopyresampled() PHP function.\n *\/","file":"media.php","line":319,"missingDoc":false,"filters":["'image_resize_dimensions'"],"uses":{"min":[335,336],"intval":[339,343],"max":[346],"round":[348,349],"floor":[351,352],"wp_constrain_dimensions":[361]},"used_by":{"WP_Image_Editor_GD::_resize":[155],"WP_Image_Editor_Imagick::resize":[221],"image_get_intermediate_size":[456]}},"wp_imagecreatetruecolor":{"doc":"\/**\n * Create new GD image resource with transparency support\n * @TODO: Deprecate if possible.\n *\n * @since 2.9.0\n *\n * @param int $width Image width\n * @param int $height Image height\n * @return image resource\n *\/","file":"media.php","line":927,"missingDoc":false,"filters":[],"uses":{"imagecreatetruecolor":[928],"imagealphablending":[930],"imagesavealpha":[931],"is_resource":[929],"function_exists":[929,929]},"used_by":{"WP_Image_Editor_GD::_resize":[161],"WP_Image_Editor_GD::crop":[230],"WP_Image_Editor_GD::flip":[289]}},"WP_Image_Editor_GD::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor-gd.php","line":182,"missingDoc":false,"filters":[],"uses":{"_resize":[187],"_save":[190],"imagedestroy":[192],"is_wp_error":[194,189]},"used_by":[]},"WP_Image_Editor_GD::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":222,"missingDoc":false,"filters":[],"uses":{"wp_imagecreatetruecolor":[230],"imageantialias":[238],"function_exists":[237],"imagecopyresampled":[240],"imagedestroy":[243],"update_size":[245],"is_resource":[242],"__":[249]},"used_by":[]},"WP_Image_Editor_GD::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n * Ported from image-edit.php\n *\n * @since 3.5.0\n * @access public\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":262,"missingDoc":false,"filters":[],"uses":{"imagerotate":[264],"imagedestroy":[267],"update_size":[269],"is_resource":[266],"function_exists":[263],"__":[273]},"used_by":[]},"WP_Image_Editor_GD::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @returns boolean|WP_Error\n *\/","file":"class-wp-image-editor-gd.php","line":286,"missingDoc":false,"filters":[],"uses":{"wp_imagecreatetruecolor":[289],"imagedestroy":[298],"imagecopyresampled":[297],"is_resource":[291],"__":[303]},"used_by":[]},"WP_Image_Editor_GD::save":{"doc":"\/**\n * Saves current in-memory image to file.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor-gd.php","line":316,"missingDoc":false,"filters":[],"uses":{"_save":[317],"is_wp_error":[319]},"used_by":[]},"WP_Image_Editor_GD::_save":{"doc":"","file":"class-wp-image-editor-gd.php","line":327,"missingDoc":true,"filters":["'jpeg_quality'","'image_make_intermediate_size'"],"uses":{"get_output_format":[328],"generate_filename":[331],"__":[335,343,347,350],"make_image":[334,342,346],"imagetruecolortopalette":[340],"imagecolorstotal":[340],"function_exists":[339],"imageistruecolor":[339],"stat":[354],"dirname":[354],"chmod":[356],"wp_basename":[360]},"used_by":[]},"wp_basename":{"doc":"\/**\n * i18n friendly version of basename()\n *\n * @since 3.1.0\n *\n * @param string $path A path.\n * @param string $suffix If the filename ends in suffix this will also be cut off.\n * @return string\n *\/","file":"formatting.php","line":3254,"missingDoc":false,"filters":[],"uses":{"urldecode":[3255],"basename":[3255],"str_replace":[3255],"urlencode":[3255]},"used_by":{"WP_Image_Editor_GD::_save":[360],"WP_Image_Editor_Imagick::_save":[432],"WP_Image_Editor::get_output_format":[265],"WP_Image_Editor::generate_filename":[291],"image_downsize":[145,161],"wp_get_attachment_image_src":[518],"wp_prepare_attachment_for_js":[1388],"WP_Query::parse_tax_query":[1713],"WP_Query::get_posts":[2133,2145]}},"WP_Image_Editor_GD::stream":{"doc":"\/**\n * Returns stream of current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n *\/","file":"class-wp-image-editor-gd.php","line":375,"missingDoc":false,"filters":[],"uses":{"get_output_format":[376],"header":[380,383,386],"imagepng":[381],"imagegif":[384],"imagejpeg":[387]},"used_by":[]},"WP_Image_Editor_Imagick::__destruct":{"doc":"","file":"class-wp-image-editor-imagick.php","line":21,"missingDoc":true,"filters":[],"uses":{"clear":[24],"destroy":[25]},"used_by":[]},"WP_Image_Editor_Imagick::test":{"doc":"\/**\n * Checks to see if current environment supports Imagick.\n *\n * We require Imagick 2.2.0 or greater, based on whether the queryFormats()\n * method can be called statically.\n *\n * @since 3.5.0\n * @access public\n *\n * @return boolean\n *\/","file":"class-wp-image-editor-imagick.php","line":40,"missingDoc":false,"filters":[],"uses":{"extension_loaded":[43],"class_exists":[43,43],"version_compare":[46],"phpversion":[46],"defined":[70],"array_diff":[73],"get_class_methods":[73]},"used_by":[]},"WP_Image_Editor_Imagick::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor-imagick.php","line":88,"missingDoc":false,"filters":[],"uses":{"strtoupper":[89],"method_exists":[96]},"used_by":[]},"WP_Image_Editor_Imagick::load":{"doc":"\/**\n * Loads image from $this->file into new Imagick Object.\n *\n * @since 3.5.0\n * @access protected\n *\n * @return boolean|WP_Error True if loaded; WP_Error on failure.\n *\/","file":"class-wp-image-editor-imagick.php","line":115,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"__":[120,129],"is_file":[119],"preg_match":[119],"ini_set":[123],"valid":[128],"setIteratorIndex":[133],"is_callable":[132],"get_mime_type":[135],"getImageFormat":[135],"getMessage":[138],"update_size":[141],"is_wp_error":[142],"set_quality":[145]},"used_by":[]},"WP_Image_Editor_Imagick::set_quality":{"doc":"\/**\n * Sets Image Compression quality on a 1-100% scale.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $quality Compression Quality. Range: [1,100]\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":157,"missingDoc":false,"filters":["'jpeg_quality'"],"uses":{"setImageCompressionQuality":[163,167],"setImageCompression":[164],"getMessage":[171]},"used_by":[]},"WP_Image_Editor_Imagick::update_size":{"doc":"\/**\n * Sets or updates current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor-imagick.php","line":186,"missingDoc":false,"filters":[],"uses":{"getImageGeometry":[190],"__":[193]},"used_by":[]},"WP_Image_Editor_Imagick::resize":{"doc":"\/**\n * Resizes current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":217,"missingDoc":false,"filters":[],"uses":{"image_resize_dimensions":[221],"__":[223],"crop":[227],"scaleImage":[235],"getMessage":[238],"update_size":[241]},"used_by":[]},"WP_Image_Editor_Imagick::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor-imagick.php","line":254,"missingDoc":false,"filters":[],"uses":{"getImage":[257,261],"resize":[263],"_save":[266],"clear":[268],"destroy":[269],"is_wp_error":[272,265]},"used_by":[]},"WP_Image_Editor_Imagick::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":302,"missingDoc":false,"filters":[],"uses":{"cropImage":[309],"setImagePage":[310],"scaleImage":[320],"update_size":[321,327],"getMessage":[325]},"used_by":[]},"WP_Image_Editor_Imagick::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n *\n * @since 3.5.0\n * @access public\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":339,"missingDoc":false,"filters":[],"uses":{"rotateImage":[345],"getMessage":[348],"update_size":[350]},"used_by":[]},"WP_Image_Editor_Imagick::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @returns boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":363,"missingDoc":false,"filters":[],"uses":{"flipImage":[366],"flopImage":[369],"getMessage":[372]},"used_by":[]},"WP_Image_Editor_Imagick::save":{"doc":"\/**\n * Saves current image to file.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor-imagick.php","line":387,"missingDoc":false,"filters":[],"uses":{"_save":[388],"setImageFormat":[395],"strtoupper":[395],"get_extension":[395],"getMessage":[398],"is_wp_error":[390]},"used_by":[]},"WP_Image_Editor_Imagick::_save":{"doc":"","file":"class-wp-image-editor-imagick.php","line":405,"missingDoc":true,"filters":["'image_make_intermediate_size'"],"uses":{"get_output_format":[406],"generate_filename":[409],"getImageFormat":[413],"setImageFormat":[415,419],"strtoupper":[415],"get_extension":[415],"make_image":[416],"getMessage":[422],"stat":[426],"dirname":[426],"chmod":[428],"wp_basename":[432]},"used_by":[]},"WP_Image_Editor_Imagick::stream":{"doc":"\/**\n * Streams current image to browser.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $mime_type\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor-imagick.php","line":448,"missingDoc":false,"filters":[],"uses":{"get_output_format":[449],"setImageFormat":[453,460],"strtoupper":[453],"header":[456],"getImageBlob":[457],"get_extension":[460],"getMessage":[463]},"used_by":[]},"WP_Image_Editor::__construct":{"doc":"\/**\n * Each instance handles a single file.\n *\/","file":"class-wp-image-editor.php","line":24,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::test":{"doc":"\/**\n * Checks to see if current environment supports the editor chosen.\n * Must be overridden in a sub-class.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param array $args\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":39,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::supports_mime_type":{"doc":"\/**\n * Checks to see if editor supports the mime-type specified.\n * Must be overridden in a sub-class.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $mime_type\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":54,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::load":{"doc":"\/**\n * Loads image from $this->file into editor.\n *\n * @since 3.5.0\n * @access protected\n * @abstract\n *\n * @return boolean|WP_Error True if loaded; WP_Error on failure.\n *\/","file":"class-wp-image-editor.php","line":67,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::save":{"doc":"\/**\n * Saves current image to file.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $destfilename\n * @param string $mime_type\n * @return array|WP_Error {'path'=>string, 'file'=>string, 'width'=>int, 'height'=>int, 'mime-type'=>string}\n *\/","file":"class-wp-image-editor.php","line":80,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::resize":{"doc":"\/**\n * Resizes current image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param int $max_w\n * @param int $max_h\n * @param boolean $crop\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":94,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::multi_resize":{"doc":"\/**\n * Processes current image and saves to disk\n * multiple sizes from single source.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param array $sizes { {'width'=>int, 'height'=>int, 'crop'=>bool}, ... }\n * @return array\n *\/","file":"class-wp-image-editor.php","line":107,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::crop":{"doc":"\/**\n * Crops Image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string|int $src The source file or Attachment ID.\n * @param int $src_x The start x position to crop from.\n * @param int $src_y The start y position to crop from.\n * @param int $src_w The width to crop.\n * @param int $src_h The height to crop.\n * @param int $dst_w Optional. The destination width.\n * @param int $dst_h Optional. The destination height.\n * @param boolean $src_abs Optional. If the source crop points are absolute.\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":126,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::rotate":{"doc":"\/**\n * Rotates current image counter-clockwise by $angle.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param float $angle\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":138,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::flip":{"doc":"\/**\n * Flips current image.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param boolean $horz Horizontal Flip\n * @param boolean $vert Vertical Flip\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":151,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::stream":{"doc":"\/**\n * Streams current image to browser.\n *\n * @since 3.5.0\n * @access public\n * @abstract\n *\n * @param string $mime_type\n * @return boolean|WP_Error\n *\/","file":"class-wp-image-editor.php","line":163,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::get_size":{"doc":"\/**\n * Gets dimensions of image.\n *\n * @since 3.5.0\n * @access public\n *\n * @return array {'width'=>int, 'height'=>int}\n *\/","file":"class-wp-image-editor.php","line":173,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::update_size":{"doc":"\/**\n * Sets current image size.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param int $width\n * @param int $height\n *\/","file":"class-wp-image-editor.php","line":186,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Image_Editor::set_quality":{"doc":"\/**\n * Sets Image Compression quality on a 1-100% scale.\n *\n * @since 3.5.0\n * @access public\n *\n * @param int $quality Compression Quality. Range: [1,100]\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":203,"missingDoc":false,"filters":["'wp_editor_set_quality'"],"uses":[],"used_by":[]},"WP_Image_Editor::get_output_format":{"doc":"\/**\n * Returns preferred mime-type and extension based on provided\n * file's extension and mime, or current file's extension and mime.\n *\n * Will default to $this->default_mime_type if requested is not supported.\n *\n * Provides corrected filename only if filename is provided.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $filename\n * @param string $mime_type\n * @return array { filename|null, extension, mime-type }\n *\/","file":"class-wp-image-editor.php","line":224,"missingDoc":false,"filters":["'image_editor_default_mime_type'"],"uses":{"get_extension":[230,254],"strtolower":[234,239],"pathinfo":[234,239,259],"get_mime_type":[235],"supports_mime_type":[252],"trailingslashit":[265],"wp_basename":[265]},"used_by":[]},"WP_Image_Editor::generate_filename":{"doc":"\/**\n * Builds an output filename based on current file, and adding proper suffix\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $suffix\n * @param string $dest_path\n * @param string $extension\n * @return string filename\n *\/","file":"class-wp-image-editor.php","line":282,"missingDoc":false,"filters":[],"uses":{"get_suffix":[285],"pathinfo":[287],"wp_basename":[291],"strtolower":[292],"is_null":[294],"realpath":[294],"trailingslashit":[297]},"used_by":[]},"WP_Image_Editor::get_suffix":{"doc":"\/**\n * Builds and returns proper suffix for file based on height and width.\n *\n * @since 3.5.0\n * @access public\n *\n * @return string suffix\n *\/","file":"class-wp-image-editor.php","line":308,"missingDoc":false,"filters":[],"uses":{"get_size":[309]},"used_by":[]},"WP_Image_Editor::make_image":{"doc":"\/**\n * Either calls editor's save function or handles file as a stream.\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string|stream $filename\n * @param callable $function\n * @param array $arguments\n * @return boolean\n *\/","file":"class-wp-image-editor.php","line":326,"missingDoc":false,"filters":[],"uses":{"ob_start":[331],"wp_is_stream":[329],"call_user_func_array":[334],"ob_get_contents":[337],"fopen":[339],"fwrite":[344],"fclose":[345],"ob_end_clean":[349]},"used_by":[]},"wp_is_stream":{"doc":"\/**\n * Test if a given path is a stream URL\n *\n * @param string $path The resource path or URL\n * @return bool True if the path is a stream URL\n *\/","file":"functions.php","line":3866,"missingDoc":false,"filters":[],"uses":{"stream_get_wrappers":[3867],"join":[3868],"preg_match":[3870]},"used_by":{"WP_Image_Editor::make_image":[329],"wp_mkdir_p":[1318]}},"WP_Image_Editor::get_mime_type":{"doc":"\/**\n * Returns first matched mime-type from extension,\n * as mapped from wp_get_mime_types()\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $extension\n * @return string|boolean\n *\/","file":"class-wp-image-editor.php","line":365,"missingDoc":false,"filters":[],"uses":{"wp_get_mime_types":[369],"array_keys":[370],"preg_match":[373]},"used_by":[]},"wp_get_mime_types":{"doc":"\/**\n * Retrieve list of mime types and file extensions.\n *\n * @since 3.5.0\n *\n * @uses apply_filters() Calls 'mime_types' on returned array. This filter should\n * be used to add types, not remove them. To remove types use the upload_mimes filter.\n *\n * @return array Array of mime types keyed by the file extension regex corresponding to those types.\n *\/","file":"functions.php","line":1904,"missingDoc":false,"filters":["'mime_types'"],"uses":[],"used_by":{"WP_Image_Editor::get_mime_type":[369],"WP_Image_Editor::get_extension":[392],"do_enclose":[461],"get_allowed_mime_types":[2003]}},"WP_Image_Editor::get_extension":{"doc":"\/**\n * Returns first matched extension from Mime-type,\n * as mapped from wp_get_mime_types()\n *\n * @since 3.5.0\n * @access protected\n *\n * @param string $mime_type\n * @return string|boolean\n *\/","file":"class-wp-image-editor.php","line":391,"missingDoc":false,"filters":[],"uses":{"explode":[392],"array_search":[392],"wp_get_mime_types":[392]},"used_by":[]},"WP_Theme::__construct":{"doc":"\/**\n * Constructor for WP_Theme.\n *\n * @param string $theme_dir Directory of the theme within the theme_root.\n * @param string $theme_root Theme root.\n * @param WP_Error|null $_child If this theme is a parent theme, the child may be passed for validation purposes.\n *\/","file":"class-wp-theme.php","line":167,"missingDoc":false,"filters":["'wp_cache_themes_persistently'"],"uses":{"wp_cache_add_global_groups":[174],"is_int":[175],"wp_cache_add_non_persistent_groups":[178],"basename":[187,227],"dirname":[188,186,246],"in_array":[186,186],"md5":[191],"cache_get":[194],"file_exists":[205,207,213,235,247,243],"__":[208,210,214,218,236,255,267,271],"cache_add":[212,220,237,256,268,272,286],"add":[214],"is_readable":[216],"get_file_data":[223],"array_search":[226],"is_array":[196,243,281],"search_theme_directories":[249],"sprintf":[255,267,271],"is_a":[265]},"used_by":[]},"get_file_data":{"doc":"\/**\n * Retrieve metadata from a file.\n *\n * Searches for metadata in the first 8kiB of a file, such as a plugin or theme.\n * Each piece of metadata must be on its own line. Fields can not span multiple\n * lines, the value will get cut at the end of the first line.\n *\n * If the file data is not within that first 8kiB, then the author should correct\n * their plugin file and move the data headers to the top.\n *\n * @see http:\/\/codex.wordpress.org\/File_Header\n *\n * @since 2.9.0\n * @param string $file Path to the file\n * @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name')\n * @param string $context If specified adds filter hook \"extra_{$context}_headers\"\n *\/","file":"functions.php","line":3528,"missingDoc":false,"filters":["\"extra_{$context}_headers\""],"uses":{"fopen":[3530],"fread":[3533],"fclose":[3536],"str_replace":[3539],"array_combine":[3542],"array_merge":[3543],"_cleanup_header_comment":[3550],"preg_match":[3549],"preg_quote":[3549]},"used_by":{"WP_Theme::__construct":[223]}},"search_theme_directories":{"doc":"\/**\n * Search all registered theme directories for complete and valid themes.\n *\n * @since 2.9.0\n *\n * @param bool $force Optional. Whether to force a new directory scan. Defaults to false.\n * @return array Valid themes found\n *\/","file":"theme.php","line":328,"missingDoc":false,"filters":["'wp_cache_themes_persistently'"],"uses":{"str_replace":[346],"strpos":[345],"get_site_transient":[352,426],"is_array":[353],"is_int":[365],"scandir":[375,392],"is_dir":[379,396],"file_exists":[398,381],"asort":[417],"array_flip":[420],"set_site_transient":[427]},"used_by":{"WP_Theme::__construct":[249],"wp_get_themes":[33],"wp_clean_themes_cache":[116],"get_theme_roots":[290]}},"WP_Theme::__toString":{"doc":"\/**\n * When converting the object to a string, the theme name is returned.\n *\n * @return string Theme name, ready for display (translated)\n *\/","file":"class-wp-theme.php","line":295,"missingDoc":false,"filters":[],"uses":{"display":[296]},"used_by":[]},"WP_Theme::__isset":{"doc":"\/**\n * __isset() magic method for properties formerly returned by current_theme_info()\n *\/","file":"class-wp-theme.php","line":302,"missingDoc":false,"filters":[],"uses":{"in_array":[308]},"used_by":[]},"WP_Theme::__get":{"doc":"\/**\n * __get() magic method for properties formerly returned by current_theme_info()\n *\/","file":"class-wp-theme.php","line":314,"missingDoc":false,"filters":[],"uses":{"get":[318,320,322,339],"parent":[322,322],"get_template_directory":[324],"get_stylesheet_directory":[326],"get_template":[328],"get_stylesheet":[330],"get_screenshot":[332],"display":[335,337],"get_theme_root":[341],"get_theme_root_uri":[343],"offsetGet":[346]},"used_by":[]},"get_theme_root":{"doc":"\/**\n * Retrieve path to themes directory.\n *\n * Does not have trailing slash.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'theme_root' filter on path.\n *\n * @param string $stylesheet_or_template The stylesheet or template name of the theme\n * @return string Theme path.\n *\/","file":"theme.php","line":443,"missingDoc":false,"filters":["'theme_root'"],"uses":{"in_array":[449],"get_raw_theme_root":[446]},"used_by":{"WP_Theme::__get":[341],"WP_Theme::offsetGet":[418],"get_stylesheet_directory":[160],"get_template_directory":[253]}},"get_theme_root_uri":{"doc":"\/**\n * Retrieve URI for themes directory.\n *\n * Does not have trailing slash.\n *\n * @since 1.5.0\n *\n * @param string $stylesheet_or_template Optional. The stylesheet or template name of the theme.\n * \tDefault is to leverage the main theme root.\n * @param string $theme_root Optional. The theme root for which calculations will be based, preventing\n * \tthe need for a get_raw_theme_root() call.\n * @return string Themes URI.\n *\/","file":"theme.php","line":471,"missingDoc":false,"filters":["'theme_root_uri'"],"uses":{"get_raw_theme_root":[475],"content_url":[481,489,492],"str_replace":[481,483],"strpos":[482,484,484,480],"site_url":[483],"plugins_url":[485],"basename":[485],"in_array":[478],"get_option":[495]},"used_by":{"WP_Theme::__get":[343],"WP_Theme::offsetGet":[420],"WP_Theme::get_stylesheet_directory_uri":[799],"WP_Theme::get_template_directory_uri":[815,817],"WP_Theme::get_theme_root_uri":[852],"get_stylesheet_directory_uri":[175],"get_template_directory_uri":[269]}},"WP_Theme::offsetSet":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":353,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::offsetUnset":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":358,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::offsetExists":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes()\n *\/","file":"class-wp-theme.php","line":363,"missingDoc":false,"filters":[],"uses":{"in_array":[370]},"used_by":[]},"WP_Theme::offsetGet":{"doc":"\/**\n * Method to implement ArrayAccess for keys formerly returned by get_themes().\n *\n * Author, Author Name, Author URI, and Description did not previously return\n * translated data. We are doing so now as it is safe to do. However, as\n * Name and Title could have been used as the key for get_themes(), both remain\n * untranslated for back compatibility. This means that ['Name'] is not ideal,\n * and care should be taken to use $theme->display('Name') to get a properly\n * translated header.\n *\/","file":"class-wp-theme.php","line":383,"missingDoc":false,"filters":[],"uses":{"get":[389,400,416,422],"display":[391,393,395,397],"get_template":[402],"get_stylesheet":[404],"get_files":[406,408],"get_template_directory":[410],"get_stylesheet_directory":[412],"get_screenshot":[414],"get_theme_root":[418],"get_theme_root_uri":[420],"parent":[422,422]},"used_by":[]},"WP_Theme::errors":{"doc":"\/**\n * Returns errors property.\n *\n * @since 3.4.0\n * @access public\n *\n * @return WP_Error|bool WP_Error if there are errors, or false.\n *\/","file":"class-wp-theme.php","line":436,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[437]},"used_by":[]},"WP_Theme::exists":{"doc":"\/**\n * Whether the theme exists.\n *\n * A theme with errors exists. A theme with the error of 'theme_not_found',\n * meaning that the theme's directory was not found, does not exist.\n *\n * @since 3.4.0\n * @access public\n *\n * @return bool Whether the theme exists.\n *\/","file":"class-wp-theme.php","line":451,"missingDoc":false,"filters":[],"uses":{"errors":[452,452],"in_array":[452],"get_error_codes":[452]},"used_by":[]},"WP_Theme::parent":{"doc":"\/**\n * Returns reference to the parent theme.\n *\n * @since 3.4.0\n * @access public\n *\n * @return WP_Theme|bool Parent theme, or false if the current theme is not a child theme.\n *\/","file":"class-wp-theme.php","line":463,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::cache_add":{"doc":"\/**\n * Adds theme data to cache.\n *\n * Cache entries keyed by the theme and the type of data.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $key Type of data to store (theme, screenshot, headers, page_templates)\n * @param string $data Data to store\n * @return bool Return value from wp_cache_add()\n *\/","file":"class-wp-theme.php","line":479,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[480]},"used_by":[]},"WP_Theme::cache_get":{"doc":"\/**\n * Gets theme data from cache.\n *\n * Cache entries are keyed by the theme and the type of data.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $key Type of data to retrieve (theme, screenshot, headers, page_templates)\n * @return mixed Retrieved data\n *\/","file":"class-wp-theme.php","line":494,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[495]},"used_by":[]},"WP_Theme::cache_delete":{"doc":"\/**\n * Clears the cache for the theme.\n *\n * @access public\n * @since 3.4.0\n *\/","file":"class-wp-theme.php","line":504,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[506],"__construct":[509]},"used_by":[]},"__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/Base.php","line":77,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::cache_delete":[509],"WP_Meta_Query::parse_query_vars":[688],"SimplePie_File::__construct":[143,225]}},"WP_Theme::get":{"doc":"\/**\n * Get a raw, unformatted theme header.\n *\n * The header is sanitized, but is not translated, and is not marked up for display.\n * To get a theme header for display, use the display() method.\n *\n * Use the get_template() method, not the 'Template' header, for finding the template.\n * The 'Template' header is only good for what was written in the style.css, while\n * get_template() takes into account where WordPress actually located the theme and\n * whether it is actually valid.\n *\n * @access public\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @return string String on success, false on failure.\n *\/","file":"class-wp-theme.php","line":529,"missingDoc":false,"filters":[],"uses":{"cache_get":[534],"is_array":[535],"sanitize_header":[545,548],"array_keys":[544],"cache_add":[546]},"used_by":[]},"WP_Theme::display":{"doc":"\/**\n * Gets a theme header, formatted and translated for display.\n *\n * @access public\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param bool $markup Optional. Whether to mark up the header. Defaults to true.\n * @param bool $translate Optional. Whether to translate the header. Defaults to true.\n * @return string Processed header, false on failure.\n *\/","file":"class-wp-theme.php","line":565,"missingDoc":false,"filters":[],"uses":{"get":[566],"load_textdomain":[568],"translate_header":[572],"markup_header":[575]},"used_by":[]},"load_textdomain":{"doc":"\/**\n * Loads a MO file into the domain $domain.\n *\n * If the domain already exists, the translations will be merged. If both\n * sets have the same string, the translation from the original value will be taken.\n *\n * On success, the .mo file will be placed in the $l10n global by $domain\n * and will be a MO object.\n *\n * @since 1.5.0\n * @uses $l10n Gets list of domain translated string objects\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $mofile Path to the .mo file\n * @return bool True on success, false on failure\n *\/","file":"l10n.php","line":326,"missingDoc":false,"filters":["'override_load_textdomain'","'load_textdomain'","'load_textdomain_mofile'"],"uses":{"is_readable":[339],"import_from_file":[342],"merge_with":[345]},"used_by":{"WP_Theme::display":[568],"WP_Theme::get_page_templates":[943],"wp_timezone_choice":[3341],"load_default_textdomain":[388,391,396,399],"load_plugin_textdomain":[429],"load_muplugin_textdomain":[444],"load_theme_textdomain":[467,472],"wp_load_translations_early":[749,751]}},"WP_Theme::sanitize_header":{"doc":"\/**\n * Sanitize a theme header.\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to sanitize.\n *\/","file":"class-wp-theme.php","line":586,"missingDoc":false,"filters":[],"uses":{"wp_kses":[602,615],"esc_url_raw":[619],"array_filter":[622],"array_map":[622],"explode":[622],"strip_tags":[622]},"used_by":[]},"wp_kses":{"doc":"\/**\n * Filters content and keeps only allowable HTML elements.\n *\n * This function makes sure that only the allowed HTML element names, attribute\n * names and attribute values plus only sane HTML entities will occur in\n * $string. You have to remove any slashes from PHP's magic quotes before you\n * call this function.\n *\n * The default allowed protocols are 'http', 'https', 'ftp', 'mailto', 'news',\n * 'irc', 'gopher', 'nntp', 'feed', 'telnet, 'mms', 'rtsp' and 'svn'. This\n * covers all common link protocols, except for 'javascript' which should not\n * be allowed for untrusted users.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter through kses\n * @param array $allowed_html List of allowed HTML elements\n * @param array $allowed_protocols Optional. Allowed protocol in links.\n * @return string Filtered content with only allowed HTML elements\n *\/","file":"kses.php","line":476,"missingDoc":false,"filters":[],"uses":{"wp_allowed_protocols":[478],"wp_kses_no_null":[479],"wp_kses_js_entities":[480],"wp_kses_normalize_entities":[481],"wp_kses_hook":[482],"wp_kses_split":[483]},"used_by":{"WP_Theme::sanitize_header":[602,615],"wp_kses_split2":[612],"wp_filter_kses":[1257],"wp_kses_data":[1270],"wp_filter_post_kses":[1285],"wp_kses_post":[1300],"wp_filter_nohtml_kses":[1312]}},"WP_Theme::markup_header":{"doc":"\/**\n * Mark up a theme header.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to mark up.\n * @param string $translate Whether the header has been translated.\n * @return string Value, marked up.\n *\/","file":"class-wp-theme.php","line":640,"missingDoc":false,"filters":[],"uses":{"get_stylesheet":[644],"wptexturize":[647],"esc_attr__":[653],"sprintf":[654],"display":[654],"__":[656,663],"get":[650],"implode":[665],"esc_url":[669]},"used_by":[]},"wptexturize":{"doc":"\/**\n * Replaces common plain text characters into formatted entities\n *\n * As an example,\n * <code>\n * 'cause today's effort makes it worth tomorrow's \"holiday\"...\n * <\/code>\n * Becomes:\n * <code>\n * ’cause today’s effort makes it worth tomorrow’s “holiday”…\n * <\/code>\n * Code within certain html blocks are skipped.\n *\n * @since 0.71\n * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases\n *\n * @param string $text The text to be formatted\n * @return string The string replaced with html entities\n *\/","file":"formatting.php","line":29,"missingDoc":false,"filters":["'no_texturize_tags'","'no_texturize_shortcodes'"],"uses":{"_x":[37,39,42,45,47,50,52,55,57],"array_keys":[64,98],"array_values":[65,99],"array_merge":[73,74],"implode":[104,105,130],"preg_split":[110],"_wptexturize_pushpop_element":[119,121],"str_replace":[124],"preg_replace":[126,128]},"used_by":{"WP_Theme::markup_header":[647],"trackback_rdf":[758],"get_archives_link":[826],"gallery_shortcode":[781]}},"esc_attr__":{"doc":"\/**\n * Retrieves the translation of $text and escapes it for safe use in an attribute.\n * If there is no translation, or the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @see esc_attr()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":112,"missingDoc":false,"filters":[],"uses":{"esc_attr":[113],"translate":[113]},"used_by":{"WP_Theme::markup_header":[653],"WP_Widget_RSS::widget":[783],"wp_timezone_choice":[3421,3429],"get_search_form":[164],"__main":[232],"edit_comment_link":[1009],"edit_bookmark_link":[1050],"get_the_password_form":[1227]}},"WP_Theme::translate_header":{"doc":"\/**\n * Translate a theme header.\n *\n * @access private\n * @since 3.4.0\n *\n * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags.\n * @param string $value Value to translate.\n * @return string Translated value.\n *\/","file":"class-wp-theme.php","line":686,"missingDoc":false,"filters":[],"uses":{"translate":[692,714],"get":[692,714],"function_exists":[695],"get_theme_feature_list":[701]},"used_by":[]},"translate":{"doc":"\/**\n * Retrieves the translation of $text. If there is no translation, or\n * the domain isn't loaded, the original text is returned.\n *\n * @see __() Don't use translate() directly, use __()\n * @since 2.2.0\n * @uses apply_filters() Calls 'gettext' on domain translated text\n *\t\twith the untranslated text as second parameter.\n *\n * @param string $text Text to translate.\n * @param string $domain Domain to retrieve the translated text.\n * @return string Translated text\n *\/","file":"l10n.php","line":67,"missingDoc":false,"filters":["'gettext'"],"uses":{"get_translations_for_domain":[68],"translate":[69]},"used_by":{"WP_Theme::translate_header":[692,714],"_c":[1795],"translate_with_context":[1814],"wp_timezone_choice":[3366,3367,3368],"translate":[69],"translate_with_gettext_context":[82],"__":[97],"esc_attr__":[113],"esc_html__":[129],"_e":[142],"esc_attr_e":[156],"esc_html_e":[170]}},"WP_Theme::get_stylesheet":{"doc":"\/**\n * The directory name of the theme's \"stylesheet\" files, inside the theme root.\n *\n * In the case of a child theme, this is directory name of the the child theme.\n * Otherwise, get_stylesheet() is the same as get_template().\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Stylesheet\n *\/","file":"class-wp-theme.php","line":730,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_template":{"doc":"\/**\n * The directory name of the theme's \"template\" files, inside the theme root.\n *\n * In the case of a child theme, this is the directory name of the parent theme.\n * Otherwise, the get_template() is the same as get_stylesheet().\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Template\n *\/","file":"class-wp-theme.php","line":745,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_stylesheet_directory":{"doc":"\/**\n * Returns the absolute path to the directory of a theme's \"stylesheet\" files.\n *\n * In the case of a child theme, this is the absolute path to the directory\n * of the child theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Absolute path of the stylesheet directory.\n *\/","file":"class-wp-theme.php","line":760,"missingDoc":false,"filters":[],"uses":{"errors":[761,761],"in_array":[761],"get_error_codes":[761]},"used_by":[]},"WP_Theme::get_template_directory":{"doc":"\/**\n * Returns the absolute path to the directory of a theme's \"template\" files.\n *\n * In the case of a child theme, this is the absolute path to the directory\n * of the parent theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Absolute path of the template directory.\n *\/","file":"class-wp-theme.php","line":778,"missingDoc":false,"filters":[],"uses":{"parent":[780,779]},"used_by":[]},"WP_Theme::get_stylesheet_directory_uri":{"doc":"\/**\n * Returns the URL to the directory of a theme's \"stylesheet\" files.\n *\n * In the case of a child theme, this is the URL to the directory of the\n * child theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string URL to the stylesheet directory.\n *\/","file":"class-wp-theme.php","line":798,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[799],"str_replace":[799],"rawurlencode":[799]},"used_by":[]},"WP_Theme::get_template_directory_uri":{"doc":"\/**\n * Returns the URL to the directory of a theme's \"template\" files.\n *\n * In the case of a child theme, this is the URL to the directory of the\n * parent theme's files.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string URL to the template directory.\n *\/","file":"class-wp-theme.php","line":813,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[815,817],"parent":[815,814],"str_replace":[819],"rawurlencode":[819]},"used_by":[]},"WP_Theme::get_theme_root":{"doc":"\/**\n * The absolute path to the directory of the theme root.\n *\n * This is typically the absolute path to wp-content\/themes.\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Theme root.\n *\/","file":"class-wp-theme.php","line":832,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Theme::get_theme_root_uri":{"doc":"\/**\n * Returns the URL to the directory of the theme root.\n *\n * This is typically the absolute URL to wp-content\/themes. This forms the basis\n * for all other URLs returned by WP_Theme, so we pass it to the public function\n * get_theme_root_uri() and allow it to run the theme_root_uri filter.\n *\n * @uses get_theme_root_uri()\n *\n * @since 3.4.0\n * @access public\n *\n * @return string Theme root URI.\n *\/","file":"class-wp-theme.php","line":850,"missingDoc":false,"filters":[],"uses":{"get_theme_root_uri":[852]},"used_by":[]},"WP_Theme::get_screenshot":{"doc":"\/**\n * Returns the main screenshot file for the theme.\n *\n * The main screenshot is called screenshot.png. gif and jpg extensions are also allowed.\n *\n * Screenshots for a theme must be in the stylesheet directory. (In the case of child\n * themes, parent theme screenshots are not inherited.)\n *\n * @since 3.4.0\n * @access public\n *\n * @param string $uri Type of URL to return, either 'relative' or an absolute URI. Defaults to absolute URI.\n * @return mixed Screenshot file. False if the theme does not have a screenshot.\n *\/","file":"class-wp-theme.php","line":870,"missingDoc":false,"filters":[],"uses":{"cache_get":[871],"get_stylesheet_directory_uri":[875,885],"cache_add":[882,889],"file_exists":[881],"get_stylesheet_directory":[881]},"used_by":[]},"WP_Theme::get_files":{"doc":"\/**\n * Return files in the theme's directory.\n *\n * @since 3.4.0\n * @access public\n *\n * @param mixed $type Optional. Array of extensions to return. Defaults to all files (null).\n * @param int $depth Optional. How deep to search for files. Defaults to a flat scan (0 depth). -1 depth is infinite.\n * @param bool $search_parent Optional. Whether to return parent files. Defaults to false.\n * @return array Array of files, keyed by the path to the file relative to the theme's directory, with the values\n * \tbeing absolute paths.\n *\/","file":"class-wp-theme.php","line":905,"missingDoc":false,"filters":[],"uses":{"get_stylesheet_directory":[906],"get_template_directory":[909],"parent":[908]},"used_by":[]},"WP_Theme::get_page_templates":{"doc":"\/**\n * Returns the theme's page templates.\n *\n * @since 3.4.0\n * @access public\n *\n * @return array Array of page templates, keyed by filename, with the value of the translated header name.\n *\/","file":"class-wp-theme.php","line":922,"missingDoc":false,"filters":[],"uses":{"errors":[924,924],"get_error_codes":[924],"cache_get":[927],"get_files":[932],"preg_match":[935],"file_get_contents":[935],"_cleanup_header_comment":[937],"cache_add":[940],"is_array":[929],"translate_header":[945],"load_textdomain":[943],"get_page_templates":[950],"parent":[950,949]},"used_by":[]},"_cleanup_header_comment":{"doc":"\/**\n * Strip close comment and close php tags from file headers used by WP.\n * See http:\/\/core.trac.wordpress.org\/ticket\/8497\n *\n * @since 2.8.0\n *\n * @param string $str\n * @return string\n *\/","file":"functions.php","line":3462,"missingDoc":false,"filters":[],"uses":{"trim":[3463],"preg_replace":[3463]},"used_by":{"WP_Theme::get_page_templates":[937],"get_file_data":[3550]}},"WP_Theme::scandir":{"doc":"\/**\n * Scans a directory for files of a certain extension.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $path Absolute path to search.\n * @param mixed Array of extensions to find, string of a single extension, or null for all extensions.\n * @param int $depth How deep to search for files. Optional, defaults to a flat scan (0 depth). -1 depth is infinite.\n * @param string $relative_path The basename of the absolute path. Used to control the returned path\n * \tfor the found files, particularly when this function recurses to lower depths.\n *\/","file":"class-wp-theme.php","line":967,"missingDoc":false,"filters":[],"uses":{"is_dir":[968,986],"implode":[973],"trailingslashit":[976],"scandir":[980],"array_merge_recursive":[990],"preg_match":[991]},"used_by":[]},"WP_Theme::load_textdomain":{"doc":"\/**\n * Loads the theme's textdomain.\n *\n * Translation files are not inherited from the parent theme. Todo: if this fails for the\n * child theme, it should probably try to load the parent theme's translations.\n *\n * @since 3.4.0\n * @access public\n *\n * @return True if the textdomain was successfully loaded or has already been loaded. False if\n * \tno textdomain was specified in the file headers, or if the domain could not be loaded.\n *\/","file":"class-wp-theme.php","line":1011,"missingDoc":false,"filters":[],"uses":{"get":[1015,1027],"is_textdomain_loaded":[1021],"get_stylesheet_directory":[1026],"load_theme_textdomain":[1032]},"used_by":[]},"is_textdomain_loaded":{"doc":"\/**\n * Whether there are translations for the domain\n *\n * @since 3.0.0\n * @param string $domain\n * @return bool Whether there are translations\n *\/","file":"l10n.php","line":515,"missingDoc":false,"filters":[],"uses":[],"used_by":{"WP_Theme::load_textdomain":[1021]}},"load_theme_textdomain":{"doc":"\/**\n * Loads the theme's translated strings.\n *\n * If the current locale exists as a .mo file in the theme's root directory, it\n * will be included in the translated strings by the $domain.\n *\n * The .mo files must be named based on the locale exactly.\n *\n * @since 1.5.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n *\/","file":"l10n.php","line":459,"missingDoc":false,"filters":["'theme_locale'"],"uses":{"get_locale":[460],"get_template_directory":[463],"load_textdomain":[467,472]},"used_by":{"WP_Theme::load_textdomain":[1032],"load_child_theme_textdomain":[490]}},"WP_Theme::is_allowed":{"doc":"\/**\n * Whether the theme is allowed (multisite only).\n *\n * @since 3.4.0\n * @access public\n *\n * @param string $check Optional. Whether to check only the 'network'-wide settings, the 'site'\n * \tsettings, or 'both'. Defaults to 'both'.\n * @param int $blog_id Optional. Ignored if only network-wide settings are checked. Defaults to current blog.\n * @return bool Whether the theme is allowed for the network. Returns true in single-site.\n *\/","file":"class-wp-theme.php","line":1047,"missingDoc":false,"filters":[],"uses":{"is_multisite":[1048],"get_stylesheet":[1053,1059]},"used_by":[]},"WP_Theme::get_allowed":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the site or network.\n *\n * @since 3.4.0\n * @access public\n *\n * @param int $blog_id Optional. Defaults to current blog.\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1075,"missingDoc":false,"filters":["'allowed_themes'"],"uses":[],"used_by":[]},"WP_Theme::get_allowed_on_network":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the network.\n *\n * @since 3.4.0\n * @access public\n *\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1088,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1091]},"used_by":[]},"WP_Theme::get_allowed_on_site":{"doc":"\/**\n * Returns array of stylesheet names of themes allowed on the site.\n *\n * @since 3.4.0\n * @access public\n *\n * @param int $blog_id Optional. Defaults to current blog.\n * @return array Array of stylesheet names.\n *\/","file":"class-wp-theme.php","line":1104,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[1108,1113],"is_multisite":[1107],"get_option":[1116,1119,1127,1130],"switch_to_blog":[1118,1129,1151],"restore_current_blog":[1120,1131,1154],"wp_get_themes":[1138],"get":[1140],"is_array":[1134],"update_option":[1148,1152],"delete_option":[1149,1153],"is_admin":[1146]},"used_by":[]},"wp_get_themes":{"doc":"\/**\n * Returns an array of WP_Theme objects based on the arguments.\n *\n * Despite advances over get_themes(), this function is quite expensive, and grows\n * linearly with additional themes. Stick to wp_get_theme() if possible.\n *\n * @since 3.4.0\n *\n * @param array $args The search arguments. Optional.\n * - errors mixed True to return themes with errors, false to return themes without errors, null\n * to return all themes. Defaults to false.\n * - allowed mixed (Multisite) True to return only allowed themes for a site. False to return only\n * disallowed themes for a site. 'site' to return only site-allowed themes. 'network'\n * to return only network-allowed themes. Null to return all themes. Defaults to null.\n * - blog_id int (Multisite) The blog ID used to calculate which themes are allowed. Defaults to 0,\n * synonymous for the current blog.\n * @return Array of WP_Theme objects.\n *\/","file":"theme.php","line":27,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[31],"search_theme_directories":[33],"get_stylesheet":[38],"get_raw_theme_root":[40],"in_array":[41],"count":[35],"array_intersect_key":[53,55,57],"array_diff_key":[59],"is_multisite":[50],"errors":[74]},"used_by":{"WP_Theme::get_allowed_on_site":[1138],"get_themes":[2932],"wp_clean_themes_cache":[117],"wp_update_themes":[239]}},"delete_option":{"doc":"\/**\n * Removes option by name. Prevents removal of protected WordPress options.\n *\n * @package WordPress\n * @subpackage Option\n * @since 1.2.0\n *\n * @uses do_action() Calls 'delete_option' hook before option is deleted.\n * @uses do_action() Calls 'deleted_option' and 'delete_option_$option' hooks on success.\n *\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if option is successfully deleted. False on failure.\n *\/","file":"option.php","line":360,"missingDoc":false,"filters":["'delete_option'","\"delete_option_{$option}\"","'deleted_option'"],"uses":{"wp_protect_special_option":[363],"get_row":[366],"prepare":[366],"is_null":[367],"delete":[370],"wp_load_alloptions":[373],"wp_cache_set":[376],"is_array":[374],"wp_cache_delete":[379],"defined":[371]},"used_by":{"WP_Theme::get_allowed_on_site":[1149,1153],"WP_Widget_Recent_Posts::update":[601],"WP_Widget_Recent_Comments::update":[713],"delete_blog_option":[447,450],"maybe_add_existing_user_to_blog":[1683],"delete_transient":[413,415],"get_transient":[459,460],"delete_site_option":[863],"wp_delete_post":[2340,2343],"WP_Rewrite::flush_rules":[1886],"clean_term_cache":[2627],"switch_theme":[686,687],"get_theme_mods":[755],"remove_theme_mods":[837,843]}},"WP_Theme::sort_by_name":{"doc":"\/**\n * Sort themes by name.\n *\n * @since 3.4.0\n * @access public\n *\/","file":"class-wp-theme.php","line":1168,"missingDoc":false,"filters":[],"uses":{"uasort":[1170,1172],"strpos":[1169],"get_locale":[1169]},"used_by":[]},"WP_Theme::_name_sort":{"doc":"\/**\n * Callback function for usort() to naturally sort themes by name.\n *\n * Accesses the Name header directly from the class for maximum speed.\n * Would choke on HTML but we don't care enough to slow it down with strip_tags().\n *\n * @since 3.4.0\n * @access private\n *\/","file":"class-wp-theme.php","line":1185,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[1186]},"used_by":[]},"WP_Theme::_name_sort_i18n":{"doc":"\/**\n * Name sort (with translation).\n *\n * @since 3.4.0\n * @access private\n *\/","file":"class-wp-theme.php","line":1195,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[1197],"display":[1197,1197]},"used_by":[]},"Walker::start_lvl":{"doc":"\/**\n * Starts the list before the elements are added.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. This\n * method is called at the start of the output list.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":55,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::end_lvl":{"doc":"\/**\n * Ends the list of after the elements are added.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. This\n * method finishes the list at the end of output of the elements.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":69,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::start_el":{"doc":"\/**\n * Start the element output.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods. Includes\n * the element output also.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":83,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::end_el":{"doc":"\/**\n * Ends the element output, if needed.\n *\n * Additional parameters are used in child classes. The args parameter holds\n * additional values that may be used with the child class methods.\n *\n * @since 2.1.0\n * @abstract\n *\n * @param string $output Passed by reference. Used to append additional content.\n *\/","file":"class-wp-walker.php","line":96,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker::display_element":{"doc":"\/**\n * Traverse elements to create list from elements.\n *\n * Display one element if the element doesn't have any children otherwise,\n * display the element and its children. Will only traverse up to the max\n * depth and no ignore elements under that depth. It is possible to set the\n * max depth to include all depths, see walk() method.\n *\n * This method shouldn't be called directly, use the walk() method instead.\n *\n * @since 2.5.0\n *\n * @param object $element Data object\n * @param array $children_elements List of elements to continue traversing.\n * @param int $max_depth Max depth to traverse.\n * @param int $depth Depth of current element.\n * @param array $args\n * @param string $output Passed by reference. Used to append additional content.\n * @return null Null on failure with no changes to parameters.\n *\/","file":"class-wp-walker.php","line":118,"missingDoc":false,"filters":[],"uses":{"is_array":[126],"array_merge":[128,141,151,156],"call_user_func_array":[129,142,152,157],"display_element":[144]},"used_by":[]},"Walker::walk":{"doc":"\/**\n * Display array of elements hierarchically.\n *\n * It is a generic function which does not assume any existing order of\n * elements. max_depth = -1 means flatly display every element. max_depth =\n * 0 means display all levels. max_depth > 0 specifies the number of\n * display levels.\n *\n * @since 2.1.0\n *\n * @param array $elements\n * @param int $max_depth\n * @return string\n *\/","file":"class-wp-walker.php","line":174,"missingDoc":false,"filters":[],"uses":{"array_slice":[176,217],"func_get_args":[176],"display_element":[192,231,241],"count":[237]},"used_by":[]},"Walker::paged_walk":{"doc":"\/**\n * paged_walk() - produce a page of nested elements\n *\n * Given an array of hierarchical elements, the maximum depth, a specific page number,\n * and number of elements per page, this function first determines all top level root elements\n * belonging to that page, then lists them and all of their children in hierarchical order.\n *\n * @package WordPress\n * @since 2.7\n * @param int $max_depth = 0 means display all levels; $max_depth > 0 specifies the number of display levels.\n * @param int $page_num the specific page number, beginning with 1.\n * @return XHTML of the specified page of elements\n *\/","file":"class-wp-walker.php","line":260,"missingDoc":false,"filters":[],"uses":{"array_slice":[266],"func_get_args":[266],"count":[274,325,358],"ceil":[287,327],"array_reverse":[293,332,339],"display_element":[306,355,362],"unset_children":[347]},"used_by":[]},"Walker::get_number_of_root_elements":{"doc":"","file":"class-wp-walker.php","line":368,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Walker::unset_children":{"doc":"","file":"class-wp-walker.php","line":381,"missingDoc":true,"filters":[],"uses":{"unset_children":[391],"is_array":[389]},"used_by":[]},"wp_xmlrpc_server::__construct":{"doc":"\/**\n * Register all of the XMLRPC methods that XMLRPC server understands.\n *\n * Sets up server and method property. Passes XMLRPC\n * methods through the 'xmlrpc_methods' filter to allow plugins to extend\n * or replace XMLRPC methods.\n *\n * @since 1.5.0\n *\n * @return wp_xmlrpc_server\n *\/","file":"class-wp-xmlrpc-server.php","line":35,"missingDoc":false,"filters":["'xmlrpc_methods'"],"uses":{"initialise_blog_option_info":[128]},"used_by":[]},"wp_xmlrpc_server::serve_request":{"doc":"","file":"class-wp-xmlrpc-server.php","line":132,"missingDoc":true,"filters":[],"uses":{"IXR_Server":[133]},"used_by":[]},"wp_xmlrpc_server::sayHello":{"doc":"\/**\n * Test XMLRPC API by saying, \"Hello!\" to client.\n *\n * @since 1.5.0\n *\n * @param array $args Method Parameters.\n * @return string\n *\/","file":"class-wp-xmlrpc-server.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::addTwoNumbers":{"doc":"\/**\n * Test XMLRPC API by adding two numbers for client.\n *\n * @since 1.5.0\n *\n * @param array $args Method Parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":156,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::login":{"doc":"\/**\n * Log user in.\n *\n * @since 2.8.0\n *\n * @param string $username User's username.\n * @param string $password User's password.\n * @return mixed WP_User object if authentication passed, false otherwise\n *\/","file":"class-wp-xmlrpc-server.php","line":171,"missingDoc":false,"filters":["'pre_option_enable_xmlrpc'","'option_enable_xmlrpc'","'xmlrpc_enabled'","'xmlrpc_login_error'"],"uses":{"sprintf":[181],"__":[181,188],"wp_authenticate":[185],"is_wp_error":[187],"wp_set_current_user":[193]},"used_by":[]},"wp_authenticate":{"doc":"\/**\n * Checks a user's login information and logs them in if it checks out.\n *\n * @since 2.5.0\n *\n * @param string $username User's username\n * @param string $password User's password\n * @return WP_Error|WP_User WP_User object if login successful, otherwise WP_Error object.\n *\/","file":"pluggable.php","line":470,"missingDoc":false,"filters":["'authenticate'","'wp_login_failed'"],"uses":{"sanitize_user":[471],"trim":[472],"__":[479],"is_wp_error":[484],"in_array":[484],"get_error_code":[484]},"used_by":{"wp_xmlrpc_server::login":[185],"user_pass_ok":[3318],"wp_login":[160],"wp_signon":[53]}},"wp_set_current_user":{"doc":"\/**\n * Changes the current user by ID or name.\n *\n * Set $id to null and specify a name if you do not know a user's ID.\n *\n * Some WordPress functionality is based on the current user and not based on\n * the signed in user. Therefore, it opens the ability to edit and perform\n * actions on users who aren't signed in.\n *\n * @since 2.0.3\n * @global object $current_user The current user object which holds the user data.\n * @uses do_action() Calls 'set_current_user' hook after setting the current user.\n *\n * @param int $id User ID\n * @param string $name User's username\n * @return WP_User Current user User object\n *\/","file":"pluggable.php","line":27,"missingDoc":false,"filters":["'set_current_user'"],"uses":{"setup_userdata":[35]},"used_by":{"wp_xmlrpc_server::login":[193],"set_current_user":[35],"get_currentuserinfo":[85,91,96,102,107]}},"wp_xmlrpc_server::login_pass_ok":{"doc":"\/**\n * Check user's credentials. Deprecated.\n *\n * @since 1.5.0\n * @deprecated 2.8.0\n * @deprecated use wp_xmlrpc_server::login\n * @see wp_xmlrpc_server::login\n *\n * @param string $username User's username.\n * @param string $password User's password.\n * @return bool Whether authentication passed.\n *\/","file":"class-wp-xmlrpc-server.php","line":209,"missingDoc":false,"filters":[],"uses":{"login":[210]},"used_by":[]},"wp_xmlrpc_server::escape":{"doc":"\/**\n * Sanitize string or array of strings for database.\n *\n * @since 1.5.2\n *\n * @param string|array $array Sanitize single string or array of strings.\n * @return string|array Type matches $array and sanitized for the database.\n *\/","file":"class-wp-xmlrpc-server.php","line":221,"missingDoc":false,"filters":[],"uses":{"escape":[225,229,233],"is_object":[230],"is_array":[228,224]},"used_by":[]},"wp_xmlrpc_server::get_custom_fields":{"doc":"\/**\n * Retrieve custom fields for post.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @return array Custom fields, if exist.\n *\/","file":"class-wp-xmlrpc-server.php","line":247,"missingDoc":false,"filters":[],"uses":{"current_user_can":[254],"has_meta":[252]},"used_by":[]},"wp_xmlrpc_server::set_custom_fields":{"doc":"\/**\n * Set custom fields for post.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @param array $fields Custom fields.\n *\/","file":"class-wp-xmlrpc-server.php","line":275,"missingDoc":false,"filters":[],"uses":{"get_metadata_by_mid":[281],"stripslashes":[283,292],"stripslashes_deep":[286],"update_metadata_by_mid":[288],"current_user_can":[287,289,292],"delete_metadata_by_mid":[290],"add_post_meta":[293]},"used_by":[]},"get_metadata_by_mid":{"doc":"\/**\n * Get meta data by meta ID\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @return object Meta object or false.\n *\/","file":"meta.php","line":348,"missingDoc":false,"filters":[],"uses":{"absint":[354],"_get_meta_table":[357],"get_row":[362],"prepare":[362],"maybe_unserialize":[368]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[281],"update_metadata_by_mid":[404],"delete_metadata_by_mid":[485]}},"update_metadata_by_mid":{"doc":"\/**\n * Update meta data by meta ID\n *\n * @since 3.3.0\n *\n * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value\n *\t\tand object_id of the given meta_id.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @param string $meta_value Metadata value\n * @param string $meta_key Optional, you can provide a meta key to update it\n * @return bool True on successful update, false on failure.\n *\/","file":"meta.php","line":387,"missingDoc":false,"filters":["\"update_{$meta_type}_meta\"","'update_postmeta'","\"updated_{$meta_type}_meta\"","'updated_postmeta'"],"uses":{"absint":[394],"_get_meta_table":[397],"esc_sql":[400],"is_string":[413],"sanitize_meta":[419],"maybe_serialize":[420],"update":[438],"wp_cache_delete":[441],"get_metadata_by_mid":[404]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[288]}},"delete_metadata_by_mid":{"doc":"\/**\n * Delete meta data by meta ID\n *\n * @since 3.3.0\n *\n * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value\n *\t\tand object_id of the given meta_id.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $meta_id ID for a specific meta row\n * @return bool True on successful delete, false on failure.\n *\/","file":"meta.php","line":467,"missingDoc":false,"filters":["\"delete_{$meta_type}_meta\"","\"delete_{$meta_type}meta\"","\"deleted_{$meta_type}_meta\"","\"deleted_{$meta_type}meta\""],"uses":{"absint":[474],"_get_meta_table":[477],"esc_sql":[481],"delete":[495],"wp_cache_delete":[498],"get_metadata_by_mid":[485]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[290],"wp_delete_comment":[1017],"do_all_pings":[1715,1721],"do_enclose":[431],"wp_delete_post":[2364],"wp_delete_attachment":[4117]}},"add_post_meta":{"doc":"\/**\n * Add meta data field to a post.\n *\n * Post meta data is called \"Custom Fields\" on the Administration Screen.\n *\n * @since 1.5.0\n * @uses $wpdb\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_post_meta\n *\n * @param int $post_id Post ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"post.php","line":1750,"missingDoc":false,"filters":[],"uses":{"wp_is_post_revision":[1752],"add_metadata":[1755]},"used_by":{"wp_xmlrpc_server::set_custom_fields":[293],"wp_xmlrpc_server::add_enclosure_if_new":[4319],"do_enclose":[471],"wp_trash_post":[2409,2410],"wp_trash_post_comments":[2486],"wp_insert_attachment":[4047],"wp_check_for_changed_slugs":[4434],"_publish_post_hook":[4852,4853]}},"wp_xmlrpc_server::initialise_blog_option_info":{"doc":"\/**\n * Set up blog options property.\n *\n * Passes property through 'xmlrpc_blog_options' filter.\n *\n * @since 2.6.0\n *\/","file":"class-wp-xmlrpc-server.php","line":305,"missingDoc":false,"filters":["'xmlrpc_blog_options'"],"uses":{"__":[311,316,321,326,331,336,341,346,351,356,363,368,373,378,383,388,393,398,403,408,413,418,423,428,433],"current_theme_supports":[358]},"used_by":[]},"wp_xmlrpc_server::wp_getUsersBlogs":{"doc":"\/**\n * Retrieve the blogs of the user.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters. Contains:\n * - username\n * - password\n * @return array. Contains:\n * - 'isAdmin'\n * - 'url'\n * - 'blogid'\n * - 'blogName'\n * - 'xmlrpc' - url of xmlrpc endpoint\n *\/","file":"class-wp-xmlrpc-server.php","line":457,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"array_unshift":[461],"blogger_getUsersBlogs":[462],"is_multisite":[460],"escape":[465],"login":[470],"get_blogs_of_user":[475],"switch_to_blog":[485],"current_user_can":[487],"home_url":[491],"get_option":[493],"site_url":[494],"restore_current_blog":[497]},"used_by":[]},"wp_xmlrpc_server::minimum_args":{"doc":"\/**\n * Checks if the method received at least the minimum number of arguments.\n *\n * @since 3.4.0\n *\n * @param string|array $args Sanitize single string or array of strings.\n * @param int $count Minimum number of arguments.\n * @return boolean if $args contains at least $count arguments.\n *\/","file":"class-wp-xmlrpc-server.php","line":512,"missingDoc":false,"filters":[],"uses":{"__":[514],"count":[513]},"used_by":[]},"wp_xmlrpc_server::_prepare_taxonomy":{"doc":"\/**\n * Prepares taxonomy data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $taxonomy The unprepared taxonomy data\n * @param array $fields The subset of taxonomy fields to return\n * @return array The prepared taxonomy data\n *\/","file":"class-wp-xmlrpc-server.php","line":530,"missingDoc":false,"filters":["'xmlrpc_prepare_taxonomy'"],"uses":{"in_array":[540,543,546],"array_unique":[547]},"used_by":[]},"wp_xmlrpc_server::_prepare_term":{"doc":"\/**\n * Prepares term data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param array|object $term The unprepared term data\n * @return array The prepared term data\n *\/","file":"class-wp-xmlrpc-server.php","line":560,"missingDoc":false,"filters":["'xmlrpc_prepare_term'"],"uses":{"get_object_vars":[563],"is_array":[562],"strval":[566,567,568,569],"intval":[572]},"used_by":[]},"wp_xmlrpc_server::_convert_date":{"doc":"\/**\n * Convert a WordPress date string to an IXR_Date object.\n *\n * @access protected\n *\n * @param string $date\n * @return IXR_Date\n *\/","file":"class-wp-xmlrpc-server.php","line":585,"missingDoc":false,"filters":[],"uses":{"mysql2date":[589]},"used_by":[]},"wp_xmlrpc_server::_convert_date_gmt":{"doc":"\/**\n * Convert a WordPress GMT date string to an IXR_Date object.\n *\n * @access protected\n *\n * @param string $date_gmt\n * @param string $date\n * @return IXR_Date\n *\/","file":"class-wp-xmlrpc-server.php","line":601,"missingDoc":false,"filters":[],"uses":{"get_gmt_from_date":[603],"mysql2date":[603],"_convert_date":[605]},"used_by":[]},"get_gmt_from_date":{"doc":"\/**\n * Returns a date in the GMT equivalent.\n *\n * Requires and returns a date in the Y-m-d H:i:s format. Simply subtracts the\n * value of the 'gmt_offset' option. Return format can be overridden using the\n * $format parameter. The DateTime and DateTimeZone classes are used to respect\n * time zone differences in DST.\n *\n * @since 1.2.0\n *\n * @uses get_option() to retrieve the the value of 'gmt_offset'.\n * @param string $string The date to be converted.\n * @param string $format The format string for the returned date (default is Y-m-d H:i:s)\n * @return string GMT version of the date provided.\n *\/","file":"formatting.php","line":1895,"missingDoc":false,"filters":[],"uses":{"preg_match":[1896],"date":[1898,1905],"get_option":[1900,1915],"date_default_timezone_set":[1902,1912],"date_create":[1903],"setTimezone":[1907],"getOffset":[1908],"modify":[1909],"gmdate":[1910,1915],"format":[1910],"gmmktime":[1914]},"used_by":{"wp_xmlrpc_server::_convert_date_gmt":[603],"wp_insert_comment":[1270],"wp_update_comment":[1512],"wp_insert_post":[2804],"_future_post_hook":[4828]}},"wp_xmlrpc_server::_prepare_post":{"doc":"\/**\n * Prepares post data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param array $post The unprepared post data\n * @param array $fields The subset of post type fields to return\n * @return array The prepared post data\n *\/","file":"class-wp-xmlrpc-server.php","line":617,"missingDoc":false,"filters":["'xmlrpc_prepare_post'"],"uses":{"strval":[619,635],"_convert_date":[624,626],"_convert_date_gmt":[625,627],"post_permalink":[637],"intval":[639],"is_sticky":[642],"get_post_thumbnail_id":[647],"current_theme_supports":[649],"_prepare_media_item":[650],"get_post":[650],"get_post_format":[658],"array_merge":[664,667],"array_intersect_key":[666],"array_flip":[666],"in_array":[663,670,672,681,684],"get_object_taxonomies":[673],"wp_get_object_terms":[674],"_prepare_term":[677],"get_custom_fields":[682],"get_post_meta":[686],"explode":[688],"trim":[689,690,691],"htmlspecialchars":[689]},"used_by":[]},"post_permalink":{"doc":"\/**\n * Retrieve permalink from post ID.\n *\n * @since 1.0.0\n *\n * @param int $post_id Optional. Post ID.\n * @param mixed $deprecated Not used.\n * @return string\n *\/","file":"link-template.php","line":221,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[223],"get_permalink":[225]},"used_by":{"wp_xmlrpc_server::_prepare_post":[637],"wp_xmlrpc_server::_prepare_page":[781],"wp_xmlrpc_server::mw_getPost":[4663],"wp_xmlrpc_server::mw_getRecentPosts":[4794]}},"is_sticky":{"doc":"\/**\n * Check if post is sticky.\n *\n * Sticky posts should remain at the top of The Loop. If the post ID is not\n * given, then The Loop ID for the current post will be used.\n *\n * @since 2.7.0\n *\n * @param int $post_id Optional. Post ID.\n * @return bool Whether post is sticky.\n *\/","file":"post.php","line":1912,"missingDoc":false,"filters":[],"uses":{"absint":[1913],"get_the_ID":[1916],"get_option":[1918],"is_array":[1920],"in_array":[1923]},"used_by":{"wp_xmlrpc_server::_prepare_post":[642],"wp_xmlrpc_server::mw_getPost":[4681],"sticky_class":[3190],"get_post_class":[345]}},"get_post_thumbnail_id":{"doc":"\/**\n * Retrieve Post Thumbnail ID.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @return int\n *\/","file":"post-thumbnail-template.php","line":32,"missingDoc":false,"filters":[],"uses":{"get_the_ID":[33],"get_post_meta":[34]},"used_by":{"wp_xmlrpc_server::_prepare_post":[647],"wp_xmlrpc_server::mw_getPost":[4729],"wp_xmlrpc_server::mw_getRecentPosts":[4841],"has_post_thumbnail":[21],"update_post_thumbnail_cache":[65],"get_the_post_thumbnail":[87]}},"get_post_format":{"doc":"\/**\n * Retrieve the format slug for a post\n *\n * @since 3.1.0\n *\n * @param int|object $post A post\n *\n * @return mixed The format if successful. False if no format is set. WP_Error if errors.\n *\/","file":"post.php","line":765,"missingDoc":false,"filters":[],"uses":{"get_post":[766],"post_type_supports":[768],"get_the_terms":[771],"array_shift":[776],"str_replace":[778]},"used_by":{"wp_xmlrpc_server::_prepare_post":[658],"wp_xmlrpc_server::mw_getPost":[4676],"wp_xmlrpc_server::mw_getRecentPosts":[4807],"get_post_class":[332],"get_body_class":[438]}},"get_object_taxonomies":{"doc":"\/**\n * Return all of the taxonomy names that are of $object_type.\n *\n * It appears that this function can be used to find all of the names inside of\n * $wp_taxonomies global variable.\n *\n * <code><?php $taxonomies = get_object_taxonomies('post'); ?><\/code> Should\n * result in <code>Array('category', 'post_tag')<\/code>\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wp_taxonomies\n *\n * @param array|string|object $object Name of the type of taxonomy object, or an object (row from posts)\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @return array The names of all taxonomy of $object_type.\n *\/","file":"taxonomy.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_attachment_taxonomies":[170],"is_object":[168],"array_intersect":[178]},"used_by":{"wp_xmlrpc_server::_prepare_post":[673],"wp_xmlrpc_server::_prepare_post_type":[735],"wp_xmlrpc_server::_insert_post":[1109],"get_attachment_taxonomies":[882],"_wp_menu_item_classes_by_context":[268],"wp_delete_post":[2322],"wp_delete_attachment":[4107],"_update_term_count_on_transition_post_status":[5535],"WP_Query::get_posts":[2227],"clean_object_term_cache":[2569],"update_object_term_cache":[2687],"get_the_taxonomies":[3106],"get_post_taxonomies":[3142],"is_object_in_taxonomy":[3206]}},"wp_xmlrpc_server::_prepare_post_type":{"doc":"\/**\n * Prepares post data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $post_type Post type object\n * @param array $fields The subset of post fields to return\n * @return array The prepared post type data\n *\/","file":"class-wp-xmlrpc-server.php","line":707,"missingDoc":false,"filters":["'xmlrpc_prepare_post_type'"],"uses":{"get_all_post_type_supports":[716],"in_array":[719,723,728,734],"get_object_taxonomies":[735]},"used_by":[]},"get_all_post_type_supports":{"doc":"\/**\n * Get all the post type features\n *\n * @since 3.4.0\n * @param string $post_type The post type\n * @return array\n *\/","file":"post.php","line":1615,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_xmlrpc_server::_prepare_post_type":[716]}},"wp_xmlrpc_server::_prepare_media_item":{"doc":"\/**\n * Prepares media item data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $media_item The unprepared media item data\n * @param string $thumbnail_size The image size to use for the thumbnail URL\n * @return array The prepared media item data\n *\/","file":"class-wp-xmlrpc-server.php","line":749,"missingDoc":false,"filters":["'xmlrpc_prepare_media_item'"],"uses":{"strval":[751],"_convert_date_gmt":[752],"wp_get_attachment_url":[754],"wp_get_attachment_metadata":[758],"image_downsize":[761]},"used_by":[]},"wp_get_attachment_url":{"doc":"\/**\n * Retrieve the URL for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @return string\n *\/","file":"post.php","line":4208,"missingDoc":false,"filters":["'wp_get_attachment_url'"],"uses":{"get_post":[4210],"str_replace":[4220],"strpos":[4221,4222,4219],"substr":[4222],"wp_upload_dir":[4218],"get_post_meta":[4217],"get_the_guid":[4229]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[754],"get_the_attachment_link":[1897],"get_attachment_icon_src":[1937],"image_downsize":[141],"image_get_intermediate_size":[475],"wp_prepare_attachment_for_js":[1324],"wp_get_attachment_link":[1165],"wp_get_attachment_thumb_url":[4273],"_delete_attachment_theme_mod":[1590]}},"wp_get_attachment_metadata":{"doc":"\/**\n * Retrieve attachment meta field for attachment ID.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @param bool $unfiltered Optional, default is false. If true, filters are not run.\n * @return string|bool Attachment meta field. False on failure.\n *\/","file":"post.php","line":4167,"missingDoc":false,"filters":["'wp_get_attachment_metadata'"],"uses":{"get_post":[4169],"get_post_meta":[4172]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[758],"image_downsize":[142],"image_get_intermediate_size":[433],"wp_prepare_attachment_for_js":[1318],"wp_delete_attachment":[4091],"wp_get_attachment_thumb_file":[4251],"get_uploaded_header_images":[1010]}},"image_downsize":{"doc":"\/**\n * Scale an image to fit a particular size (such as 'thumb' or 'medium').\n *\n * Array with image url, width, height, and whether is intermediate size, in\n * that order is returned on success is returned. $is_intermediate is true if\n * $url is a resized image, false if it is the original.\n *\n * The URL might be the original image, or it might be a resized version. This\n * function won't create a new resized copy, it will just return an already\n * resized one if it exists.\n *\n * A plugin may use the 'image_downsize' filter to hook into and offer image\n * resizing services for images. The hook must return an array with the same\n * elements that are returned in the function. The first element being the URL\n * to the new image that was resized.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'image_downsize' on $id and $size to provide\n *\t\tresize services.\n *\n * @param int $id Attachment ID for image.\n * @param array|string $size Optional, default is 'medium'. Size of image, either array or string.\n * @return bool|array False on failure, array on success.\n *\/","file":"media.php","line":136,"missingDoc":false,"filters":["'image_downsize'"],"uses":{"wp_attachment_is_image":[138],"wp_get_attachment_url":[141],"wp_get_attachment_metadata":[142],"wp_basename":[145,161],"str_replace":[153,161],"wp_get_attachment_thumb_file":[160],"getimagesize":[160],"image_get_intermediate_size":[152],"image_constrain_size_for_editor":[175]},"used_by":{"wp_xmlrpc_server::_prepare_media_item":[761],"get_image_tag":[230],"wp_get_attachment_image_src":[511],"wp_get_attachment_thumb_url":[4276]}},"wp_xmlrpc_server::_prepare_page":{"doc":"\/**\n * Prepares page data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $page The unprepared page data\n * @return array The prepared page data\n *\/","file":"class-wp-xmlrpc-server.php","line":778,"missingDoc":false,"filters":["'xmlrpc_prepare_page'"],"uses":{"get_extended":[780],"post_permalink":[781],"get_post":[786],"comments_open":[791],"pings_open":[792],"_convert_date":[795],"_convert_date_gmt":[796],"get_cat_name":[801],"wp_get_post_categories":[800],"get_userdata":[805],"get_page_template_slug":[807],"get_custom_fields":[834]},"used_by":[]},"get_extended":{"doc":"\/**\n * Get extended entry info (<!--more-->).\n *\n * There should not be any space after the second dash and before the word\n * 'more'. There can be text or space(s) after the word 'more', but won't be\n * referenced.\n *\n * The returned array has 'main', 'extended', and 'more_text' keys. Main has the text before\n * the <code><!--more--><\/code>. The 'extended' key has the content after the\n * <code><!--more--><\/code> comment. The 'more_text' key has the custom \"Read More\" text.\n *\n * @since 1.0.0\n *\n * @param string $post Post content.\n * @return array Post before ('main'), after ('extended'), and custom readmore ('more_text').\n *\/","file":"post.php","line":352,"missingDoc":false,"filters":[],"uses":{"explode":[355],"preg_match":[354],"preg_replace":[364,365,366]},"used_by":{"wp_xmlrpc_server::_prepare_page":[780],"wp_xmlrpc_server::mw_getPost":[4662],"wp_xmlrpc_server::mw_getRecentPosts":[4793]}},"comments_open":{"doc":"\/**\n * Whether the current post is open for comments.\n *\n * @since 1.5.0\n * @uses $post\n *\n * @param int $post_id An optional post ID to check instead of the current post.\n * @return bool True if the comments are open\n *\/","file":"comment-template.php","line":772,"missingDoc":false,"filters":["'comments_open'"],"uses":{"get_post":[774]},"used_by":{"wp_xmlrpc_server::_prepare_page":[791],"comments_popup_link":[980],"get_comment_reply_link":[1053],"get_post_reply_link":[1106],"comment_form":[1551],"feed_links_extra":[1644],"__main":[65,44,54]}},"pings_open":{"doc":"\/**\n * Whether the current post is open for pings.\n *\n * @since 1.5.0\n * @uses $post\n *\n * @param int $post_id An optional post ID to check instead of the current post.\n * @return bool True if pings are accepted\n *\/","file":"comment-template.php","line":789,"missingDoc":false,"filters":["'pings_open'"],"uses":{"get_post":[791]},"used_by":{"wp_xmlrpc_server::_prepare_page":[792],"wp_xmlrpc_server::pingback_ping":[5368],"comments_popup_link":[980],"feed_links_extra":[1644],"__main":[37]}},"wp_get_post_categories":{"doc":"\/**\n * Retrieve the list of categories for a post.\n *\n * Compatibility layer for themes and plugins. Also an easy layer of abstraction\n * away from the complexity of the taxonomy layer.\n *\n * @since 2.1.0\n *\n * @uses wp_get_object_terms() Retrieves the categories. Args details can be found here.\n *\n * @param int $post_id Optional. The Post ID.\n * @param array $args Optional. Overwrite the defaults.\n * @return array\n *\/","file":"post.php","line":2558,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2562],"wp_get_object_terms":[2564]},"used_by":{"wp_xmlrpc_server::_prepare_page":[800],"wp_xmlrpc_server::blogger_getPost":[3747],"wp_xmlrpc_server::blogger_getRecentPosts":[3801],"wp_xmlrpc_server::mw_getPost":[4648],"wp_xmlrpc_server::mw_getRecentPosts":[4778],"wp_xmlrpc_server::mt_getPostCategories":[5117],"wp_xmlrpc_server::mt_publishPost":[5275],"wp_get_post_cats":[748]}},"get_page_template_slug":{"doc":"\/**\n * Get the specific template name for a page.\n *\n * @since 3.4.0\n *\n * @param int $post_id The page ID to check. Defaults to the current post, when used in the loop.\n * @return string|bool Page template filename. Returns an empty string when the default page template\n * \tis in use. Returns false if the post is not a page.\n *\/","file":"post-template.php","line":1273,"missingDoc":false,"filters":[],"uses":{"get_post":[1274],"get_post_meta":[1277]},"used_by":{"wp_xmlrpc_server::_prepare_page":[807],"get_body_class":[504],"is_page_template":[1250],"get_page_template":[238]}},"wp_xmlrpc_server::_prepare_comment":{"doc":"\/**\n * Prepares comment data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param object $comment The unprepared comment data\n * @return array The prepared comment data\n *\/","file":"class-wp-xmlrpc-server.php","line":849,"missingDoc":false,"filters":["'xmlrpc_prepare_comment'"],"uses":{"_convert_date":[851],"_convert_date_gmt":[852],"get_comment_link":[870],"get_the_title":[872]},"used_by":[]},"get_comment_link":{"doc":"\/**\n * Retrieve the link to a given comment.\n *\n * @since 1.5.0\n * @uses $comment\n *\n * @param object|string|int $comment Comment to retrieve.\n * @param array $args Optional args.\n * @return string The permalink to the given comment.\n *\/","file":"comment-template.php","line":472,"missingDoc":false,"filters":["'get_comment_link'"],"uses":{"get_comment":[475],"is_array":[478],"wp_parse_args":[485],"get_option":[488,487],"get_query_var":[497],"get_page_of_comment":[497],"user_trailingslashit":[500],"trailingslashit":[500],"get_permalink":[500,502,504],"add_query_arg":[502],"using_permalinks":[499]},"used_by":{"wp_xmlrpc_server::_prepare_comment":[870],"Walker_Comment::start_el":[1361],"WP_Widget_Recent_Comments::widget":[694],"__main":[80],"comment_link":[242]}},"wp_xmlrpc_server::_prepare_user":{"doc":"\/**\n * Prepares user data for return in an XML-RPC object.\n *\n * @access protected\n *\n * @param WP_User $user The unprepared user object\n * @param array $fields The subset of user fields to return\n * @return array The prepared user data\n *\/","file":"class-wp-xmlrpc-server.php","line":892,"missingDoc":false,"filters":["'xmlrpc_prepare_user'"],"uses":{"strval":[893],"_convert_date":[899],"array_merge":[910,914,917],"in_array":[912,909],"array_intersect_key":[916],"array_flip":[916]},"used_by":[]},"wp_xmlrpc_server::wp_newPost":{"doc":"\/**\n * Create a new post for any registered post type.\n *\n * @since 3.4.0\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * $content_struct can contain:\n * - post_type (default: 'post')\n * - post_status (default: 'draft')\n * - post_title\n * - post_author\n * - post_excerpt\n * - post_content\n * - post_date_gmt | post_date\n * - post_format\n * - post_password\n * - comment_status - can be 'open' | 'closed'\n * - ping_status - can be 'open' | 'closed'\n * - sticky\n * - post_thumbnail - ID of a media item to use as the post thumbnail\/featured image\n * - custom_fields - array, with each element containing 'key' and 'value'\n * - terms - array, with taxonomy names as keys and arrays of term IDs as values\n * - terms_names - array, with taxonomy names as keys and arrays of term names as values\n * - enclosure\n * - any other fields supported by wp_insert_post()\n * @return string post_id\n *\/","file":"class-wp-xmlrpc-server.php","line":954,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[955],"escape":[958],"login":[965],"_insert_post":[972]},"used_by":[]},"wp_xmlrpc_server::_is_greater_than_one":{"doc":"\/**\n * Helper method for filtering out elements from an array.\n *\n * @since 3.4.0\n *\n * @param int $count Number to compare to one.\n *\/","file":"class-wp-xmlrpc-server.php","line":982,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_xmlrpc_server::_insert_post":{"doc":"\/**\n * Helper method for wp_newPost and wp_editPost, containing shared logic.\n *\n * @since 3.4.0\n * @uses wp_insert_post()\n *\n * @param WP_User $user The post author if post_author isn't set in $content_struct.\n * @param array $content_struct Post data to insert.\n *\/","file":"class-wp-xmlrpc-server.php","line":995,"missingDoc":false,"filters":["'xmlrpc_wp_insert_post_data'"],"uses":{"wp_parse_args":[999],"get_post_type_object":[1001],"__":[1003,1009,1011,1013,1016,1025,1030,1039,1044,1049,1082,1087,1100,1121,1124,1131,1144,1147,1166,1173,1217],"get_post":[1008,1099],"current_user_can":[1010,1015,1015,1024,1029,1038,1043,1086,1123,1146,1172],"get_post_type":[1012],"get_post_status_object":[1033],"absint":[1041,1099],"get_userdata":[1046],"rtrim":[1063],"getIso":[1063,1065],"get_date_from_gmt":[1069],"iso8601_to_datetime":[1069,1070],"get_default_post_to_edit":[1074],"unstick_post":[1084,1091],"stick_post":[1089],"delete_post_thumbnail":[1098],"set_post_thumbnail":[1101],"set_custom_fields":[1106],"get_object_taxonomies":[1109],"array_keys":[1116,1140,1160],"array_key_exists":[1120,1143],"get_term_by":[1128,1168],"is_array":[1115,1139],"get_terms":[1152],"array_count_values":[1155],"array_filter":[1158],"is_taxonomy_hierarchical":[1151],"in_array":[1165],"wp_insert_term":[1176],"get_error_message":[1178,1199,1214],"is_wp_error":[1177,1198,1213],"set_post_format":[1196],"add_enclosure_if_new":[1206],"attach_uploads":[1208],"wp_update_post":[1212],"wp_insert_post":[1212],"strval":[1219]},"used_by":[]},"get_date_from_gmt":{"doc":"\/**\n * Converts a GMT date into the correct format for the blog.\n *\n * Requires and returns in the Y-m-d H:i:s format. Simply adds the value of\n * gmt_offset.Return format can be overridden using the $format parameter\n *\n * @since 1.2.0\n *\n * @param string $string The date to be converted.\n * @param string $format The format string for the returned date (default is Y-m-d H:i:s)\n * @return string Formatted date relative to the GMT offset.\n *\/","file":"formatting.php","line":1932,"missingDoc":false,"filters":[],"uses":{"preg_match":[1933],"gmmktime":[1934],"gmdate":[1935],"get_option":[1935]},"used_by":{"wp_xmlrpc_server::_insert_post":[1069],"wp_xmlrpc_server::wp_editComment":[2903],"wp_xmlrpc_server::mw_newPost":[4240],"wp_xmlrpc_server::mw_editPost":[4558]}},"iso8601_to_datetime":{"doc":"\/**\n * Converts an iso8601 date to MySQL DateTime format used by post_date[_gmt].\n *\n * @since 1.5.0\n *\n * @param string $date_string Date and time in ISO 8601 format {@link http:\/\/en.wikipedia.org\/wiki\/ISO_8601}.\n * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'.\n * @return string The date and time in MySQL DateTime format - Y-m-d H:i:s.\n *\/","file":"formatting.php","line":1969,"missingDoc":false,"filters":[],"uses":{"strtolower":[1970],"preg_match":[1974],"iso8601_timezone_to_offset":[1977],"get_option":[1979],"gmmktime":[1982],"gmdate":[1985],"preg_replace":[1988]},"used_by":{"wp_xmlrpc_server::_insert_post":[1069,1070],"wp_xmlrpc_server::wp_editComment":[2903,2904],"wp_xmlrpc_server::mw_newPost":[4240,4241],"wp_xmlrpc_server::mw_editPost":[4558,4559]}},"unstick_post":{"doc":"\/**\n * Unstick a post.\n *\n * Sticky posts should be displayed at the top of the front page.\n *\n * @since 2.7.0\n *\n * @param int $post_id Post ID.\n *\/","file":"post.php","line":2085,"missingDoc":false,"filters":[],"uses":{"get_option":[2086],"is_array":[2088],"in_array":[2091],"array_search":[2094],"array_splice":[2098],"update_option":[2100]},"used_by":{"wp_xmlrpc_server::_insert_post":[1084,1091],"wp_xmlrpc_server::mw_newPost":[4267],"wp_xmlrpc_server::mw_editPost":[4580],"wp_delete_post":[2346]}},"stick_post":{"doc":"\/**\n * Make a post sticky.\n *\n * Sticky posts should be displayed at the top of the front page.\n *\n * @since 2.7.0\n *\n * @param int $post_id Post ID.\n *\/","file":"post.php","line":2064,"missingDoc":false,"filters":[],"uses":{"get_option":[2065],"is_array":[2067],"in_array":[2070],"update_option":[2073]},"used_by":{"wp_xmlrpc_server::_insert_post":[1089],"wp_xmlrpc_server::mw_newPost":[4265],"wp_xmlrpc_server::mw_editPost":[4578]}},"delete_post_thumbnail":{"doc":"\/**\n * Removes a post thumbnail.\n *\n * @since 3.3.0\n *\n * @param int|object $post Post ID or object where thumbnail should be removed from.\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":5396,"missingDoc":false,"filters":[],"uses":{"get_post":[5397],"delete_post_meta":[5399]},"used_by":{"wp_xmlrpc_server::_insert_post":[1098],"wp_xmlrpc_server::mw_editPost":[4589]}},"set_post_thumbnail":{"doc":"\/**\n * Sets a post thumbnail.\n *\n * @since 3.1.0\n *\n * @param int|object $post Post ID or object where thumbnail should be attached.\n * @param int $thumbnail_id Thumbnail to attach.\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":5376,"missingDoc":false,"filters":[],"uses":{"get_post":[5377,5379],"absint":[5378],"update_post_meta":[5381],"delete_post_meta":[5383],"wp_get_attachment_image":[5380]},"used_by":{"wp_xmlrpc_server::_insert_post":[1101],"wp_xmlrpc_server::mw_newPost":[4274],"wp_xmlrpc_server::mw_editPost":[4591]}},"is_taxonomy_hierarchical":{"doc":"\/**\n * Whether the taxonomy object is hierarchical.\n *\n * Checks to make sure that the taxonomy is an object first. Then Gets the\n * object, and finally returns the hierarchical value in the object.\n *\n * A false return value might also mean that the taxonomy does not exist.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses taxonomy_exists() Checks whether taxonomy exists\n * @uses get_taxonomy() Used to get the taxonomy object\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy is hierarchical\n *\/","file":"taxonomy.php","line":252,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[253],"get_taxonomy":[256]},"used_by":{"wp_xmlrpc_server::_insert_post":[1151],"_wp_menu_item_classes_by_context":[269,295],"wp_set_post_terms":[3211],"WP_Tax_Query::clean_query":[754],"get_terms":[1210],"wp_delete_term":[1793],"wp_insert_term":[2089],"wp_unique_term_slug":[2279],"_get_term_hierarchy":[2764],"_pad_term_counts":[2857],"get_ancestors":[3233]}},"wp_insert_term":{"doc":"\/**\n * Adds a new term to the database. Optionally marks it as an alias of an existing term.\n *\n * Error handling is assigned for the nonexistence of the $taxonomy and $term\n * parameters before inserting. If both the term id and taxonomy exist\n * previously, then an array will be returned that contains the term id and the\n * contents of what is returned. The keys of the array are 'term_id' and\n * 'term_taxonomy_id' containing numeric values.\n *\n * It is assumed that the term does not yet exist or the above will apply. The\n * term will be first added to the term table and then related to the taxonomy\n * if everything is well. If everything is correct, then several actions will be\n * run prior to a filter and then several actions will be run after the filter\n * is run.\n *\n * The arguments decide how the term is handled based on the $args parameter.\n * The following is a list of the available overrides and the defaults.\n *\n * 'alias_of'. There is no default, but if added, expected is the slug that the\n * term will be an alias of. Expected to be a string.\n *\n * 'description'. There is no default. If exists, will be added to the database\n * along with the term. Expected to be a string.\n *\n * 'parent'. Expected to be numeric and default is 0 (zero). Will assign value\n * of 'parent' to the term.\n *\n * 'slug'. Expected to be a string. There is no default.\n *\n * If 'slug' argument exists then the slug will be checked to see if it is not\n * a valid term. If that check succeeds (it is not a valid term), then it is\n * added and the term id is given. If it fails, then a check is made to whether\n * the taxonomy is hierarchical and the parent argument is not empty. If the\n * second check succeeds, the term will be inserted and the term id will be\n * given.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @uses apply_filters() Calls 'pre_insert_term' hook with term and taxonomy as parameters.\n * @uses do_action() Calls 'create_term' hook with the term id and taxonomy id as parameters.\n * @uses do_action() Calls 'create_$taxonomy' hook with term id and taxonomy id as parameters.\n * @uses apply_filters() Calls 'term_id_filter' hook with term id and taxonomy id as parameters.\n * @uses do_action() Calls 'created_term' hook with the term id and taxonomy id as parameters.\n * @uses do_action() Calls 'created_$taxonomy' hook with term id and taxonomy id as parameters.\n *\n * @param string $term The term to add or update.\n * @param string $taxonomy The taxonomy to which to add the term\n * @param array|string $args Change the values of the inserted term\n * @return array|WP_Error The Term ID and Term Taxonomy ID\n *\/","file":"taxonomy.php","line":2041,"missingDoc":false,"filters":["'pre_insert_term'","'edit_terms'","'edited_terms'","'edit_terms'","'edited_terms'","'create_term'","\"create_{$taxonomy}\"","'term_id_filter'","'created_term'","\"created_{$taxonomy}\""],"uses":{"__":[2045,2052,2055,2093,2097,2104,2108,2114],"taxonomy_exists":[2044],"is_wp_error":[2048],"is_int":[2051],"trim":[2054],"wp_parse_args":[2058],"sanitize_term":[2061],"extract":[2062],"stripslashes":[2065,2066],"sanitize_title":[2069,2120],"get_row":[2073,2087],"prepare":[2073,2087,2126],"get_var":[2079,2126],"update":[2081,2122],"compact":[2081,2096,2103,2113,2122,2122,2131],"get_terms":[2091],"wp_unique_term_slug":[2095,2102,2112],"insert":[2096,2103,2113,2131],"in_array":[2092],"term_exists":[2106,2089,2086],"is_taxonomy_hierarchical":[2089],"clean_term_cache":[2139]},"used_by":{"wp_xmlrpc_server::_insert_post":[1176],"wp_xmlrpc_server::wp_newTerm":[1583],"wp_update_nav_menu_object":[235],"wp_set_object_terms":[2198]}},"set_post_format":{"doc":"\/**\n * Assign a format to a post\n *\n * @since 3.1.0\n *\n * @param int|object $post The post for which to assign a format\n * @param string $format A format to assign. Use an empty string or array to remove all formats from the post.\n * @return mixed WP_Error on error. Array of affected term IDs on success.\n *\/","file":"post.php","line":804,"missingDoc":false,"filters":[],"uses":{"get_post":[805],"__":[808],"sanitize_key":[811],"in_array":[812],"array_keys":[812],"get_post_format_slugs":[812],"wp_set_post_terms":[818]},"used_by":{"wp_xmlrpc_server::_insert_post":[1196],"wp_xmlrpc_server::mw_newPost":[4289],"wp_xmlrpc_server::mw_editPost":[4606]}},"wp_update_post":{"doc":"\/**\n * Update a post with new post data.\n *\n * The date does not have to be set for drafts. You can set the date and it will\n * not be overridden.\n *\n * @since 1.0.0\n *\n * @param array|object $postarr Post data. Arrays are expected to be escaped, objects are not.\n * @param bool $wp_error Optional. Allow return of WP_Error on failure.\n * @return int|WP_Error The value 0 or WP_Error on failure. The post ID on success.\n *\/","file":"post.php","line":2968,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[2971],"add_magic_quotes":[2972,2979],"is_object":[2969],"get_post":[2976],"is_array":[2982],"count":[2983],"in_array":[2989],"array_merge":[2996],"current_time":[2999],"wp_insert_attachment":[3004],"wp_insert_post":[3006]},"used_by":{"wp_xmlrpc_server::_insert_post":[1212],"wp_xmlrpc_server::blogger_editPost":[3942],"wp_xmlrpc_server::mw_editPost":[4568],"wp_xmlrpc_server::mt_publishPost":[5279],"wp_update_nav_menu_item":[393],"wp_restore_post_revision":[5160],"wp_check_post_hierarchy_for_loops":[5311]}},"wp_insert_post":{"doc":"\/**\n * Insert a post.\n *\n * If the $postarr parameter has 'ID' set to a value, then post will be updated.\n *\n * You can set the post date manually, but setting the values for 'post_date'\n * and 'post_date_gmt' keys. You can close the comments or open the comments by\n * setting the value for 'comment_status' key.\n *\n * The defaults for the parameter $postarr are:\n * 'post_status' - Default is 'draft'.\n * 'post_type' - Default is 'post'.\n * 'post_author' - Default is current user ID ($user_ID). The ID of the user who added the post.\n * 'ping_status' - Default is the value in 'default_ping_status' option.\n * Whether the attachment can accept pings.\n * 'post_parent' - Default is 0. Set this for the post it belongs to, if any.\n * 'menu_order' - Default is 0. The order it is displayed.\n * 'to_ping' - Whether to ping.\n * 'pinged' - Default is empty string.\n * 'post_password' - Default is empty string. The password to access the attachment.\n * 'guid' - Global Unique ID for referencing the attachment.\n * 'post_content_filtered' - Post content filtered.\n * 'post_excerpt' - Post excerpt.\n *\n * @since 1.0.0\n * @uses $wpdb\n * @uses $user_ID\n * @uses do_action() Calls 'pre_post_update' on post ID if this is an update.\n * @uses do_action() Calls 'edit_post' action on post ID and post data if this is an update.\n * @uses do_action() Calls 'save_post' and 'wp_insert_post' on post id and post data just before returning.\n * @uses apply_filters() Calls 'wp_insert_post_data' passing $data, $postarr prior to database update or insert.\n * @uses wp_transition_post_status()\n *\n * @param array $postarr Elements that make up post to insert.\n * @param bool $wp_error Optional. Allow return of WP_Error on failure.\n * @return int|WP_Error The value 0 or WP_Error on failure. The post ID on success.\n *\/","file":"post.php","line":2700,"missingDoc":false,"filters":["'wp_insert_post_empty_content'","'wp_insert_post_parent'","'wp_insert_post_data'","'pre_post_update'","'edit_post'","'post_updated'","'save_post'","'wp_insert_post'"],"uses":{"get_option":[2704,2749,2831,2834],"wp_parse_args":[2709],"sanitize_post":[2713],"extract":[2716],"get_post_field":[2722,2762,2780,2920],"post_type_supports":[2727,2728,2728],"__":[2731,2797,2872,2888,2935],"array_filter":[2743,2914],"count":[2746],"is_array":[2746,2913],"get_post":[2763,2928,2946],"current_user_can":[2767,2915],"sanitize_title":[2774,2779,2783,2899],"in_array":[2773,2803,2898],"strtolower":[2780],"urlencode":[2780],"current_time":[2788,2810,2811],"substr":[2791,2792,2793],"wp_checkdate":[2794],"get_gmt_from_date":[2804],"gmdate":[2818,2822],"mysql2date":[2819,2819,2823,2823],"sanitize_trackback_urls":[2837],"compact":[2850,2863],"array_keys":[2850],"wp_unique_post_slug":[2860],"stripslashes_deep":[2865],"update":[2870,2900,2924],"stripslashes":[2878],"get_var":[2882],"prepare":[2882],"insert":[2886],"wp_set_post_categories":[2904],"is_object_in_taxonomy":[2903,2906],"wp_set_post_tags":[2907],"get_taxonomy":[2912],"wp_set_post_terms":[2916],"get_permalink":[2924],"clean_post_cache":[2926],"get_page_templates":[2932],"wp_get_theme":[2932],"update_post_meta":[2939],"wp_transition_post_status":[2942]},"used_by":{"wp_xmlrpc_server::_insert_post":[1212],"wp_xmlrpc_server::blogger_newPost":[3884],"wp_xmlrpc_server::mw_newPost":[4291],"wp_update_nav_menu_item":[360],"wp_trash_post":[2413],"wp_untrash_post":[2448],"wp_update_post":[3006],"_wp_put_post_revision":[5081]}},"wp_xmlrpc_server::wp_editPost":{"doc":"\/**\n * Edit a post for any registered post type.\n *\n * The $content_struct parameter only needs to contain fields that\n * should be changed. All other fields will retain their existing values.\n *\n * @since 3.4.0\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * - array $content_struct\n * @return true on success\n *\/","file":"class-wp-xmlrpc-server.php","line":1238,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1239],"escape":[1242,1277],"login":[1250],"get_post":[1255],"__":[1258,1263],"mysql2date":[1262],"getTimestamp":[1262],"_convert_date":[1268,1275],"array_merge":[1278],"_insert_post":[1280]},"used_by":[]},"wp_xmlrpc_server::wp_deletePost":{"doc":"\/**\n * Delete a post for any registered post type.\n *\n * @since 3.4.0\n *\n * @uses wp_delete_post()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * @return true on success\n *\/","file":"class-wp-xmlrpc-server.php","line":1300,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1301],"escape":[1304],"login":[1311],"get_post":[1316],"__":[1318,1322,1327],"get_post_type_object":[1320],"current_user_can":[1321],"wp_delete_post":[1324]},"used_by":[]},"wp_delete_post":{"doc":"\/**\n * Trashes or deletes a post or page.\n *\n * When the post and page is permanently deleted, everything that is tied to it is deleted also.\n * This includes comments, post meta fields, and terms associated with the post.\n *\n * The post or page is moved to trash instead of permanently deleted unless trash is\n * disabled, item is already in the trash, or $force_delete is true.\n *\n * @since 1.0.0\n * @uses do_action() on 'delete_post' before deletion unless post type is 'attachment'.\n * @uses do_action() on 'deleted_post' after deletion unless post type is 'attachment'.\n * @uses wp_delete_attachment() if post type is 'attachment'.\n * @uses wp_trash_post() if item should be trashed.\n *\n * @param int $postid Post ID.\n * @param bool $force_delete Whether to bypass trash and force deletion. Defaults to false.\n * @return mixed False on failure\n *\/","file":"post.php","line":2305,"missingDoc":false,"filters":["'before_delete_post'","'delete_post'","'deleted_post'","'after_delete_post'"],"uses":{"get_row":[2308],"prepare":[2308,2329,2350,2358,2362],"wp_trash_post":[2312],"get_post_status":[2311],"wp_delete_attachment":[2315],"delete_post_meta":[2319,2320],"wp_delete_object_term_relationships":[2322],"get_object_taxonomies":[2322],"get_results":[2330],"update":[2332,2356],"is_post_type_hierarchical":[2327,2372],"update_option":[2339],"delete_option":[2340,2343],"get_option":[2338,2342],"unstick_post":[2346],"get_col":[2350,2358,2362],"wp_delete_post_revision":[2353],"wp_delete_comment":[2360],"delete_metadata_by_mid":[2364],"delete":[2367],"clean_post_cache":[2370,2374],"wp_clear_scheduled_hook":[2377]},"used_by":{"wp_xmlrpc_server::wp_deletePost":[1324],"wp_xmlrpc_server::wp_deletePage":[2389],"wp_xmlrpc_server::blogger_deletePost":[3983],"wp_scheduled_delete":[3489],"wp_delete_nav_menu":[185],"_wp_delete_post_menu_item":[720],"_wp_delete_tax_menu_item":[739],"wp_trash_post":[2399],"wp_delete_post_revision":[5189],"wp_delete_auto_drafts":[5429]}},"wp_xmlrpc_server::wp_getPost":{"doc":"\/**\n * Retrieve a post.\n *\n * @since 3.4.0\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array. This should be a list of field names. 'post_id' will\n * always be included in the response regardless of the value of $fields.\n *\n * Instead of, or in addition to, individual field names, conceptual group\n * names can be used to specify multiple fields. The available conceptual\n * groups are 'post' (all basic fields), 'taxonomies', 'custom_fields',\n * and 'enclosure'.\n *\n * @uses get_post()\n * @param array $args Method parameters. Contains:\n * - int $post_id\n * - string $username\n * - string $password\n * - array $fields optional\n * @return array contains (based on $fields parameter):\n * - 'post_id'\n * - 'post_title'\n * - 'post_date'\n * - 'post_date_gmt'\n * - 'post_modified'\n * - 'post_modified_gmt'\n * - 'post_status'\n * - 'post_type'\n * - 'post_name'\n * - 'post_author'\n * - 'post_password'\n * - 'post_excerpt'\n * - 'post_content'\n * - 'link'\n * - 'comment_status'\n * - 'ping_status'\n * - 'sticky'\n * - 'custom_fields'\n * - 'terms'\n * - 'categories'\n * - 'tags'\n * - 'enclosure'\n *\/","file":"class-wp-xmlrpc-server.php","line":1376,"missingDoc":false,"filters":["'xmlrpc_default_post_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1377],"escape":[1380],"login":[1392],"get_post":[1397],"__":[1400,1404],"get_post_type_object":[1402],"current_user_can":[1403],"_prepare_post":[1406]},"used_by":[]},"wp_xmlrpc_server::wp_getPosts":{"doc":"\/**\n * Retrieve posts.\n *\n * @since 3.4.0\n *\n * The optional $filter parameter modifies the query used to retrieve posts.\n * Accepted keys are 'post_type', 'post_status', 'number', 'offset',\n * 'orderby', and 'order'.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses wp_get_recent_posts()\n * @see wp_getPost() for more on $fields\n * @see get_posts() for more on $filter values\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter optional\n * - array $fields optional\n * @return array contains a collection of posts.\n *\/","file":"class-wp-xmlrpc-server.php","line":1433,"missingDoc":false,"filters":["'xmlrpc_default_post_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1434],"escape":[1437],"login":[1449],"get_post_type_object":[1457,1461,1498],"__":[1459,1465],"current_user_can":[1464,1499],"absint":[1473,1476],"wp_get_recent_posts":[1489],"_prepare_post":[1502]},"used_by":[]},"wp_get_recent_posts":{"doc":"\/**\n * Retrieve number of recent posts.\n *\n * @since 1.0.0\n * @uses wp_parse_args()\n * @uses get_posts()\n *\n * @param string $deprecated Deprecated.\n * @param array $args Optional. Overrides defaults.\n * @param string $output Optional.\n * @return unknown.\n *\/","file":"post.php","line":2630,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[2633],"__":[2633],"absint":[2634],"is_numeric":[2632],"wp_parse_args":[2647],"get_posts":[2649],"get_object_vars":[2654]},"used_by":{"wp_xmlrpc_server::wp_getPosts":[1489],"wp_xmlrpc_server::blogger_getRecentPosts":[3789],"wp_xmlrpc_server::mw_getRecentPosts":[4762],"wp_xmlrpc_server::mt_getRecentPostTitles":[5016]}},"wp_xmlrpc_server::wp_newTerm":{"doc":"\/**\n * Create a new term.\n *\n * @since 3.4.0\n *\n * @uses wp_insert_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * The $content_struct must contain:\n * - 'name'\n * - 'taxonomy'\n * Also, it can optionally contain:\n * - 'parent'\n * - 'description'\n * - 'slug'\n * @return string term_id\n *\/","file":"class-wp-xmlrpc-server.php","line":1528,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1529],"escape":[1532],"login":[1539],"__":[1545,1550,1559,1563,1572,1589],"taxonomy_exists":[1544],"get_taxonomy":[1547],"current_user_can":[1549],"trim":[1557],"get_term":[1566],"get_error_message":[1569,1586],"is_wp_error":[1568,1585],"wp_insert_term":[1583],"strval":[1591]},"used_by":[]},"wp_xmlrpc_server::wp_editTerm":{"doc":"\/**\n * Edit a term.\n *\n * @since 3.4.0\n *\n * @uses wp_update_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $term_id\n * - array $content_struct\n * The $content_struct must contain:\n * - 'taxonomy'\n * Also, it can optionally contain:\n * - 'name'\n * - 'parent'\n * - 'description'\n * - 'slug'\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":1615,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1616],"escape":[1619],"login":[1627],"__":[1633,1638,1651,1657,1662,1671,1688],"taxonomy_exists":[1632],"get_taxonomy":[1635],"current_user_can":[1637],"get_term":[1645,1665],"get_error_message":[1648,1668,1685],"is_wp_error":[1647,1667,1684],"trim":[1654],"wp_update_term":[1682]},"used_by":[]},"wp_update_term":{"doc":"\/**\n * Update term based on arguments provided.\n *\n * The $args will indiscriminately override all values with the same field name.\n * Care must be taken to not override important information need to update or\n * update will fail (or perhaps create a new term, neither would be acceptable).\n *\n * Defaults will set 'alias_of', 'description', 'parent', and 'slug' if not\n * defined in $args already.\n *\n * 'alias_of' will create a term group, if it doesn't already exist, and update\n * it for the $term.\n *\n * If the 'slug' argument in $args is missing, then the 'name' in $args will be\n * used. It should also be noted that if you set 'slug' and it isn't unique then\n * a WP_Error will be passed back. If you don't pass any slug, then a unique one\n * will be created for you.\n *\n * For what can be overrode in $args, check the term scheme can contain and stay\n * away from the term keys.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses do_action() Will call both 'edit_term' and 'edit_$taxonomy' twice.\n * @uses apply_filters() Will call the 'term_id_filter' filter and pass the term\n *\tid and taxonomy id.\n *\n * @param int $term_id The ID of the term\n * @param string $taxonomy The context in which to relate the term to the object.\n * @param array|string $args Overwrite term field values\n * @return array|WP_Error Returns Term ID and Taxonomy Term ID\n *\/","file":"taxonomy.php","line":2349,"missingDoc":false,"filters":["'edit_terms'","'edited_terms'","'wp_update_term_parent'","'edit_terms'","'edited_terms'","'edit_term_taxonomy'","'edited_term_taxonomy'","'edit_term'","\"edit_{$taxonomy}\"","'term_id_filter'","'edited_term'","\"edited_{$taxonomy}\""],"uses":{"__":[2353,2379,2412],"taxonomy_exists":[2352],"get_term":[2358],"is_wp_error":[2360],"add_magic_quotes":[2364],"array_merge":[2367],"wp_parse_args":[2370],"sanitize_term":[2371],"extract":[2372],"stripslashes":[2375,2376],"trim":[2378],"sanitize_title":[2384,2417],"get_row":[2388],"prepare":[2388,2405,2422],"get_var":[2394,2405,2422],"update":[2396,2415,2418,2424],"compact":[2396,2402,2415,2415,2418,2418,2424],"array_keys":[2402],"wp_unique_term_slug":[2410],"sprintf":[2412],"clean_term_cache":[2432]},"used_by":{"wp_xmlrpc_server::wp_editTerm":[1682],"wp_update_nav_menu_object":[250],"wp_check_term_hierarchy_for_loops":[3298]}},"wp_xmlrpc_server::wp_deleteTerm":{"doc":"\/**\n * Delete a term.\n *\n * @since 3.4.0\n *\n * @uses wp_delete_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxnomy_name\n * - string $term_id\n * @return boolean|IXR_Error If it suceeded true else a reason why not\n *\/","file":"class-wp-xmlrpc-server.php","line":1707,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1708],"escape":[1711],"login":[1719],"__":[1725,1730,1738,1746],"taxonomy_exists":[1724],"get_taxonomy":[1727],"current_user_can":[1729],"get_term":[1732],"get_error_message":[1735,1743],"is_wp_error":[1734,1742],"wp_delete_term":[1740]},"used_by":[]},"wp_delete_term":{"doc":"\/**\n * Removes a term from the database.\n *\n * If the term is a parent of other terms, then the children will be updated to\n * that term's parent.\n *\n * The $args 'default' will only override the terms found, if there is only one\n * term found. Any other and the found terms are used.\n *\n * The $args 'force_default' will force the term supplied as default to be\n * assigned even if the object was not going to be termless\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses do_action() Calls both 'delete_term' and 'delete_$taxonomy' action\n *\thooks, passing term object, term id. 'delete_term' gets an additional\n *\tparameter with the $taxonomy parameter.\n *\n * @param int $term Term ID\n * @param string $taxonomy Taxonomy Name\n * @param array|string $args Optional. Change 'default' term id and override found term ids.\n * @return bool|WP_Error Returns false if not term; true if completes delete action.\n *\/","file":"taxonomy.php","line":1763,"missingDoc":false,"filters":["'edit_term_taxonomies'","'edited_term_taxonomies'","'delete_term_taxonomy'","'deleted_term_taxonomy'","'delete_term'","\"delete_{$taxonomy}\""],"uses":{"term_exists":[1768,1788],"is_wp_error":[1770,1795],"get_option":[1778],"wp_parse_args":[1783],"extract":[1784],"get_term":[1794,1826],"get_col":[1799,1805],"update":[1801],"compact":[1801,1801],"is_taxonomy_hierarchical":[1793],"prepare":[1805,1833],"wp_get_object_terms":[1808],"array_diff":[1812],"array_merge":[1814],"count":[1809],"array_map":[1816],"wp_set_object_terms":[1817],"get_taxonomy":[1821],"clean_object_term_cache":[1823],"delete":[1829,1834],"get_var":[1833],"clean_term_cache":[1836]},"used_by":{"wp_xmlrpc_server::wp_deleteTerm":[1740],"wp_xmlrpc_server::wp_deleteCategory":[2659],"wp_delete_nav_menu":[189],"wp_delete_category":[1855]}},"wp_xmlrpc_server::wp_getTerm":{"doc":"\/**\n * Retrieve a term.\n *\n * @since 3.4.0\n *\n * @uses get_term()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * - string $term_id\n * @return array contains:\n * - 'term_id'\n * - 'name'\n * - 'slug'\n * - 'term_group'\n * - 'term_taxonomy_id'\n * - 'taxonomy'\n * - 'description'\n * - 'parent'\n * - 'count'\n *\/","file":"class-wp-xmlrpc-server.php","line":1774,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1775],"escape":[1778],"login":[1786],"__":[1792,1797,1805],"taxonomy_exists":[1791],"get_taxonomy":[1794],"current_user_can":[1796],"get_term":[1799],"get_error_message":[1802],"is_wp_error":[1801],"_prepare_term":[1807]},"used_by":[]},"wp_xmlrpc_server::wp_getTerms":{"doc":"\/**\n * Retrieve all terms for a taxonomy.\n *\n * @since 3.4.0\n *\n * The optional $filter parameter modifies the query used to retrieve terms.\n * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'.\n *\n * @uses get_terms()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * - array $filter optional\n * @return array terms\n *\/","file":"class-wp-xmlrpc-server.php","line":1827,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[1828],"escape":[1831],"login":[1839],"__":[1845,1850],"taxonomy_exists":[1844],"get_taxonomy":[1847],"current_user_can":[1849],"absint":[1855,1858],"get_terms":[1875],"get_error_message":[1878],"is_wp_error":[1877],"_prepare_term":[1883]},"used_by":[]},"wp_xmlrpc_server::wp_getTaxonomy":{"doc":"\/**\n * Retrieve a taxonomy.\n *\n * @since 3.4.0\n *\n * @uses get_taxonomy()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $taxonomy\n * @return array (@see get_taxonomy())\n *\/","file":"class-wp-xmlrpc-server.php","line":1902,"missingDoc":false,"filters":["'xmlrpc_default_taxonomy_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1903],"escape":[1906],"login":[1918],"__":[1924,1929],"taxonomy_exists":[1923],"get_taxonomy":[1926],"current_user_can":[1928],"_prepare_taxonomy":[1931]},"used_by":[]},"wp_xmlrpc_server::wp_getTaxonomies":{"doc":"\/**\n * Retrieve all taxonomies.\n *\n * @since 3.4.0\n *\n * @uses get_taxonomies()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * @return array taxonomies\n *\/","file":"class-wp-xmlrpc-server.php","line":1946,"missingDoc":false,"filters":["'xmlrpc_default_taxonomy_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[1947],"escape":[1950],"login":[1962],"get_taxonomies":[1967],"current_user_can":[1974],"_prepare_taxonomy":[1977]},"used_by":[]},"get_taxonomies":{"doc":"\/**\n * Get a list of registered taxonomy objects.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n * @uses $wp_taxonomies\n * @see register_taxonomy\n *\n * @param array $args An array of key => value arguments to match against the taxonomy objects.\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of taxonomy names or objects\n *\/","file":"taxonomy.php","line":138,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[143]},"used_by":{"wp_xmlrpc_server::wp_getTaxonomies":[1967],"WP_Widget_Tag_Cloud::form":[1071],"get_taxonomies_for_attachments":[902]}},"wp_xmlrpc_server::wp_getUser":{"doc":"\/**\n * Retrieve a user.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array. This should be a list of field names. 'user_id' will\n * always be included in the response regardless of the value of $fields.\n *\n * Instead of, or in addition to, individual field names, conceptual group\n * names can be used to specify multiple fields. The available conceptual\n * groups are 'basic' and 'all'.\n *\n * @uses get_userdata()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $user_id\n * - array $fields optional\n * @return array contains (based on $fields parameter):\n * - 'user_id'\n * - 'username'\n * - 'first_name'\n * - 'last_name'\n * - 'registered'\n * - 'bio'\n * - 'email'\n * - 'nickname'\n * - 'nicename'\n * - 'url'\n * - 'display_name'\n * - 'roles'\n *\/","file":"class-wp-xmlrpc-server.php","line":2015,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2016],"escape":[2019],"login":[2031],"__":[2037,2042],"current_user_can":[2036],"get_userdata":[2039],"_prepare_user":[2044]},"used_by":[]},"wp_xmlrpc_server::wp_getUsers":{"doc":"\/**\n * Retrieve users.\n *\n * The optional $filter parameter modifies the query used to retrieve users.\n * Accepted keys are 'number' (default: 50), 'offset' (default: 0), 'role',\n * 'who', 'orderby', and 'order'.\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses get_users()\n * @see wp_getUser() for more on $fields and return values\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter optional\n * - array $fields optional\n * @return array users data\n *\/","file":"class-wp-xmlrpc-server.php","line":2068,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2069],"escape":[2072],"login":[2084],"__":[2090,2106],"current_user_can":[2089,2119],"absint":[2094,2095],"get_role":[2105],"get_users":[2115],"_prepare_user":[2120]},"used_by":[]},"wp_xmlrpc_server::wp_getProfile":{"doc":"\/**\n * Retrieve information about the requesting user.\n *\n * @uses get_userdata()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $fields optional\n * @return array (@see wp_getUser)\n *\/","file":"class-wp-xmlrpc-server.php","line":2136,"missingDoc":false,"filters":["'xmlrpc_default_user_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[2137],"escape":[2140],"login":[2151],"__":[2157],"current_user_can":[2156],"get_userdata":[2159],"_prepare_user":[2161]},"used_by":[]},"wp_xmlrpc_server::wp_editProfile":{"doc":"\/**\n * Edit user's profile.\n *\n * @uses wp_update_user()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $content_struct\n * It can optionally contain:\n * - 'first_name'\n * - 'last_name'\n * - 'website'\n * - 'display_name'\n * - 'nickname'\n * - 'nicename'\n * - 'bio'\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2183,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[2184],"escape":[2187],"login":[2194],"__":[2200,2234],"current_user_can":[2199],"wp_update_user":[2228],"get_error_message":[2231],"is_wp_error":[2230]},"used_by":[]},"wp_update_user":{"doc":"\/**\n * Update an user in the database.\n *\n * It is possible to update a user's password by specifying the 'user_pass'\n * value in the $userdata parameter array.\n *\n * If $userdata does not contain an 'ID' key, then a new user will be created\n * and the new user's ID will be returned.\n *\n * If current user's password is being updated, then the cookies will be\n * cleared.\n *\n * @since 2.0.0\n * @see wp_insert_user() For what fields can be set in $userdata\n * @uses wp_insert_user() Used to update existing user or add new one if user doesn't exist already\n *\n * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.\n * @return int|WP_Error The updated user's ID or a WP_Error object if the user could not be updated.\n *\/","file":"user.php","line":1445,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[1447],"is_a":[1448,1446],"to_array":[1449,1458],"get_userdata":[1454],"__":[1456],"get_user_meta":[1462],"_get_additional_user_keys":[1461],"add_magic_quotes":[1466],"wp_hash_password":[1471],"wp_cache_delete":[1474],"array_merge":[1477],"wp_insert_user":[1478],"wp_get_current_user":[1481],"wp_clear_auth_cookie":[1484],"wp_set_auth_cookie":[1485]},"used_by":{"wp_xmlrpc_server::wp_editProfile":[2228]}},"wp_xmlrpc_server::wp_getPage":{"doc":"\/**\n * Retrieve page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - page_id\n * - username\n * - password\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2251,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2252],"login":[2259],"get_post":[2263],"__":[2265,2268,2278],"current_user_can":[2267],"_prepare_page":[2274]},"used_by":[]},"wp_xmlrpc_server::wp_getPages":{"doc":"\/**\n * Retrieve Pages.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - num_pages\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2294,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2295],"login":[2302],"__":[2306],"current_user_can":[2305,2318],"get_posts":[2310],"count":[2311],"_prepare_page":[2319]},"used_by":[]},"wp_xmlrpc_server::wp_newPage":{"doc":"\/**\n * Create new page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters. See {@link wp_xmlrpc_server::mw_newPost()}\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2338,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2340,2341],"login":[2345],"mw_newPost":[2354]},"used_by":[]},"wp_xmlrpc_server::wp_deletePage":{"doc":"\/**\n * Delete page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return bool True, if success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2365,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deletePage'"],"uses":{"escape":[2366],"login":[2373],"get_post":[2380],"__":[2382,2386,2391],"current_user_can":[2385],"wp_delete_post":[2389]},"used_by":[]},"wp_xmlrpc_server::wp_editPage":{"doc":"\/**\n * Edit page.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2406,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2409,2410,2411],"login":[2415],"get_post":[2421],"__":[2423,2427],"current_user_can":[2426],"mw_editPost":[2442]},"used_by":[]},"wp_xmlrpc_server::wp_getPageList":{"doc":"\/**\n * Retrieve page list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":2453,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2456],"login":[2462],"__":[2466],"current_user_can":[2465],"get_results":[2471],"count":[2484],"_convert_date":[2486],"_convert_date_gmt":[2487]},"used_by":[]},"wp_xmlrpc_server::wp_getAuthors":{"doc":"\/**\n * Retrieve authors list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2505,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2507],"login":[2513],"__":[2517],"current_user_can":[2516],"get_users":[2522]},"used_by":[]},"wp_xmlrpc_server::wp_getTags":{"doc":"\/**\n * Get list of all tags\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2541,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2542],"login":[2548],"__":[2552],"current_user_can":[2551],"esc_html":[2564,2565],"get_tag_link":[2564],"get_tag_feed_link":[2565],"get_tags":[2558]},"used_by":[]},"get_tag_feed_link":{"doc":"\/**\n * Retrieve permalink for feed of tag.\n *\n * @since 2.3.0\n *\n * @param int $tag_id Tag ID.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":640,"missingDoc":false,"filters":[],"uses":{"get_term_feed_link":[641]},"used_by":{"wp_xmlrpc_server::wp_getTags":[2565],"feed_links_extra":[1657]}},"wp_xmlrpc_server::wp_newCategory":{"doc":"\/**\n * Create new category.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return int Category ID.\n *\/","file":"class-wp-xmlrpc-server.php","line":2582,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_newCategory'"],"uses":{"escape":[2583],"login":[2590],"__":[2597,2625,2627],"current_user_can":[2596],"wp_insert_category":[2620],"get_error_data":[2623],"get_error_code":[2622],"is_wp_error":[2621]},"used_by":[]},"wp_xmlrpc_server::wp_deleteCategory":{"doc":"\/**\n * Remove category.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return mixed See {@link wp_delete_term()} for return info.\n *\/","file":"class-wp-xmlrpc-server.php","line":2643,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deleteCategory'"],"uses":{"escape":[2644],"login":[2651],"__":[2657],"current_user_can":[2656],"wp_delete_term":[2659]},"used_by":[]},"wp_xmlrpc_server::wp_suggestCategories":{"doc":"\/**\n * Retrieve category list.\n *\n * @since 2.2.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2675,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2676],"login":[2684],"__":[2688],"current_user_can":[2687],"get_categories":[2694]},"used_by":[]},"wp_xmlrpc_server::wp_getComment":{"doc":"\/**\n * Retrieve comment.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":2712,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2713],"login":[2720],"__":[2724,2729],"current_user_can":[2723],"get_comment":[2728],"_prepare_comment":[2731]},"used_by":[]},"wp_xmlrpc_server::wp_getComments":{"doc":"\/**\n * Retrieve comments.\n *\n * Besides the common blog_id, username, and password arguments, it takes a filter\n * array as last argument.\n *\n * Accepted 'filter' keys are 'status', 'post_id', 'offset', and 'number'.\n *\n * The defaults are as follows:\n * - 'status' - Default is ''. Filter by status (e.g., 'approve', 'hold')\n * - 'post_id' - Default is ''. The post where the comment is posted. Empty string shows all comments.\n * - 'number' - Default is 10. Total number of media items to retrieve.\n * - 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents\n *\/","file":"class-wp-xmlrpc-server.php","line":2753,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[2754],"login":[2761],"__":[2765],"current_user_can":[2764],"absint":[2776,2780,2784],"get_comments":[2786],"_prepare_comment":[2791]},"used_by":[]},"get_comments":{"doc":"\/**\n * Retrieve a list of comments.\n *\n * The comment list can be for the blog as a whole or for an individual post.\n *\n * The list of comment arguments are 'status', 'orderby', 'comment_date_gmt',\n * 'order', 'number', 'offset', and 'post_id'.\n *\n * @since 2.7.0\n * @uses $wpdb\n *\n * @param mixed $args Optional. Array or string of options to override defaults.\n * @return array List of comments.\n *\/","file":"comment.php","line":182,"missingDoc":false,"filters":[],"uses":{"query":[184]},"used_by":{"wp_xmlrpc_server::wp_getComments":[2786],"comments_template":[885],"WP_Widget_Recent_Comments::widget":[682]}},"wp_xmlrpc_server::wp_deleteComment":{"doc":"\/**\n * Delete a comment.\n *\n * By default, the comment will be moved to the trash instead of deleted.\n * See {@link wp_delete_comment()} for more information on\n * this behavior.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - comment_id\n * @return mixed {@link wp_delete_comment()}\n *\/","file":"class-wp-xmlrpc-server.php","line":2813,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_deleteComment'"],"uses":{"escape":[2814],"login":[2821],"__":[2825,2828,2831],"current_user_can":[2824,2830],"get_comment":[2827],"wp_delete_comment":[2835]},"used_by":[]},"wp_delete_comment":{"doc":"\/**\n * Trashes or deletes a comment.\n *\n * The comment is moved to trash instead of permanently deleted unless trash is\n * disabled, item is already in the trash, or $force_delete is true.\n *\n * The post comment count will be updated if the comment was approved and has a\n * post ID available.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses do_action() Calls 'delete_comment' hook on comment ID\n * @uses do_action() Calls 'deleted_comment' hook on comment ID after deletion, on success\n * @uses do_action() Calls 'wp_set_comment_status' hook on comment ID with 'delete' set for the second parameter\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param int $comment_id Comment ID\n * @param bool $force_delete Whether to bypass trash and force deletion. Default is false.\n * @return bool False if delete comment query failure, true on success.\n *\/","file":"comment.php","line":997,"missingDoc":false,"filters":["'delete_comment'","'deleted_comment'","'wp_set_comment_status'"],"uses":{"get_comment":[999],"wp_trash_comment":[1003],"in_array":[1002],"wp_get_comment_status":[1002],"get_col":[1008,1015],"prepare":[1008,1015],"update":[1010],"clean_comment_cache":[1011,1027],"delete_metadata_by_mid":[1017],"delete":[1019],"wp_update_comment_count":[1025],"wp_transition_comment_status":[1030]},"used_by":{"wp_xmlrpc_server::wp_deleteComment":[2835],"wp_trash_comment":[1049],"wp_scheduled_delete":[3506],"wp_delete_post":[2360],"wp_delete_attachment":[4113]}},"wp_xmlrpc_server::wp_editComment":{"doc":"\/**\n * Edit comment.\n *\n * Besides the common blog_id, username, and password arguments, it takes a\n * comment_id integer and a content_struct array as last argument.\n *\n * The allowed keys in the content_struct array are:\n * - 'author'\n * - 'author_url'\n * - 'author_email'\n * - 'content'\n * - 'date_created_gmt'\n * - 'status'. Common statuses are 'approve', 'hold', 'spam'. See {@link get_comment_statuses()} for more details\n *\n * @since 2.7.0\n *\n * @param array $args. Contains:\n * - blog_id\n * - username\n * - password\n * - comment_id\n * - content_struct\n * @return bool True, on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":2867,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_wp_editComment'"],"uses":{"escape":[2868],"login":[2876],"__":[2880,2883,2886,2895,2927],"current_user_can":[2879,2885],"get_comment":[2882],"get_comment_statuses":[2891],"array_keys":[2892],"in_array":[2894],"rtrim":[2902],"getIso":[2902],"get_date_from_gmt":[2903],"iso8601_to_datetime":[2903,2904],"compact":[2920],"wp_update_comment":[2922],"get_error_message":[2924],"is_wp_error":[2923]},"used_by":[]},"get_comment_statuses":{"doc":"\/**\n * Retrieve all of the WordPress supported comment statuses.\n *\n * Comments have a limited set of valid status values, this provides the comment\n * status values and descriptions.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.7.0\n *\n * @return array List of comment statuses.\n *\/","file":"comment.php","line":418,"missingDoc":false,"filters":[],"uses":{"__":[420],"_x":[422,424]},"used_by":{"wp_xmlrpc_server::wp_editComment":[2891],"wp_xmlrpc_server::wp_getCommentStatusList":[3044]}},"wp_update_comment":{"doc":"\/**\n * Updates an existing comment in the database.\n *\n * Filters the comment and makes sure certain fields are valid before updating.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param array $commentarr Contains information on the comment.\n * @return int Comment was updated if value is 1, or was not updated if value is 0.\n *\/","file":"comment.php","line":1491,"missingDoc":false,"filters":["'comment_save_pre'","'edit_comment'"],"uses":{"get_comment":[1495,1527],"esc_sql":[1498],"array_merge":[1503],"wp_filter_comment":[1505],"extract":[1508],"stripslashes_deep":[1508],"get_gmt_from_date":[1512],"compact":[1521,1522],"update":[1522],"clean_comment_cache":[1524],"wp_update_comment_count":[1525],"wp_transition_comment_status":[1528]},"used_by":{"wp_xmlrpc_server::wp_editComment":[2922]}},"wp_xmlrpc_server::wp_newComment":{"doc":"\/**\n * Create new comment.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return mixed {@link wp_new_comment()}\n *\/","file":"class-wp-xmlrpc-server.php","line":2942,"missingDoc":false,"filters":["'xmlrpc_allow_anonymous_comments'","'xmlrpc_call'","'xmlrpc_call_success_wp_newComment'"],"uses":{"escape":[2945,2981,2982,2983],"login":[2955],"__":[2960,2973,2976,3002,3004],"get_option":[2959,3000],"absint":[2968,3008],"url_to_postid":[2970],"is_numeric":[2967],"get_post":[2975],"is_email":[3003],"strlen":[3001],"wp_new_comment":[3014]},"used_by":[]},"url_to_postid":{"doc":"\/**\n * Examine a url and try to determine the post ID it represents.\n *\n * Checks are supposedly from the hosted site blog.\n *\n * @since 1.0.0\n *\n * @param string $url Permalink to check.\n * @return int Post ID, or 0 on failure.\n *\/","file":"rewrite.php","line":281,"missingDoc":false,"filters":["'url_to_postid'"],"uses":{"absint":[288],"preg_match":[287,346,344],"wp_rewrite_rules":[294],"explode":[301,305],"str_replace":[310,314,318,322,327],"strpos":[309,309,313,320,341],"home_url":[309,313,322,325,320],"using_index_permalinks":[317],"parse_url":[325],"trim":[331],"get_page_by_path":[348],"preg_replace":[354],"addslashes":[357],"parse_str":[361],"in_array":[364]},"used_by":{"wp_xmlrpc_server::wp_newComment":[2970],"wp_xmlrpc_server::pingback_ping":[5321,5364],"wp_xmlrpc_server::pingback_extensions_getPingbacks":[5473],"pingback":[1840],"is_local_attachment":[3858]}},"is_email":{"doc":"\/**\n * Verifies that an email is valid.\n *\n * Does not grok i18n domains. Not RFC compliant.\n *\n * @since 0.71\n *\n * @param string $email Email address to verify.\n * @param boolean $deprecated Deprecated.\n * @return string|bool Either false or the valid email address.\n *\/","file":"formatting.php","line":1790,"missingDoc":false,"filters":["'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'","'is_email'"],"uses":{"_deprecated_argument":[1792],"strlen":[1795],"strpos":[1800],"explode":[1805,1825],"preg_match":[1809,1815,1840],"trim":[1820,1835],"count":[1828]},"used_by":{"wp_xmlrpc_server::wp_newComment":[3003],"sanitize_option":[2762],"validate_email":[138],"wpmu_validate_user_signup":[471],"newblog_notify_siteadmin":[1017],"newuser_notify_siteadmin":[1056],"get_user_id_from_string":[1337]}},"wp_new_comment":{"doc":"\/**\n * Adds a new comment to the database.\n *\n * Filters new comment to ensure that the fields are sanitized and valid before\n * inserting comment into database. Calls 'comment_post' action with comment ID\n * and whether comment is approved by WordPress. Also has 'preprocess_comment'\n * filter for processing the comment data before the function handles it.\n *\n * We use REMOTE_ADDR here directly. If you are behind a proxy, you should ensure\n * that it is properly set, such as in wp-config.php, for your environment.\n * See {@link http:\/\/core.trac.wordpress.org\/ticket\/9235}\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'preprocess_comment' hook on $commentdata parameter array before processing\n * @uses do_action() Calls 'comment_post' hook on $comment_ID returned from adding the comment and if the comment was approved.\n * @uses wp_filter_comment() Used to filter comment before adding comment.\n * @uses wp_allow_comment() checks to see if comment is approved.\n * @uses wp_insert_comment() Does the actual comment insertion to the database.\n *\n * @param array $commentdata Contains information on the comment.\n * @return int The ID of the comment after adding.\n *\/","file":"comment.php","line":1377,"missingDoc":false,"filters":["'preprocess_comment'","'comment_post'"],"uses":{"absint":[1386],"wp_get_comment_status":[1387],"preg_replace":[1390],"substr":[1391],"current_time":[1393,1394],"wp_filter_comment":[1396],"wp_allow_comment":[1398],"wp_insert_comment":[1400],"wp_notify_moderator":[1406],"get_post":[1408],"wp_notify_postauthor":[1411],"get_option":[1410]},"used_by":{"wp_xmlrpc_server::wp_newComment":[3014],"wp_xmlrpc_server::pingback_ping":[5447]}},"wp_xmlrpc_server::wp_getCommentStatusList":{"doc":"\/**\n * Retrieve all of the comment status.\n *\n * @since 2.7.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3029,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3030],"login":[3036],"__":[3040],"current_user_can":[3039],"get_comment_statuses":[3044]},"used_by":[]},"wp_xmlrpc_server::wp_getCommentCount":{"doc":"\/**\n * Retrieve comment count.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3055,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3056],"login":[3063],"__":[3067],"current_user_can":[3066],"wp_count_comments":[3071]},"used_by":[]},"wp_xmlrpc_server::wp_getPostStatusList":{"doc":"\/**\n * Retrieve post statuses.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3088,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3089],"login":[3095],"__":[3099],"current_user_can":[3098],"get_post_statuses":[3103]},"used_by":[]},"get_post_statuses":{"doc":"\/**\n * Retrieve all of the WordPress supported post statuses.\n *\n * Posts have a limited set of valid status values, this provides the\n * post_status values and descriptions.\n *\n * @since 2.5.0\n *\n * @return array List of post statuses.\n *\/","file":"post.php","line":864,"missingDoc":false,"filters":[],"uses":{"__":[866,867,868,869]},"used_by":{"wp_xmlrpc_server::wp_getPostStatusList":[3103]}},"wp_xmlrpc_server::wp_getPageStatusList":{"doc":"\/**\n * Retrieve page statuses.\n *\n * @since 2.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3114,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3115],"login":[3121],"__":[3125],"current_user_can":[3124],"get_page_statuses":[3129]},"used_by":[]},"get_page_statuses":{"doc":"\/**\n * Retrieve all of the WordPress support page statuses.\n *\n * Pages have a limited set of valid status values, this provides the\n * post_status values and descriptions.\n *\n * @since 2.5.0\n *\n * @return array List of page statuses.\n *\/","file":"post.php","line":885,"missingDoc":false,"filters":[],"uses":{"__":[887,888,889]},"used_by":{"wp_xmlrpc_server::wp_getPageStatusList":[3129]}},"wp_xmlrpc_server::wp_getPageTemplates":{"doc":"\/**\n * Retrieve page templates.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3140,"missingDoc":false,"filters":[],"uses":{"escape":[3141],"login":[3147],"__":[3151],"current_user_can":[3150],"get_page_templates":[3153]},"used_by":[]},"wp_xmlrpc_server::wp_getOptions":{"doc":"\/**\n * Retrieve blog options.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3167,"missingDoc":false,"filters":[],"uses":{"escape":[3168],"login":[3175],"array_keys":[3180],"count":[3179],"_getOptions":[3182]},"used_by":[]},"wp_xmlrpc_server::_getOptions":{"doc":"\/**\n * Retrieve blog options value from list.\n *\n * @since 2.6.0\n *\n * @param array $options Options to retrieve.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3193,"missingDoc":false,"filters":[],"uses":{"get_option":[3200],"array_key_exists":[3196]},"used_by":[]},"wp_xmlrpc_server::wp_setOptions":{"doc":"\/**\n * Update blog options.\n *\n * @since 2.6.0\n *\n * @param array $args Method parameters.\n * @return unknown\n *\/","file":"class-wp-xmlrpc-server.php","line":3217,"missingDoc":false,"filters":[],"uses":{"escape":[3218],"login":[3225],"__":[3229],"current_user_can":[3228],"array_key_exists":[3233],"update_option":[3239],"_getOptions":[3243]},"used_by":[]},"wp_xmlrpc_server::wp_getMediaItem":{"doc":"\/**\n * Retrieve a media item by ID\n *\n * @since 3.1.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - attachment_id\n * @return array. Associative array containing:\n * - 'date_created_gmt'\n * - 'parent'\n * - 'link'\n * - 'thumbnail'\n * - 'title'\n * - 'caption'\n * - 'description'\n * - 'metadata'\n *\/","file":"class-wp-xmlrpc-server.php","line":3266,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3267],"login":[3274],"__":[3278,3283],"current_user_can":[3277],"get_post":[3282],"_prepare_media_item":[3285]},"used_by":[]},"wp_xmlrpc_server::wp_getMediaLibrary":{"doc":"\/**\n * Retrieves a collection of media library items (or attachments)\n *\n * Besides the common blog_id, username, and password arguments, it takes a filter\n * array as last argument.\n *\n * Accepted 'filter' keys are 'parent_id', 'mime_type', 'offset', and 'number'.\n *\n * The defaults are as follows:\n * - 'number' - Default is 5. Total number of media items to retrieve.\n * - 'offset' - Default is 0. See {@link WP_Query::query()} for more.\n * - 'parent_id' - Default is ''. The post where the media item is attached. Empty string shows all media items. 0 shows unattached media items.\n * - 'mime_type' - Default is ''. Filter by mime type (e.g., 'image\/jpeg', 'application\/pdf')\n *\n * @since 3.1.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - filter\n * @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents\n *\/","file":"class-wp-xmlrpc-server.php","line":3311,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3312],"login":[3319],"__":[3323],"current_user_can":[3322],"absint":[3327,3329,3330],"get_posts":[3332],"_prepare_media_item":[3337]},"used_by":[]},"wp_xmlrpc_server::wp_getPostFormats":{"doc":"\/**\n * Retrieves a list of post formats used by the site\n *\n * @since 3.1\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3353,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3354],"login":[3360],"__":[3364],"current_user_can":[3363],"get_post_format_strings":[3368],"get_theme_support":[3374],"current_theme_supports":[3373],"is_array":[3371]},"used_by":[]},"get_post_format_strings":{"doc":"\/**\n * Returns an array of post format slugs to their translated and pretty display versions\n *\n * @since 3.1.0\n *\n * @return array The array of translations\n *\/","file":"post.php","line":5323,"missingDoc":false,"filters":[],"uses":{"_x":[5325,5326,5327,5328,5329,5330,5331,5332,5333,5334]},"used_by":{"wp_xmlrpc_server::wp_getPostFormats":[3368],"wp_xmlrpc_server::mw_newPost":[4091],"wp_xmlrpc_server::mw_editPost":[4389],"get_post_format_slugs":[5347],"get_post_format_string":[5360]}},"wp_xmlrpc_server::wp_getPostType":{"doc":"\/**\n * Retrieves a post type\n *\n * @since 3.4.0\n *\n * @uses get_post_type_object()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - string $post_type_name\n * - array $fields\n * @return array contains:\n * - 'labels'\n * - 'description'\n * - 'capability_type'\n * - 'cap'\n * - 'map_meta_cap'\n * - 'hierarchical'\n * - 'menu_position'\n * - 'taxonomies'\n * - 'supports'\n *\/","file":"class-wp-xmlrpc-server.php","line":3410,"missingDoc":false,"filters":["'xmlrpc_default_posttype_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3411],"escape":[3414],"login":[3426],"__":[3432,3437],"post_type_exists":[3431],"get_post_type_object":[3434],"current_user_can":[3436],"_prepare_post_type":[3439]},"used_by":[]},"post_type_exists":{"doc":"\/**\n * Checks if a post type is registered.\n *\n * @since 3.0.0\n * @uses get_post_type_object()\n *\n * @param string $post_type Post type name\n * @return bool Whether post type is registered.\n *\/","file":"post.php","line":1060,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[1061]},"used_by":{"wp_xmlrpc_server::wp_getPostType":[3431],"is_post_type_hierarchical":[1044],"get_ancestors":[3239]}},"wp_xmlrpc_server::wp_getPostTypes":{"doc":"\/**\n * Retrieves a post types\n *\n * @since 3.4.0\n *\n * @uses get_post_types()\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - array $filter\n * - array $fields\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3456,"missingDoc":false,"filters":["'xmlrpc_default_posttype_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3457],"escape":[3460],"login":[3472],"get_post_types":[3477],"current_user_can":[3482],"_prepare_post_type":[3485]},"used_by":[]},"wp_xmlrpc_server::wp_getRevisions":{"doc":"\/**\n * Retrieve revisions for a specific post.\n *\n * @since 3.5.0\n *\n * The optional $fields parameter specifies what fields will be included\n * in the response array.\n *\n * @uses wp_get_post_revisions()\n * @see wp_getPost() for more on $fields\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * - array $fields\n * @return array contains a collection of posts.\n *\/","file":"class-wp-xmlrpc-server.php","line":3510,"missingDoc":false,"filters":["'xmlrpc_default_revision_fields'","'xmlrpc_call'"],"uses":{"minimum_args":[3511],"escape":[3514],"login":[3526],"__":[3532,3535,3539],"get_post":[3531],"current_user_can":[3534,3549],"post_type_supports":[3538],"wp_get_post_revisions":[3541],"wp_is_post_autosave":[3553],"_prepare_post":[3556],"get_object_vars":[3556]},"used_by":[]},"wp_get_post_revisions":{"doc":"\/**\n * Returns all revisions of specified post.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses get_children()\n *\n * @param int|object $post_id Post ID or post object\n * @return array empty if no revisions\n *\/","file":"post.php","line":5211,"missingDoc":false,"filters":[],"uses":{"get_post":[5214],"wp_parse_args":[5218],"array_merge":[5219],"get_children":[5221]},"used_by":{"wp_xmlrpc_server::wp_getRevisions":[3541],"wp_list_post_revisions":[1368],"wp_save_post_revision":[4950]}},"wp_is_post_autosave":{"doc":"\/**\n * Determines if the specified post is an autosave.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int|object $post Post ID or post object.\n * @return bool|int False if not a revision, ID of autosave's parent otherwise\n *\/","file":"post.php","line":5046,"missingDoc":false,"filters":[],"uses":{"wp_get_post_revision":[5047]},"used_by":{"wp_xmlrpc_server::wp_getRevisions":[3553],"wp_xmlrpc_server::wp_restoreRevision":[3595],"wp_post_revision_title":[1316],"wp_list_post_revisions":[1385]}},"wp_xmlrpc_server::wp_restoreRevision":{"doc":"\/**\n * Restore a post revision\n *\n * @since 3.5.0\n *\n * @uses wp_restore_post_revision()\n *\n * @param array $args Method parameters. Contains:\n * - int $blog_id\n * - string $username\n * - string $password\n * - int $post_id\n * @return bool false if there was an error restoring, true if success.\n *\/","file":"class-wp-xmlrpc-server.php","line":3576,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"minimum_args":[3577],"escape":[3580],"login":[3587],"__":[3593,3596,3599,3602,3606],"wp_get_post_revision":[3592],"wp_is_post_autosave":[3595],"get_post":[3598],"current_user_can":[3601],"post_type_supports":[3605],"wp_restore_post_revision":[3608]},"used_by":[]},"wp_get_post_revision":{"doc":"\/**\n * Gets a post revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses get_post()\n *\n * @param int|object $post Post ID or post object\n * @param string $output Optional. OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter Optional sanitation filter. @see sanitize_post()\n * @return mixed Null if error or post object if success\n *\/","file":"post.php","line":5104,"missingDoc":false,"filters":[],"uses":{"get_post":[5106],"get_object_vars":[5114,5117],"array_values":[5117]},"used_by":{"wp_xmlrpc_server::wp_restoreRevision":[3592],"wp_is_post_revision":[5031],"wp_is_post_autosave":[5047],"wp_restore_post_revision":[5143],"wp_delete_post_revision":[5186]}},"wp_restore_post_revision":{"doc":"\/**\n * Restores a post to the specified revision.\n *\n * Can restore a past revision using all fields of the post revision, or only selected fields.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revision()\n * @uses wp_update_post()\n * @uses do_action() Calls 'wp_restore_post_revision' on post ID and revision ID if wp_update_post()\n * is successful.\n *\n * @param int|object $revision_id Revision ID or revision object.\n * @param array $fields Optional. What fields to restore from. Defaults to all.\n * @return mixed Null if error, false if no fields to restore, (int) post ID if success.\n *\/","file":"post.php","line":5142,"missingDoc":false,"filters":["'wp_restore_post_revision'"],"uses":{"wp_get_post_revision":[5143],"array_keys":[5147,5150],"_wp_post_revision_fields":[5147],"is_array":[5146],"array_intersect":[5150],"add_magic_quotes":[5158],"wp_update_post":[5160],"is_wp_error":[5161]},"used_by":{"wp_xmlrpc_server::wp_restoreRevision":[3608]}},"wp_xmlrpc_server::blogger_getUsersBlogs":{"doc":"\/**\n * Retrieve blogs that user owns.\n *\n * Will make more sense once we support multiple blogs.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3627,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"_multisite_getUsersBlogs":[3629],"is_multisite":[3628],"escape":[3631],"login":[3636],"current_user_can":[3641],"get_option":[3645,3647],"site_url":[3648]},"used_by":[]},"wp_xmlrpc_server::_multisite_getUsersBlogs":{"doc":"\/**\n * Private function for retrieving a users blogs for multisite setups\n *\n * @access protected\n *\/","file":"class-wp-xmlrpc-server.php","line":3659,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[3660],"set_url_scheme":[3665],"query":[3666],"getResponse":[3667],"strpos":[3676]},"used_by":[]},"get_blog_details":{"doc":"\/**\n * Retrieve the details for a blog from the blogs table and blog options.\n *\n * @since MU\n *\n * @param int|string|array $fields A blog ID, a blog slug, or an array of fields to query against. Optional. If not specified the current blog ID is used.\n * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true.\n * @return object Blog details.\n *\/","file":"ms-blogs.php","line":125,"missingDoc":false,"filters":["'blog_details'"],"uses":{"md5":[132,149,241],"wp_cache_get":[133,150,180,198,200],"substr":[137,136,154,153],"get_row":[138,140,155,157,218],"prepare":[138,140,155,157,218],"wp_cache_set":[143,160,221,227,239,242],"is_subdomain_install":[148],"get_current_blog_id":[170],"is_numeric":[171],"get_id_from_blogname":[172],"is_array":[128],"wp_cache_delete":[188,208],"is_object":[183,203],"switch_to_blog":[231],"get_option":[232,233,234],"restore_current_blog":[235]},"used_by":{"wp_xmlrpc_server::_multisite_getUsersBlogs":[3660],"get_blogaddress_by_id":[33],"refresh_blog_details":[256],"update_blog_details":[281],"get_blog_status":[706],"get_active_blog_for_user":[84,86,102],"add_user_to_blog":[190],"get_dashboard_blog":[1789,1791],"ms_site_check":[74],"__main":[55,76,101],"wp_authenticate_username_password":[99],"get_blogs_of_user":[712,741]}},"wp_xmlrpc_server::blogger_getUserInfo":{"doc":"\/**\n * Retrieve user's data.\n *\n * Gives your client some info about you, so you don't have to.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3693,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3695],"login":[3700],"__":[3704],"current_user_can":[3703]},"used_by":[]},"wp_xmlrpc_server::blogger_getPost":{"doc":"\/**\n * Retrieve post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3727,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3729],"login":[3735],"get_post":[3738],"__":[3740,3743],"current_user_can":[3742],"implode":[3747],"wp_get_post_categories":[3747],"stripslashes":[3749,3751],"_convert_date":[3755]},"used_by":[]},"wp_xmlrpc_server::blogger_getRecentPosts":{"doc":"\/**\n * Retrieve list of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":3771,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[3773],"absint":[3780],"login":[3784],"wp_get_recent_posts":[3789],"__":[3792],"current_user_can":[3797],"_convert_date":[3800],"implode":[3801],"wp_get_post_categories":[3801],"stripslashes":[3803,3805],"count":[3817],"array_push":[3818]},"used_by":[]},"wp_xmlrpc_server::blogger_getTemplate":{"doc":"\/**\n * Deprecated.\n *\n * @since 1.5.0\n * @deprecated 3.5.0\n *\/","file":"class-wp-xmlrpc-server.php","line":3830,"missingDoc":false,"filters":[],"uses":{"__":[3831]},"used_by":[]},"wp_xmlrpc_server::blogger_setTemplate":{"doc":"\/**\n * Deprecated.\n *\n * @since 1.5.0\n * @deprecated 3.5.0\n *\/","file":"class-wp-xmlrpc-server.php","line":3840,"missingDoc":false,"filters":[],"uses":{"__":[3841]},"used_by":[]},"wp_xmlrpc_server::blogger_newPost":{"doc":"\/**\n * Create new post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":3852,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_newPost'"],"uses":{"escape":[3854],"login":[3862],"__":[3869,3889],"current_user_can":[3868,3868],"get_post_type_object":[3868],"xmlrpc_getposttitle":[3875],"xmlrpc_getpostcategory":[3876],"xmlrpc_removepostdata":[3877],"current_time":[3879,3880],"compact":[3882],"wp_insert_post":[3884],"get_error_message":[3886],"is_wp_error":[3885],"attach_uploads":[3891]},"used_by":[]},"xmlrpc_getposttitle":{"doc":"\/**\n * Retrieve post title from XMLRPC XML.\n *\n * If the title element is not part of the XML, then the default post title from\n * the $post_default_title will be used instead.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @global string $post_default_title Default XMLRPC post title.\n *\n * @param string $content XMLRPC XML Request content\n * @return string Post title\n *\/","file":"functions.php","line":341,"missingDoc":false,"filters":[],"uses":{"preg_match":[343]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3875],"wp_xmlrpc_server::blogger_editPost":[3936]}},"xmlrpc_getpostcategory":{"doc":"\/**\n * Retrieve the post category or categories from XMLRPC XML.\n *\n * If the category element is not found, then the default post category will be\n * used. The return type then would be what $post_default_category. If the\n * category is found, then it will always be an array.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @global string $post_default_category Default XMLRPC post category.\n *\n * @param string $content XMLRPC XML Request content\n * @return string|array List of categories or category name.\n *\/","file":"functions.php","line":367,"missingDoc":false,"filters":[],"uses":{"trim":[370],"explode":[371],"preg_match":[369]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3876],"wp_xmlrpc_server::blogger_editPost":[3937]}},"xmlrpc_removepostdata":{"doc":"\/**\n * XMLRPC XML content without title and category elements.\n *\n * @package WordPress\n * @subpackage XMLRPC\n * @since 0.71\n *\n * @param string $content XMLRPC XML Request content\n * @return string XMLRPC XML Request content without title and category elements.\n *\/","file":"functions.php","line":388,"missingDoc":false,"filters":[],"uses":{"preg_replace":[389,390],"trim":[391]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3877],"wp_xmlrpc_server::blogger_editPost":[3938]}},"current_time":{"doc":"\/**\n * Retrieve the current time based on specified type.\n *\n * The 'mysql' type will return the time in the format for MySQL DATETIME field.\n * The 'timestamp' type will return the current timestamp.\n *\n * If $gmt is set to either '1' or 'true', then both types will use GMT time.\n * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option.\n *\n * @since 1.0.0\n *\n * @param string $type Either 'mysql' or 'timestamp'.\n * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false.\n * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.\n *\/","file":"functions.php","line":59,"missingDoc":false,"filters":[],"uses":{"gmdate":[62,62],"time":[62,65,65],"get_option":[62,65]},"used_by":{"wp_xmlrpc_server::blogger_newPost":[3879,3880],"wp_xmlrpc_server::mw_newPost":[4243,4244],"wp_insert_comment":[1268],"wp_new_comment":[1393,1394],"date_i18n":[90],"wp_upload_dir":[1597],"get_calendar":[1124,1125,1242,1242,1242],"get_year_link":[341],"get_month_link":[363,365],"get_day_link":[389,391,393],"wpmu_update_blogs_date":[19],"update_blog_details":[288],"update_blog_status":[675],"wpmu_validate_user_signup":[493,507],"wpmu_validate_blog_signup":[612],"wpmu_signup_blog":[652],"wpmu_signup_user":[688],"wpmu_activate_signup":[861],"insert_blog":[1110],"wpmu_log_new_registrations":[1513],"wp_insert_post":[2788,2810,2811],"wp_update_post":[2999],"wp_insert_attachment":[3961,3963],"WP_Query::get_posts":[2715]}},"wp_xmlrpc_server::blogger_editPost":{"doc":"\/**\n * Edit a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool true when done.\n *\/","file":"class-wp-xmlrpc-server.php","line":3906,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_editPost'"],"uses":{"escape":[3908,3926],"login":[3916],"get_post":[3921],"__":[3924,3929,3934,3945],"current_user_can":[3928,3933],"extract":[3931],"xmlrpc_getposttitle":[3936],"xmlrpc_getpostcategory":[3937],"xmlrpc_removepostdata":[3938],"compact":[3940],"wp_update_post":[3942],"attach_uploads":[3947]},"used_by":[]},"wp_xmlrpc_server::blogger_deletePost":{"doc":"\/**\n * Remove a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True when post is deleted.\n *\/","file":"class-wp-xmlrpc-server.php","line":3962,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_blogger_deletePost'"],"uses":{"escape":[3963],"login":[3970],"get_post":[3975],"__":[3978,3981,3986],"current_user_can":[3980],"wp_delete_post":[3983]},"used_by":[]},"wp_xmlrpc_server::mw_newPost":{"doc":"\/**\n * Create a new post.\n *\n * The 'content_struct' argument must contain:\n * - title\n * - description\n * - mt_excerpt\n * - mt_text_more\n * - mt_keywords\n * - mt_tb_ping_urls\n * - categories\n *\n * Also, it can optionally contain:\n * - wp_slug\n * - wp_password\n * - wp_page_parent_id\n * - wp_page_order\n * - wp_author_id\n * - post_status | page_status - can be 'draft', 'private', 'publish', or 'pending'\n * - mt_allow_comments - can be 'open' or 'closed'\n * - mt_allow_pings - can be 'open' or 'closed'\n * - date_created_gmt\n * - dateCreated\n * - wp_post_thumbnail\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters. Contains:\n * - blog_id\n * - username\n * - password\n * - content_struct\n * - publish\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":4032,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_mw_newPost'"],"uses":{"escape":[4033],"login":[4041],"__":[4055,4066,4070,4079,4084,4092,4121,4125,4128,4133,4275,4296],"current_user_can":[4083,4085,4120,4124],"get_post_type_object":[4083],"sanitize_key":[4090],"array_key_exists":[4091],"get_post_format_strings":[4091],"get_userdata":[4131],"get_option":[4171,4184,4189,4202,4214,4219],"is_numeric":[4162,4193],"implode":[4229],"is_array":[4228,4251],"rtrim":[4235],"getIso":[4235,4237],"get_date_from_gmt":[4240],"iso8601_to_datetime":[4240,4241],"current_time":[4243,4244],"get_cat_ID":[4253],"compact":[4258],"get_default_post_to_edit":[4260],"stick_post":[4265],"unstick_post":[4267],"set_custom_fields":[4271],"set_post_thumbnail":[4274],"add_enclosure_if_new":[4282],"attach_uploads":[4284],"set_post_format":[4289],"wp_insert_post":[4291],"get_error_message":[4293],"is_wp_error":[4292],"strval":[4300]},"used_by":[]},"sanitize_key":{"doc":"\/**\n * Sanitize a string key.\n *\n * Keys are used as internal identifiers. Lowercase alphanumeric characters, dashes and underscores are allowed.\n *\n * @since 3.0.0\n *\n * @param string $key String key\n * @return string Sanitized key\n *\/","file":"formatting.php","line":915,"missingDoc":false,"filters":["'sanitize_key'"],"uses":{"strtolower":[917],"preg_replace":[918]},"used_by":{"wp_xmlrpc_server::mw_newPost":[4090],"wp_xmlrpc_server::mw_editPost":[4388],"wp_update_nav_menu_item":[372,375,376],"has_post_format":[792],"set_post_format":[811],"register_post_status":[945],"register_post_type":[1234],"WP_Query::parse_query":[1654]}},"wp_xmlrpc_server::add_enclosure_if_new":{"doc":"","file":"class-wp-xmlrpc-server.php","line":4303,"missingDoc":true,"filters":[],"uses":{"get_post_custom":[4308],"add_post_meta":[4319],"is_array":[4304]},"used_by":[]},"get_post_custom":{"doc":"\/**\n * Retrieve post meta fields, based on post ID.\n *\n * The post meta fields are retrieved from the cache where possible,\n * so the function is optimized to be called more than once.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom\n *\n * @param int $post_id Post ID.\n * @return array\n *\/","file":"post.php","line":1850,"missingDoc":false,"filters":[],"uses":{"absint":[1851],"get_the_ID":[1853],"get_post_meta":[1855]},"used_by":{"wp_xmlrpc_server::add_enclosure_if_new":[4308],"wp_xmlrpc_server::mw_getPost":[4685],"rss_enclosure":[389],"atom_enclosure":[425],"post_custom":[725],"get_post_custom_keys":[1870],"get_post_custom_values":[1896],"get_enclosed":[3316]}},"wp_xmlrpc_server::attach_uploads":{"doc":"\/**\n * Attach upload to a post.\n *\n * @since 2.1.0\n *\n * @param int $post_ID Post ID.\n * @param string $post_content Post Content for attachment.\n *\/","file":"class-wp-xmlrpc-server.php","line":4331,"missingDoc":false,"filters":[],"uses":{"get_results":[4335],"update":[4339],"strpos":[4338],"is_array":[4336]},"used_by":[]},"wp_xmlrpc_server::mw_editPost":{"doc":"\/**\n * Edit a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":4352,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_call_success_mw_editPost'"],"uses":{"escape":[4354,4394],"login":[4362],"get_post":[4367],"__":[4373,4376,4380,4384,4390,4425,4429,4432,4535,4537,4573,4592],"current_user_can":[4375,4424,4428,4536,4534],"in_array":[4379],"sanitize_key":[4388],"array_key_exists":[4389],"get_post_format_strings":[4389],"extract":[4395],"get_option":[4448,4461,4477,4489],"is_numeric":[4439,4468],"get_cat_ID":[4506],"is_array":[4504,4546],"implode":[4547],"rtrim":[4553],"getIso":[4553,4555],"get_date_from_gmt":[4558],"iso8601_to_datetime":[4558,4559],"compact":[4566],"wp_update_post":[4568],"get_error_message":[4570],"is_wp_error":[4569],"stick_post":[4578],"unstick_post":[4580],"set_custom_fields":[4584],"delete_post_thumbnail":[4589],"set_post_thumbnail":[4591],"add_enclosure_if_new":[4599],"attach_uploads":[4601],"set_post_format":[4606]},"used_by":[]},"wp_xmlrpc_server::mw_getPost":{"doc":"\/**\n * Retrieve post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4621,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4623],"login":[4629],"get_post":[4632],"__":[4634,4637,4733],"current_user_can":[4636],"_convert_date":[4642,4644],"_convert_date_gmt":[4643,4645],"wp_get_post_categories":[4648],"get_cat_name":[4650],"wp_get_post_tags":[4653],"implode":[4657],"get_extended":[4662],"post_permalink":[4663],"get_userdata":[4666],"get_post_format":[4676],"is_sticky":[4681],"explode":[4688],"trim":[4689,4690,4691],"htmlspecialchars":[4689],"get_post_custom":[4685],"get_custom_fields":[4720],"get_post_thumbnail_id":[4729]},"used_by":[]},"wp_get_post_tags":{"doc":"\/**\n * Retrieve the tags for a post.\n *\n * There is only one default for this function, called 'fields' and by default\n * is set to 'all'. There are other defaults that can be overridden in\n * {@link wp_get_object_terms()}.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.3.0\n *\n * @uses wp_get_object_terms() Gets the tags for returning. Args can be found here\n *\n * @param int $post_id Optional. The Post ID\n * @param array $args Optional. Overwrite the defaults\n * @return array List of post tags.\n *\/","file":"post.php","line":2585,"missingDoc":false,"filters":[],"uses":{"wp_get_post_terms":[2586]},"used_by":{"wp_xmlrpc_server::mw_getPost":[4653],"wp_xmlrpc_server::mw_getRecentPosts":[4783]}},"wp_xmlrpc_server::mw_getRecentPosts":{"doc":"\/**\n * Retrieve list of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4745,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4747],"absint":[4753],"login":[4757],"wp_get_recent_posts":[4762],"current_user_can":[4769],"_convert_date":[4772,4774],"_convert_date_gmt":[4773,4775],"wp_get_post_categories":[4778],"get_cat_name":[4780],"wp_get_post_tags":[4783],"implode":[4788],"get_extended":[4793],"post_permalink":[4794],"get_userdata":[4797],"get_post_format":[4807],"get_custom_fields":[4834],"count":[4840,4845],"get_post_thumbnail_id":[4841],"array_push":[4846]},"used_by":[]},"wp_xmlrpc_server::mw_getCategories":{"doc":"\/**\n * Retrieve the list of categories on a given blog.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4860,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[4862],"login":[4868],"__":[4872],"current_user_can":[4871],"esc_html":[4885,4886],"get_category_link":[4885],"get_category_feed_link":[4886],"get_categories":[4878]},"used_by":[]},"get_category_feed_link":{"doc":"\/**\n * Retrieve the feed link for a category.\n *\n * Returns a link to the feed for all posts in a given category. A specific feed\n * can be requested or left blank to get the default feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int $cat_id ID of a category.\n * @param string $feed Optional. Feed type.\n * @return string Link to the feed for the category specified by $cat_id.\n*\/","file":"link-template.php","line":571,"missingDoc":false,"filters":[],"uses":{"get_term_feed_link":[572]},"used_by":{"wp_xmlrpc_server::mw_getCategories":[4886],"get_category_rss_link":[1178],"feed_links_extra":[1652]}},"wp_xmlrpc_server::mw_newMediaObject":{"doc":"\/**\n * Uploads a file, following your settings.\n *\n * Adapted from a patch by Johann Richard.\n *\n * @link http:\/\/mycvs.org\/archives\/2004\/06\/30\/file-upload-to-wordpress-in-ecto\/\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4907,"missingDoc":false,"filters":["'xmlrpc_call'","'pre_upload_error'","'xmlrpc_call_success_mw_newMediaObject'","'wp_handle_upload'"],"uses":{"escape":[4911,4912],"sanitize_file_name":[4915],"login":[4919],"__":[4925,4952,4961],"current_user_can":[4924,4960],"get_row":[4934],"wp_delete_attachment":[4942],"preg_replace":[4946],"wp_upload_bits":[4950],"sprintf":[4952],"wp_insert_attachment":[4973],"wp_update_attachment_metadata":[4974],"wp_generate_attachment_metadata":[4974],"strval":[4979]},"used_by":[]},"sanitize_file_name":{"doc":"\/**\n * Sanitizes a filename replacing whitespace with dashes\n *\n * Removes special characters that are illegal in filenames on certain\n * operating systems and special characters requiring special escaping\n * to manipulate at the command line. Replaces spaces and consecutive\n * dashes with a single dash. Trim period, dash and underscore from beginning\n * and end of filename.\n *\n * @since 2.1.0\n *\n * @param string $filename The filename to be sanitized\n * @return string The sanitized filename\n *\/","file":"formatting.php","line":827,"missingDoc":false,"filters":["'sanitize_file_name_chars'","'sanitize_file_name'","'sanitize_file_name'"],"uses":{"chr":[829],"str_replace":[831],"preg_replace":[832],"trim":[833],"explode":[836],"count":[839],"array_shift":[843],"array_pop":[844],"get_allowed_mime_types":[845],"preg_match":[856,852]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4915],"wp_unique_filename":[1649]}},"wp_delete_attachment":{"doc":"\/**\n * Trashes or deletes an attachment.\n *\n * When an attachment is permanently deleted, the file will also be removed.\n * Deletion removes all post meta fields, taxonomy, comments, etc. associated\n * with the attachment (except the main post).\n *\n * The attachment is moved to the trash instead of permanently deleted unless trash\n * for media is disabled, item is already in the trash, or $force_delete is true.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses do_action() Calls 'delete_attachment' hook on Attachment ID.\n *\n * @param int $post_id Attachment ID.\n * @param bool $force_delete Whether to bypass trash and force deletion. Defaults to false.\n * @return mixed False on failure. Post data on success.\n *\/","file":"post.php","line":4076,"missingDoc":false,"filters":["'delete_attachment'","'delete_post'","'deleted_post'","'wp_delete_file'","'wp_delete_file'","'wp_delete_file'","'wp_delete_file'"],"uses":{"get_row":[4079,4127],"prepare":[4079,4111,4115,4127],"wp_trash_post":[4086],"delete_post_meta":[4088,4089],"wp_get_attachment_metadata":[4091],"get_post_meta":[4092],"get_attached_file":[4093],"image_get_intermediate_size":[4097],"get_intermediate_image_sizes":[4096],"delete_transient":[4102],"is_multisite":[4101],"wp_delete_object_term_relationships":[4106,4107],"get_object_taxonomies":[4107],"delete_metadata":[4109],"get_col":[4111,4115],"wp_delete_comment":[4113],"delete_metadata_by_mid":[4117],"delete":[4120],"wp_upload_dir":[4123],"str_replace":[4128],"basename":[4128],"unlink":[4130,4137,4144,4151],"path_join":[4130,4137,4142,4144],"dirname":[4142],"is_array":[4140],"clean_post_cache":[4153]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4942],"wp_delete_post":[2315]}},"wp_upload_bits":{"doc":"\/**\n * Create a file in the upload folder with given content.\n *\n * If there is an error, then the key 'error' will exist with the error message.\n * If success, then the key 'file' will have the unique file path, the 'url' key\n * will have the link to the new file. and the 'error' key will be set to false.\n *\n * This function will not move an uploaded file to the upload folder. It will\n * create a new file with the content in $bits parameter. If you move the upload\n * file, read the content of the uploaded file, and then you can give the\n * filename and content to this function, which will add it to the upload\n * folder.\n *\n * The permissions will be set on the new file automatically by this function.\n *\n * @since 2.0.0\n *\n * @param string $name\n * @param null $deprecated Never used. Set to null.\n * @param mixed $bits File content\n * @param string $time Optional. Time formatted in 'yyyy\/mm'.\n * @return array\n *\/","file":"functions.php","line":1715,"missingDoc":false,"filters":["'wp_upload_bits'"],"uses":{"_deprecated_argument":[1717],"__":[1720,1724,1746,1752],"wp_check_filetype":[1722],"current_user_can":[1723],"wp_upload_dir":[1726],"is_array":[1732],"wp_unique_filename":[1737],"str_replace":[1742],"basename":[1744],"strpos":[1741],"sprintf":[1746,1752],"wp_mkdir_p":[1740],"dirname":[1740,1759],"fopen":[1750],"fwrite":[1754],"fclose":[1755],"clearstatcache":[1756,1763],"stat":[1759],"chmod":[1762]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4950]}},"wp_insert_attachment":{"doc":"\/**\n * Insert an attachment.\n *\n * If you set the 'ID' in the $object parameter, it will mean that you are\n * updating and attempt to update the attachment. You can also set the\n * attachment name or title by setting the key 'post_name' or 'post_title'.\n *\n * You can set the dates for the attachment manually by setting the 'post_date'\n * and 'post_date_gmt' keys' values.\n *\n * By default, the comments will use the default settings for whether the\n * comments are allowed. You can close them manually or keep them open by\n * setting the value for the 'comment_status' key.\n *\n * The $object parameter can have the following:\n * 'post_status' - Default is 'draft'. Can not be overridden, set the same as parent post.\n * 'post_type' - Default is 'post', will be set to attachment. Can not override.\n * 'post_author' - Default is current user ID. The ID of the user, who added the attachment.\n * 'ping_status' - Default is the value in default ping status option. Whether the attachment\n * can accept pings.\n * 'post_parent' - Default is 0. Can use $parent parameter or set this for the post it belongs\n * to, if any.\n * 'menu_order' - Default is 0. The order it is displayed.\n * 'to_ping' - Whether to ping.\n * 'pinged' - Default is empty string.\n * 'post_password' - Default is empty string. The password to access the attachment.\n * 'guid' - Global Unique ID for referencing the attachment.\n * 'post_content_filtered' - Attachment post content filtered.\n * 'post_excerpt' - Attachment excerpt.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses $user_ID\n * @uses do_action() Calls 'edit_attachment' on $post_ID if this is an update.\n * @uses do_action() Calls 'add_attachment' on $post_ID if this is not an update.\n *\n * @param string|array $object Arguments to override defaults.\n * @param string $file Optional filename.\n * @param int $parent Parent post ID.\n * @return int Attachment ID.\n *\/","file":"post.php","line":3907,"missingDoc":false,"filters":["'edit_attachment'","'add_attachment'"],"uses":{"get_option":[3911,3974,3977],"wp_parse_args":[3915],"sanitize_post":[3921],"extract":[3924],"in_array":[3931],"array_filter":[3935,4035],"count":[3938],"is_array":[3938,4034],"sanitize_title":[3953,3955,4020],"wp_unique_post_slug":[3958],"current_time":[3961,3963],"preg_replace":[3980],"compact":[4001,4021],"stripslashes_deep":[4002],"update":[4005,4021],"get_var":[4010],"prepare":[4010],"insert":[4015],"wp_set_post_categories":[4025],"is_object_in_taxonomy":[4024,4027],"wp_set_post_tags":[4028],"get_taxonomy":[4033],"wp_set_post_terms":[4037],"current_user_can":[4036],"update_attached_file":[4042],"clean_post_cache":[4044],"add_post_meta":[4047]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4973],"wp_update_post":[3004]}},"wp_update_attachment_metadata":{"doc":"\/**\n * Update metadata for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @param array $data Attachment data.\n * @return int\n *\/","file":"post.php","line":4189,"missingDoc":false,"filters":["'wp_update_attachment_metadata'"],"uses":{"get_post":[4191],"update_post_meta":[4195],"delete_post_meta":[4197]},"used_by":{"wp_xmlrpc_server::mw_newMediaObject":[4974]}},"wp_xmlrpc_server::mt_getRecentPostTitles":{"doc":"\/**\n * Retrieve the post titles of recent posts.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":4999,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5001],"absint":[5007],"login":[5011],"wp_get_recent_posts":[5016],"__":[5019],"current_user_can":[5026],"_convert_date":[5029],"_convert_date_gmt":[5030],"count":[5044],"array_push":[5045]},"used_by":[]},"wp_xmlrpc_server::mt_getCategoryList":{"doc":"\/**\n * Retrieve list of all categories on blog.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5059,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5061],"login":[5067],"__":[5071],"current_user_can":[5070],"get_categories":[5077]},"used_by":[]},"wp_xmlrpc_server::mt_getPostCategories":{"doc":"\/**\n * Retrieve post categories.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5097,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5099],"login":[5105],"__":[5109,5112],"get_post":[5108],"current_user_can":[5111],"wp_get_post_categories":[5117],"intval":[5117],"get_cat_name":[5122]},"used_by":[]},"wp_xmlrpc_server::mt_setPostCategories":{"doc":"\/**\n * Sets categories for a post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return bool True on success.\n *\/","file":"class-wp-xmlrpc-server.php","line":5140,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5142],"login":[5149],"__":[5155,5158],"get_post":[5154],"current_user_can":[5157],"wp_set_post_categories":[5165]},"used_by":[]},"wp_set_post_categories":{"doc":"\/**\n * Set categories for a post.\n *\n * If the post categories parameter is not set, then the default category is\n * going used.\n *\n * @since 2.1.0\n *\n * @param int $post_ID Post ID.\n * @param array $post_categories Optional. List of categories.\n * @return bool|mixed\n *\/","file":"post.php","line":3230,"missingDoc":false,"filters":[],"uses":{"get_post_type":[3232],"get_post_status":[3233],"get_option":[3237],"count":[3240],"reset":[3240],"is_array":[3235],"wp_set_post_terms":[3244]},"used_by":{"wp_xmlrpc_server::mt_setPostCategories":[5165],"wp_set_post_cats":[766],"wp_insert_post":[2904],"wp_insert_attachment":[4025]}},"wp_xmlrpc_server::mt_supportedMethods":{"doc":"\/**\n * Retrieve an array of methods supported by this server.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5178,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":[],"used_by":[]},"wp_xmlrpc_server::mt_supportedTextFilters":{"doc":"\/**\n * Retrieve an empty array because we don't support per-post text filters.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n *\/","file":"class-wp-xmlrpc-server.php","line":5197,"missingDoc":false,"filters":["'xmlrpc_call'","'xmlrpc_text_filters'"],"uses":[],"used_by":[]},"wp_xmlrpc_server::mt_getTrackbackPings":{"doc":"\/**\n * Retrieve trackbacks sent to a given post.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return mixed\n *\/","file":"class-wp-xmlrpc-server.php","line":5210,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"intval":[5214],"get_post":[5218],"__":[5221],"get_results":[5223],"prepare":[5223],"substr":[5232],"strpos":[5232]},"used_by":[]},"wp_xmlrpc_server::mt_publishPost":{"doc":"\/**\n * Sets a post's publish status to 'publish'.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return int\n *\/","file":"class-wp-xmlrpc-server.php","line":5252,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5254,5277],"login":[5260],"get_post":[5265],"__":[5267,5270],"current_user_can":[5269,5269],"wp_get_post_categories":[5275],"wp_update_post":[5279]},"used_by":[]},"wp_xmlrpc_server::pingback_ping":{"doc":"\/**\n * Retrieves a pingback and registers it.\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5296,"missingDoc":false,"filters":["'xmlrpc_call'","'pre_remote_source'","'pingback_post'"],"uses":{"escape":[5301,5434,5439,5442],"str_replace":[5308,5309,5310,5313,5386,5418,5431],"strpos":[5313,5402],"get_option":[5313],"__":[5315,5355,5362,5365,5369,5373,5381,5393,5429,5450],"parse_url":[5320],"preg_match":[5323,5328,5339,5390,5403],"explode":[5325,5330,5397],"preg_replace":[5341,5345,5387,5388,5411,5422],"is_string":[5343],"prepare":[5346,5372],"like_escape":[5346],"get_var":[5347],"intval":[5335],"url_to_postid":[5321,5364],"get_post":[5359],"pings_open":[5368],"get_results":[5372],"sleep":[5376],"wp_remote_fopen":[5379],"strip_tags":[5395,5419,5423],"preg_quote":[5399,5421],"substr":[5415],"strlen":[5414],"trim":[5420],"esc_html":[5433],"compact":[5445],"wp_new_comment":[5447],"sprintf":[5450]},"used_by":[]},"wp_remote_fopen":{"doc":"\/**\n * HTTP request for URI to retrieve content.\n *\n * @since 1.5.1\n * @uses wp_remote_get()\n *\n * @param string $uri URI\/URL of web page to retrieve.\n * @return bool|string HTTP content. False on failure.\n *\/","file":"functions.php","line":753,"missingDoc":false,"filters":[],"uses":{"parse_url":[754],"is_array":[756],"wp_remote_get":[762],"is_wp_error":[764],"wp_remote_retrieve_body":[767]},"used_by":{"wp_xmlrpc_server::pingback_ping":[5379]}},"wp_xmlrpc_server::pingback_extensions_getPingbacks":{"doc":"\/**\n * Retrieve array of URLs that pingbacked the given URL.\n *\n * Specs on http:\/\/www.aquarionics.com\/misc\/archives\/blogite\/0198.html\n *\n * @since 1.5.0\n *\n * @param array $args Method parameters.\n * @return array\n *\/","file":"class-wp-xmlrpc-server.php","line":5463,"missingDoc":false,"filters":["'xmlrpc_call'"],"uses":{"escape":[5469],"url_to_postid":[5473],"__":[5476,5483],"get_post":[5479],"get_results":[5486],"prepare":[5486]},"used_by":[]},"WP::add_query_var":{"doc":"\/**\n * Add name to list of public query variables.\n *\n * @since 2.1.0\n *\n * @param string $qv Query variable name.\n *\/","file":"class-wp.php","line":93,"missingDoc":false,"filters":[],"uses":{"in_array":[94]},"used_by":[]},"WP::set_query_var":{"doc":"\/**\n * Set the value of a query variable.\n *\n * @since 2.3.0\n *\n * @param string $key Query variable name.\n * @param mixed $value Query variable value.\n *\/","file":"class-wp.php","line":106,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP::parse_request":{"doc":"\/**\n * Parse request to find correct WordPress query.\n *\n * Sets up the query variables based on the request. There are also many\n * filters and actions that can be used to further manipulate the result.\n *\n * @since 2.0.0\n *\n * @param array|string $extra_query_vars Set the extra query variables.\n *\/","file":"class-wp.php","line":120,"missingDoc":false,"filters":["'do_parse_request'","'query_vars'","'request'","'parse_request'"],"uses":{"parse_str":[132,230],"is_array":[129,265,290],"wp_rewrite_rules":[137],"explode":[148,151],"str_replace":[149,165,285],"parse_url":[154],"home_url":[154],"trim":[159,166,168,169,171,172,174],"preg_replace":[167,170,173,222],"preg_match":[178,207,204,205],"strpos":[201,241,238],"get_page_by_path":[209],"urldecode":[205],"addslashes":[225],"is_object":[269],"get_post_types":[289],"in_array":[291],"array_intersect":[294]},"used_by":[]},"get_page_by_path":{"doc":"\/**\n * Retrieves a page given its path.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $page_path Page path\n * @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.\n * @param string $post_type Optional. Post type. Default page.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3452,"missingDoc":false,"filters":[],"uses":{"rawurlencode":[3455],"urldecode":[3455],"str_replace":[3456,3457],"explode":[3458],"trim":[3458],"array_map":[3459,3460],"implode":[3462],"escape_by_ref":[3464],"get_results":[3465],"array_reverse":[3467],"count":[3482],"get_post":[3491]},"used_by":{"WP::parse_request":[209],"WP_Query::parse_query":[1629],"WP_Query::get_posts":[2117,2123],"url_to_postid":[348]}},"WP::send_headers":{"doc":"\/**\n * Send additional HTTP headers for caching, content type, etc.\n *\n * Sets the X-Pingback header, 404 status (if 404), Content-type. If showing\n * a feed, it will also send last-modified, etag, and 304 status if needed.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":319,"missingDoc":false,"filters":["'wp_headers'","'send_headers'"],"uses":{"get_bloginfo":[320],"array_merge":[325,330],"wp_get_nocache_headers":[325,330],"is_user_logged_in":[324,329],"get_option":[331,331,336,336],"in_array":[332],"mysql2date":[350,352],"get_lastcommentmodified":[350],"get_lastpostmodified":[352],"md5":[353],"stripslashes":[359,359],"trim":[362],"strtotime":[364,367],"status_header":[380],"header_remove":[388],"stripos":[393],"headers_list":[392],"function_exists":[387],"header":[402]},"used_by":[]},"wp_get_nocache_headers":{"doc":"\/**\n * Gets the header information to prevent caching.\n *\n * The several different headers cover the different ways cache prevention is handled\n * by different browsers\n *\n * @since 2.8.0\n *\n * @uses apply_filters()\n * @return array The associative array of header names and field values.\n *\/","file":"functions.php","line":902,"missingDoc":false,"filters":["'nocache_headers'"],"uses":{"function_exists":[909]},"used_by":{"WP::send_headers":[325,330],"nocache_headers":[926]}},"get_lastcommentmodified":{"doc":"\/**\n * The date the last comment was modified.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param string $timezone Which timezone to use in reference to 'gmt', 'blog',\n *\t\tor 'server' locations.\n * @return string Last comment modified date.\n *\/","file":"comment.php","line":440,"missingDoc":false,"filters":[],"uses":{"date":[447],"strtolower":[449],"get_var":[451,454,457],"prepare":[457]},"used_by":{"WP::send_headers":[350],"__main":[27,31]}},"get_lastpostmodified":{"doc":"\/**\n * Retrieve last post modified date depending on timezone.\n *\n * The server timezone is the default and is the difference between GMT and\n * server time. The 'blog' value is just when the last post was modified. The\n * 'gmt' is when the last post was modified in GMT time.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'get_lastpostmodified' filter\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @return string The date the post was last modified.\n *\/","file":"post.php","line":4548,"missingDoc":false,"filters":["'get_lastpostmodified'"],"uses":{"_get_last_post_time":[4549],"get_lastpostdate":[4551]},"used_by":{"WP::send_headers":[352],"__main":[22,25,17,28]}},"status_header":{"doc":"\/**\n * Set HTTP status header.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'status_header' on status header string, HTTP\n *\t\tHTTP code, HTTP code description, and protocol string as separate\n *\t\tparameters.\n *\n * @param int $header HTTP status code\n * @return unknown\n *\/","file":"functions.php","line":875,"missingDoc":false,"filters":["'status_header'"],"uses":{"get_status_header_desc":[876],"function_exists":[885],"header":[888]},"used_by":{"WP::send_headers":[380],"WP::handle_404":[508,517,523,530],"_default_wp_die_handler":[2106],"dead_db":[2761],"send_origin_headers":[308],"__main":[22,28,77],"wp_redirect":[875]}},"WP::build_query_string":{"doc":"\/**\n * Sets the query string property based off of the query variable property.\n *\n * The 'query_string' filter is deprecated, but still works. Plugins should\n * use the 'request' filter instead.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":418,"missingDoc":false,"filters":["'query_string'"],"uses":{"strlen":[422],"is_scalar":[423],"rawurlencode":[425],"array_keys":[420],"parse_str":[432],"has_filter":[430]},"used_by":[]},"WP::register_globals":{"doc":"\/**\n * Set up the WordPress Globals.\n *\n * The query_vars property will be extracted to the GLOBALS. So care should\n * be taken when naming global variables that might interfere with the\n * WordPress environment.\n *\n * @global string $query_string Query string for the loop.\n * @global int $more Only set, if single page or post.\n * @global int $single If single page or post. Only set, if single page or post.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":449,"missingDoc":false,"filters":[],"uses":{"is_single":[461],"is_page":[461]},"used_by":[]},"WP::init":{"doc":"\/**\n * Set up the current user.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":472,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[473]},"used_by":[]},"WP::query_posts":{"doc":"\/**\n * Set up the Loop based on the query variables.\n *\n * @uses WP::$query_vars\n * @since 2.0.0\n *\/","file":"class-wp.php","line":482,"missingDoc":false,"filters":[],"uses":{"build_query_string":[484],"query":[485]},"used_by":[]},"WP::handle_404":{"doc":"\/**\n * Set the Headers for 404, if nothing is found for requested URL.\n *\n * Issue a 404 if a request doesn't match any posts and doesn't match\n * any object (e.g. an existing-but-empty category, tag, author) and a 404 was not already\n * issued, and if the request was not a search or the homepage.\n *\n * Otherwise, issue a 200.\n *\n * @since 2.0.0\n *\/","file":"class-wp.php","line":499,"missingDoc":false,"filters":[],"uses":{"is_404":[503],"status_header":[508,517,523,530],"is_admin":[507],"is_robots":[507],"is_tag":[516],"is_category":[516],"is_tax":[516],"is_author":[516],"is_post_type_archive":[516],"get_queried_object":[516],"is_home":[522],"is_search":[522],"is_paged":[513],"set_404":[529],"nocache_headers":[531]},"used_by":[]},"is_post_type_archive":{"doc":"\/**\n * Is the query for an existing post type archive page?\n *\n * @see WP_Query::is_post_type_archive()\n * @since 3.1.0\n * @uses $wp_query\n *\n * @param mixed $post_types Optional. Post type or array of posts types to check against.\n * @return bool\n *\/","file":"query.php","line":160,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[164],"__":[164],"is_post_type_archive":[168]},"used_by":{"WP::handle_404":[516],"wp_title":[557],"post_type_archive_title":[654],"feed_links_extra":[1666],"get_body_class":[454,543],"is_post_type_archive":[168]}},"is_paged":{"doc":"\/**\n * Is the query for paged result and not for the first page?\n *\n * @see WP_Query::is_paged()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":508,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[512],"__":[512],"is_paged":[516]},"used_by":{"WP::handle_404":[513],"get_post_class":[345],"get_body_class":[420],"wp_page_menu":[903],"is_paged":[516],"__main":[42,27]}},"nocache_headers":{"doc":"\/**\n * Sets the headers to prevent caching for the different browsers.\n *\n * Different browsers support different nocache headers, so several headers must\n * be sent so that all of them get the point that no caching should occur.\n *\n * @since 2.0.0\n * @uses wp_get_nocache_headers()\n *\/","file":"functions.php","line":925,"missingDoc":false,"filters":[],"uses":{"wp_get_nocache_headers":[926],"header_remove":[932],"stripos":[937],"headers_list":[936],"function_exists":[931],"header":[945]},"used_by":{"WP::handle_404":[531],"_default_wp_die_handler":[2107],"dead_db":[2762],"auth_redirect":[783]}},"WP::main":{"doc":"\/**\n * Sets up all of the variables required by the WordPress environment.\n *\n * The action 'wp' has one parameter that references the WP object. It\n * allows for accessing the properties and methods to further manipulate the\n * object.\n *\n * @since 2.0.0\n *\n * @param string|array $query_args Passed to {@link parse_request()}\n *\/","file":"class-wp.php","line":545,"missingDoc":false,"filters":["'wp'"],"uses":{"init":[546],"parse_request":[547],"send_headers":[548],"query_posts":[549],"handle_404":[550],"register_globals":[551]},"used_by":[]},"query_posts":{"doc":"\/**\n * Set up The Loop with query parameters.\n *\n * This will override the current WordPress Loop and shouldn't be used more than\n * once. This must not be used within the WordPress Loop.\n *\n * @since 1.5.0\n * @uses $wp_query\n *\n * @param string $query\n * @return array List of posts\n *\/","file":"query.php","line":89,"missingDoc":false,"filters":[],"uses":{"query":[91]},"used_by":{"WP::main":[549]}},"WP_MatchesMapRegex::WP_MatchesMapRegex":{"doc":"\/**\n * constructor\n *\n * @param string $subject subject if regex\n * @param array $matches data to use in map\n * @return self\n *\/","file":"class-wp.php","line":601,"missingDoc":false,"filters":[],"uses":{"_map":[604]},"used_by":[]},"WP_MatchesMapRegex::apply":{"doc":"\/**\n * Substitute substring matches in subject.\n *\n * static helper function to ease use\n *\n * @access public\n * @param string $subject subject\n * @param array $matches data used for substitution\n * @return string\n *\/","file":"class-wp.php","line":617,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_MatchesMapRegex::_map":{"doc":"\/**\n * do the actual mapping\n *\n * @access private\n * @return string\n *\/","file":"class-wp.php","line":628,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[630]},"used_by":[]},"WP_MatchesMapRegex::callback":{"doc":"\/**\n * preg_replace_callback hook\n *\n * @access public\n * @param array $matches preg_replace regexp matches\n * @return string\n *\/","file":"class-wp.php","line":640,"missingDoc":false,"filters":[],"uses":{"intval":[641],"substr":[641],"urlencode":[642]},"used_by":[]},"WP_Dependencies::do_items":{"doc":"\/**\n * Do the dependencies\n *\n * Process the items passed to it or the queue. Processes all dependencies.\n *\n * @param mixed $handles (optional) items to be processed. (void) processes queue, (string) process that item, (array of strings) process those items\n * @return array Items that have been processed\n *\/","file":"class.wp-dependencies.php","line":36,"missingDoc":false,"filters":[],"uses":{"all_deps":[39],"do_item":[49],"in_array":[42]},"used_by":[]},"WP_Dependencies::do_item":{"doc":"","file":"class.wp-dependencies.php","line":59,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::all_deps":{"doc":"\/**\n * Determines dependencies\n *\n * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops.\n *\n *\n * @param mixed $handles Accepts (string) dep name or (array of strings) dep names\n * @param bool $recursion Used internally when function calls itself\n *\/","file":"class.wp-dependencies.php","line":72,"missingDoc":false,"filters":[],"uses":{"explode":[77],"in_array":[79,81],"set_group":[84],"array_diff":[92],"array_keys":[92],"all_deps":[94]},"used_by":[]},"WP_Dependencies::add":{"doc":"\/**\n * Adds item\n *\n * Adds the item only if no item of that name already exists\n *\n * @param string $handle Script name\n * @param string $src Script url\n * @param array $deps (optional) Array of script names on which this script depends\n * @param string $ver (optional) Script version (used for cache busting)\n * @return array Hierarchical array of dependencies\n *\/","file":"class.wp-dependencies.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::add_data":{"doc":"\/**\n * Adds extra data\n *\n * Adds data only if script has already been added.\n *\n * @param string $handle Script name\n * @param string $key\n * @param mixed $value\n * @return bool success\n *\/","file":"class.wp-dependencies.php","line":144,"missingDoc":false,"filters":[],"uses":{"add_data":[148]},"used_by":[]},"WP_Dependencies::get_data":{"doc":"\/**\n * Get extra data\n *\n * Gets data associated with a certain handle.\n *\n * @since WP 3.3\n *\n * @param string $handle Script name\n * @param string $key\n * @return mixed\n *\/","file":"class.wp-dependencies.php","line":162,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::remove":{"doc":"","file":"class.wp-dependencies.php","line":172,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Dependencies::enqueue":{"doc":"","file":"class.wp-dependencies.php","line":177,"missingDoc":true,"filters":[],"uses":{"explode":[179],"in_array":[180]},"used_by":[]},"WP_Dependencies::dequeue":{"doc":"","file":"class.wp-dependencies.php","line":188,"missingDoc":true,"filters":[],"uses":{"explode":[190],"array_search":[191]},"used_by":[]},"WP_Dependencies::query":{"doc":"","file":"class.wp-dependencies.php","line":200,"missingDoc":true,"filters":[],"uses":{"in_array":[210,214,218]},"used_by":[]},"WP_Dependencies::set_group":{"doc":"","file":"class.wp-dependencies.php","line":223,"missingDoc":true,"filters":[],"uses":{"min":[227]},"used_by":[]},"_WP_Dependency::__construct":{"doc":"","file":"class.wp-dependencies.php","line":249,"missingDoc":true,"filters":[],"uses":{"func_get_args":[250],"is_array":[251]},"used_by":[]},"_WP_Dependency::add_data":{"doc":"","file":"class.wp-dependencies.php","line":255,"missingDoc":true,"filters":[],"uses":{"is_scalar":[256]},"used_by":[]},"WP_Scripts::__construct":{"doc":"","file":"class.wp-scripts.php","line":33,"missingDoc":true,"filters":[],"uses":{"init":[34],"add_action":[35]},"used_by":[]},"WP_Scripts::init":{"doc":"","file":"class.wp-scripts.php","line":38,"missingDoc":true,"filters":["'wp_default_scripts'"],"uses":[],"used_by":[]},"WP_Scripts::print_scripts":{"doc":"\/**\n * Prints scripts\n *\n * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies.\n *\n * @param mixed $handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts.\n * @param int $group (optional) If scripts were queued in groups prints this group number.\n * @return array Scripts that have been printed\n *\/","file":"class.wp-scripts.php","line":51,"missingDoc":false,"filters":[],"uses":{"do_items":[52]},"used_by":[]},"WP_Scripts::print_scripts_l10n":{"doc":"","file":"class.wp-scripts.php","line":56,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[57],"print_extra_script":[58]},"used_by":[]},"WP_Scripts::print_extra_script":{"doc":"","file":"class.wp-scripts.php","line":61,"missingDoc":true,"filters":[],"uses":{"get_data":[62]},"used_by":[]},"WP_Scripts::do_item":{"doc":"","file":"class.wp-scripts.php","line":77,"missingDoc":true,"filters":["'script_loader_src'","'script_loader_src'"],"uses":{"array_diff":[87],"in_array":[86],"print_extra_script":[102,112],"in_default_dir":[101],"preg_match":[113],"strpos":[113],"add_query_arg":[118],"esc_url":[120]},"used_by":[]},"WP_Scripts::localize":{"doc":"\/**\n * Localizes a script\n *\n * Localizes only if the script has already been added\n *\/","file":"class.wp-scripts.php","line":135,"missingDoc":false,"filters":[],"uses":{"is_array":[136],"is_scalar":[142],"html_entity_decode":[145],"json_encode":[148],"get_data":[153],"add_data":[158]},"used_by":[]},"WP_Scripts::set_group":{"doc":"","file":"class.wp-scripts.php","line":161,"missingDoc":true,"filters":[],"uses":{"get_data":[166]},"used_by":[]},"WP_Scripts::all_deps":{"doc":"","file":"class.wp-scripts.php","line":174,"missingDoc":true,"filters":["'print_scripts_array'"],"uses":[],"used_by":[]},"WP_Scripts::do_head_items":{"doc":"","file":"class.wp-scripts.php","line":181,"missingDoc":true,"filters":[],"uses":{"do_items":[182]},"used_by":[]},"WP_Scripts::do_footer_items":{"doc":"","file":"class.wp-scripts.php","line":186,"missingDoc":true,"filters":[],"uses":{"do_items":[187]},"used_by":[]},"WP_Scripts::in_default_dir":{"doc":"","file":"class.wp-scripts.php","line":191,"missingDoc":true,"filters":[],"uses":{"strpos":[195,199]},"used_by":[]},"WP_Scripts::reset":{"doc":"","file":"class.wp-scripts.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Styles::__construct":{"doc":"","file":"class.wp-styles.php","line":31,"missingDoc":true,"filters":["'wp_default_styles'"],"uses":[],"used_by":[]},"WP_Styles::do_item":{"doc":"","file":"class.wp-styles.php","line":35,"missingDoc":true,"filters":["'style_loader_tag'","'style_loader_tag'"],"uses":{"get_data":[53],"in_default_dir":[49],"esc_attr":[60,66],"_css_href":[64,78,80],"str_replace":[78],"is_bool":[76],"print_inline_style":[90,93]},"used_by":[]},"WP_Styles::add_inline_style":{"doc":"","file":"class.wp-styles.php","line":99,"missingDoc":true,"filters":[],"uses":{"get_data":[103],"add_data":[109]},"used_by":[]},"WP_Styles::print_inline_style":{"doc":"","file":"class.wp-styles.php","line":112,"missingDoc":true,"filters":[],"uses":{"get_data":[113],"implode":[118]},"used_by":[]},"WP_Styles::all_deps":{"doc":"","file":"class.wp-styles.php","line":130,"missingDoc":true,"filters":["'print_styles_array'"],"uses":[],"used_by":[]},"WP_Styles::_css_href":{"doc":"","file":"class.wp-styles.php","line":137,"missingDoc":true,"filters":["'style_loader_src'"],"uses":{"is_bool":[138],"preg_match":[138],"strpos":[138],"add_query_arg":[143],"esc_url":[145]},"used_by":[]},"WP_Styles::in_default_dir":{"doc":"","file":"class.wp-styles.php","line":148,"missingDoc":true,"filters":[],"uses":{"strpos":[153]},"used_by":[]},"WP_Styles::do_footer_items":{"doc":"","file":"class.wp-styles.php","line":159,"missingDoc":true,"filters":[],"uses":{"do_items":[160]},"used_by":[]},"WP_Styles::reset":{"doc":"","file":"class.wp-styles.php","line":164,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"get_comment_author":{"doc":"\/**\n * Retrieve the author of the current comment.\n *\n * If the comment has an empty comment_author field, then 'Anonymous' person is\n * assumed.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author' hook on the comment author\n *\n * @param int $comment_ID The ID of the comment for which to retrieve the author. Optional.\n * @return string The comment author\n *\/","file":"comment-template.php","line":23,"missingDoc":false,"filters":["'get_comment_author'"],"uses":{"get_comment":[24],"get_userdata":[27],"__":[30]},"used_by":{"comment_author":[47],"get_comment_author_link":[150],"comment_form_title":[1205,1205],"get_comment_author_rss":[257]}},"comment_author":{"doc":"\/**\n * Displays the author of the current comment.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'comment_author' on comment author before displaying\n *\n * @param int $comment_ID The ID of the comment for which to print the author. Optional.\n *\/","file":"comment-template.php","line":46,"missingDoc":false,"filters":["'comment_author'"],"uses":{"get_comment_author":[47]},"used_by":[]},"get_comment_author_email":{"doc":"\/**\n * Retrieve the email of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comment_author_email' hook on the comment author email\n * @uses $comment\n *\n * @param int $comment_ID The ID of the comment for which to get the author's email. Optional.\n * @return string The current comment author's email\n *\/","file":"comment-template.php","line":61,"missingDoc":false,"filters":["'get_comment_author_email'"],"uses":{"get_comment":[62]},"used_by":{"comment_author_email":[81]}},"comment_author_email":{"doc":"\/**\n * Display the email of the author of the current global $comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'author_email' hook on the author email\n *\n * @param int $comment_ID The ID of the comment for which to print the author's email. Optional.\n *\/","file":"comment-template.php","line":80,"missingDoc":false,"filters":["'author_email'"],"uses":{"get_comment_author_email":[81]},"used_by":[]},"comment_author_email_link":{"doc":"\/**\n * Display the html email link to the author of the current comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'comment_email' hook for the display of the comment author's email\n * @uses get_comment_author_email_link() For generating the link\n * @global object $comment The current Comment row object\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":102,"missingDoc":false,"filters":[],"uses":{"get_comment_author_email_link":[103]},"used_by":[]},"get_comment_author_email_link":{"doc":"\/**\n * Return the html email link to the author of the current comment.\n *\n * Care should be taken to protect the email address and assure that email\n * harvesters do not capture your commentors' email address. Most assume that\n * their email address will not appear in raw form on the blog. Doing so will\n * enable anyone, including those that people don't want to get the email\n * address and use it for their own means good and bad.\n *\n * @since 2.7\n * @uses apply_filters() Calls 'comment_email' hook for the display of the comment author's email\n * @global object $comment The current Comment row object\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":124,"missingDoc":false,"filters":["'comment_email'"],"uses":[],"used_by":{"comment_author_email_link":[103]}},"get_comment_author_link":{"doc":"\/**\n * Retrieve the html link to the url of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author_link' hook on the complete link HTML or author\n *\n * @param int $comment_ID The ID of the comment for which to get the author's link. Optional.\n * @return string Comment Author name or HTML link for author's URL\n *\/","file":"comment-template.php","line":147,"missingDoc":false,"filters":["'get_comment_author_link'"],"uses":{"get_comment_author_url":[149],"get_comment_author":[150]},"used_by":{"comment_author_link":[168],"Walker_Comment::start_el":[1354],"WP_Widget_Recent_Comments::widget":[694],"__main":[56]}},"get_comment_author_url":{"doc":"\/**\n * Retrieve the url of the author of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_author_url' hook on the comment author's URL\n *\n * @param int $comment_ID The ID of the comment for which to get the author's URL. Optional.\n * @return string\n *\/","file":"comment-template.php","line":207,"missingDoc":false,"filters":["'get_comment_author_url'"],"uses":{"get_comment":[208],"esc_url":[210]},"used_by":{"get_comment_author_link":[149],"comment_author_url":[224],"get_comment_author_url_link":[246],"__main":[61,61]}},"comment_author_link":{"doc":"\/**\n * Display the html link to the url of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_link() Echoes result\n *\n * @param int $comment_ID The ID of the comment for which to print the author's link. Optional.\n *\/","file":"comment-template.php","line":167,"missingDoc":false,"filters":[],"uses":{"get_comment_author_link":[168]},"used_by":[]},"get_comment_author_IP":{"doc":"\/**\n * Retrieve the IP address of the author of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters()\n *\n * @param int $comment_ID The ID of the comment for which to get the author's IP address. Optional.\n * @return string The comment author's IP address.\n *\/","file":"comment-template.php","line":181,"missingDoc":false,"filters":["'get_comment_author_IP'"],"uses":{"get_comment":[182]},"used_by":{"comment_author_IP":[195]}},"comment_author_IP":{"doc":"\/**\n * Display the IP address of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_IP() Echoes Result\n *\n * @param int $comment_ID The ID of the comment for which to print the author's IP address. Optional.\n *\/","file":"comment-template.php","line":194,"missingDoc":false,"filters":[],"uses":{"get_comment_author_IP":[195]},"used_by":[]},"comment_author_url":{"doc":"\/**\n * Display the url of the author of the current comment.\n *\n * @since 0.71\n * @uses apply_filters()\n * @uses get_comment_author_url() Retrieves the comment author's URL\n *\n * @param int $comment_ID The ID of the comment for which to print the author's URL. Optional.\n *\/","file":"comment-template.php","line":223,"missingDoc":false,"filters":["'comment_url'"],"uses":{"get_comment_author_url":[224]},"used_by":[]},"get_comment_author_url_link":{"doc":"\/**\n * Retrieves the HTML link of the url of the author of the current comment.\n *\n * $linktext parameter is only used if the URL does not exist for the comment\n * author. If the URL does exist then the URL will be used and the $linktext\n * will be ignored.\n *\n * Encapsulate the HTML link between the $before and $after. So it will appear\n * in the order of $before, link, and finally $after.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comment_author_url_link' on the complete HTML before returning.\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n * @return string The HTML link between the $before and $after parameters\n *\/","file":"comment-template.php","line":245,"missingDoc":false,"filters":["'get_comment_author_url_link'"],"uses":{"get_comment_author_url":[246],"str_replace":[248,249],"substr":[251,250]},"used_by":{"comment_author_url_link":[267]}},"comment_author_url_link":{"doc":"\/**\n * Displays the HTML link of the url of the author of the current comment.\n *\n * @since 0.71\n * @see get_comment_author_url_link() Echoes result\n *\n * @param string $linktext The text to display instead of the comment author's email address\n * @param string $before The text or HTML to display before the email link.\n * @param string $after The text or HTML to display after the email link.\n *\/","file":"comment-template.php","line":266,"missingDoc":false,"filters":[],"uses":{"get_comment_author_url_link":[267]},"used_by":[]},"comment_class":{"doc":"\/**\n * Generates semantic classes for each comment element\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list\n * @param int $comment_id An optional comment ID\n * @param int $post_id An optional post ID\n * @param bool $echo Whether comment_class should echo or return\n *\/","file":"comment-template.php","line":280,"missingDoc":false,"filters":[],"uses":{"join":[282],"get_comment_class":[282]},"used_by":{"Walker_Comment::start_el":[1348]}},"get_comment_class":{"doc":"\/**\n * Returns the classes for the comment div as an array\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list\n * @param int $comment_id An optional comment ID\n * @param int $post_id An optional post ID\n * @return array Array of classes\n *\/","file":"comment-template.php","line":299,"missingDoc":false,"filters":["'comment_class'"],"uses":{"get_comment":[302],"sanitize_html_class":[313],"get_post":[315],"get_userdata":[310],"preg_split":[352],"is_array":[351],"array_merge":[353],"array_map":[356]},"used_by":{"comment_class":[282]}},"sanitize_html_class":{"doc":"\/**\n * Sanitizes a html classname to ensure it only contains valid characters\n *\n * Strips the string down to A-Z,a-z,0-9,_,-. If this results in an empty\n * string then it will return the alternative value supplied.\n *\n * @todo Expand to support the full range of CDATA that a class attribute can contain.\n *\n * @since 2.8.0\n *\n * @param string $class The classname to be sanitized\n * @param string $fallback Optional. The value to return if the sanitization end's up as an empty string.\n * \tDefaults to an empty string.\n * @return string The sanitized value\n *\/","file":"formatting.php","line":1053,"missingDoc":false,"filters":["'sanitize_html_class'"],"uses":{"preg_replace":[1055,1058]},"used_by":{"get_comment_class":[313],"gallery_shortcode":[765],"get_post_class":[335,356,365],"get_body_class":[433,441,456,461,468,475,481,482,504]}},"get_comment_date":{"doc":"\/**\n * Retrieve the comment date of the current comment.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'get_comment_date' hook with the formatted date and the $d parameter respectively\n * @uses $comment\n *\n * @param string $d The format of the date (defaults to user's config)\n * @param int $comment_ID The ID of the comment for which to get the date. Optional.\n * @return string The comment's date\n *\/","file":"comment-template.php","line":372,"missingDoc":false,"filters":["'get_comment_date'"],"uses":{"get_comment":[373],"mysql2date":[375,377],"get_option":[375]},"used_by":{"comment_date":[390],"Walker_Comment::start_el":[1364],"__main":[56]}},"comment_date":{"doc":"\/**\n * Display the comment date of the current comment.\n *\n * @since 0.71\n *\n * @param string $d The format of the date (defaults to user's config)\n * @param int $comment_ID The ID of the comment for which to print the date. Optional.\n *\/","file":"comment-template.php","line":389,"missingDoc":false,"filters":[],"uses":{"get_comment_date":[390]},"used_by":[]},"get_comment_excerpt":{"doc":"\/**\n * Retrieve the excerpt of the current comment.\n *\n * Will cut each word and only output the first 20 words with '...' at the end.\n * If the word count is less than 20, then no truncating is done and no '...'\n * will appear.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls 'get_comment_excerpt' on truncated comment\n *\n * @param int $comment_ID The ID of the comment for which to get the excerpt. Optional.\n * @return string The maybe truncated comment with 20 words or less\n *\/","file":"comment-template.php","line":407,"missingDoc":false,"filters":["'get_comment_excerpt'"],"uses":{"get_comment":[408],"strip_tags":[409],"explode":[410],"count":[415,411]},"used_by":{"comment_excerpt":[435]}},"comment_excerpt":{"doc":"\/**\n * Display the excerpt of the current comment.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'comment_excerpt' hook before displaying excerpt\n *\n * @param int $comment_ID The ID of the comment for which to print the excerpt. Optional.\n *\/","file":"comment-template.php","line":434,"missingDoc":false,"filters":["'comment_excerpt'"],"uses":{"get_comment_excerpt":[435]},"used_by":[]},"get_comment_ID":{"doc":"\/**\n * Retrieve the comment id of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls the 'get_comment_ID' hook for the comment ID\n *\n * @return int The comment ID\n *\/","file":"comment-template.php","line":447,"missingDoc":false,"filters":["'get_comment_ID'"],"uses":[],"used_by":{"comment_ID":[459],"comment_form_title":[1205],"__main":[56]}},"comment_ID":{"doc":"\/**\n * Displays the comment id of the current comment.\n *\n * @since 0.71\n * @see get_comment_ID() Echoes Result\n *\/","file":"comment-template.php","line":458,"missingDoc":false,"filters":[],"uses":{"get_comment_ID":[459]},"used_by":{"Walker_Comment::start_el":[1348,1350],"__main":[54]}},"get_page_of_comment":{"doc":"\/**\n * Calculate what page number a comment will appear on for comment paging.\n *\n * @since 2.7.0\n * @uses get_comment() Gets the full comment of the $comment_ID parameter.\n * @uses get_option() Get various settings to control function and defaults.\n * @uses get_page_of_comment() Used to loop up to top level comment.\n *\n * @param int $comment_ID Comment ID.\n * @param array $args Optional args.\n * @return int|null Comment page number or null on error.\n *\/","file":"comment.php","line":825,"missingDoc":false,"filters":[],"uses":{"get_comment":[828],"wp_parse_args":[832],"get_query_var":[835],"get_option":[834,845,844],"get_page_of_comment":[852],"get_var":[863],"prepare":[863],"ceil":[870]},"used_by":{"get_comment_link":[497],"get_page_of_comment":[852]}},"get_comments_link":{"doc":"\/**\n * Retrieves the link to the current post comments.\n *\n * @since 1.5.0\n *\n * @param int $post_id Optional post id\n * @return string The link to the comments\n *\/","file":"comment-template.php","line":518,"missingDoc":false,"filters":[],"uses":{"get_permalink":[519]},"used_by":{"comments_link":[535],"comments_link_feed":[201]}},"comments_link":{"doc":"\/**\n * Displays the link to the current post comments.\n *\n * @since 0.71\n *\n * @param string $deprecated Not Used\n * @param bool $deprecated_2 Not Used\n *\/","file":"comment-template.php","line":530,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[532,534],"get_comments_link":[535]},"used_by":{"comments_popup_link":[1002]}},"get_comments_number":{"doc":"\/**\n * Retrieve the amount of comments a post has.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls the 'get_comments_number' hook on the number of comments\n *\n * @param int $post_id The Post ID\n * @return int The number of comments a post has\n *\/","file":"comment-template.php","line":547,"missingDoc":false,"filters":["'get_comments_number'"],"uses":{"absint":[548],"get_the_ID":[551],"get_post":[553]},"used_by":{"comments_number":[577],"comments_popup_link":[978],"__main":[50,51,52,55,26,27]}},"get_the_ID":{"doc":"\/**\n * Retrieve the ID of the current item in the WordPress Loop.\n *\n * @since 2.1.0\n * @uses $post\n *\n * @return int\n *\/","file":"post-template.php","line":28,"missingDoc":false,"filters":[],"uses":{"get_post":[29]},"used_by":{"get_comments_number":[551],"get_trackback_url":[710],"comments_popup_link":[971],"get_comment_id_fields":[1166],"WP_Widget_Recent_Posts::widget":[574],"get_post_comments_feed_link":[469],"the_ID":[17],"get_post_thumbnail_id":[33],"get_the_post_thumbnail":[86],"get_post_custom":[1853],"is_sticky":[1916]}},"comments_number":{"doc":"\/**\n * Display the language string for the number of comments the current post has.\n *\n * @since 0.71\n * @uses apply_filters() Calls the 'comments_number' hook on the output and number of comments respectively.\n *\n * @param string $zero Text for no comments\n * @param string $one Text for one comment\n * @param string $more Text for more than one comment\n * @param string $deprecated Not used.\n *\/","file":"comment-template.php","line":573,"missingDoc":false,"filters":["'comments_number'"],"uses":{"_deprecated_argument":[575],"get_comments_number":[577],"str_replace":[580],"number_format_i18n":[580],"__":[580,582,584]},"used_by":{"comments_popup_link":[1014]}},"get_comment_text":{"doc":"\/**\n * Retrieve the text of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n *\n * @param int $comment_ID The ID of the comment for which to get the text. Optional.\n * @return string The comment content\n *\/","file":"comment-template.php","line":598,"missingDoc":false,"filters":["'get_comment_text'"],"uses":{"get_comment":[599]},"used_by":{"comment_text":[614],"comment_text_rss":[281]}},"comment_text":{"doc":"\/**\n * Displays the text of the current comment.\n *\n * @since 0.71\n * @uses apply_filters() Passes the comment content through the 'comment_text' hook before display\n * @uses get_comment_text() Gets the comment content\n *\n * @param int $comment_ID The ID of the comment for which to print the text. Optional.\n *\/","file":"comment-template.php","line":612,"missingDoc":false,"filters":["'comment_text'"],"uses":{"get_comment":[613],"get_comment_text":[614]},"used_by":{"Walker_Comment::start_el":[1368],"__main":[71,58,55]}},"get_comment_time":{"doc":"\/**\n * Retrieve the comment time of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filter() Calls 'get_comment_time' hook with the formatted time, the $d parameter, and $gmt parameter passed.\n *\n * @param string $d Optional. The format of the time (defaults to user's config)\n * @param bool $gmt Whether to use the GMT date\n * @param bool $translate Whether to translate the time (for use in feeds)\n * @return string The formatted time\n *\/","file":"comment-template.php","line":629,"missingDoc":false,"filters":["'get_comment_time'"],"uses":{"mysql2date":[633,635],"get_option":[633]},"used_by":{"comment_time":[647],"Walker_Comment::start_el":[1364],"__main":[66,67,51,56]}},"comment_time":{"doc":"\/**\n * Display the comment time of the current comment.\n *\n * @since 0.71\n *\n * @param string $d Optional. The format of the time (defaults to user's config)\n *\/","file":"comment-template.php","line":646,"missingDoc":false,"filters":[],"uses":{"get_comment_time":[647]},"used_by":[]},"get_comment_type":{"doc":"\/**\n * Retrieve the comment type of the current comment.\n *\n * @since 1.5.0\n * @uses $comment\n * @uses apply_filters() Calls the 'get_comment_type' hook on the comment type\n *\n * @param int $comment_ID The ID of the comment for which to get the type. Optional.\n * @return string The comment type\n *\/","file":"comment-template.php","line":660,"missingDoc":false,"filters":["'get_comment_type'"],"uses":{"get_comment":[661]},"used_by":{"comment_type":[681]}},"comment_type":{"doc":"\/**\n * Display the comment type of the current comment.\n *\n * @since 0.71\n *\n * @param string $commenttxt The string to display for comment type\n * @param string $trackbacktxt The string to display for trackback type\n * @param string $pingbacktxt The string to display for pingback type\n *\/","file":"comment-template.php","line":677,"missingDoc":false,"filters":[],"uses":{"_x":[678],"__":[679,680],"get_comment_type":[681]},"used_by":{"__main":[56]}},"get_trackback_url":{"doc":"\/**\n * Retrieve The current post's trackback URL.\n *\n * There is a check to see if permalink's have been enabled and if so, will\n * retrieve the pretty path. If permalinks weren't enabled, the ID of the\n * current post is used and appended to the correct page to go to.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'trackback_url' on the resulting trackback URL\n *\n * @return string The trackback URL after being filtered\n *\/","file":"comment-template.php","line":706,"missingDoc":false,"filters":["'trackback_url'"],"uses":{"trailingslashit":[708],"get_permalink":[708],"user_trailingslashit":[708],"get_option":[710,707],"get_the_ID":[710]},"used_by":{"trackback_url":[728,730],"trackback_rdf":[759],"__main":[38]}},"trackback_url":{"doc":"\/**\n * Displays the current post's trackback URL.\n *\n * @since 0.71\n * @uses get_trackback_url() Gets the trackback url for the current post\n *\n * @param bool $deprecated_echo Remove backwards compat in 2.5\n * @return void|string Should only be used to echo the trackback URL, use get_trackback_url() for the result instead.\n *\/","file":"comment-template.php","line":724,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[726],"__":[726],"get_trackback_url":[728,730]},"used_by":[]},"trackback_rdf":{"doc":"\/**\n * Generates and displays the RDF for the trackback information of current post.\n *\n * Deprecated in 3.0.0, and restored in 3.0.1.\n *\n * @since 0.71\n *\n * @param int $deprecated Not used (Was $timezone = 0)\n *\/","file":"comment-template.php","line":742,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[744],"stripos":[746],"the_permalink":[753,756],"str_replace":[758],"wptexturize":[758],"strip_tags":[758],"get_the_title":[758],"get_trackback_url":[759]},"used_by":[]},"the_permalink":{"doc":"\/**\n * Display the permalink for the current post.\n *\n * @since 1.2.0\n * @uses apply_filters() Calls 'the_permalink' filter on the permalink string.\n *\/","file":"link-template.php","line":15,"missingDoc":false,"filters":["'the_permalink'"],"uses":{"get_permalink":[16]},"used_by":{"trackback_rdf":[753,756],"WP_Widget_Recent_Posts::widget":[574],"permalink_link":[864]}},"wp_comment_form_unfiltered_html_nonce":{"doc":"\/**\n * Displays form token for unfiltered comments.\n *\n * Will only display nonce token if the current user has permissions for\n * unfiltered html. Won't display the token for other users.\n *\n * The function was backported to 2.0.10 and was added to versions 2.1.3 and\n * above. Does not exist in versions prior to 2.0.10 in the 2.0 branch and in\n * the 2.1 branch, prior to 2.1.3. Technically added in 2.2.0.\n *\n * Backported to 2.0.10.\n *\n * @since 2.1.3\n * @uses $post Gets the ID of the current post for the token\n *\/","file":"comment-template.php","line":812,"missingDoc":false,"filters":[],"uses":{"get_post":[813],"wp_nonce_field":[817],"current_user_can":[816]},"used_by":[]},"comments_template":{"doc":"\/**\n * Loads the comment template specified in $file.\n *\n * Will not display the comments template if not on single post or page, or if\n * the post does not have comments.\n *\n * Uses the WordPress database object to query for the comments. The comments\n * are passed through the 'comments_array' filter hook with the list of comments\n * and the post ID respectively.\n *\n * The $file path is passed through a filter hook called, 'comments_template'\n * which includes the TEMPLATEPATH and $file combined. Tries the $filtered path\n * first and if it fails it will require the default comment template from the\n * default theme. If either does not exist, then the WordPress process will be\n * halted. It is advised for that reason, that the default theme is not deleted.\n *\n * @since 1.5.0\n * @global array $comment List of comment objects for the current post\n * @uses $wpdb\n * @uses $post\n * @uses $withcomments Will not try to get the comments if the post has none.\n *\n * @param string $file Optional, default '\/comments.php'. The file to load\n * @param bool $separate_comments Optional, whether to separate the comments by comment type. Default is false.\n * @return null Returns null if no comments appear\n *\/","file":"comment-template.php","line":848,"missingDoc":false,"filters":["'comments_array'","'comments_template'"],"uses":{"is_single":[851],"is_page":[851],"get_option":[857,903,902],"wp_get_current_commenter":[864],"esc_url":[879],"get_results":[883,887],"prepare":[883,887],"get_comments":[885],"wp_specialchars_decode":[887],"count":[893],"update_comment_cache":[894],"separate_comments":[897],"set_query_var":[903],"get_comment_pages_count":[903],"get_query_var":[902],"define":[908],"defined":[907],"file_exists":[913,911]},"used_by":[]},"wp_get_current_commenter":{"doc":"\/**\n * Get current commenter's name, email, and URL.\n *\n * Expects cookies content to already be sanitized. User of this function might\n * wish to recheck the returned array for validity.\n *\n * @see sanitize_comment_cookies() Use to sanitize cookies\n *\n * @since 2.0.4\n *\n * @return array Comment author, email, url respectively.\n *\/","file":"comment.php","line":1231,"missingDoc":false,"filters":["'wp_get_current_commenter'"],"uses":{"compact":[1246]},"used_by":{"comments_template":[864],"comment_form":[1517],"__main":[43]}},"wp_specialchars_decode":{"doc":"\/**\n * Converts a number of HTML entities into their special characters.\n *\n * Specifically deals with: &, <, >, \", and '.\n *\n * $quote_style can be set to ENT_COMPAT to decode \" entities,\n * or ENT_QUOTES to do both \" and '. Default is ENT_NOQUOTES where no quotes are decoded.\n *\n * @since 2.8\n *\n * @param string $string The text which is to be decoded.\n * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old _wp_specialchars() values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.\n * @return string The decoded text without HTML entities.\n *\/","file":"formatting.php","line":451,"missingDoc":false,"filters":[],"uses":{"strlen":[454],"strpos":[459],"in_array":[466],"array_merge":[479,480,482,483,485,486],"preg_replace":[493],"array_keys":[493],"array_values":[493],"strtr":[496]},"used_by":{"comments_template":[887],"_wp_specialchars":[416],"wp_notify_postauthor":[1014],"wp_notify_moderator":[1113],"wp_password_change_notification":[1182],"wp_new_user_notification":[1205]}},"update_comment_cache":{"doc":"\/**\n * Updates the comment cache of given comments.\n *\n * Will add the comments in $comments to the cache. If comment ID already exists\n * in the comment cache then it will not be updated. The comment is added to the\n * cache using the comment group with the key using the ID of the comments.\n *\n * @since 2.3.0\n * @package WordPress\n * @subpackage Cache\n *\n * @param array $comments Array of comment row objects\n *\/","file":"comment.php","line":1992,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[1994]},"used_by":{"comments_template":[894]}},"separate_comments":{"doc":"\/**\n * Separates an array of comments into an array keyed by comment_type.\n *\n * @since 2.7.0\n *\n * @param array $comments Array of comments\n * @return array Array of comments keyed by comment_type.\n *\/","file":"comment.php","line":753,"missingDoc":false,"filters":[],"uses":{"count":[755]},"used_by":{"comments_template":[897],"wp_list_comments":[1431,1443]}},"set_query_var":{"doc":"\/**\n * Set query variable.\n *\n * @see WP_Query::set()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @param string $var Query variable key.\n * @param mixed $value\n * @return null\n *\/","file":"query.php","line":71,"missingDoc":false,"filters":[],"uses":{"set":[74]},"used_by":{"comments_template":[903],"wp_list_comments":[1473]}},"get_comment_pages_count":{"doc":"\/**\n * Calculate the total number of comment pages.\n *\n * @since 2.7.0\n * @uses get_query_var() Used to fill in the default for $per_page parameter.\n * @uses get_option() Used to fill in defaults for parameters.\n * @uses Walker_Comment\n *\n * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments\n * @param int $per_page Optional comments per page.\n * @param boolean $threaded Optional control over flat or threaded comments.\n * @return int Number of comment pages.\n *\/","file":"comment.php","line":781,"missingDoc":false,"filters":[],"uses":{"is_array":[787],"get_query_var":[794],"get_option":[796,801],"ceil":[805,807],"get_number_of_root_elements":[805],"count":[807]},"used_by":{"comments_template":[903],"wp_list_comments":[1472],"get_next_comments_link":[1738],"paginate_comments_links":[1815]}},"comments_popup_script":{"doc":"\/**\n * Displays the JS popup script to show a comment.\n *\n * If the $file parameter is empty, then the home page is assumed. The defaults\n * for the window are 400px by 400px.\n *\n * For the comment link popup to work, this function has to be called or the\n * normal comment link will be assumed.\n *\n * @since 0.71\n * @global string $wpcommentspopupfile The URL to use for the popup window\n * @global int $wpcommentsjavascript Whether to use JavaScript. Set when function is called\n *\n * @param int $width Optional. The width of the popup window\n * @param int $height Optional. The height of the popup window\n * @param string $file Optional. Sets the location of the popup window\n *\/","file":"comment-template.php","line":936,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"comments_popup_link":{"doc":"\/**\n * Displays the link to the comments popup window for the current post ID.\n *\n * Is not meant to be displayed on single posts and pages. Should be used on the\n * lists of posts\n *\n * @since 0.71\n * @uses $wpcommentspopupfile\n * @uses $wpcommentsjavascript\n * @uses $post\n *\n * @param string $zero The string to display when no comments\n * @param string $one The string to display when only one comment is available\n * @param string $more The string to display when there are more than one comment\n * @param string $css_class The CSS class to use for comments\n * @param string $none The string to display when comments have been turned off\n * @return null Returns null on single posts and pages.\n *\/","file":"comment-template.php","line":968,"missingDoc":false,"filters":["'comments_popup_link_attributes'"],"uses":{"get_the_ID":[971],"__":[973,974,975,976,986,1013],"get_comments_number":[978],"esc_attr":[981,1013],"comments_open":[980],"pings_open":[980],"post_password_required":[985],"home_url":[993],"get_option":[995],"get_permalink":[1000],"comments_link":[1002],"the_title_attribute":[1009],"sprintf":[1013],"comments_number":[1014]},"used_by":[]},"post_password_required":{"doc":"\/**\n * Whether post requires password and correct password has been provided.\n *\n * @since 2.7.0\n *\n * @param int|object $post An optional post. Global $post used if not provided.\n * @return bool false if a password is not required or the correct password cookie is present, true otherwise.\n *\/","file":"post-template.php","line":569,"missingDoc":false,"filters":[],"uses":{"get_post":[572],"stripslashes":[586],"CheckPassword":[588]},"used_by":{"comments_popup_link":[985],"__main":[68,53,47,16],"rss_enclosure":[386],"atom_enclosure":[422],"get_the_content":[192],"get_the_excerpt":[266],"get_post_class":[341]}},"the_title_attribute":{"doc":"\/**\n * Sanitize the current title when retrieving or displaying.\n *\n * Works like {@link the_title()}, except the parameters can be in a string or\n * an array. See the function for what can be override in the $args parameter.\n *\n * The title before it is displayed will have the tags stripped and {@link\n * esc_attr()} before it is passed to the user or displayed. The default\n * as with {@link the_title()}, is to display the title.\n *\n * @since 2.3.0\n *\n * @param string|array $args Optional. Override the defaults.\n * @return string|null Null on failure or display. String when echo is false.\n *\/","file":"post-template.php","line":71,"missingDoc":false,"filters":[],"uses":{"get_the_title":[72],"strlen":[74],"wp_parse_args":[78],"extract":[79],"esc_attr":[82],"strip_tags":[82]},"used_by":{"comments_popup_link":[1009],"the_shortlink":[2430]}},"get_comment_reply_link":{"doc":"\/**\n * Retrieve HTML content for reply to comment link.\n *\n * The default arguments that can be override are 'add_below', 'respond_id',\n * 'reply_text', 'login_text', and 'depth'. The 'login_text' argument will be\n * used, if the user must log in or register first before posting a comment. The\n * 'reply_text' will be used, if they can post a reply. The 'add_below' and\n * 'respond_id' arguments are for the JavaScript moveAddCommentForm() function\n * parameters.\n *\n * @since 2.7.0\n *\n * @param array $args Optional. Override default options.\n * @param int $comment Optional. Comment being replied to.\n * @param int $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1035,"missingDoc":false,"filters":["'comment_reply_link'"],"uses":{"__":[1038,1039],"wp_parse_args":[1041],"extract":[1046],"get_comment":[1048],"get_post":[1051],"comments_open":[1053],"esc_url":[1059,1061],"wp_login_url":[1059],"get_permalink":[1059],"add_query_arg":[1061],"get_option":[1058]},"used_by":{"comment_reply_link":[1077]}},"wp_login_url":{"doc":"\/**\n * Returns the Log In URL.\n *\n * Returns the URL that allows the user to log in to the site\n *\n * @since 2.7.0\n * @uses site_url() To generate the log in URL\n * @uses apply_filters() calls 'login_url' hook on final login url\n *\n * @param string $redirect Path to redirect to on login.\n * @param bool $force_reauth Whether to force reauthorization, even if a cookie is present. Default is false.\n * @return string A log in URL.\n *\/","file":"general-template.php","line":237,"missingDoc":false,"filters":["'login_url'"],"uses":{"site_url":[238],"add_query_arg":[241,244],"urlencode":[241]},"used_by":{"get_comment_reply_link":[1059],"get_post_reply_link":[1110],"comment_form":[1536],"wp_loginout":[189],"wpmu_welcome_user_notification":[1292],"auth_redirect":[787],"wp_new_user_notification":[1218],"__main":[65]}},"comment_reply_link":{"doc":"\/**\n * Displays the HTML content for reply to comment link.\n *\n * @since 2.7.0\n * @see get_comment_reply_link() Echoes result\n *\n * @param array $args Optional. Override default options.\n * @param int $comment Optional. Comment being replied to.\n * @param int $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1076,"missingDoc":false,"filters":[],"uses":{"get_comment_reply_link":[1077]},"used_by":{"Walker_Comment::start_el":[1371]}},"get_post_reply_link":{"doc":"\/**\n * Retrieve HTML content for reply to post link.\n *\n * The default arguments that can be override are 'add_below', 'respond_id',\n * 'reply_text', 'login_text', and 'depth'. The 'login_text' argument will be\n * used, if the user must log in or register first before posting a comment. The\n * 'reply_text' will be used, if they can post a reply. The 'add_below' and\n * 'respond_id' arguments are for the JavaScript moveAddCommentForm() function\n * parameters.\n *\n * @since 2.7.0\n *\n * @param array $args Optional. Override default options.\n * @param int|object $post Optional. Post that the comment is going to be displayed on. Defaults to current post.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1096,"missingDoc":false,"filters":["'post_comments_link'"],"uses":{"__":[1099,1100],"wp_parse_args":[1102],"extract":[1103],"get_post":[1104],"comments_open":[1106],"wp_login_url":[1110],"get_permalink":[1110,1112],"get_option":[1109]},"used_by":{"post_reply_link":[1127]}},"post_reply_link":{"doc":"\/**\n * Displays the HTML content for reply to post link.\n * @since 2.7.0\n * @see get_post_reply_link()\n *\n * @param array $args Optional. Override default options.\n * @param int|object $post Optional. Post that the comment is going to be displayed on.\n * @return string|bool|null Link to show comment form, if successful. False, if comments are closed.\n *\/","file":"comment-template.php","line":1126,"missingDoc":false,"filters":[],"uses":{"get_post_reply_link":[1127]},"used_by":[]},"get_cancel_comment_reply_link":{"doc":"\/**\n * Retrieve HTML content for cancel comment reply link.\n *\n * @since 2.7.0\n *\n * @param string $text Optional. Text to display for cancel reply link.\n *\/","file":"comment-template.php","line":1137,"missingDoc":false,"filters":["'cancel_comment_reply_link'"],"uses":{"__":[1139],"esc_html":[1142],"remove_query_arg":[1142]},"used_by":{"cancel_comment_reply_link":[1154]}},"cancel_comment_reply_link":{"doc":"\/**\n * Display HTML content for cancel comment reply link.\n *\n * @since 2.7.0\n *\n * @param string $text Optional. Text to display for cancel reply link.\n *\/","file":"comment-template.php","line":1153,"missingDoc":false,"filters":[],"uses":{"get_cancel_comment_reply_link":[1154]},"used_by":{"comment_form":[1554],"__main":[61]}},"get_comment_id_fields":{"doc":"\/**\n * Retrieve hidden input HTML for replying to comments.\n *\n * @since 3.0.0\n *\n * @return string Hidden input HTML for replying to comments\n *\/","file":"comment-template.php","line":1164,"missingDoc":false,"filters":["'comment_id_fields'"],"uses":{"get_the_ID":[1166]},"used_by":{"comment_id_fields":[1181]}},"comment_id_fields":{"doc":"\/**\n * Output hidden input HTML for replying to comments.\n *\n * @since 2.7.0\n * @see get_comment_id_fields() Echoes result\n *\/","file":"comment-template.php","line":1180,"missingDoc":false,"filters":[],"uses":{"get_comment_id_fields":[1181]},"used_by":{"comment_form":[1578],"__main":[92]}},"comment_form_title":{"doc":"\/**\n * Display text based on comment reply status. Only affects users with Javascript disabled.\n *\n * @since 2.7.0\n *\n * @param string $noreplytext Optional. Text to display when not replying to a comment.\n * @param string $replytext Optional. Text to display when replying to a comment. Accepts \"%s\" for the author of the comment being replied to.\n * @param string $linktoparent Optional. Boolean to control making the author's name a link to their comment.\n *\/","file":"comment-template.php","line":1193,"missingDoc":false,"filters":[],"uses":{"__":[1196,1197],"get_comment":[1204],"get_comment_ID":[1205],"get_comment_author":[1205,1205],"printf":[1206]},"used_by":{"comment_form":[1554],"__main":[58]}},"Walker_Comment::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of comment.\n * @param array $args Uses 'style' argument for type of HTML list.\n *\/","file":"comment-template.php","line":1240,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Comment::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of comment.\n * @param array $args Will only append content if style argument value is 'ol' or 'ul'.\n *\/","file":"comment-template.php","line":1264,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_Comment::display_element":{"doc":"\/**\n * This function is designed to enhance Walker::display_element() to\n * display children of higher nesting levels than selected inline on\n * the highest depth level displayed. This prevents them being orphaned\n * at the end of the comment list.\n *\n * Example: max_depth = 2, with 5 levels of nested content.\n * 1\n * 1.1\n * 1.1.1\n * 1.1.1.1\n * 1.1.1.1.1\n * 1.1.2\n * 1.1.2.1\n * 2\n * 2.2\n *\n *\/","file":"comment-template.php","line":1298,"missingDoc":false,"filters":[],"uses":{"display_element":[1312]},"used_by":[]},"Walker_Comment::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $comment Comment data object.\n * @param int $depth Depth of comment in reference to parents.\n * @param array $args\n *\/","file":"comment-template.php","line":1328,"missingDoc":false,"filters":[],"uses":{"call_user_func":[1334],"extract":[1338],"comment_class":[1348],"comment_ID":[1348,1350],"get_avatar":[1353],"printf":[1354,1364],"__":[1354,1364,1364],"get_comment_author_link":[1354],"_e":[1357],"htmlspecialchars":[1361],"get_comment_link":[1361],"get_comment_date":[1364],"get_comment_time":[1364],"edit_comment_link":[1364],"comment_text":[1368],"comment_reply_link":[1371],"array_merge":[1371]},"used_by":[]},"edit_comment_link":{"doc":"\/**\n * Display or retrieve edit comment link with formatting.\n *\n * @since 1.0.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @return string|null HTML content, if $echo is set to false.\n *\/","file":"link-template.php","line":1000,"missingDoc":false,"filters":["'edit_comment_link'"],"uses":{"current_user_can":[1003],"__":[1007],"get_edit_comment_link":[1009],"esc_attr__":[1009]},"used_by":{"Walker_Comment::start_el":[1364]}},"Walker_Comment::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.7.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $comment\n * @param int $depth Depth of comment.\n * @param array $args\n *\/","file":"comment-template.php","line":1388,"missingDoc":false,"filters":[],"uses":{"call_user_func":[1390]},"used_by":[]},"wp_list_comments":{"doc":"\/**\n * List comments\n *\n * Used in the comments.php template to list comments for a particular post\n *\n * @since 2.7.0\n * @uses Walker_Comment\n *\n * @param string|array $args Formatting options\n * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments\n *\/","file":"comment-template.php","line":1412,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1423],"separate_comments":[1431,1443],"get_query_var":[1453,1469],"get_option":[1452,1462,1461,1472,1482],"get_comment_pages_count":[1472],"set_query_var":[1473],"intval":[1477],"extract":[1484],"paged_walk":[1489]},"used_by":{"__main":[35]}},"comment_form":{"doc":"\/**\n * Outputs a complete commenting form for use within a template.\n * Most strings and form fields may be controlled through the $args array passed\n * into the function, while you may also choose to use the comment_form_default_fields\n * filter to modify the array of default fields if you'd just like to add a new\n * one or remove a single field. All fields are also individually passed through\n * a filter of the form comment_form_field_$name where $name is the key used\n * in the array of fields.\n *\n * @since 3.0.0\n * @param array $args Options for strings, fields etc in the form\n * @param mixed $post_id Post ID to generate the form for, uses the current post if null\n * @return void\n *\/","file":"comment-template.php","line":1509,"missingDoc":false,"filters":["'comment_form_default_fields'","'the_permalink'","'the_permalink'","'comment_form_defaults'","'comment_form_before'","'comment_form_must_log_in_after'","'comment_form_top'","'comment_form_logged_in'","'comment_form_logged_in_after'","'comment_form_before_fields'","\"comment_form_field_{$name}\"","'comment_form_after_fields'","'comment_form_field_comment'","'comment_form'","'comment_form_after'","'comment_form_comments_closed'"],"uses":{"wp_get_current_commenter":[1517],"wp_get_current_user":[1518],"exists":[1519],"get_option":[1521,1555],"__":[1524,1526,1528,1532,1536,1537,1538,1539,1542,1543,1544,1545],"esc_attr":[1525,1527,1529,1559,1577,1577],"sprintf":[1532,1536,1537,1539],"_x":[1535],"wp_login_url":[1536],"get_permalink":[1536,1537],"get_edit_user_link":[1537],"wp_logout_url":[1537],"allowed_tags":[1539],"wp_parse_args":[1548],"comment_form_title":[1554],"cancel_comment_reply_link":[1554],"site_url":[1559],"is_user_logged_in":[1561,1555],"comment_id_fields":[1578],"comments_open":[1551]},"used_by":[]},"get_edit_user_link":{"doc":"\/**\n * Retrieve edit user link\n *\n * @since 3.5.0\n *\n * @param int $user_id Optional. User ID. Defaults to the current user.\n * @return string URL to edit user page or empty string.\n *\/","file":"link-template.php","line":1062,"missingDoc":false,"filters":["'get_edit_user_link'"],"uses":{"get_current_user_id":[1064,1074],"current_user_can":[1066],"get_userdata":[1069],"get_edit_profile_url":[1075],"add_query_arg":[1077],"self_admin_url":[1077]},"used_by":{"comment_form":[1537],"__main":[71,72]}},"allowed_tags":{"doc":"\/**\n * Display all of the allowed tags in HTML format with attributes.\n *\n * This is useful for displaying in the comment area, which elements and\n * attributes are supported. As well as any plugins which want to display it.\n *\n * @since 1.0.1\n * @uses $allowedtags\n *\n * @return string HTML allowed tags entity encoded.\n *\/","file":"general-template.php","line":1298,"missingDoc":false,"filters":[],"uses":{"count":[1303],"htmlentities":[1310]},"used_by":{"comment_form":[1539],"__main":[67,87]}},"check_comment":{"doc":"\/**\n * Checks whether a comment passes internal checks to be allowed to add.\n *\n * If comment moderation is set in the administration, then all comments,\n * regardless of their type and whitelist will be set to false. If the number of\n * links exceeds the amount in the administration, then the check fails. If any\n * of the parameter contents match the blacklist of words, then the check fails.\n *\n * If the number of links exceeds the amount in the administration, then the\n * check fails. If any of the parameter contents match the blacklist of words,\n * then the check fails.\n *\n * If the comment author was approved before, then the comment is\n * automatically whitelisted.\n *\n * If none of the checks fail, then the failback is to set the check to pass\n * (return true).\n *\n * @since 1.2.0\n * @uses $wpdb\n *\n * @param string $author Comment Author's name\n * @param string $email Comment Author's email\n * @param string $url Comment Author's URL\n * @param string $comment Comment contents\n * @param string $user_ip Comment Author's IP address\n * @param string $user_agent Comment Author's User Agent\n * @param string $comment_type Comment type, either user submitted comment,\n *\t\ttrackback, or pingback\n * @return bool Whether the checks passed (true) and the comments should be\n *\t\tdisplayed or set to moderated\n *\/","file":"comment.php","line":41,"missingDoc":false,"filters":["'comment_text'","'comment_max_links_url'"],"uses":{"get_option":[44,50,57,83],"preg_match_all":[51],"trim":[57,62],"explode":[59],"preg_quote":[70],"preg_match":[73,74,75,76,77,78],"get_var":[86],"strpos":[88]},"used_by":{"wp_allow_comment":[696]}},"get_approved_comments":{"doc":"\/**\n * Retrieve the approved comments for post $post_id.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param int $post_id The ID of the post\n * @return array $comments The approved comments\n *\/","file":"comment.php","line":108,"missingDoc":false,"filters":[],"uses":{"get_results":[110],"prepare":[110]},"used_by":{"__main":[45]}},"WP_Comment_Query::query":{"doc":"\/**\n * Execute the query\n *\n * @since 3.1.0\n *\n * @param string|array $query_vars\n * @return int|array\n *\/","file":"comment.php","line":210,"missingDoc":false,"filters":["'pre_get_comments'"],"uses":{"wp_parse_args":[241],"parse_query_vars":[245],"extract":[248],"md5":[251],"serialize":[251],"compact":[251,350,365],"array_keys":[251],"wp_cache_get":[252,257],"wp_cache_set":[254],"absint":[260,310,311],"prepare":[267,331,333,335,341,344,346,354],"strtoupper":[271],"is_array":[274],"preg_split":[274],"array_intersect":[297],"implode":[305],"get_search_sql":[348],"array_filter":[350],"get_sql":[358],"apply_filters_ref_array":[365,378],"get_var":[375],"get_results":[377],"wp_cache_add":[380]},"used_by":[]},"apply_filters_ref_array":{"doc":"\/**\n * Execute functions hooked on a specific filter hook, specifying arguments in an array.\n *\n * @see apply_filters() This function is identical, but the arguments passed to the\n * functions hooked to <tt>$tag<\/tt> are supplied using an array.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 3.0.0\n * @global array $wp_filter Stores all of the filters\n * @global array $merged_filters Merges the filter hooks using this function.\n * @global array $wp_current_filter stores the list of current filters with the current one last\n *\n * @param string $tag The name of the filter hook.\n * @param array $args The arguments supplied to the functions hooked to <tt>$tag<\/tt>\n * @return mixed The filtered value after all hooked functions are applied to it.\n *\/","file":"plugin.php","line":200,"missingDoc":false,"filters":[],"uses":{"func_get_args":[206],"_wp_call_all_hook":[207],"array_pop":[212,234],"ksort":[221],"reset":[225],"next":[232],"call_user_func_array":[230],"array_slice":[230],"is_null":[229],"current":[228]},"used_by":{"WP_Comment_Query::query":[365,378],"WP_Meta_Query::get_sql":[830],"WP_Query::get_posts":[2209,2523,2524,2555,2556,2557,2558,2559,2585,2586,2587,2588,2589,2590,2591,2594,2604,2605,2606,2607,2608,2609,2610,2613,2630,2683,2686,2687,2688,2690,2692,2727,2772],"WP_Query::set_found_posts":[2809,2813]}},"WP_Comment_Query::get_search_sql":{"doc":"","file":"comment.php","line":395,"missingDoc":true,"filters":[],"uses":{"esc_sql":[396],"like_escape":[396],"implode":[402]},"used_by":[]},"esc_sql":{"doc":"\/**\n * Escapes data for use in a MySQL query\n *\n * This is just a handy shortcut for $wpdb->escape(), for completeness' sake\n *\n * @since 2.8.0\n * @param string $sql Unescaped SQL data\n * @return string The cleaned $sql\n *\/","file":"formatting.php","line":2558,"missingDoc":false,"filters":[],"uses":{"escape":[2560]},"used_by":{"WP_Comment_Query::get_search_sql":[396],"wp_update_comment":[1498],"addslashes_gpc":[1401],"wp_rel_nofollow":[1697],"add_metadata":[43],"update_metadata":[113],"delete_metadata":[196],"update_metadata_by_mid":[400],"delete_metadata_by_mid":[481],"update_meta_cache":[531],"WP_Meta_Query::get_sql":[709],"wp_unique_post_slug":[3118],"WP_Query::get_posts":[2196],"WP_Tax_Query::transform_query":[788],"_pad_term_counts":[2874],"_update_post_term_count":[2934],"WP_User_Query::prepare_query":[401],"WP_User_Query::get_search_sql":[612],"wp_create_user":[1507,1508]}},"get_comment_count":{"doc":"\/**\n * The amount of comments in a post or total comments.\n *\n * A lot like {@link wp_count_comments()}, in that they both return comment\n * stats (albeit with different types). The {@link wp_count_comments()} actual\n * caches, but this function does not.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param int $post_id Optional. Comment amount in post if > 0, else total comments blog wide.\n * @return array The amount of spam, approved, awaiting moderation, and total comments.\n *\/","file":"comment.php","line":479,"missingDoc":false,"filters":[],"uses":{"prepare":[486],"get_results":[489]},"used_by":[]},"add_comment_meta":{"doc":"\/**\n * Add meta data field to a comment.\n *\n * @since 2.9.0\n * @uses add_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"comment.php","line":542,"missingDoc":false,"filters":[],"uses":{"add_metadata":[543]},"used_by":{"wp_trash_comment":[1057,1058],"wp_spam_comment":[1113]}},"add_metadata":{"doc":"\/**\n * Add metadata for the specified object.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'added_{$meta_type}_meta' with meta_id of added metadata entry,\n * \t\tobject ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Metadata value\n * @param bool $unique Optional, default is false. Whether the specified metadata key should be\n * \t\tunique for the object. If true, and the object already has a value for the specified\n * \t\tmetadata key, no change will be made\n * @return bool The meta ID on successful update, false on failure.\n *\/","file":"meta.php","line":31,"missingDoc":false,"filters":["\"add_{$meta_type}_metadata\"","\"add_{$meta_type}_meta\"","\"added_{$meta_type}_meta\""],"uses":{"absint":[35],"_get_meta_table":[38],"esc_sql":[43],"stripslashes":[46],"stripslashes_deep":[47],"sanitize_meta":[48],"get_var":[54],"prepare":[54],"maybe_serialize":[60],"insert":[64],"wp_cache_delete":[75]},"used_by":{"add_comment_meta":[543],"update_metadata":[136],"add_post_meta":[1755],"add_user_meta":[800]}},"delete_comment_meta":{"doc":"\/**\n * Remove metadata matching criteria from a comment.\n *\n * You can match based on the key, or key and value. Removing based on key and\n * value, will keep from removing duplicate metadata with the same key. It also\n * allows removing all metadata matching key, if needed.\n *\n * @since 2.9.0\n * @uses delete_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/delete_comment_meta\n *\n * @param int $comment_id comment ID\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Optional. Metadata value.\n * @return bool False for failure. True for success.\n *\/","file":"comment.php","line":562,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[563]},"used_by":{"wp_untrash_comment":[1087,1088],"wp_unspam_comment":[1142],"wp_scheduled_delete":[3503,3504]}},"delete_metadata":{"doc":"\/**\n * Delete metadata for the specified object.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'deleted_{$meta_type}_meta' after deleting with meta_id of\n * \t\tdeleted metadata entries, object ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Optional. Metadata value. If specified, only delete metadata entries\n * \t\twith this value. Otherwise, delete all entries with the specified meta_key.\n * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries\n * \t\tfor all objects, ignoring the specified object_id. Otherwise, only delete matching\n * \t\tmetadata entries for the specified object_id.\n * @return bool True on successful delete, false on failure.\n *\/","file":"meta.php","line":184,"missingDoc":false,"filters":["\"delete_{$meta_type}_metadata\"","\"delete_{$meta_type}_meta\"","'delete_postmeta'","\"deleted_{$meta_type}_meta\"","'deleted_postmeta'"],"uses":{"absint":[188],"_get_meta_table":[191],"esc_sql":[196],"stripslashes":[199],"stripslashes_deep":[200],"maybe_serialize":[207],"prepare":[209,212,215,222],"get_col":[217,222],"count":[218],"implode":[230],"query":[232],"wp_cache_delete":[239,242]},"used_by":{"delete_comment_meta":[563],"install_blog":[1168,1169],"delete_post_meta":[1779],"delete_post_meta_by_key":[1835],"wp_delete_attachment":[4109],"delete_user_meta":[820]}},"get_comment_meta":{"doc":"\/**\n * Retrieve comment meta field for a comment.\n *\n * @since 2.9.0\n * @uses get_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.\n * @param bool $single Whether to return a single value.\n * @return mixed Will be an array if $single is false. Will be value of meta data field if $single\n * is true.\n *\/","file":"comment.php","line":579,"missingDoc":false,"filters":[],"uses":{"get_metadata":[580]},"used_by":{"wp_untrash_comment":[1082],"wp_unspam_comment":[1137]}},"get_metadata":{"doc":"\/**\n * Retrieve metadata for the specified object.\n *\n * @since 2.9.0\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for\n * \t\tthe specified object.\n * @param bool $single Optional, default is false. If true, return only the first value of the\n * \t\tspecified meta_key. This parameter has no effect if meta_key is not specified.\n * @return string|array Single metadata value, or array of values\n *\/","file":"meta.php","line":267,"missingDoc":false,"filters":["\"get_{$meta_type}_metadata\""],"uses":{"absint":[271],"is_array":[276],"wp_cache_get":[282],"update_meta_cache":[285],"maybe_unserialize":[294],"array_map":[296]},"used_by":{"get_comment_meta":[580],"update_metadata":[128],"get_post_meta":[1796],"get_user_meta":[837]}},"update_comment_meta":{"doc":"\/**\n * Update comment meta field based on comment ID.\n *\n * Use the $prev_value parameter to differentiate between meta fields with the\n * same key and comment ID.\n *\n * If the meta field for the comment does not exist, it will be added.\n *\n * @since 2.9.0\n * @uses update_metadata\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/update_comment_meta\n *\n * @param int $comment_id Comment ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @param mixed $prev_value Optional. Previous value to check before removing.\n * @return bool False on failure, true if success.\n *\/","file":"comment.php","line":601,"missingDoc":false,"filters":[],"uses":{"update_metadata":[602]},"used_by":[]},"update_metadata":{"doc":"\/**\n * Update metadata for the specified object. If no value already exists for the specified object\n * ID and metadata key, the metadata will be added.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n * @uses do_action() Calls 'update_{$meta_type}_meta' before updating metadata with meta_id of\n * \t\tmetadata entry to update, object ID, meta key, and meta value\n * @uses do_action() Calls 'updated_{$meta_type}_meta' after updating metadata with meta_id of\n * \t\tupdated metadata entry, object ID, meta key, and meta value\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int $object_id ID of the object metadata is for\n * @param string $meta_key Metadata key\n * @param string $meta_value Metadata value\n * @param string $prev_value Optional. If specified, only update existing metadata entries with\n * \t\tthe specified value. Otherwise, update all entries.\n * @return bool True on successful update, false on failure.\n *\/","file":"meta.php","line":101,"missingDoc":false,"filters":["\"update_{$meta_type}_metadata\"","\"update_{$meta_type}_meta\"","'update_postmeta'","\"updated_{$meta_type}_meta\"","'updated_postmeta'"],"uses":{"absint":[105],"_get_meta_table":[108],"esc_sql":[113],"stripslashes":[117],"stripslashes_deep":[119],"sanitize_meta":[120],"get_metadata":[128],"count":[129],"add_metadata":[136],"get_var":[135],"prepare":[135],"maybe_serialize":[139,145],"compact":[141],"update":[154],"wp_cache_delete":[156]},"used_by":{"update_comment_meta":[602],"update_post_meta":[1822],"update_user_meta":[859]}},"wp_set_comment_cookies":{"doc":"\/**\n * Sets the cookies used to store an unauthenticated commentator's identity. Typically used\n * to recall previous comments by this commentator that are still held in moderation.\n *\n * @param object $comment Comment object.\n * @param object $user Comment author's object.\n *\n * @since 3.4.0\n *\/","file":"comment.php","line":614,"missingDoc":false,"filters":["'comment_cookie_lifetime'"],"uses":{"exists":[615],"setcookie":[619,620,621],"time":[619,620,621],"esc_url":[621]},"used_by":[]},"sanitize_comment_cookies":{"doc":"\/**\n * Sanitizes the cookies sent to the user already.\n *\n * Will only do anything if the cookies have already been created for the user.\n * Mostly used after cookies had been sent to use elsewhere.\n *\n * @since 2.0.4\n *\/","file":"comment.php","line":632,"missingDoc":false,"filters":["'pre_comment_author_name'","'pre_comment_author_email'","'pre_comment_author_url'"],"uses":{"stripslashes":[635,642,649],"esc_attr":[636,643]},"used_by":[]},"wp_allow_comment":{"doc":"\/**\n * Validates whether this comment is allowed to be made.\n *\n * @since 2.0.0\n * @uses $wpdb\n * @uses apply_filters() Calls 'pre_comment_approved' hook on the type of comment\n * @uses apply_filters() Calls 'comment_duplicate_trigger' hook on commentdata.\n * @uses do_action() Calls 'check_comment_flood' hook on $comment_author_IP, $comment_author_email, and $comment_date_gmt\n *\n * @param array $commentdata Contains information on the comment\n * @return mixed Signifies the approval status (0|1|'spam')\n *\/","file":"comment.php","line":666,"missingDoc":false,"filters":["'comment_duplicate_trigger'","'check_comment_flood'","'pre_comment_approved'"],"uses":{"extract":[668],"__":[679,681],"defined":[678],"wp_die":[681],"get_var":[676,688],"get_userdata":[687],"prepare":[688],"check_comment":[696],"wp_blacklist_check":[700],"has_cap":[691]},"used_by":{"wp_new_comment":[1398]}},"wp_blacklist_check":{"doc":"\/**\n * Does comment contain blacklisted characters or words.\n *\n * @since 1.5.0\n * @uses do_action() Calls 'wp_blacklist_check' hook for all parameters.\n *\n * @param string $author The author of the comment\n * @param string $email The email of the comment\n * @param string $url The url used in the comment\n * @param string $comment The comment content\n * @param string $user_ip The comment author IP address\n * @param string $user_agent The author's browser user agent\n * @return bool True if comment contains blacklisted content, false if comment does not\n *\/","file":"comment.php","line":887,"missingDoc":false,"filters":["'wp_blacklist_check'"],"uses":{"trim":[890,896],"get_option":[890],"explode":[893],"preg_quote":[903],"preg_match":[907,908,909,910,911,912]},"used_by":{"wp_allow_comment":[700]}},"check_comment_flood_db":{"doc":"\/**\n * Check whether comment flooding is occurring.\n *\n * Won't run, if current user can manage options, so to not block\n * administrators.\n *\n * @since 2.3.0\n * @uses $wpdb\n * @uses apply_filters() Calls 'comment_flood_filter' filter with first\n *\t\tparameter false, last comment timestamp, new comment timestamp.\n * @uses do_action() Calls 'comment_flood_trigger' action with parameters with\n *\t\tlast comment timestamp and new comment timestamp.\n *\n * @param string $ip Comment IP.\n * @param string $email Comment author email address.\n * @param string $date MySQL time string.\n *\/","file":"comment.php","line":725,"missingDoc":false,"filters":["'comment_flood_filter'","'comment_flood_trigger'"],"uses":{"current_user_can":[727],"gmdate":[729],"time":[729],"mysql2date":[731,732],"__":[738,740],"defined":[737],"wp_die":[740],"get_var":[730],"prepare":[730]},"used_by":[]},"wp_trash_comment":{"doc":"\/**\n * Moves a comment to the Trash\n *\n * If trash is disabled, comment is permanently deleted.\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_comment' before trashing\n * @uses do_action() on 'trashed_comment' after trashing\n * @uses wp_delete_comment() if trash is disabled\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1047,"missingDoc":false,"filters":["'trash_comment'","'trashed_comment'"],"uses":{"wp_delete_comment":[1049],"get_comment":[1051],"add_comment_meta":[1057,1058],"time":[1058],"wp_set_comment_status":[1056]},"used_by":{"wp_delete_comment":[1003]}},"wp_get_comment_status":{"doc":"\/**\n * The status of a comment by ID.\n *\n * @since 1.0.0\n *\n * @param int $comment_id Comment ID\n * @return string|bool Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure.\n *\/","file":"comment.php","line":1158,"missingDoc":false,"filters":[],"uses":{"get_comment":[1159]},"used_by":{"wp_delete_comment":[1002],"wp_new_comment":[1387]}},"clean_comment_cache":{"doc":"\/**\n * Removes comment ID from the comment cache.\n *\n * @since 2.3.0\n * @package WordPress\n * @subpackage Cache\n *\n * @param int|array $ids Comment ID or array of comment IDs to remove from cache\n *\/","file":"comment.php","line":1967,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[1969],"wp_cache_incr":[1972],"wp_cache_get":[1974],"wp_cache_set":[1975],"function_exists":[1971]},"used_by":{"wp_delete_comment":[1011,1027],"wp_set_comment_status":[1467],"wp_update_comment":[1524],"wp_trash_post_comments":[2491],"wp_untrash_post_comments":[2537]}},"wp_update_comment_count":{"doc":"\/**\n * Updates the comment count for post(s).\n *\n * When $do_deferred is false (is by default) and the comments have been set to\n * be deferred, the post_id will be added to a queue, which will be updated at a\n * later date and only updated once per post ID.\n *\n * If the comments have not be set up to be deferred, then the post will be\n * updated. When $do_deferred is set to true, then all previous deferred post\n * IDs will be updated along with the current $post_id.\n *\n * @since 2.1.0\n * @see wp_update_comment_count_now() For what could cause a false return value\n *\n * @param int $post_id Post ID\n * @param bool $do_deferred Whether to process previously deferred post comment counts\n * @return bool True on success, false on failure\n *\/","file":"comment.php","line":1577,"missingDoc":false,"filters":[],"uses":{"array_unique":[1581],"wp_update_comment_count_now":[1583,1593],"wp_defer_comment_counting":[1588]},"used_by":{"wp_delete_comment":[1025],"wp_insert_comment":[1288],"wp_set_comment_status":[1474],"wp_update_comment":[1525],"wp_defer_comment_counting":[1553]}},"wp_transition_comment_status":{"doc":"\/**\n * Call hooks for when a comment status transition occurs.\n *\n * Calls hooks for comment status transitions. If the new comment status is not the same\n * as the previous comment status, then two hooks will be ran, the first is\n * 'transition_comment_status' with new status, old status, and comment data. The\n * next action called is 'comment_OLDSTATUS_to_NEWSTATUS' the NEWSTATUS is the\n * $new_status parameter and the OLDSTATUS is $old_status parameter; it has the\n * comment data.\n *\n * The final action will run whether or not the comment statuses are the same. The\n * action is named 'comment_NEWSTATUS_COMMENTTYPE', NEWSTATUS is from the $new_status\n * parameter and COMMENTTYPE is comment_type comment data.\n *\n * @since 2.7.0\n *\n * @param string $new_status New comment status.\n * @param string $old_status Previous comment status.\n * @param object $comment Comment data.\n *\/","file":"comment.php","line":1199,"missingDoc":false,"filters":["'transition_comment_status'","\"comment_{$old_status}_to_{$new_status}\"","\"comment_{$new_status}_{$comment->comment_type}\""],"uses":[],"used_by":{"wp_delete_comment":[1030],"wp_set_comment_status":[1472],"wp_update_comment":[1528]}},"wp_set_comment_status":{"doc":"\/**\n * Sets the status of a comment.\n *\n * The 'wp_set_comment_status' action is called after the comment is handled.\n * If the comment status is not in the list, then false is returned.\n *\n * @since 1.0.0\n * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object\n *\n * @param int $comment_id Comment ID.\n * @param string $comment_status New comment status, either 'hold', 'approve', 'spam', or 'trash'.\n * @param bool $wp_error Whether to return a WP_Error object if there is a failure. Default is false.\n * @return bool False on failure or deletion and true on success.\n *\/","file":"comment.php","line":1431,"missingDoc":false,"filters":["'wp_set_comment_status'"],"uses":{"get_comment":[1444,1458,1469],"wp_notify_postauthor":[1445],"get_option":[1443],"__":[1462],"update":[1460],"clean_comment_cache":[1467],"wp_transition_comment_status":[1472],"wp_update_comment_count":[1474]},"used_by":{"wp_trash_comment":[1056],"wp_untrash_comment":[1086],"wp_spam_comment":[1112],"wp_unspam_comment":[1141]}},"wp_untrash_comment":{"doc":"\/**\n * Removes a comment from the Trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_comment' before untrashing\n * @uses do_action() on 'untrashed_comment' after untrashing\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1076,"missingDoc":false,"filters":["'untrash_comment'","'untrashed_comment'"],"uses":{"get_comment_meta":[1082],"delete_comment_meta":[1087,1088],"wp_set_comment_status":[1086]},"used_by":[]},"wp_spam_comment":{"doc":"\/**\n * Marks a comment as Spam\n *\n * @since 2.9.0\n * @uses do_action() on 'spam_comment' before spamming\n * @uses do_action() on 'spammed_comment' after spamming\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1106,"missingDoc":false,"filters":["'spam_comment'","'spammed_comment'"],"uses":{"get_comment":[1107],"add_comment_meta":[1113],"wp_set_comment_status":[1112]},"used_by":[]},"wp_unspam_comment":{"doc":"\/**\n * Removes a comment from the Spam\n *\n * @since 2.9.0\n * @uses do_action() on 'unspam_comment' before unspamming\n * @uses do_action() on 'unspammed_comment' after unspamming\n *\n * @param int $comment_id Comment ID.\n * @return mixed False on failure\n *\/","file":"comment.php","line":1131,"missingDoc":false,"filters":["'unspam_comment'","'unspammed_comment'"],"uses":{"get_comment_meta":[1137],"delete_comment_meta":[1142],"wp_set_comment_status":[1141]},"used_by":[]},"wp_insert_comment":{"doc":"\/**\n * Inserts a comment to the database.\n *\n * The available comment data key names are 'comment_author_IP', 'comment_date',\n * 'comment_date_gmt', 'comment_parent', 'comment_approved', and 'user_id'.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @param array $commentdata Contains information on the comment.\n * @return int The new comment's ID.\n *\/","file":"comment.php","line":1261,"missingDoc":false,"filters":["'wp_insert_comment'"],"uses":{"extract":[1263],"stripslashes_deep":[1263],"current_time":[1268],"get_gmt_from_date":[1270],"compact":[1282],"insert":[1283],"wp_update_comment_count":[1288],"get_comment":[1290],"wp_cache_incr":[1294],"wp_cache_get":[1296],"wp_cache_set":[1297],"function_exists":[1293]},"used_by":{"wp_new_comment":[1400]}},"wp_filter_comment":{"doc":"\/**\n * Filters and sanitizes comment data.\n *\n * Sets the comment data 'filtered' field to true when finished. This can be\n * checked as to whether the comment should be filtered and to keep from\n * filtering the same comment more than once.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'pre_user_id' hook on comment author's user ID\n * @uses apply_filters() Calls 'pre_comment_user_agent' hook on comment author's user agent\n * @uses apply_filters() Calls 'pre_comment_author_name' hook on comment author's name\n * @uses apply_filters() Calls 'pre_comment_content' hook on the comment's content\n * @uses apply_filters() Calls 'pre_comment_user_ip' hook on comment author's IP\n * @uses apply_filters() Calls 'pre_comment_author_url' hook on comment author's URL\n * @uses apply_filters() Calls 'pre_comment_author_email' hook on comment author's email address\n *\n * @param array $commentdata Contains information on the comment.\n * @return array Parsed comment information.\n *\/","file":"comment.php","line":1322,"missingDoc":false,"filters":["'pre_user_id'","'pre_user_id'","'pre_comment_user_agent'","'pre_comment_author_name'","'pre_comment_content'","'pre_comment_user_ip'","'pre_comment_author_url'","'pre_comment_author_email'"],"uses":[],"used_by":{"wp_new_comment":[1396],"wp_update_comment":[1505]}},"wp_throttle_comment_flood":{"doc":"\/**\n * Whether comment should be blocked because of comment flood.\n *\n * @since 2.1.0\n *\n * @param bool $block Whether plugin has already blocked comment.\n * @param int $time_lastcomment Timestamp for last comment.\n * @param int $time_newcomment Timestamp for new comment.\n * @return bool Whether comment should be blocked.\n *\/","file":"comment.php","line":1347,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_notify_moderator":{"doc":"\/**\n * Notifies the moderator of the blog about a new comment that is awaiting approval.\n *\n * @since 1.0\n * @uses $wpdb\n *\n * @param int $comment_id Comment ID\n * @return bool Always returns true\n *\/","file":"pluggable.php","line":1094,"missingDoc":false,"filters":["'comment_moderation_text'","'comment_moderation_subject'","'comment_moderation_headers'"],"uses":{"get_option":[1097,1104,1105,1113],"get_comment":[1100],"get_post":[1101],"get_userdata":[1102],"user_can":[1105],"gethostbyaddr":[1108],"get_var":[1109],"wp_specialchars_decode":[1113],"sprintf":[1118,1120,1121,1125,1127,1128,1132,1134,1135,1136,1137,1142,1144,1146,1147,1149,1153],"__":[1118,1120,1121,1122,1125,1127,1128,1129,1132,1134,1135,1136,1137,1138,1142,1144,1146,1147,1153],"get_permalink":[1119,1126,1133],"admin_url":[1142,1144,1146,1147,1151],"_n":[1149],"number_format_i18n":[1150],"wp_mail":[1161]},"used_by":{"wp_new_comment":[1406]}},"wp_notify_postauthor":{"doc":"\/**\n * Notify an author of a comment\/trackback\/pingback to one of their posts.\n *\n * @since 1.0.0\n *\n * @param int $comment_id Comment ID\n * @param string $comment_type Optional. The comment type either 'comment' (default), 'trackback', or 'pingback'\n * @return bool False if user email does not exist. True on completion.\n *\/","file":"pluggable.php","line":989,"missingDoc":false,"filters":["'comment_notification_text'","'comment_notification_subject'","'comment_notification_headers'"],"uses":{"get_comment":[990],"get_post":[991],"get_userdata":[992],"is_user_member_of_blog":[995],"get_current_user_id":[1003],"gethostbyaddr":[1010],"wp_specialchars_decode":[1014],"get_option":[1014,1069],"sprintf":[1019,1021,1022,1023,1024,1028,1030,1032,1033,1037,1039,1041,1042,1043,1046,1049,1051,1053,1054],"__":[1019,1021,1022,1023,1024,1025,1026,1028,1030,1032,1033,1034,1035,1037,1039,1041,1042,1043,1044,1046,1049,1051,1053,1054],"get_permalink":[1048,1049],"admin_url":[1051,1053,1054],"preg_replace":[1056],"strtolower":[1056],"wp_mail":[1078]},"used_by":{"wp_new_comment":[1411],"wp_set_comment_status":[1445]}},"wp_defer_comment_counting":{"doc":"\/**\n * Whether to defer comment counting.\n *\n * When setting $defer to true, all post comment counts will not be updated\n * until $defer is set to false. When $defer is set to false, then all\n * previously deferred updated post comment counts will then be automatically\n * updated without having to call wp_update_comment_count() after.\n *\n * @since 2.5.0\n * @staticvar bool $_defer\n *\n * @param bool $defer\n * @return unknown\n *\/","file":"comment.php","line":1546,"missingDoc":false,"filters":[],"uses":{"wp_update_comment_count":[1553],"is_bool":[1549]},"used_by":{"wp_update_comment_count":[1588]}},"wp_update_comment_count_now":{"doc":"\/**\n * Updates the comment count for the post.\n *\n * @since 2.5.0\n * @uses $wpdb\n * @uses do_action() Calls 'wp_update_comment_count' hook on $post_id, $new, and $old\n * @uses do_action() Calls 'edit_posts' hook on $post_id and $post\n *\n * @param int $post_id Post ID\n * @return bool False on '0' $post_id or if post with ID does not exist. True on success.\n *\/","file":"comment.php","line":1609,"missingDoc":false,"filters":["'wp_update_comment_count'","'edit_post'"],"uses":{"get_post":[1614],"get_var":[1618],"prepare":[1618],"update":[1619],"clean_post_cache":[1621]},"used_by":{"wp_update_comment_count":[1583,1593]}},"clean_post_cache":{"doc":"\/**\n * Will clean the post in the cache.\n *\n * Cleaning means delete from the cache of the post. Will call to clean the term\n * object cache associated with the post ID.\n *\n * This function not run if $_wp_suspend_cache_invalidation is not empty. See\n * wp_suspend_cache_invalidation().\n *\n * @package WordPress\n * @subpackage Cache\n * @since 2.0.0\n *\n * @uses do_action() Calls 'clean_post_cache' on $id before adding children (if any).\n *\n * @param object|int $post The post object or ID to remove from the cache\n *\/","file":"post.php","line":4640,"missingDoc":false,"filters":["'clean_post_cache'","'clean_page_cache'"],"uses":{"get_post":[4646],"wp_cache_delete":[4650,4651,4655,4660,4663],"clean_object_term_cache":[4653],"is_post_type_hierarchical":[4659]},"used_by":{"wp_update_comment_count_now":[1621],"clean_page_cache":[3157],"set_post_type":[1669],"wp_delete_post":[2370,2374],"wp_insert_post":[2926],"wp_publish_post":[3029],"wp_insert_attachment":[4044],"wp_delete_attachment":[4153]}},"discover_pingback_server_uri":{"doc":"\/**\n * Finds a pingback server URI based on the given URL.\n *\n * Checks the HTML for the rel=\"pingback\" link and x-pingback headers. It does\n * a check for the x-pingback headers first and returns that, if available. The\n * check for the rel=\"pingback\" has more overhead than just the header.\n *\n * @since 1.5.0\n *\n * @param string $url URL to ping.\n * @param int $deprecated Not Used.\n * @return bool|string False on failure, string containing URI on success.\n *\/","file":"comment.php","line":1646,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1648],"parse_url":[1654],"wp_upload_dir":[1660],"strpos":[1661,1684,1685,1689,1691],"wp_remote_head":[1664],"is_wp_error":[1666,1679],"wp_remote_retrieve_header":[1670,1669,1673],"preg_match":[1673],"wp_remote_get":[1677],"wp_remote_retrieve_body":[1682],"substr":[1693]},"used_by":{"pingback":[1854]}},"wp_upload_dir":{"doc":"\/**\n * Get an array containing the current upload directory's path and url.\n *\n * Checks the 'upload_path' option, which should be from the web root folder,\n * and if it isn't empty it will be used. If it is empty, then the path will be\n * 'WP_CONTENT_DIR\/uploads'. If the 'UPLOADS' constant is defined, then it will\n * override the 'upload_path' option and 'WP_CONTENT_DIR\/uploads' path.\n *\n * The upload URL path is set either by the 'upload_url_path' option or by using\n * the 'WP_CONTENT_URL' constant and appending '\/uploads' to the path.\n *\n * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in\n * the administration settings panel), then the time will be used. The format\n * will be year first and then month.\n *\n * If the path couldn't be created, then an error will be returned with the key\n * 'error' containing the error message. The error suggests that the parent\n * directory is not writable by the server.\n *\n * On success, the returned array will have many indices:\n * 'path' - base directory and sub directory or full path to upload directory.\n * 'url' - base url and sub directory or absolute URL to upload directory.\n * 'subdir' - sub directory if uploads use year\/month folders option is on.\n * 'basedir' - path without subdir.\n * 'baseurl' - URL path without subdir.\n * 'error' - set to false.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'upload_dir' on returned array.\n *\n * @param string $time Optional. Time formatted in 'yyyy\/mm'.\n * @return array See above for description.\n *\/","file":"functions.php","line":1524,"missingDoc":false,"filters":["'upload_dir'"],"uses":{"get_option":[1525,1526,1537,1594],"trim":[1526],"strpos":[1530,1618],"path_join":[1532],"trailingslashit":[1541,1548,1586],"defined":[1546,1561,1569,1582,1552],"is_multisite":[1546,1552],"get_site_option":[1546,1554],"get_current_blog_id":[1562,1564],"ms_is_switched":[1569],"untrailingslashit":[1583],"is_main_site":[1552],"current_time":[1597],"substr":[1598,1599],"str_replace":[1619],"basename":[1621],"sprintf":[1623],"__":[1623],"wp_mkdir_p":[1617]},"used_by":{"discover_pingback_server_uri":[1660],"wp_upload_bits":[1726],"get_space_used":[1946],"get_attached_file":[188],"_wp_relative_upload_path":[233],"wp_delete_attachment":[4123],"wp_get_attachment_url":[4218]}},"wp_remote_head":{"doc":"\/**\n * Retrieve the raw response from the HTTP request using the HEAD method.\n *\n * @see wp_remote_request() For more information on the response array format.\n *\n * @since 2.7.0\n *\n * @param string $url Site URL to retrieve.\n * @param array $args Optional. Override the defaults.\n * @return WP_Error|array The response or WP_Error on failure.\n *\/","file":"http.php","line":106,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[107],"head":[108]},"used_by":{"discover_pingback_server_uri":[1664],"wp_get_http_headers":[546]}},"wp_remote_retrieve_header":{"doc":"\/**\n * Retrieve a single header by name from the raw response.\n *\n * @since 2.7.0\n *\n * @param array $response\n * @param string $header Header name to retrieve value from.\n * @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist.\n *\/","file":"http.php","line":135,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[136],"is_array":[136],"array_key_exists":[139]},"used_by":{"discover_pingback_server_uri":[1670,1669,1673]}},"do_all_pings":{"doc":"\/**\n * Perform all pingbacks, enclosures, trackbacks, and send to pingback services.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\/","file":"comment.php","line":1710,"missingDoc":false,"filters":[],"uses":{"get_row":[1714,1720],"delete_metadata_by_mid":[1715,1721],"pingback":[1716],"do_enclose":[1722],"get_col":[1726],"do_trackbacks":[1729],"is_array":[1727],"generic_ping":[1732]},"used_by":[]},"pingback":{"doc":"\/**\n * Pings back the links found in a post.\n *\n * @since 0.71\n * @uses $wp_version\n * @uses IXR_Client\n *\n * @param string $content Post content to check for links.\n * @param int $post_ID Post ID.\n *\/","file":"comment.php","line":1808,"missingDoc":false,"filters":["'pre_ping'","'pingback_useragent'"],"uses":{"get_pung":[1816],"preg_match_all":[1828],"parse_url":[1842],"in_array":[1840],"url_to_postid":[1840],"is_local_attachment":[1841],"discover_pingback_server_uri":[1854],"set_time_limit":[1857],"get_permalink":[1859],"add_ping":[1869],"query":[1868]},"used_by":{"do_all_pings":[1716]}},"do_enclose":{"doc":"\/**\n * Check content for video and audio links to add as enclosures.\n *\n * Will not add enclosures that have already been added and will\n * remove enclosures that are no longer in the post. This is called as\n * pingbacks and trackbacks.\n *\n * @package WordPress\n * @since 1.5.0\n *\n * @uses $wpdb\n *\n * @param string $content Post Content\n * @param int $post_ID Post ID\n *\/","file":"functions.php","line":410,"missingDoc":false,"filters":[],"uses":{"get_enclosed":[418],"preg_match_all":[425],"get_col":[429],"prepare":[429,448],"like_escape":[429,448],"delete_metadata_by_mid":[431],"in_array":[428,436,470],"parse_url":[437,457],"pathinfo":[459],"preg_match":[462],"wp_get_mime_types":[461],"add_post_meta":[471],"substr":[470],"strpos":[470],"wp_get_http_headers":[450],"get_var":[448]},"used_by":{"do_all_pings":[1722]}},"do_trackbacks":{"doc":"\/**\n * Perform trackbacks.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID to do trackbacks on.\n *\/","file":"comment.php","line":1743,"missingDoc":false,"filters":["'the_content'","'the_excerpt'","'the_title'"],"uses":{"get_post":[1746],"get_to_ping":[1747],"get_pung":[1748],"update":[1750],"str_replace":[1758],"wp_html_excerpt":[1759],"strip_tags":[1762],"trim":[1766],"trackback":[1768],"query":[1771],"prepare":[1771],"in_array":[1767]},"used_by":{"do_all_pings":[1729]}},"generic_ping":{"doc":"\/**\n * Sends pings to all of the ping site services.\n *\n * @since 1.2.0\n *\n * @param int $post_id Post ID. Not actually used.\n * @return int Same as Post ID from parameter\n *\/","file":"comment.php","line":1785,"missingDoc":false,"filters":[],"uses":{"get_option":[1786],"explode":[1788],"trim":[1790],"weblog_ping":[1792]},"used_by":{"do_all_pings":[1732]}},"get_to_ping":{"doc":"\/**\n * Retrieve URLs that need to be pinged.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID\n * @return array\n *\/","file":"post.php","line":3360,"missingDoc":false,"filters":["'get_to_ping'"],"uses":{"get_var":[3362],"prepare":[3362],"sanitize_trackback_urls":[3363],"preg_split":[3364]},"used_by":{"do_trackbacks":[1747]}},"get_pung":{"doc":"\/**\n * Retrieve URLs already pinged for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @return array\n *\/","file":"post.php","line":3342,"missingDoc":false,"filters":["'get_pung'"],"uses":{"get_var":[3344],"prepare":[3344],"trim":[3345],"preg_split":[3346]},"used_by":{"do_trackbacks":[1748],"pingback":[1816]}},"trackback":{"doc":"\/**\n * Send a Trackback.\n *\n * Updates database when sending trackback to prevent duplicates.\n *\n * @since 0.71\n * @uses $wpdb\n *\n * @param string $trackback_url URL to send trackbacks.\n * @param string $title Title of post.\n * @param string $excerpt Excerpt of post.\n * @param int $ID Post ID.\n * @return mixed Database query from update.\n *\/","file":"comment.php","line":1903,"missingDoc":false,"filters":[],"uses":{"get_permalink":[1913],"get_option":[1914],"wp_remote_post":[1918],"is_wp_error":[1920],"query":[1923,1924],"prepare":[1923,1924]},"used_by":{"do_trackbacks":[1768],"trackback_url_list":[3395]}},"weblog_ping":{"doc":"\/**\n * Send a pingback.\n *\n * @since 1.2.0\n * @uses $wp_version\n * @uses IXR_Client\n *\n * @param string $server Host of blog to connect to.\n * @param string $path Path to send the ping.\n *\/","file":"comment.php","line":1937,"missingDoc":false,"filters":[],"uses":{"strlen":[1943],"trim":[1943],"trailingslashit":[1949],"home_url":[1949],"query":[1951,1950],"get_option":[1951,1950],"get_bloginfo":[1950]},"used_by":{"generic_ping":[1792]}},"is_local_attachment":{"doc":"\/**\n * Check if the attachment URI is local one and is really an attachment.\n *\n * @since 2.0.0\n *\n * @param string $url URL to check\n * @return bool True on success, false on failure.\n *\/","file":"post.php","line":3853,"missingDoc":false,"filters":[],"uses":{"strpos":[3854,3856],"home_url":[3854,3856],"get_post":[3859],"url_to_postid":[3858]},"used_by":{"pingback":[1841]}},"add_ping":{"doc":"\/**\n * Add a URL to those already pung.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @param string $uri Ping URI.\n * @return int How many rows were updated.\n *\/","file":"post.php","line":3293,"missingDoc":false,"filters":["'add_ping'"],"uses":{"get_var":[3295],"prepare":[3295],"trim":[3296],"preg_split":[3297],"implode":[3299],"stripslashes":[3302],"update":[3303]},"used_by":{"pingback":[1869]}},"privacy_ping_filter":{"doc":"\/**\n * Check whether blog is public before returning sites.\n *\n * @since 2.1.0\n *\n * @param mixed $sites Will return if blog is public, will not return if not public.\n * @return mixed Empty string if blog is not public, returns $sites, if site is public.\n *\/","file":"comment.php","line":1882,"missingDoc":false,"filters":[],"uses":{"get_option":[1883]},"used_by":[]},"_close_comments_for_old_posts":{"doc":"\/**\n * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts.\n *\n * @access private\n * @since 2.7.0\n *\n * @param object $posts Post data object.\n * @param object $query Query object.\n * @return object\n *\/","file":"comment.php","line":2011,"missingDoc":false,"filters":["'close_comments_for_post_types'"],"uses":{"is_singular":[2012],"get_option":[2012,2019],"in_array":[2016],"time":[2023],"strtotime":[2023]},"used_by":[]},"_close_comments_for_old_post":{"doc":"\/**\n * Close comments on an old post. Hooked to comments_open and pings_open.\n *\n * @access private\n * @since 2.7.0\n *\n * @param bool $open Comments open or closed\n * @param int $post_id Post ID\n * @return bool $open\n *\/","file":"comment.php","line":2041,"missingDoc":false,"filters":["'close_comments_for_post_types'"],"uses":{"get_option":[2045,2048],"get_post":[2052],"in_array":[2055],"time":[2058],"strtotime":[2058]},"used_by":[]},"_mb_substr":{"doc":"","file":"compat.php","line":22,"missingDoc":true,"filters":[],"uses":{"get_option":[25],"is_null":[27,31],"substr":[27,27],"in_array":[26],"preg_match_all":[30],"array_slice":[31,31],"implode":[32]},"used_by":{"mb_substr":[18]}},"hash_hmac":{"doc":"","file":"compat.php","line":36,"missingDoc":true,"filters":[],"uses":{"_hash_hmac":[37]},"used_by":{"wp_validate_auth_cookie":[549],"wp_generate_auth_cookie":[584],"wp_salt":[1376],"wp_hash":[1397]}},"_hash_hmac":{"doc":"","file":"compat.php","line":41,"missingDoc":true,"filters":[],"uses":{"pack":[50,57,60],"strlen":[49],"str_pad":[52],"chr":[52,54,55],"substr":[54,55],"str_repeat":[54,55]},"used_by":{"hash_hmac":[37]}},"_json_decode_object_helper":{"doc":"","file":"compat.php","line":91,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[93],"is_object":[92],"is_array":[94],"array_map":[94]},"used_by":{"json_decode":[88]}},"wp_schedule_single_event":{"doc":"\/**\n * Schedules a hook to run only once.\n *\n * Schedules a hook which will be executed once by the WordPress actions core at\n * a time which you specify. The action will fire off when someone visits your\n * WordPress site, if the schedule time has passed.\n *\n * @since 2.1.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/wp_schedule_single_event\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n *\/","file":"cron.php","line":22,"missingDoc":false,"filters":["'schedule_event'"],"uses":{"wp_next_scheduled":[24],"_get_cron_array":[28],"md5":[36],"serialize":[36],"uksort":[39],"_set_cron_array":[40]},"used_by":{"check_and_publish_future_post":[3065],"_future_post_hook":[4828],"_publish_post_hook":[4855]}},"wp_next_scheduled":{"doc":"\/**\n * Retrieve the next timestamp for a cron event.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|int The UNIX timestamp of the next time the scheduled event will occur.\n *\/","file":"cron.php","line":176,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[177],"md5":[178],"serialize":[178]},"used_by":{"wp_schedule_single_event":[24],"wp_clear_scheduled_hook":[163],"wp_schedule_update_network_counts":[1916],"wp_schedule_update_checks":[421,424,427]}},"_get_cron_array":{"doc":"\/**\n * Retrieve cron info array option.\n *\n * @since 2.1.0\n * @access private\n *\n * @return array CRON info array.\n *\/","file":"cron.php","line":361,"missingDoc":false,"filters":[],"uses":{"get_option":[362],"is_array":[363],"_upgrade_cron_array":[367]},"used_by":{"wp_schedule_single_event":[28],"wp_schedule_event":[64],"wp_reschedule_event":[96],"wp_unschedule_event":[137],"wp_next_scheduled":[177],"spawn_cron":[217],"wp_cron":[269],"wp_get_schedule":[338]}},"_set_cron_array":{"doc":"\/**\n * Updates the CRON option with the new CRON array.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $cron Cron info array from {@link _get_cron_array()}.\n *\/","file":"cron.php","line":382,"missingDoc":false,"filters":[],"uses":{"update_option":[384]},"used_by":{"wp_schedule_single_event":[40],"wp_schedule_event":[81],"wp_unschedule_event":[144]}},"wp_schedule_event":{"doc":"\/**\n * Schedule a periodic event.\n *\n * Schedules a hook which will be executed by the WordPress actions core on a\n * specific interval, specified by you. The action will trigger when someone\n * visits your WordPress site, if the scheduled time has passed.\n *\n * Valid values for the recurrence are hourly, daily and twicedaily. These can\n * be extended using the cron_schedules filter in wp_get_schedules().\n *\n * Use wp_next_scheduled() to prevent duplicates\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $recurrence How often the event should recur.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|null False on failure, null when complete with scheduling event.\n *\/","file":"cron.php","line":63,"missingDoc":false,"filters":["'schedule_event'"],"uses":{"_get_cron_array":[64],"wp_get_schedules":[65],"md5":[77],"serialize":[77],"uksort":[80],"_set_cron_array":[81]},"used_by":{"wp_reschedule_event":[118],"wp_schedule_update_network_counts":[1917],"wp_schedule_update_checks":[422,425,428]}},"wp_get_schedules":{"doc":"\/**\n * Retrieve supported and filtered Cron recurrences.\n *\n * The supported recurrences are 'hourly' and 'daily'. A plugin may add more by\n * hooking into the 'cron_schedules' filter. The filter accepts an array of\n * arrays. The outer array has a key that is the name of the schedule or for\n * example 'weekly'. The value is an array with two keys, one is 'interval' and\n * the other is 'display'.\n *\n * The 'interval' is a number in seconds of when the cron job should run. So for\n * 'hourly', the time is 3600 or 60*60. For weekly, the value would be\n * 60*60*24*7 or 604800. The value of 'interval' would then be 604800.\n *\n * The 'display' is the description. For the 'weekly' key, the 'display' would\n * be <code>__('Once Weekly')<\/code>.\n *\n * For your plugin, you will be passed an array. you can easily add your\n * schedule by doing the following.\n * <code>\n * \/\/ filter parameter variable name is 'array'\n *\t$array['weekly'] = array(\n *\t\t'interval' => 604800,\n *\t\t'display' => __('Once Weekly')\n *\t);\n * <\/code>\n *\n * @since 2.1.0\n *\n * @return array\n *\/","file":"cron.php","line":319,"missingDoc":false,"filters":["'cron_schedules'"],"uses":{"__":[321,322,323],"array_merge":[325]},"used_by":{"wp_schedule_event":[65],"wp_reschedule_event":[97],"wp_cron":[277]}},"wp_reschedule_event":{"doc":"\/**\n * Reschedule a recurring event.\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $recurrence How often the event should recur.\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return bool|null False on failure. Null when event is rescheduled.\n *\/","file":"cron.php","line":95,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[96],"wp_get_schedules":[97],"md5":[98],"serialize":[98],"time":[111],"wp_schedule_event":[118]},"used_by":[]},"wp_unschedule_event":{"doc":"\/**\n * Unschedule a previously scheduled cron job.\n *\n * The $timestamp and $hook parameters are required, so that the event can be\n * identified.\n *\n * @since 2.1.0\n *\n * @param int $timestamp Timestamp for when to run the event.\n * @param string $hook Action hook, the execution of which will be unscheduled.\n * @param array $args Arguments to pass to the hook's callback function.\n * Although not passed to a callback function, these arguments are used\n * to uniquely identify the scheduled event, so they should be the same\n * as those used when originally scheduling the event.\n *\/","file":"cron.php","line":136,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[137],"md5":[138],"serialize":[138],"_set_cron_array":[144]},"used_by":{"wp_clear_scheduled_hook":[164]}},"wp_clear_scheduled_hook":{"doc":"\/**\n * Unschedule all cron jobs attached to a specific hook.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook, the execution of which will be unscheduled.\n * @param array $args Optional. Arguments that were to be pass to the hook's callback function.\n *\/","file":"cron.php","line":155,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[159],"__":[159],"array_slice":[160],"func_get_args":[160],"is_array":[158],"wp_next_scheduled":[163],"wp_unschedule_event":[164]},"used_by":{"wp_delete_post":[2377],"check_and_publish_future_post":[3064],"_transition_post_status":[4810],"_future_post_hook":[4827]}},"spawn_cron":{"doc":"\/**\n * Send request to run cron through HTTP request that doesn't halt page loading.\n *\n * @since 2.1.0\n *\n * @return null Cron could not be spawned, because it is not needed to run.\n *\/","file":"cron.php","line":195,"missingDoc":false,"filters":["'cron_request'","'https_local_ssl_verify'"],"uses":{"microtime":[198],"defined":[200,226,225],"get_transient":[207],"_get_cron_array":[217],"is_array":[218],"array_keys":[221],"sprintf":[229,244],"set_transient":[230,245],"ob_start":[232],"wp_redirect":[233],"add_query_arg":[233],"stripslashes":[233],"ob_end_flush":[237],"flush":[238],"site_url":[248],"wp_remote_post":[253]},"used_by":{"wp_cron":[283]}},"wp_cron":{"doc":"\/**\n * Run scheduled callbacks or spawn cron for all scheduled events.\n *\n * @since 2.1.0\n *\n * @return null When doesn't need to run Cron.\n *\/","file":"cron.php","line":263,"missingDoc":false,"filters":[],"uses":{"strpos":[266],"defined":[266],"_get_cron_array":[269],"microtime":[272],"array_keys":[273],"wp_get_schedules":[277],"call_user_func":[281],"spawn_cron":[283]},"used_by":[]},"wp_get_schedule":{"doc":"\/**\n * Retrieve Cron schedule for hook with arguments.\n *\n * @since 2.1.0\n *\n * @param string $hook Action hook to execute when cron is run.\n * @param array $args Optional. Arguments to pass to the hook's callback function.\n * @return string|bool False, if no schedule. Schedule on success.\n *\/","file":"cron.php","line":337,"missingDoc":false,"filters":[],"uses":{"_get_cron_array":[338],"md5":[339],"serialize":[339]},"used_by":[]},"_upgrade_cron_array":{"doc":"\/**\n * Upgrade a Cron info array.\n *\n * This function upgrades the Cron info array to version 2.\n *\n * @since 2.1.0\n * @access private\n *\n * @param array $cron Cron info array from {@link _get_cron_array()}.\n * @return array An upgraded Cron info array.\n *\/","file":"cron.php","line":398,"missingDoc":false,"filters":[],"uses":{"md5":[406],"serialize":[406],"update_option":[412]},"used_by":{"_get_cron_array":[367]}},"wp_initial_constants":{"doc":"\/**\n * Defines initial WordPress constants\n *\n * @see wp_debug_mode()\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":15,"missingDoc":false,"filters":[],"uses":{"define":[21,23,28,49,53,58,62,65,71,74,78,79,80,81,82],"is_multisite":[20],"defined":[19,27,48,52,57,61,64,70,73],"ini_get":[43],"ini_set":[45],"intval":[44,44],"abs":[44],"function_exists":[42]},"used_by":[]},"wp_plugin_directory_constants":{"doc":"\/**\n * Defines plugin directory WordPress constants\n *\n * Defines must-use plugin directory constants, which may be overridden in the sunrise.php drop-in\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":92,"missingDoc":false,"filters":[],"uses":{"define":[94,102,110,119,127,135,144],"get_option":[94],"defined":[93,101,109,118,126,134,143]},"used_by":[]},"wp_cookie_constants":{"doc":"\/**\n * Defines cookie related WordPress constants\n *\n * Defines constants after multisite is loaded. Cookie-related constants may be overridden in ms_network_cookies().\n * @since 3.0.0\n *\/","file":"default-constants.php","line":153,"missingDoc":false,"filters":[],"uses":{"get_site_option":[159],"define":[161,163,170,176,182,188,194,200,206,212,218,224,230],"md5":[161],"defined":[158,169,175,181,187,193,199,205,211,217,223,229],"preg_replace":[206,212,224],"get_option":[206,212]},"used_by":[]},"wp_ssl_constants":{"doc":"\/**\n * Defines cookie related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":238,"missingDoc":false,"filters":[],"uses":{"define":[243,250],"defined":[242,249],"force_ssl_admin":[244],"force_ssl_login":[251]},"used_by":[]},"force_ssl_admin":{"doc":"\/**\n * Whether to force SSL used for the Administration Screens.\n *\n * @since 2.6.0\n *\n * @param string|bool $force\n * @return bool True if forced, false if not forced.\n *\/","file":"functions.php","line":3132,"missingDoc":false,"filters":[],"uses":{"is_null":[3135]},"used_by":{"wp_ssl_constants":[244],"set_url_scheme":[2230,2232,2228],"auth_redirect":[745]}},"force_ssl_login":{"doc":"\/**\n * Whether SSL login should be forced.\n *\n * @since 2.6.0\n *\n * @param string|bool $force Optional.\n * @return bool True if forced, false if not forced.\n *\/","file":"functions.php","line":3112,"missingDoc":false,"filters":[],"uses":{"is_null":[3115]},"used_by":{"wp_ssl_constants":[251],"set_url_scheme":[2228]}},"wp_functionality_constants":{"doc":"\/**\n * Defines functionality related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":259,"missingDoc":false,"filters":[],"uses":{"define":[264,270,273,279],"defined":[263,269,272,278]},"used_by":[]},"wp_templating_constants":{"doc":"\/**\n * Defines templating related WordPress constants\n *\n * @since 3.0.0\n *\/","file":"default-constants.php","line":287,"missingDoc":false,"filters":[],"uses":{"define":[292,298,307],"get_template_directory":[292],"get_stylesheet_directory":[298],"defined":[306]},"used_by":[]},"WP_Widget_Pages::__construct":{"doc":"","file":"default-widgets.php","line":16,"missingDoc":true,"filters":[],"uses":{"__":[17,18]},"used_by":[]},"WP_Widget_Pages::widget":{"doc":"","file":"default-widgets.php","line":21,"missingDoc":true,"filters":["'widget_title'","'widget_pages_args'"],"uses":{"extract":[22],"__":[24],"wp_list_pages":[31]},"used_by":[]},"wp_list_pages":{"doc":"\/**\n * Retrieve or display list of pages in list (li) format.\n *\n * @since 1.5.0\n *\n * @param array|string $args Optional. Override default arguments.\n * @return string HTML content, if not displaying.\n *\/","file":"post-template.php","line":813,"missingDoc":false,"filters":["'wp_list_pages_excludes'","'wp_list_pages'"],"uses":{"get_option":[816],"__":[818],"wp_parse_args":[823],"extract":[824],"preg_replace":[830],"explode":[833],"implode":[834],"get_pages":[838],"get_queried_object_id":[846],"is_page":[845],"is_attachment":[845],"walk_page_tree":[847]},"used_by":{"WP_Widget_Pages::widget":[31],"wp_page_menu":[919],"__main":[55]}},"WP_Widget_Pages::update":{"doc":"","file":"default-widgets.php","line":46,"missingDoc":true,"filters":[],"uses":{"strip_tags":[48,55],"in_array":[49]},"used_by":[]},"WP_Widget_Pages::form":{"doc":"","file":"default-widgets.php","line":60,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[62],"esc_attr":[63,64],"get_field_id":[66,66,68,69,76,76],"_e":[66,68,70,71,72,76,78],"get_field_name":[66,69,76],"selected":[70,71,72]},"used_by":[]},"WP_Widget_Links::__construct":{"doc":"","file":"default-widgets.php","line":92,"missingDoc":true,"filters":[],"uses":{"__":[93,94]},"used_by":[]},"WP_Widget_Links::widget":{"doc":"","file":"default-widgets.php","line":97,"missingDoc":true,"filters":["'widget_links_args'"],"uses":{"extract":[98],"preg_replace":[109],"wp_list_bookmarks":[110]},"used_by":[]},"WP_Widget_Links::update":{"doc":"","file":"default-widgets.php","line":121,"missingDoc":true,"filters":[],"uses":{"in_array":[130],"intval":[133,134]},"used_by":[]},"WP_Widget_Links::form":{"doc":"","file":"default-widgets.php","line":139,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[142],"get_terms":[143],"intval":[144,153,179],"get_field_id":[148,149,159,160,168,169,170,171,172,173,174,175,178,179],"_e":[148,159,161,162,163,169,171,173,175,178],"get_field_name":[149,160,168,170,172,174,179],"_ex":[150,164],"selected":[154,161,162,163,164],"checked":[168,170,172,174]},"used_by":[]},"WP_Widget_Search::__construct":{"doc":"","file":"default-widgets.php","line":192,"missingDoc":true,"filters":[],"uses":{"__":[193,194]},"used_by":[]},"WP_Widget_Search::widget":{"doc":"","file":"default-widgets.php","line":197,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[198],"get_search_form":[206]},"used_by":[]},"get_search_form":{"doc":"\/**\n * Display search form.\n *\n * Will first attempt to locate the searchform.php file in either the child or\n * the parent, then load it. If it doesn't exist, then the default search form\n * will be displayed. The default search form is HTML, which will be displayed.\n * There is a filter applied to the search form HTML in order to edit or replace\n * it. The filter is 'get_search_form'.\n *\n * This function is primarily used by themes which want to hardcode the search\n * form into the sidebar and also by the search widget in WordPress.\n *\n * There is also an action that is called whenever the function is run called,\n * 'get_search_form'. This can be useful for outputting JavaScript that the\n * search relies on or various formatting that applies to the beginning of the\n * search. To give a few examples of what it can be used for.\n *\n * @since 2.7.0\n * @param boolean $echo Default to echo and not return the form.\n * @return string|null String when retrieving, null when displaying or if searchform.php exists.\n *\/","file":"general-template.php","line":152,"missingDoc":false,"filters":["'get_search_form'","'get_search_form'","'get_search_form'"],"uses":{"locate_template":[155],"esc_url":[161],"home_url":[161],"__":[162],"get_search_query":[163],"esc_attr__":[164]},"used_by":{"WP_Widget_Search::widget":[206],"__main":[17]}},"WP_Widget_Search::form":{"doc":"","file":"default-widgets.php","line":211,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[212],"get_field_id":[215,215],"_e":[215],"get_field_name":[215],"esc_attr":[215]},"used_by":[]},"WP_Widget_Search::update":{"doc":"","file":"default-widgets.php","line":219,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[221],"strip_tags":[222]},"used_by":[]},"WP_Widget_Archives::__construct":{"doc":"","file":"default-widgets.php","line":235,"missingDoc":true,"filters":[],"uses":{"__":[236,237]},"used_by":[]},"WP_Widget_Archives::widget":{"doc":"","file":"default-widgets.php","line":240,"missingDoc":true,"filters":["'widget_title'","'widget_archives_dropdown_args'","'widget_archives_args'"],"uses":{"extract":[241],"__":[244,252],"esc_attr":[252],"wp_get_archives":[252,257]},"used_by":[]},"wp_get_archives":{"doc":"\/**\n * Display archive links based on type and format.\n *\n * The 'type' argument offers a few choices and by default will display monthly\n * archive links. The other options for values are 'daily', 'weekly', 'monthly',\n * 'yearly', 'postbypost' or 'alpha'. Both 'postbypost' and 'alpha' display the\n * same archive link list, the difference between the two is that 'alpha'\n * will order by post title and 'postbypost' will order by post date.\n *\n * The date archives will logically display dates with links to the archive post\n * page. The 'postbypost' and 'alpha' values for 'type' argument will display\n * the post titles.\n *\n * The 'limit' argument will only display a limited amount of links, specified\n * by the 'limit' integer value. By default, there is no limit. The\n * 'show_post_count' argument will show how many posts are within the archive.\n * By default, the 'show_post_count' argument is set to false.\n *\n * For the 'format', 'before', and 'after' arguments, see {@link\n * get_archives_link()}. The values of these arguments have to do with that\n * function.\n *\n * @since 1.2.0\n *\n * @param string|array $args Optional. Override defaults.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":871,"missingDoc":false,"filters":["'getarchives_where'","'getarchives_join'","'the_title'"],"uses":{"wp_parse_args":[881],"extract":[882],"absint":[888],"strtoupper":[892],"get_option":[910,911,912,1005],"md5":[923,945,966,989,1019],"wp_cache_get":[924,946,967,990,1020],"get_results":[926,948,969,992,1022],"wp_cache_set":[928,950,971,994,1024],"get_month_link":[935],"sprintf":[937,958,979,1008],"__":[937],"get_month":[937],"get_archives_link":[940,961,983,1012,1036],"get_year_link":[957],"get_day_link":[978],"mysql2date":[980],"_wp_mysql_week":[987],"get_weekstartend":[1005],"date_i18n":[1006,1007],"home_url":[1008],"get_permalink":[1031],"strip_tags":[1033]},"used_by":{"WP_Widget_Archives::widget":[252,257],"get_archives":[786],"__main":[59]}},"WP_Widget_Archives::update":{"doc":"","file":"default-widgets.php","line":265,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[267],"strip_tags":[268]},"used_by":[]},"WP_Widget_Archives::form":{"doc":"","file":"default-widgets.php","line":275,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[276],"strip_tags":[277],"get_field_id":[281,281,283,283,285,285],"_e":[281,283,285],"get_field_name":[281,283,285],"esc_attr":[281]},"used_by":[]},"WP_Widget_Meta::__construct":{"doc":"","file":"default-widgets.php","line":300,"missingDoc":true,"filters":[],"uses":{"__":[301,302]},"used_by":[]},"WP_Widget_Meta::widget":{"doc":"","file":"default-widgets.php","line":305,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[306],"__":[307,316,317,318],"wp_register":[314],"wp_loginout":[315],"bloginfo":[316,317],"esc_attr":[316,317,318],"_e":[316,317,320],"esc_attr_e":[318],"wp_meta":[322]},"used_by":[]},"wp_register":{"doc":"\/**\n * Display the Registration or Admin link.\n *\n * Display a link which allows the user to navigate to the registration page if\n * not logged in and registration is enabled or to the dashboard if logged in.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'register' hook on register \/ admin link content.\n *\n * @param string $before Text to output before the link (defaults to <li>).\n * @param string $after Text to output after the link (defaults to <\/li>).\n * @param boolean $echo Default to echo and not return the link.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":337,"missingDoc":false,"filters":["'register'","'register'"],"uses":{"site_url":[341],"__":[341,345],"get_option":[340],"admin_url":[345],"is_user_logged_in":[339]},"used_by":{"WP_Widget_Meta::widget":[314],"__main":[71]}},"wp_loginout":{"doc":"\/**\n * Display the Log In\/Out link.\n *\n * Displays a link, which allows users to navigate to the Log In page to log in\n * or log out depending on whether they are currently logged in.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'loginout' hook on HTML link content.\n *\n * @param string $redirect Optional path to redirect to on login\/logout.\n * @param boolean $echo Default to echo and not return the link.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":187,"missingDoc":false,"filters":["'loginout'","'loginout'"],"uses":{"esc_url":[189,191],"wp_login_url":[189],"__":[189,191],"wp_logout_url":[191],"is_user_logged_in":[188]},"used_by":{"WP_Widget_Meta::widget":[315],"__main":[72]}},"bloginfo":{"doc":"\/**\n * Display information about the blog.\n *\n * @see get_bloginfo() For possible values for the parameter.\n * @since 0.71\n *\n * @param string $show What to display.\n *\/","file":"general-template.php","line":376,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[377]},"used_by":{"WP_Widget_Meta::widget":[316,317],"__main":[25,15,16,18,16,16,18,20,21,29,29,31,45,46]}},"wp_meta":{"doc":"\/**\n * Theme container function for the 'wp_meta' action.\n *\n * The 'wp_meta' action can have several purposes, depending on how you use it,\n * but one purpose might have been to allow for theme switching.\n *\n * @since 1.5.0\n * @link http:\/\/trac.wordpress.org\/ticket\/1458 Explanation of 'wp_meta' action.\n * @uses do_action() Calls 'wp_meta' hook.\n *\/","file":"general-template.php","line":364,"missingDoc":false,"filters":["'wp_meta'"],"uses":[],"used_by":{"WP_Widget_Meta::widget":[322],"__main":[76]}},"WP_Widget_Meta::update":{"doc":"","file":"default-widgets.php","line":328,"missingDoc":true,"filters":[],"uses":{"strip_tags":[330]},"used_by":[]},"WP_Widget_Meta::form":{"doc":"","file":"default-widgets.php","line":335,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[336],"strip_tags":[337],"get_field_id":[339,339],"_e":[339],"get_field_name":[339],"esc_attr":[339]},"used_by":[]},"WP_Widget_Calendar::__construct":{"doc":"","file":"default-widgets.php","line":351,"missingDoc":true,"filters":[],"uses":{"__":[352,353]},"used_by":[]},"WP_Widget_Calendar::widget":{"doc":"","file":"default-widgets.php","line":356,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[357],"get_calendar":[363]},"used_by":[]},"get_calendar":{"doc":"\/**\n * Display calendar with days that have posts as links.\n *\n * The calendar is cached, which will be retrieved, if it exists. If there are\n * no posts for the month, then it will not be displayed.\n *\n * @since 1.0.0\n * @uses calendar_week_mod()\n *\n * @param bool $initial Optional, default is true. Use initial calendar names.\n * @param bool $echo Optional, default is true. Set to false for return.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":1073,"missingDoc":false,"filters":["'get_calendar'","'get_calendar'","'the_title'","'get_calendar'","'get_calendar'"],"uses":{"md5":[1077],"is_array":[1079,1089],"wp_cache_get":[1078],"get_var":[1094,1116],"wp_cache_set":[1097,1264],"intval":[1103,1106,1110,1111,1114,1118,1122,1236],"get_option":[1106],"zeroise":[1110,1122],"substr":[1114,1118,1122],"strlen":[1119],"gmdate":[1124,1125,1242,1242,1242],"current_time":[1124,1125,1242,1242,1242],"mktime":[1128,1172,1180,1253,1257],"date":[1129,1148,1172,1180,1232,1236,1253,1257],"get_row":[1132,1138],"_x":[1146],"sprintf":[1148,1172,1180],"get_month":[1148,1172,1172,1180,1180],"get_weekday":[1155],"get_weekday_initial":[1159],"get_weekday_abbrev":[1159],"esc_attr":[1160,1172,1180,1220,1234,1248,1259],"get_month_link":[1172,1180],"__":[1172,1180],"get_month_abbrev":[1172,1180],"get_results":[1193,1211],"strpos":[1205],"stripos":[1205,1205],"calendar_week_mod":[1232,1253,1257],"get_day_link":[1248],"in_array":[1247]},"used_by":{"WP_Widget_Calendar::widget":[363]}},"WP_Widget_Calendar::update":{"doc":"","file":"default-widgets.php","line":368,"missingDoc":true,"filters":[],"uses":{"strip_tags":[370]},"used_by":[]},"WP_Widget_Calendar::form":{"doc":"","file":"default-widgets.php","line":375,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[376],"strip_tags":[377],"get_field_id":[379,380],"_e":[379],"get_field_name":[380],"esc_attr":[380]},"used_by":[]},"WP_Widget_Text::__construct":{"doc":"","file":"default-widgets.php","line":392,"missingDoc":true,"filters":[],"uses":{"__":[393,395]},"used_by":[]},"WP_Widget_Text::widget":{"doc":"","file":"default-widgets.php","line":398,"missingDoc":true,"filters":["'widget_title'","'widget_text'"],"uses":{"extract":[399],"wpautop":[404]},"used_by":[]},"wpautop":{"doc":"\/**\n * Replaces double line-breaks with paragraph elements.\n *\n * A group of regex replaces used to identify text formatted with newlines and\n * replace double line-breaks with HTML paragraph tags. The remaining\n * line-breaks after conversion become <<br \/>> tags, unless $br is set to '0'\n * or 'false'.\n *\n * @since 0.71\n *\n * @param string $pee The text which has to be formatted.\n * @param bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true.\n * @return string Text which has been converted into correct paragraph tags.\n *\/","file":"formatting.php","line":188,"missingDoc":false,"filters":[],"uses":{"trim":[191,236],"explode":[197],"array_pop":[198],"strpos":[203,196,227],"substr":[212,214],"preg_replace":[221,224,225,228,229,231,237,238,239,240,241,243,244,247,250,251,252],"str_replace":[226,242,248,255],"preg_split":[233],"preg_replace_callback":[246],"array_keys":[255],"array_values":[255]},"used_by":{"WP_Widget_Text::widget":[404],"wp_richedit_pre":[2495]}},"WP_Widget_Text::update":{"doc":"","file":"default-widgets.php","line":409,"missingDoc":true,"filters":[],"uses":{"strip_tags":[411],"stripslashes":[415],"wp_filter_post_kses":[415],"addslashes":[415],"current_user_can":[412]},"used_by":[]},"wp_filter_post_kses":{"doc":"\/**\n * Sanitize content for allowed HTML tags for post content.\n *\n * Post content refers to the page contents of the 'post' type and not $_POST\n * data from forms.\n *\n * @since 2.0.0\n *\n * @param string $data Post content to filter, expected to be escaped with slashes\n * @return string Filtered post content with allowed HTML tags and attributes intact.\n *\/","file":"kses.php","line":1284,"missingDoc":false,"filters":[],"uses":{"addslashes":[1285],"wp_kses":[1285],"stripslashes":[1285]},"used_by":{"WP_Widget_Text::update":[415]}},"WP_Widget_Text::form":{"doc":"","file":"default-widgets.php","line":420,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[421],"strip_tags":[422],"esc_textarea":[423],"get_field_id":[425,426,428,430,430],"_e":[425,430],"get_field_name":[426,428,430],"esc_attr":[426],"checked":[430]},"used_by":[]},"esc_textarea":{"doc":"\/**\n * Escaping for textarea values.\n *\n * @since 3.1\n *\n * @param string $text\n * @return string\n *\/","file":"formatting.php","line":2699,"missingDoc":false,"filters":["'esc_textarea'"],"uses":{"htmlspecialchars":[2700]},"used_by":{"WP_Widget_Text::form":[423],"format_to_edit":[1300]}},"WP_Widget_Categories::__construct":{"doc":"","file":"default-widgets.php","line":442,"missingDoc":true,"filters":[],"uses":{"__":[443,444]},"used_by":[]},"WP_Widget_Categories::widget":{"doc":"","file":"default-widgets.php","line":447,"missingDoc":true,"filters":["'widget_title'","'widget_categories_dropdown_args'","'widget_categories_args'"],"uses":{"extract":[448],"__":[450,462],"wp_dropdown_categories":[463],"home_url":[471],"wp_list_categories":[484]},"used_by":[]},"WP_Widget_Categories::update":{"doc":"","file":"default-widgets.php","line":493,"missingDoc":true,"filters":[],"uses":{"strip_tags":[495]},"used_by":[]},"WP_Widget_Categories::form":{"doc":"","file":"default-widgets.php","line":503,"missingDoc":true,"filters":[],"uses":{"wp_parse_args":[505],"esc_attr":[506],"get_field_id":[511,512,514,515,517,518,520,521],"_e":[511,515,518,521],"get_field_name":[512,514,517,520],"checked":[514,517,520]},"used_by":[]},"WP_Widget_Recent_Posts::__construct":{"doc":"","file":"default-widgets.php","line":534,"missingDoc":true,"filters":[],"uses":{"__":[535,536],"add_action":[539,540,541]},"used_by":[]},"WP_Widget_Recent_Posts::widget":{"doc":"","file":"default-widgets.php","line":544,"missingDoc":true,"filters":["'widget_title'","'widget_posts_args'"],"uses":{"wp_cache_get":[545],"is_array":[547],"ob_start":[558],"extract":[559],"__":[561],"absint":[562],"have_posts":[572,567],"the_post":[572],"the_permalink":[574],"esc_attr":[574],"get_the_title":[574,574,574],"get_the_ID":[574],"the_title":[574],"the_ID":[574],"get_the_date":[576],"wp_reset_postdata":[584],"ob_get_flush":[588],"wp_cache_set":[589]},"used_by":[]},"have_posts":{"doc":"\/**\n * Whether current WordPress query has results to loop over.\n *\n * @see WP_Query::have_posts()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":740,"missingDoc":false,"filters":[],"uses":{"have_posts":[743]},"used_by":{"WP_Widget_Recent_Posts::widget":[572,567],"__main":[29,32,38,22,33,31,30],"have_posts":[743]}},"the_post":{"doc":"\/**\n * Iterate the post index in the loop.\n *\n * @see WP_Query::the_post()\n * @since 1.5.0\n * @uses $wp_query\n *\/","file":"query.php","line":782,"missingDoc":false,"filters":[],"uses":{"the_post":[785]},"used_by":{"WP_Widget_Recent_Posts::widget":[572],"__main":[29,32,38,22,33,31],"the_post":[785]}},"the_title":{"doc":"\/**\n * Display or retrieve the current post title with optional content.\n *\n * @since 0.71\n *\n * @param string $before Optional. Content to prepend to the title.\n * @param string $after Optional. Content to append to the title.\n * @param bool $echo Optional, default to true.Whether to display or return.\n * @return null|string Null on no title. String if $echo parameter is false.\n *\/","file":"post-template.php","line":42,"missingDoc":false,"filters":[],"uses":{"get_the_title":[43],"strlen":[45]},"used_by":{"WP_Widget_Recent_Posts::widget":[574],"__main":[14]}},"the_ID":{"doc":"\/**\n * Display the ID of the current item in the WordPress Loop.\n *\n * @since 0.71\n *\/","file":"post-template.php","line":16,"missingDoc":false,"filters":[],"uses":{"get_the_ID":[17]},"used_by":{"WP_Widget_Recent_Posts::widget":[574]}},"get_the_date":{"doc":"\/**\n * Retrieve the date the current $post was written.\n *\n * Unlike the_date() this function will always return the date.\n * Modify output with 'get_the_date' filter.\n *\n * @since 3.0.0\n *\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1375,"missingDoc":false,"filters":["'get_the_date'"],"uses":{"get_post":[1376],"mysql2date":[1380,1382],"get_option":[1380]},"used_by":{"WP_Widget_Recent_Posts::widget":[576],"the_date":[1349]}},"wp_reset_postdata":{"doc":"\/**\n * After looping through a separate query, this function restores\n * the $post global to the current post in the main query\n *\n * @since 3.0.0\n * @uses $wp_query\n *\/","file":"query.php","line":116,"missingDoc":false,"filters":[],"uses":{"setup_postdata":[120]},"used_by":{"WP_Widget_Recent_Posts::widget":[584],"wp_reset_query":[106]}},"WP_Widget_Recent_Posts::update":{"doc":"","file":"default-widgets.php","line":592,"missingDoc":true,"filters":[],"uses":{"strip_tags":[594],"flush_widget_cache":[597],"wp_cache_get":[599],"delete_option":[601]},"used_by":[]},"WP_Widget_Recent_Posts::flush_widget_cache":{"doc":"","file":"default-widgets.php","line":606,"missingDoc":true,"filters":[],"uses":{"wp_cache_delete":[607]},"used_by":[]},"WP_Widget_Recent_Posts::form":{"doc":"","file":"default-widgets.php","line":610,"missingDoc":true,"filters":[],"uses":{"esc_attr":[611],"absint":[612],"get_field_id":[615,616,618,619,621,622],"_e":[615,618,622],"get_field_name":[616,619,621],"checked":[621]},"used_by":[]},"WP_Widget_Recent_Comments::__construct":{"doc":"","file":"default-widgets.php","line":634,"missingDoc":true,"filters":[],"uses":{"__":[635,636],"add_action":[640,642,643],"is_active_widget":[639]},"used_by":[]},"is_active_widget":{"doc":"\/**\n * Whether widget is displayed on the front-end.\n *\n * Either $callback or $id_base can be used\n * $id_base is the first argument when extending WP_Widget class\n * Without the optional $widget_id parameter, returns the ID of the first sidebar\n * in which the first instance of the widget with the given callback or $id_base is found.\n * With the $widget_id parameter, returns the ID of the sidebar where\n * the widget with that callback\/$id_base AND that ID is found.\n *\n * NOTE: $widget_id and $id_base are the same for single widgets. To be effective\n * this function has to run after widgets have initialized, at action 'init' or later.\n *\n * @since 2.2.0\n *\n * @param string $callback Optional, Widget callback to check.\n * @param int $widget_id Optional, but needed for checking. Widget ID.\n * @param string $id_base Optional, the base ID of a widget created by extending WP_Widget.\n * @param bool $skip_inactive Optional, whether to check in 'wp_inactive_widgets'.\n * @return mixed false if widget is not active or id of sidebar in which the widget is active.\n *\/","file":"widgets.php","line":933,"missingDoc":false,"filters":[],"uses":{"wp_get_sidebars_widgets":[936],"_get_widget_id_base":[945],"is_array":[943,938]},"used_by":{"WP_Widget_Recent_Comments::__construct":[639]}},"WP_Widget_Recent_Comments::recent_comments_style":{"doc":"","file":"default-widgets.php","line":646,"missingDoc":true,"filters":["'show_recent_comments_widget_style'"],"uses":{"current_theme_supports":[647]},"used_by":[]},"WP_Widget_Recent_Comments::flush_widget_cache":{"doc":"","file":"default-widgets.php","line":655,"missingDoc":true,"filters":[],"uses":{"wp_cache_delete":[656]},"used_by":[]},"WP_Widget_Recent_Comments::widget":{"doc":"","file":"default-widgets.php","line":659,"missingDoc":true,"filters":["'widget_title'","'widget_comments_args'"],"uses":{"wp_cache_get":[662],"is_array":[664],"extract":[675],"__":[677],"absint":[679],"get_comments":[682],"array_unique":[690],"wp_list_pluck":[690],"_prime_post_caches":[691],"strpos":[691],"get_option":[691],"sprintf":[694],"_x":[694],"get_comment_author_link":[694],"esc_url":[694],"get_comment_link":[694],"get_the_title":[694],"wp_cache_set":[702]},"used_by":[]},"wp_list_pluck":{"doc":"\/**\n * Pluck a certain field out of each object in a list.\n *\n * @since 3.1.0\n *\n * @param array $list A list of objects or arrays\n * @param int|string $field A field from the object to place instead of the entire object\n * @return array\n *\/","file":"functions.php","line":2674,"missingDoc":false,"filters":[],"uses":{"is_object":[2676]},"used_by":{"WP_Widget_Recent_Comments::widget":[690],"wp_filter_object_list":[2616],"wp_enqueue_media":[1461],"WP_Post::__get":[627,637],"WP_Query::get_posts":[2225]}},"_prime_post_caches":{"doc":"\/**\n * Adds any posts from the given ids to the cache that do not already exist in cache\n *\n * @since 3.4.0\n *\n * @access private\n *\n * @param array $post_ids ID list\n * @param bool $update_term_cache Whether to update the term cache. Default is true.\n * @param bool $update_meta_cache Whether to update the meta cache. Default is true.\n *\/","file":"post.php","line":5552,"missingDoc":false,"filters":[],"uses":{"_get_non_cached_ids":[5555],"get_results":[5557],"sprintf":[5557],"join":[5557],"update_post_caches":[5559]},"used_by":{"WP_Widget_Recent_Comments::widget":[691],"update_post_thumbnail_cache":[70],"WP_Query::get_posts":[2668]}},"WP_Widget_Recent_Comments::update":{"doc":"","file":"default-widgets.php","line":705,"missingDoc":true,"filters":[],"uses":{"strip_tags":[707],"absint":[708],"flush_widget_cache":[709],"wp_cache_get":[711],"delete_option":[713]},"used_by":[]},"WP_Widget_Recent_Comments::form":{"doc":"","file":"default-widgets.php","line":718,"missingDoc":true,"filters":[],"uses":{"esc_attr":[719],"absint":[720],"get_field_id":[722,723,725,726],"_e":[722,725],"get_field_name":[723,726]},"used_by":[]},"WP_Widget_RSS::__construct":{"doc":"","file":"default-widgets.php","line":738,"missingDoc":true,"filters":[],"uses":{"__":[739,741]},"used_by":[]},"WP_Widget_RSS::widget":{"doc":"","file":"default-widgets.php","line":744,"missingDoc":true,"filters":["'widget_title'"],"uses":{"extract":[749],"stristr":[752,772],"substr":[753,773],"in_array":[759],"untrailingslashit":[759],"site_url":[759],"home_url":[759],"fetch_feed":[762],"esc_attr":[768],"strip_tags":[768,770,771,780],"html_entity_decode":[768],"get_description":[768],"get_option":[768],"esc_html":[770],"get_title":[770],"esc_url":[771,780],"get_permalink":[771],"is_wp_error":[767,791],"__":[777],"includes_url":[781],"esc_attr__":[783],"wp_widget_rss_output":[788],"__destruct":[792]},"used_by":[]},"fetch_feed":{"doc":"\/**\n * Build SimplePie object based on RSS or Atom feed from URL.\n *\n * @since 2.8\n *\n * @param string $url URL to retrieve feed\n * @return WP_Error|SimplePie WP_Error object on failure or SimplePie object on success\n *\/","file":"feed.php","line":526,"missingDoc":false,"filters":["'wp_feed_cache_transient_lifetime'","'wp_feed_options'"],"uses":{"set_sanitize_class":[531],"set_cache_class":[536],"set_file_class":[537],"set_feed_url":[539],"set_cache_duration":[540],"init":[542],"handle_content_type":[543],"error":[546,545]},"used_by":{"WP_Widget_RSS::widget":[762],"wp_widget_rss_output":[821,824],"wp_widget_rss_process":[1004]}},"wp_widget_rss_output":{"doc":"\/**\n * Display the RSS entries in a list.\n *\n * @since 2.5.0\n *\n * @param string|array|object $rss RSS url.\n * @param array $args Widget arguments.\n *\/","file":"default-widgets.php","line":819,"missingDoc":false,"filters":[],"uses":{"fetch_feed":[821,824],"is_array":[822],"is_object":[825,892],"is_string":[820],"sprintf":[831],"__":[831,847,861],"get_error_message":[831],"is_admin":[830],"current_user_can":[830],"is_wp_error":[829],"wp_parse_args":[836],"extract":[837],"__destruct":[848,905],"get_item_quantity":[846],"get_link":[855],"stristr":[856],"substr":[857,868,869,867],"esc_url":[858],"strip_tags":[858,859,863,894],"esc_attr":[859,863],"get_title":[859],"str_replace":[863],"html_entity_decode":[863],"get_description":[863],"get_option":[863,885],"wp_html_excerpt":[864],"esc_html":[872,894],"get_date":[882],"date_i18n":[885],"get_author":[891],"get_name":[893],"get_items":[854]},"used_by":{"WP_Widget_RSS::widget":[788]}},"WP_Widget_RSS::update":{"doc":"","file":"default-widgets.php","line":796,"missingDoc":true,"filters":[],"uses":{"wp_widget_rss_process":[798]},"used_by":[]},"wp_widget_rss_process":{"doc":"\/**\n * Process RSS feed widget data and optionally retrieve feed items.\n *\n * The feed widget can not have more than 20 items or it will reset back to the\n * default, which is 10.\n *\n * The resulting array has the feed title, feed url, feed link (from channel),\n * feed items, error (if any), and whether to show summary, author, and date.\n * All respectively in the order of the array elements.\n *\n * @since 2.5.0\n *\n * @param array $widget_rss RSS widget feed data. Expects unescaped data.\n * @param bool $check_feed Optional, default is true. Whether to check feed for errors.\n * @return array\n *\/","file":"default-widgets.php","line":993,"missingDoc":false,"filters":[],"uses":{"esc_url_raw":[997],"strip_tags":[997,998,1010],"trim":[998],"fetch_feed":[1004],"get_error_message":[1008],"esc_url":[1010],"get_permalink":[1010],"stristr":[1011],"substr":[1012],"__destruct":[1014],"is_wp_error":[1007],"compact":[1019]},"used_by":{"WP_Widget_RSS::update":[798]}},"WP_Widget_RSS::form":{"doc":"","file":"default-widgets.php","line":801,"missingDoc":true,"filters":[],"uses":{"wp_widget_rss_form":[807]},"used_by":[]},"wp_widget_rss_form":{"doc":"\/**\n * Display RSS widget options form.\n *\n * The options for what fields are displayed for the RSS form are all booleans\n * and are as follows: 'url', 'title', 'items', 'show_summary', 'show_author',\n * 'show_date'.\n *\n * @since 2.5.0\n *\n * @param array|string $args Values for input fields.\n * @param array $inputs Override default display options.\n *\/","file":"default-widgets.php","line":921,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[924],"extract":[925,926],"esc_attr":[928,929],"esc_url":[930],"sprintf":[939],"__":[939],"_e":[943,946,949,958,961,964],"selected":[953],"str_replace":[969],"array_keys":[967]},"used_by":{"WP_Widget_RSS::form":[807]}},"date_i18n":{"doc":"\/**\n * Retrieve the date in localized format, based on timestamp.\n *\n * If the locale specifies the locale month and weekday, then the locale will\n * take over the format for the date. If it isn't, then the date format string\n * will be used instead.\n *\n * @since 0.71\n *\n * @param string $dateformatstring Format to display the date.\n * @param int $unixtimestamp Optional. Unix timestamp.\n * @param bool $gmt Optional, default is false. Whether to convert to GMT for time.\n * @return string The date, translated if locale specifies it.\n *\/","file":"functions.php","line":84,"missingDoc":false,"filters":["'date_i18n'"],"uses":{"current_time":[90],"time":[92],"get_month":[105],"get_month_abbrev":[106],"get_weekday":[107],"get_weekday_abbrev":[108],"get_meridiem":[109,110],"preg_replace":[112,113,114,115,116,117,132],"backslashit":[112,113,114,115,116,117,132],"substr":[119,133],"strlen":[119,133],"implode":[122],"get_option":[124],"timezone_open":[126],"date_create":[127],"date_format":[130],"strpos":[129],"preg_match":[123]},"used_by":{"wp_widget_rss_output":[885],"mysql2date":[39],"wp_get_archives":[1006,1007],"wp_post_revision_title":[1310]}},"WP_Widget_Tag_Cloud::__construct":{"doc":"","file":"default-widgets.php","line":1029,"missingDoc":true,"filters":[],"uses":{"__":[1030,1031]},"used_by":[]},"WP_Widget_Tag_Cloud::widget":{"doc":"","file":"default-widgets.php","line":1034,"missingDoc":true,"filters":["'widget_title'","'widget_tag_cloud_args'"],"uses":{"extract":[1035],"_get_current_taxonomy":[1036],"__":[1041],"get_taxonomy":[1043],"wp_tag_cloud":[1053]},"used_by":[]},"WP_Widget_Tag_Cloud::update":{"doc":"","file":"default-widgets.php","line":1058,"missingDoc":true,"filters":[],"uses":{"strip_tags":[1059],"stripslashes":[1059,1060]},"used_by":[]},"WP_Widget_Tag_Cloud::form":{"doc":"","file":"default-widgets.php","line":1064,"missingDoc":true,"filters":[],"uses":{"_get_current_taxonomy":[1065],"get_field_id":[1067,1068,1069,1070],"_e":[1067,1069],"get_field_name":[1068,1070],"esc_attr":[1068,1076],"get_taxonomy":[1072],"selected":[1076],"get_taxonomies":[1071]},"used_by":[]},"WP_Widget_Tag_Cloud::_get_current_taxonomy":{"doc":"","file":"default-widgets.php","line":1081,"missingDoc":true,"filters":[],"uses":{"taxonomy_exists":[1082]},"used_by":[]},"WP_Nav_Menu_Widget::__construct":{"doc":"","file":"default-widgets.php","line":1096,"missingDoc":true,"filters":[],"uses":{"__":[1097,1098]},"used_by":[]},"WP_Nav_Menu_Widget::widget":{"doc":"","file":"default-widgets.php","line":1101,"missingDoc":true,"filters":["'widget_title'"],"uses":{"wp_get_nav_menu_object":[1103],"wp_nav_menu":[1115]},"used_by":[]},"wp_get_nav_menu_object":{"doc":"\/**\n * Returns a navigation menu object.\n *\n * @since 3.0.0\n *\n * @uses get_term\n * @uses get_term_by\n *\n * @param string $menu Menu id, slug or name\n * @return mixed false if $menu param isn't supplied or term does not exist, menu object if successful.\n *\/","file":"nav-menu.php","line":21,"missingDoc":false,"filters":[],"uses":{"get_term":[25],"get_term_by":[28,31]},"used_by":{"WP_Nav_Menu_Widget::widget":[1103],"wp_nav_menu":[148,152],"is_nav_menu":[53],"wp_delete_nav_menu":[178],"wp_update_nav_menu_object":[209],"wp_update_nav_menu_item":[277],"wp_get_nav_menu_items":[473]}},"wp_nav_menu":{"doc":"\/**\n * Displays a navigation menu.\n *\n * Optional $args contents:\n *\n * menu - The menu that is desired. Accepts (matching in order) id, slug, name. Defaults to blank.\n * menu_class - CSS class to use for the ul element which forms the menu. Defaults to 'menu'.\n * menu_id - The ID that is applied to the ul element which forms the menu. Defaults to the menu slug, incremented.\n * container - Whether to wrap the ul, and what to wrap it with. Defaults to 'div'.\n * container_class - the class that is applied to the container. Defaults to 'menu-{menu slug}-container'.\n * container_id - The ID that is applied to the container. Defaults to blank.\n * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallback.\n * before - Text before the link text.\n * after - Text after the link text.\n * link_before - Text before the link.\n * link_after - Text after the link.\n * echo - Whether to echo the menu or return it. Defaults to echo.\n * depth - how many levels of the hierarchy are to be included. 0 means all. Defaults to 0.\n * walker - allows a custom walker to be specified.\n * theme_location - the location in the theme to be used. Must be registered with register_nav_menu() in order to be selectable by the user.\n * items_wrap - How the list items should be wrapped. Defaults to a ul with an id and class. Uses printf() format with numbered placeholders.\n *\n * @since 3.0.0\n *\n * @param array $args Arguments\n *\/","file":"nav-menu-template.php","line":136,"missingDoc":false,"filters":["'wp_nav_menu_args'","'wp_nav_menu_container_allowedtags'","'wp_nav_menu_objects'","'wp_nav_menu_items'","\"wp_nav_menu_{$menu->slug}_items\"","'wp_nav_menu'"],"uses":{"wp_parse_args":[143],"wp_get_nav_menu_object":[148,152],"get_nav_menu_locations":[151],"wp_get_nav_menus":[156],"wp_get_nav_menu_items":[158,167],"is_wp_error":[166,177,181],"call_user_func":[179],"is_callable":[178],"esc_attr":[191,192,231,231],"in_array":[189,216],"_wp_menu_item_classes_by_context":[198],"walk_nav_menu_tree":[208],"preg_replace":[218],"preg_match":[217],"sprintf":[231]},"used_by":{"WP_Nav_Menu_Widget::widget":[1115]}},"WP_Nav_Menu_Widget::update":{"doc":"","file":"default-widgets.php","line":1120,"missingDoc":true,"filters":[],"uses":{"strip_tags":[1121],"stripslashes":[1121]},"used_by":[]},"WP_Nav_Menu_Widget::form":{"doc":"","file":"default-widgets.php","line":1126,"missingDoc":true,"filters":[],"uses":{"get_terms":[1131],"sprintf":[1135],"__":[1135],"admin_url":[1135],"get_field_id":[1140,1141,1144,1145],"_e":[1140,1144],"get_field_name":[1141,1145],"selected":[1149]},"used_by":[]},"wp_widgets_init":{"doc":"\/**\n * Register all of the default WordPress widgets on startup.\n *\n * Calls 'widgets_init' action after all of the WordPress widgets have been\n * registered.\n *\n * @since 2.2.0\n *\/","file":"default-widgets.php","line":1167,"missingDoc":false,"filters":["'widgets_init'"],"uses":{"is_blog_installed":[1168],"register_widget":[1171,1173,1175,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196],"get_option":[1177]},"used_by":[]},"is_blog_installed":{"doc":"\/**\n * Test whether blog is already installed.\n *\n * The cache will be checked first. If you have a cache plugin, which saves the\n * cache values, then this will work. If you use the default WordPress cache,\n * and the database goes away, then you might have problems.\n *\n * Checks for the option siteurl for whether WordPress is installed.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @return bool Whether blog is already installed.\n *\/","file":"functions.php","line":1104,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[1108],"suppress_errors":[1111,1120,1132,1157],"wp_load_alloptions":[1113],"defined":[1112,1129,1140,1142],"get_var":[1117],"wp_cache_set":[1123,1159],"tables":[1137],"get_results":[1145],"wp_load_translations_early":[1150],"sprintf":[1153],"__":[1153],"dead_db":[1154]},"used_by":{"wp_widgets_init":[1168],"wp_not_installed":[427,429]}},"register_widget":{"doc":"\/**\n * Register a widget\n *\n * Registers a WP_Widget widget\n *\n * @since 2.8.0\n *\n * @see WP_Widget\n * @see WP_Widget_Factory\n * @uses WP_Widget_Factory\n *\n * @param string $widget_class The name of a class that extends WP_Widget\n *\/","file":"widgets.php","line":428,"missingDoc":false,"filters":[],"uses":{"register":[431]},"used_by":{"wp_widgets_init":[1171,1173,1175,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196]}},"get_postdata":{"doc":"\/**\n * Entire Post data.\n *\n * @since 0.71\n * @deprecated 1.5.1\n * @deprecated Use get_post()\n * @see get_post()\n *\n * @param int $postid\n * @return array\n *\/","file":"deprecated.php","line":26,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[27],"get_post":[29]},"used_by":[]},"start_wp":{"doc":"\/**\n * Sets up the WordPress Loop.\n *\n * @since 1.0.1\n * @deprecated 1.5\n * @deprecated Use The Loop - {@link http:\/\/codex.wordpress.org\/The_Loop Use new WordPress Loop}\n *\/","file":"deprecated.php","line":59,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[62],"__":[62],"next_post":[65],"setup_postdata":[67],"get_post":[67]},"used_by":[]},"next_post":{"doc":"\/**\n * Prints link to the next post.\n *\n * @since 0.71\n * @deprecated 2.0\n * @deprecated Use next_post_link()\n * @see next_post_link()\n *\n * @param string $format\n * @param string $next\n * @param string $title\n * @param string $in_same_cat\n * @param int $limitnext\n * @param string $excluded_categories\n *\/","file":"deprecated.php","line":173,"missingDoc":false,"filters":["'the_title'"],"uses":{"_deprecated_function":[174],"get_next_post":[181],"get_permalink":[186],"str_replace":[190]},"used_by":{"start_wp":[65],"WP_Query::the_post":[2853]}},"setup_postdata":{"doc":"\/**\n * Set up global post data.\n *\n * @since 1.5.0\n *\n * @param object $post Post data.\n * @uses do_action_ref_array() Calls 'the_post'\n * @return bool True when finished.\n *\/","file":"query.php","line":3625,"missingDoc":false,"filters":["'the_post'"],"uses":{"get_userdata":[3630],"mysql2date":[3632,3633],"get_query_var":[3635],"is_single":[3638],"is_page":[3638],"is_feed":[3638],"str_replace":[3645,3646,3647],"explode":[3648],"count":[3649],"strpos":[3641]},"used_by":{"start_wp":[67],"wp_reset_postdata":[120],"WP_Query::the_post":[2854]}},"the_category_ID":{"doc":"\/**\n * Return or Print Category ID.\n *\n * @since 0.71\n * @deprecated 0.71\n * @deprecated use get_the_category()\n * @see get_the_category()\n *\n * @param bool $echo\n * @return null|int\n *\/","file":"deprecated.php","line":81,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[82],"get_the_category":[85]},"used_by":[]},"the_category_head":{"doc":"\/**\n * Print category with optional text before and after.\n *\n * @since 0.71\n * @deprecated 0.71\n * @deprecated use get_the_category_by_ID()\n * @see get_the_category_by_ID()\n *\n * @param string $before\n * @param string $after\n *\/","file":"deprecated.php","line":105,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[108],"get_the_category":[111],"get_the_category_by_ID":[115]},"used_by":[]},"previous_post":{"doc":"\/**\n * Prints link to the previous post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use previous_post_link()\n * @see previous_post_link()\n *\n * @param string $format\n * @param string $previous\n * @param string $title\n * @param string $in_same_cat\n * @param int $limitprev\n * @param string $excluded_categories\n *\/","file":"deprecated.php","line":136,"missingDoc":false,"filters":["'the_title'"],"uses":{"_deprecated_function":[138],"get_previous_post":[145],"get_permalink":[150],"str_replace":[154]},"used_by":[]},"get_previous_post":{"doc":"\/**\n * Retrieve previous post that is adjacent to current post.\n *\n * @since 1.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1093,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post":[1094]},"used_by":{"previous_post":[145]}},"get_next_post":{"doc":"\/**\n * Retrieve next post that is adjacent to current post.\n *\n * @since 1.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1106,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post":[1107]},"used_by":{"next_post":[181]}},"user_can_create_post":{"doc":"\/**\n * Whether user can create a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":207,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[208],"get_userdata":[210]},"used_by":{"user_can_set_post_date":[300]}},"user_can_create_draft":{"doc":"\/**\n * Whether user can create a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":227,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[228],"get_userdata":[230]},"used_by":[]},"user_can_edit_post":{"doc":"\/**\n * Whether user can edit a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":247,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[248],"get_userdata":[250,252],"get_post":[251]},"used_by":{"user_can_delete_post":[280],"user_can_edit_post_date":[320],"user_can_edit_post_comments":[340]}},"user_can_delete_post":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":276,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[277],"user_can_edit_post":[280]},"used_by":[]},"user_can_set_post_date":{"doc":"\/**\n * Whether user can set new posts' dates.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $blog_id Not Used\n * @param int $category_id Not Used\n * @return bool\n *\/","file":"deprecated.php","line":296,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[297],"get_userdata":[299],"user_can_create_post":[300]},"used_by":[]},"user_can_edit_post_date":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can edit $post_id's date\n *\/","file":"deprecated.php","line":316,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[317],"get_userdata":[319],"user_can_edit_post":[320]},"used_by":[]},"user_can_edit_post_comments":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can edit $post_id's comments\n *\/","file":"deprecated.php","line":336,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[337],"user_can_edit_post":[340]},"used_by":{"user_can_delete_post_comments":[360]}},"user_can_delete_post_comments":{"doc":"\/**\n * Whether user can delete a post.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $post_id\n * @param int $blog_id Not Used\n * @return bool returns true if $user_id can delete $post_id's comments\n *\/","file":"deprecated.php","line":356,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[357],"user_can_edit_post_comments":[360]},"used_by":[]},"user_can_edit_user":{"doc":"\/**\n * Can user can edit other user.\n *\n * @since 1.5\n * @deprecated 2.0\n * @deprecated Use current_user_can()\n * @see current_user_can()\n *\n * @param int $user_id\n * @param int $other_user\n * @return bool\n *\/","file":"deprecated.php","line":375,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[376],"get_userdata":[378,379]},"used_by":[]},"get_linksbyname":{"doc":"\/**\n * Gets the links associated with category $cat_name.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name Optional. The category name to use. If no match is found uses all.\n * @param string $before Optional. The html to output before the link.\n * @param string $after Optional. The html to output after the link.\n * @param string $between Optional. The html to output between the link\/image and its description. Not used if no image or $show_images is true.\n * @param bool $show_images Optional. Whether to show images (if defined).\n * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 'description' or 'rating'. Or maybe owner.\n *\t\tIf you start the name with an underscore the order will be reversed. You can also specify 'rand' as the order which will return links in a\n *\t\trandom order.\n * @param bool $show_description Optional. Whether to show the description if show_images=false\/not defined.\n * @param bool $show_rating Optional. Show rating stars\/chars.\n * @param int $limit\t\tOptional. Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Optional. Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":407,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[410],"get_term_by":[413],"get_links":[417]},"used_by":{"get_linksbyname_withrating":[564]}},"wp_get_linksbyname":{"doc":"\/**\n * Gets the links associated with the named category.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $category The category to use.\n * @param string $args\n * @return bool|null\n *\/","file":"deprecated.php","line":432,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[433],"wp_parse_args":[446],"wp_list_bookmarks":[448]},"used_by":[]},"get_linkobjectsbyname":{"doc":"\/**\n * Gets an array of link objects associated with category $cat_name.\n *\n * <code>\n *\t$links = get_linkobjectsbyname('fred');\n *\tforeach ($links as $link) {\n * \t\techo '<li>'.$link->link_name.'<\/li>';\n *\t}\n * <\/code>\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name The category name to use. If no match is found uses all.\n * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', 'description', or 'rating'.\n *\t\tOr maybe owner. If you start the name with an underscore the order will be reversed. You can also\n *\t\tspecify 'rand' as the order which will return links in a random order.\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @return unknown\n *\/","file":"deprecated.php","line":473,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[474],"get_term_by":[477],"get_linkobjects":[481]},"used_by":[]},"get_linkobjects":{"doc":"\/**\n * Gets an array of link objects associated with category n.\n *\n * Usage:\n * <code>\n *\t$links = get_linkobjects(1);\n *\tif ($links) {\n *\t\tforeach ($links as $link) {\n *\t\t\techo '<li>'.$link->link_name.'<br \/>'.$link->link_description.'<\/li>';\n *\t\t}\n *\t}\n * <\/code>\n *\n * Fields are:\n * <ol>\n *\t<li>link_id<\/li>\n *\t<li>link_url<\/li>\n *\t<li>link_name<\/li>\n *\t<li>link_image<\/li>\n *\t<li>link_target<\/li>\n *\t<li>link_category<\/li>\n *\t<li>link_description<\/li>\n *\t<li>link_visible<\/li>\n *\t<li>link_owner<\/li>\n *\t<li>link_rating<\/li>\n *\t<li>link_updated<\/li>\n *\t<li>link_rel<\/li>\n *\t<li>link_notes<\/li>\n * <\/ol>\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @return unknown\n *\/","file":"deprecated.php","line":527,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[528],"get_bookmarks":[530]},"used_by":{"get_linkobjectsbyname":[481]}},"get_linksbyname_withrating":{"doc":"\/**\n * Gets the links associated with category 'cat_name' and display rating stars\/chars.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param string $cat_name The category name to use. If no match is found uses all\n * @param string $before The html to output before the link\n * @param string $after The html to output after the link\n * @param string $between The html to output between the link\/image and its description. Not used if no image or show_images is true\n * @param bool $show_images Whether to show images (if defined).\n * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param bool $show_description Whether to show the description if show_images=false\/not defined\n * @param int $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":560,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[562],"get_linksbyname":[564]},"used_by":[]},"get_links_withrating":{"doc":"\/**\n * Gets the links associated with category n and display rating stars\/chars.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_bookmarks()\n * @see get_bookmarks()\n *\n * @param int $category The category to use. If no category supplied uses all\n * @param string $before The html to output before the link\n * @param string $after The html to output after the link\n * @param string $between The html to output between the link\/image and its description. Not used if no image or show_images == true\n * @param bool $show_images Whether to show images (if defined).\n * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url',\n *\t\t'description', or 'rating'. Or maybe owner. If you start the name with an\n *\t\tunderscore the order will be reversed. You can also specify 'rand' as the\n *\t\torder which will return links in a random order.\n * @param bool $show_description Whether to show the description if show_images=false\/not defined.\n * @param string $limit Limit to X entries. If not specified, all entries are shown.\n * @param int $show_updated Whether to show last updated timestamp\n *\/","file":"deprecated.php","line":588,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[590],"get_links":[592]},"used_by":[]},"get_autotoggle":{"doc":"\/**\n * Gets the auto_toggle setting.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated No alternative function available\n *\n * @param int $id The category to get. If no category supplied uses 0\n * @return int Only returns 0.\n *\/","file":"deprecated.php","line":605,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[606]},"used_by":[]},"list_cats":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_list_categories()\n * @see wp_list_categories()\n *\n * @param int $optionall\n * @param string $all\n * @param string $sort_column\n * @param string $sort_order\n * @param string $file\n * @param bool $list\n * @param int $optiondates\n * @param int $optioncount\n * @param int $hide_empty\n * @param int $use_desc_for_title\n * @param bool $children\n * @param int $child_of\n * @param int $categories\n * @param int $recurse\n * @param string $feed\n * @param string $feed_image\n * @param string $exclude\n * @param bool $hierarchical\n * @return unknown\n *\/","file":"deprecated.php","line":636,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[639],"compact":[641],"wp_list_cats":[643]},"used_by":[]},"wp_list_cats":{"doc":"\/**\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use wp_list_categories()\n * @see wp_list_categories()\n *\n * @param string|array $args\n * @return unknown\n *\/","file":"deprecated.php","line":655,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[656],"wp_parse_args":[658],"wp_list_categories":[675]},"used_by":{"list_cats":[643]}},"dropdown_cats":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_dropdown_categories()\n * @see wp_dropdown_categories()\n *\n * @param int $optionall\n * @param string $all\n * @param string $orderby\n * @param string $order\n * @param int $show_last_update\n * @param int $show_count\n * @param int $hide_empty\n * @param bool $optionnone\n * @param int $selected\n * @param int $exclude\n * @return unknown\n *\/","file":"deprecated.php","line":696,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[699],"__":[707],"compact":[709],"add_query_arg":[711],"wp_dropdown_categories":[712]},"used_by":[]},"list_authors":{"doc":"\/**\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use wp_list_authors()\n * @see wp_list_authors()\n *\n * @param bool $optioncount\n * @param bool $exclude_admin\n * @param bool $show_fullname\n * @param bool $hide_empty\n * @param string $feed\n * @param string $feed_image\n * @return unknown\n *\/","file":"deprecated.php","line":729,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[730],"compact":[732],"wp_list_authors":[733]},"used_by":[]},"wp_get_post_cats":{"doc":"\/**\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_get_post_categories()\n * @see wp_get_post_categories()\n *\n * @param int $blogid Not Used\n * @param int $post_ID\n * @return unknown\n *\/","file":"deprecated.php","line":746,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[747],"wp_get_post_categories":[748]},"used_by":[]},"wp_set_post_cats":{"doc":"\/**\n * Sets the categories that the post id belongs to.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_set_post_categories()\n * @see wp_set_post_categories()\n *\n * @param int $blogid Not used\n * @param int $post_ID\n * @param array $post_categories\n * @return unknown\n *\/","file":"deprecated.php","line":764,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[765],"wp_set_post_categories":[766]},"used_by":[]},"get_archives":{"doc":"\/**\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_get_archives()\n * @see wp_get_archives()\n *\n * @param string $type\n * @param string $limit\n * @param string $format\n * @param string $before\n * @param string $after\n * @param bool $show_post_count\n * @return unknown\n *\/","file":"deprecated.php","line":783,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[784],"compact":[785],"wp_get_archives":[786]},"used_by":[]},"get_author_link":{"doc":"\/**\n * Returns or Prints link to the author's posts.\n *\n * @since 1.2\n * @deprecated 2.1\n * @deprecated Use get_author_posts_url()\n * @see get_author_posts_url()\n *\n * @param bool $echo Optional.\n * @param int $author_id Required.\n * @param string $author_nicename Optional.\n * @return string|null\n *\/","file":"deprecated.php","line":802,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[803],"get_author_posts_url":[805]},"used_by":[]},"link_pages":{"doc":"\/**\n * Print list of pages based on arguments.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use wp_link_pages()\n * @see wp_link_pages()\n *\n * @param string $before\n * @param string $after\n * @param string $next_or_number\n * @param string $nextpagelink\n * @param string $previouspagelink\n * @param string $pagelink\n * @param string $more_file\n * @return string\n *\/","file":"deprecated.php","line":829,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[831],"compact":[833],"wp_link_pages":[834]},"used_by":[]},"wp_link_pages":{"doc":"\/**\n * The formatted output of a list of pages.\n *\n * Displays page links for paginated posts (i.e. includes the <!--nextpage-->.\n * Quicktag one or more times). This tag must be within The Loop.\n *\n * The defaults for overwriting are:\n * 'next_or_number' - Default is 'number' (string). Indicates whether page\n * numbers should be used. Valid values are number and next.\n * 'nextpagelink' - Default is 'Next Page' (string). Text for link to next page.\n * of the bookmark.\n * 'previouspagelink' - Default is 'Previous Page' (string). Text for link to\n * previous page, if available.\n * 'pagelink' - Default is '%' (String).Format string for page numbers. The % in\n * the parameter string will be replaced with the page number, so Page %\n * generates \"Page 1\", \"Page 2\", etc. Defaults to %, just the page number.\n * 'before' - Default is '<p> Pages:' (string). The html or text to prepend to\n * each bookmarks.\n * 'after' - Default is '<\/p>' (string). The html or text to append to each\n * bookmarks.\n * 'link_before' - Default is '' (string). The html or text to prepend to each\n * Pages link inside the <a> tag. Also prepended to the current item, which\n * is not linked.\n * 'link_after' - Default is '' (string). The html or text to append to each\n * Pages link inside the <a> tag. Also appended to the current item, which\n * is not linked.\n *\n * @since 1.2.0\n * @access private\n *\n * @param string|array $args Optional. Overwrite the defaults.\n * @return string Formatted output in HTML.\n *\/","file":"post-template.php","line":631,"missingDoc":false,"filters":["'wp_link_pages_args'"],"uses":{"__":[633,635,636],"wp_parse_args":[640],"extract":[642],"str_replace":[651],"_wp_link_page":[654,666,671]},"used_by":{"link_pages":[834]}},"get_settings":{"doc":"\/**\n * Get value based on option.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_option()\n * @see get_option()\n *\n * @param string $option\n * @return string\n *\/","file":"deprecated.php","line":848,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[849],"get_option":[851]},"used_by":{"WP_Widget::_register":[128],"WP_Widget::display_callback":[175],"WP_Widget::update_callback":[195],"WP_Widget::form_callback":[254]}},"permalink_link":{"doc":"\/**\n * Print the permalink of the current post in the loop.\n *\n * @since 0.71\n * @deprecated 1.2\n * @deprecated Use the_permalink()\n * @see the_permalink()\n *\/","file":"deprecated.php","line":862,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[863],"the_permalink":[864]},"used_by":[]},"permalink_single_rss":{"doc":"\/**\n * Print the permalink to the RSS feed.\n *\n * @since 0.71\n * @deprecated 2.3\n * @deprecated Use the_permalink_rss()\n * @see the_permalink_rss()\n *\n * @param string $deprecated\n *\/","file":"deprecated.php","line":877,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[878],"the_permalink_rss":[879]},"used_by":[]},"the_permalink_rss":{"doc":"\/**\n * Display the permalink to the post for use in feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.3.0\n * @uses apply_filters() Call 'the_permalink_rss' on the post permalink\n *\/","file":"feed.php","line":190,"missingDoc":false,"filters":["'the_permalink_rss'"],"uses":{"esc_url":[191],"get_permalink":[191]},"used_by":{"permalink_single_rss":[879],"__main":[75,39,46,50,33,39,41,26,29,36]}},"wp_get_links":{"doc":"\/**\n * Gets the links associated with category.\n *\n * @see get_links() for argument information that can be used in $args\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $args a query string\n * @return null|string\n *\/","file":"deprecated.php","line":894,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[895],"add_query_arg":[899],"strpos":[897],"wp_parse_args":[918],"wp_list_bookmarks":[920]},"used_by":[]},"get_linkrating":{"doc":"\/**\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use sanitize_bookmark_field()\n * @see sanitize_bookmark_field()\n *\n * @param object $link\n * @return unknown\n *\/","file":"deprecated.php","line":1113,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1114],"sanitize_bookmark_field":[1115]},"used_by":{"get_links":[1018]}},"get_links_list":{"doc":"\/**\n * Output entire list of links by category.\n *\n * Output a list of all links, listed by category, using the settings in\n * $wpdb->linkcategories and output it as a nested HTML unordered list.\n *\n * @since 1.0.1\n * @deprecated 2.1\n * @deprecated Use wp_list_bookmarks()\n * @see wp_list_bookmarks()\n *\n * @param string $order Sort link categories by 'name' or 'id'\n *\/","file":"deprecated.php","line":1042,"missingDoc":false,"filters":["'link_category'"],"uses":{"_deprecated_function":[1043],"strtolower":[1045],"substr":[1051,1049],"get_categories":[1057],"get_links":[1067]},"used_by":[]},"links_popup_script":{"doc":"\/**\n * Show the link to the links popup and the number of links.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated {@internal Use function instead is unknown}}\n *\n * @param string $text the text of the link\n * @param int $width the width of the popup window\n * @param int $height the height of the popup window\n * @param string $file the page to open in the popup window\n * @param bool $count the number of links in the db\n *\/","file":"deprecated.php","line":1088,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1089],"get_var":[1092]},"used_by":[]},"get_linkcatname":{"doc":"\/**\n * Gets the name of category by id.\n *\n * @since 0.71\n * @deprecated 2.1\n * @deprecated Use get_category()\n * @see get_category()\n *\n * @param int $id The category to get. If no category supplied uses 0\n * @return string\n *\/","file":"deprecated.php","line":1129,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1130],"wp_get_link_cats":[1137],"is_array":[1139],"get_category":[1144]},"used_by":[]},"comments_rss_link":{"doc":"\/**\n * Print RSS comment feed link.\n *\n * @since 1.0.1\n * @deprecated 2.5\n * @deprecated Use post_comments_feed_link()\n * @see post_comments_feed_link()\n *\n * @param string $link_text\n *\/","file":"deprecated.php","line":1158,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1159],"post_comments_feed_link":[1160]},"used_by":[]},"post_comments_feed_link":{"doc":"\/**\n * Display the comment feed link for a post.\n *\n * Prints out the comment feed link for a post. Link text is placed in the\n * anchor. If no link text is specified, default text is used. If no post ID is\n * specified, the current post is used.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param string $link_text Descriptive text.\n * @param int $post_id Optional post ID. Default to current post.\n * @param string $feed Optional. Feed format.\n * @return string Link to the comment feed for the current post.\n*\/","file":"link-template.php","line":511,"missingDoc":false,"filters":["'post_comments_feed_link_html'"],"uses":{"esc_url":[512],"get_post_comments_feed_link":[512],"__":[514]},"used_by":{"comments_rss_link":[1160]}},"get_category_rss_link":{"doc":"\/**\n * Print\/Return link to category RSS2 feed.\n *\n * @since 1.2\n * @deprecated 2.5\n * @deprecated Use get_category_feed_link()\n * @see get_category_feed_link()\n *\n * @param bool $echo\n * @param int $cat_ID\n * @return string|null\n *\/","file":"deprecated.php","line":1175,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1176],"get_category_feed_link":[1178]},"used_by":[]},"get_author_rss_link":{"doc":"\/**\n * Print\/Return link to author RSS feed.\n *\n * @since 1.2\n * @deprecated 2.5\n * @deprecated Use get_author_feed_link()\n * @see get_author_feed_link()\n *\n * @param bool $echo\n * @param int $author_id\n * @return string|null\n *\/","file":"deprecated.php","line":1197,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1198],"get_author_feed_link":[1200]},"used_by":[]},"comments_rss":{"doc":"\/**\n * Return link to the post RSS feed.\n *\n * @since 1.5\n * @deprecated 2.2\n * @deprecated Use get_post_comments_feed_link()\n * @see get_post_comments_feed_link()\n *\n * @return string\n *\/","file":"deprecated.php","line":1216,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1217],"esc_url":[1218],"get_post_comments_feed_link":[1218]},"used_by":[]},"create_user":{"doc":"\/**\n * An alias of wp_create_user().\n *\n * @since 2.0\n * @deprecated 2.0\n * @deprecated Use wp_create_user()\n * @see wp_create_user()\n *\n * @param string $username The user's username.\n * @param string $password The user's password.\n * @param string $email The user's email (optional).\n * @return int The new user's ID.\n *\/","file":"deprecated.php","line":1234,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1235],"wp_create_user":[1236]},"used_by":[]},"wp_create_user":{"doc":"\/**\n * A simpler way of inserting an user into the database.\n *\n * Creates a new user with just the username, password, and email. For more\n * complex user creation use wp_insert_user() to specify more information.\n *\n * @since 2.0.0\n * @see wp_insert_user() More complete way to create a new user\n *\n * @param string $username The user's username.\n * @param string $password The user's password.\n * @param string $email The user's email (optional).\n * @return int The new user's ID.\n *\/","file":"user.php","line":1506,"missingDoc":false,"filters":[],"uses":{"esc_sql":[1507,1508],"compact":[1511],"wp_insert_user":[1512]},"used_by":{"create_user":[1236],"wpmu_create_user":[915]}},"gzip_compression":{"doc":"\/**\n * Unused function.\n *\n * @deprecated 2.5\n*\/","file":"deprecated.php","line":1244,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1245]},"used_by":[]},"get_commentdata":{"doc":"\/**\n * Retrieve an array of comment data about comment $comment_ID.\n *\n * @since 0.71\n * @deprecated 2.7\n * @deprecated Use get_comment()\n * @see get_comment()\n *\n * @param int $comment_ID The ID of the comment\n * @param int $no_cache Whether to use the cache (cast to bool)\n * @param bool $include_unapproved Whether to include unapproved comments\n * @return array The comment data\n *\/","file":"deprecated.php","line":1262,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1263],"get_comment":[1264]},"used_by":[]},"get_catname":{"doc":"\/**\n * Retrieve the category name by the category ID.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use get_cat_name()\n * @see get_cat_name()\n *\n * @param int $cat_ID Category ID\n * @return string category name\n *\/","file":"deprecated.php","line":1278,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1279],"get_cat_name":[1280]},"used_by":[]},"get_category_children":{"doc":"\/**\n * Retrieve category children list separated before and after the term IDs.\n *\n * @since 1.2.0\n * @deprecated 2.8\n * @deprecated Use get_term_children()\n * @see get_term_children()\n *\n * @param int $id Category ID to retrieve children.\n * @param string $before Optional. Prepend before category term ID.\n * @param string $after Optional, default is empty string. Append after category term ID.\n * @param array $visited Optional. Category Term IDs that have already been added.\n * @return string\n *\/","file":"deprecated.php","line":1297,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1298],"get_all_category_ids":[1304],"get_category":[1309],"is_wp_error":[1310],"get_category_children":[1315],"in_array":[1312]},"used_by":{"get_category_children":[1315]}},"get_the_author_description":{"doc":"\/**\n * Retrieve the description of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('description')\n * @see get_the_author_meta()\n *\n * @return string The author's description.\n *\/","file":"deprecated.php","line":1331,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1332],"get_the_author_meta":[1333]},"used_by":[]},"the_author_description":{"doc":"\/**\n * Display the description of the author of the current post.\n *\n * @since 1.0.0\n * @deprecated 2.8\n * @deprecated Use the_author_meta('description')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1344,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1345],"the_author_meta":[1346]},"used_by":[]},"get_the_author_login":{"doc":"\/**\n * Retrieve the login name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('login')\n * @see get_the_author_meta()\n *\n * @return string The author's login name (username).\n *\/","file":"deprecated.php","line":1359,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1360],"get_the_author_meta":[1361]},"used_by":[]},"the_author_login":{"doc":"\/**\n * Display the login name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('login')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1372,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1373],"the_author_meta":[1374]},"used_by":[]},"get_the_author_firstname":{"doc":"\/**\n * Retrieve the first name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('first_name')\n * @see get_the_author_meta()\n *\n * @return string The author's first name.\n *\/","file":"deprecated.php","line":1387,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1388],"get_the_author_meta":[1389]},"used_by":[]},"the_author_firstname":{"doc":"\/**\n * Display the first name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('first_name')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1400,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1401],"the_author_meta":[1402]},"used_by":[]},"get_the_author_lastname":{"doc":"\/**\n * Retrieve the last name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('last_name')\n * @see get_the_author_meta()\n *\n * @return string The author's last name.\n *\/","file":"deprecated.php","line":1415,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1416],"get_the_author_meta":[1417]},"used_by":[]},"the_author_lastname":{"doc":"\/**\n * Display the last name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('last_name')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1428,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1429],"the_author_meta":[1430]},"used_by":[]},"get_the_author_nickname":{"doc":"\/**\n * Retrieve the nickname of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('nickname')\n * @see get_the_author_meta()\n *\n * @return string The author's nickname.\n *\/","file":"deprecated.php","line":1443,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1444],"get_the_author_meta":[1445]},"used_by":[]},"the_author_nickname":{"doc":"\/**\n * Display the nickname of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('nickname')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1456,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1457],"the_author_meta":[1458]},"used_by":[]},"get_the_author_email":{"doc":"\/**\n * Retrieve the email of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('email')\n * @see get_the_author_meta()\n *\n * @return string The author's username.\n *\/","file":"deprecated.php","line":1471,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1472],"get_the_author_meta":[1473]},"used_by":[]},"the_author_email":{"doc":"\/**\n * Display the email of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('email')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1484,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1485],"the_author_meta":[1486]},"used_by":[]},"get_the_author_icq":{"doc":"\/**\n * Retrieve the ICQ number of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('icq')\n * @see get_the_author_meta()\n *\n * @return string The author's ICQ number.\n *\/","file":"deprecated.php","line":1499,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1500],"get_the_author_meta":[1501]},"used_by":[]},"the_author_icq":{"doc":"\/**\n * Display the ICQ number of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('icq')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1512,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1513],"the_author_meta":[1514]},"used_by":[]},"get_the_author_yim":{"doc":"\/**\n * Retrieve the Yahoo! IM name of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('yim')\n * @see get_the_author_meta()\n *\n * @return string The author's Yahoo! IM name.\n *\/","file":"deprecated.php","line":1527,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1528],"get_the_author_meta":[1529]},"used_by":[]},"the_author_yim":{"doc":"\/**\n * Display the Yahoo! IM name of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('yim')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1540,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1541],"the_author_meta":[1542]},"used_by":[]},"get_the_author_msn":{"doc":"\/**\n * Retrieve the MSN address of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('msn')\n * @see get_the_author_meta()\n *\n * @return string The author's MSN address.\n *\/","file":"deprecated.php","line":1555,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1556],"get_the_author_meta":[1557]},"used_by":[]},"the_author_msn":{"doc":"\/**\n * Display the MSN address of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('msn')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1568,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1569],"the_author_meta":[1570]},"used_by":[]},"get_the_author_aim":{"doc":"\/**\n * Retrieve the AIM address of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('aim')\n * @see get_the_author_meta()\n *\n * @return string The author's AIM address.\n *\/","file":"deprecated.php","line":1583,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1584],"get_the_author_meta":[1585]},"used_by":[]},"the_author_aim":{"doc":"\/**\n * Display the AIM address of the author of the current post.\n *\n * @since 0.71\n * @see the_author_meta()\n * @deprecated 2.8\n * @deprecated Use the_author_meta('aim')\n *\/","file":"deprecated.php","line":1596,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1597],"the_author_meta":[1598]},"used_by":[]},"get_author_name":{"doc":"\/**\n * Retrieve the specified author's preferred display name.\n *\n * @since 1.0.0\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('display_name')\n * @see get_the_author_meta()\n *\n * @param int $auth_id The ID of the author.\n * @return string The author's display name.\n *\/","file":"deprecated.php","line":1612,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1613],"get_the_author_meta":[1614]},"used_by":[]},"get_the_author_url":{"doc":"\/**\n * Retrieve the URL to the home page of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('url')\n * @see get_the_author_meta()\n *\n * @return string The URL to the author's page.\n *\/","file":"deprecated.php","line":1627,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1628],"get_the_author_meta":[1629]},"used_by":[]},"the_author_url":{"doc":"\/**\n * Display the URL to the home page of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('url')\n * @see the_author_meta()\n *\/","file":"deprecated.php","line":1640,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1641],"the_author_meta":[1642]},"used_by":[]},"get_the_author_ID":{"doc":"\/**\n * Retrieve the ID of the author of the current post.\n *\n * @since 1.5\n * @deprecated 2.8\n * @deprecated Use get_the_author_meta('ID')\n * @see get_the_author_meta()\n *\n * @return int The author's ID.\n *\/","file":"deprecated.php","line":1655,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1656],"get_the_author_meta":[1657]},"used_by":[]},"the_author_ID":{"doc":"\/**\n * Display the ID of the author of the current post.\n *\n * @since 0.71\n * @deprecated 2.8\n * @deprecated Use the_author_meta('ID')\n * @see the_author_meta()\n*\/","file":"deprecated.php","line":1668,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1669],"the_author_meta":[1670]},"used_by":[]},"the_content_rss":{"doc":"\/**\n * Display the post content for the feed.\n *\n * For encoding the html or the $encode_html parameter, there are three possible\n * values. '0' will make urls footnotes and use make_url_footnote(). '1' will\n * encode special characters and automatically display all of the content. The\n * value of '2' will strip all HTML tags from the content.\n *\n * Also note that you cannot set the amount of words and not set the html\n * encoding. If that is the case, then the html encoding will default to 2,\n * which will strip all HTML tags.\n *\n * To restrict the amount of words of the content, you can use the cut\n * parameter. If the content is less than the amount, then there won't be any\n * dots added to the end. If there is content left over, then dots will be added\n * and the rest of the content will be removed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'the_content_rss' on the content before processing.\n * @see get_the_content() For the $more_link_text, $stripteaser, and $more_file\n *\t\tparameters.\n *\n * @deprecated 2.9.0\n * @deprecated Use the_content_feed()\n * @see the_content_feed()\n *\n * @param string $more_link_text Optional. Text to display when more content is available but not displayed.\n * @param int|bool $stripteaser Optional. Default is 0.\n * @param string $more_file Optional.\n * @param int $cut Optional. Amount of words to keep for the content.\n * @param int $encode_html Optional. How to encode the content.\n *\/","file":"deprecated.php","line":1707,"missingDoc":false,"filters":["'the_content_rss'"],"uses":{"_deprecated_function":[1708],"get_the_content":[1709],"esc_html":[1714],"make_url_footnote":[1717],"strip_tags":[1719],"explode":[1722],"count":[1727,1723],"str_replace":[1737]},"used_by":[]},"get_the_content":{"doc":"\/**\n * Retrieve the post content.\n *\n * @since 0.71\n *\n * @param string $more_link_text Optional. Content for when there is more text.\n * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.\n * @return string\n *\/","file":"post-template.php","line":180,"missingDoc":false,"filters":["'the_content_more_link'"],"uses":{"get_post":[183],"__":[186],"get_the_password_form":[193],"post_password_required":[192],"count":[196,195,214],"explode":[200],"strip_tags":[202],"wp_kses_no_null":[202],"trim":[202],"preg_match":[199],"strpos":[208],"get_permalink":[219],"force_balance_tags":[220],"preg_replace_callback":[225]},"used_by":{"the_content_rss":[1709],"get_the_content_feed":[149],"wp_trim_excerpt":[2148],"the_content":[165]}},"make_url_footnote":{"doc":"\/**\n * Strip HTML and put links at the bottom of stripped content.\n *\n * Searches for all of the links, strips them out of the content, and places\n * them at the bottom of the content with numbers.\n *\n * @since 0.71\n * @deprecated 2.9.0\n *\n * @param string $content Content to get links\n * @return string HTML stripped out of content with links at the bottom.\n *\/","file":"deprecated.php","line":1753,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1754],"preg_match_all":[1755],"count":[1757],"str_replace":[1762],"strtolower":[1763,1763],"substr":[1763,1763],"get_option":[1763],"strip_tags":[1766]},"used_by":{"the_content_rss":[1717]}},"_c":{"doc":"\/**\n * Retrieve translated string with vertical bar context\n *\n * Quite a few times, there will be collisions with similar translatable text\n * found in more than two places but with different translated context.\n *\n * In order to use the separate contexts, the _c() function is used and the\n * translatable string uses a pipe ('|') which has the context the string is in.\n *\n * When the translated string is returned, it is everything before the pipe, not\n * including the pipe character. If there is no pipe in the translated text then\n * everything is returned.\n *\n * @since 2.2.0\n * @deprecated 2.9.0\n * @deprecated Use _x()\n * @see _x()\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated context string without pipe\n *\/","file":"deprecated.php","line":1793,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1794],"before_last_bar":[1795],"translate":[1795]},"used_by":[]},"before_last_bar":{"doc":"","file":"l10n.php","line":72,"missingDoc":true,"filters":[],"uses":{"strrpos":[73],"substr":[77]},"used_by":{"_c":[1795],"translate_with_context":[1814],"_nc":[1831],"translate_user_role":[531]}},"translate_with_context":{"doc":"\/**\n * Translates $text like translate(), but assumes that the text\n * contains a context after its last vertical bar.\n *\n * @since 2.5\n * @uses translate()\n * @deprecated 3.0.0\n * @deprecated Use _x()\n * @see _x()\n *\n * @param string $text Text to translate\n * @param string $domain Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"deprecated.php","line":1812,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1813],"before_last_bar":[1814],"translate":[1814]},"used_by":[]},"_nc":{"doc":"\/**\n * A version of _n(), which supports contexts.\n * Strips everything from the translation after the last bar.\n *\n * @since 2.7.0\n * @deprecated 3.0.0\n * @deprecated Use _nx()\n * @see _nx()\n * @see _n() For parameters.\n * @see _c() For parameters. _c() is deprecated.\n *\n *\/","file":"deprecated.php","line":1829,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1830],"before_last_bar":[1831],"_n":[1831]},"used_by":[]},"__ngettext":{"doc":"\/**\n * Retrieve the plural or single form based on the amount.\n *\n * @since 1.2.0\n * @deprecated 2.8.0\n * @deprecated Use _n()\n * @see _n()\n *\/","file":"deprecated.php","line":1842,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1843],"func_get_args":[1844],"call_user_func_array":[1845]},"used_by":[]},"__ngettext_noop":{"doc":"\/**\n * Register plural strings in POT file, but don't translate them.\n *\n * @since 2.5\n * @deprecated 2.8.0\n * @deprecated Use _n_noop()\n * @see _n_noop()\n *\/","file":"deprecated.php","line":1856,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1857],"func_get_args":[1858],"call_user_func_array":[1859]},"used_by":[]},"get_alloptions":{"doc":"\/**\n * Retrieve all autoload options, or all options if no autoloaded ones exist.\n *\n * @since 1.0.0\n * @deprecated 3.0.0\n * @deprecated Use wp_load_alloptions())\n * @see wp_load_alloptions()\n *\n * @return array List of all options.\n *\/","file":"deprecated.php","line":1873,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1874],"wp_load_alloptions":[1875]},"used_by":[]},"wp_load_alloptions":{"doc":"\/**\n * Loads and caches all autoloaded options, if available or all options.\n *\n * @since 2.2.0\n * @package WordPress\n * @subpackage Option\n *\n * @return array List of all options.\n *\/","file":"option.php","line":135,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[139],"defined":[138,152],"is_multisite":[138,152],"suppress_errors":[144,147],"get_results":[146,145],"wp_cache_add":[153]},"used_by":{"get_alloptions":[1875],"_wp_specialchars":[393],"is_blog_installed":[1113],"get_option":[53],"update_option":[249],"add_option":[322],"delete_option":[373],"get_transient":[455]}},"get_the_attachment_link":{"doc":"\/**\n * Retrieve HTML content of attachment image with link.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_link()\n * @see wp_get_attachment_link()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default is false. Whether to use full size image.\n * @param array $max_dims Optional. Max image dimensions.\n * @param bool $permalink Optional, default is false. Whether to include permalink to image.\n * @return string\n *\/","file":"deprecated.php","line":1892,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1893],"get_post":[1895],"__":[1898],"wp_get_attachment_url":[1897],"get_attachment_link":[1901],"esc_attr":[1903],"get_attachment_innerHTML":[1905]},"used_by":[]},"get_attachment_innerHTML":{"doc":"\/**\n * Retrieve HTML content of image element.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image()\n * @see wp_get_attachment_image()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full size image.\n * @param array $max_dims Optional. Dimensions of image.\n * @return string\n *\/","file":"deprecated.php","line":2023,"missingDoc":false,"filters":["'attachment_innerHTML'"],"uses":{"_deprecated_function":[2024],"get_post":[2026],"get_attachment_icon":[2029],"esc_attr":[2032]},"used_by":{"get_the_attachment_link":[1905]}},"get_attachment_icon_src":{"doc":"\/**\n * Retrieve icon URL and Path.\n *\n * @since 2.1.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image_src()\n * @see wp_get_attachment_image_src()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full image.\n * @return array Icon URL and full path to file, respectively.\n *\/","file":"deprecated.php","line":1921,"missingDoc":false,"filters":["'icon_dir'"],"uses":{"_deprecated_function":[1922],"get_post":[1924],"get_attached_file":[1927],"basename":[1932,1944],"wp_attachment_is_image":[1934],"wp_get_attachment_url":[1937],"wp_mime_type_icon":[1940],"get_template_directory":[1943],"wp_get_attachment_thumb_url":[1929]},"used_by":{"get_attachment_icon":[1972]}},"get_attached_file":{"doc":"\/**\n * Retrieve attached file path based on attachment ID.\n *\n * You can optionally send it through the 'get_attached_file' filter, but by\n * default it will just return the file path unfiltered.\n *\n * The function works by getting the single post meta name, named\n * '_wp_attached_file' and returning it. This is a convenience function to\n * prevent looking up the meta name and provide a mechanism for sending the\n * attached filename through a filter.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'get_attached_file' on file path and attachment ID.\n *\n * @param int $attachment_id Attachment ID.\n * @param bool $unfiltered Whether to apply filters.\n * @return string|bool The file path to the attached file, or false if the attachment does not exist.\n *\/","file":"post.php","line":185,"missingDoc":false,"filters":["'get_attached_file'"],"uses":{"get_post_meta":[186],"strpos":[188],"preg_match":[188],"wp_upload_dir":[188]},"used_by":{"get_attachment_icon_src":[1927],"wp_load_image":[3222],"wp_delete_attachment":[4093],"wp_get_attachment_thumb_file":[4254],"wp_attachment_is_image":[4301]}},"wp_attachment_is_image":{"doc":"\/**\n * Check if the attachment is an image.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @return bool\n *\/","file":"post.php","line":4296,"missingDoc":false,"filters":[],"uses":{"get_post":[4298],"get_attached_file":[4301],"preg_match":[4304],"strtolower":[4304],"substr":[4308],"in_array":[4308]},"used_by":{"get_attachment_icon_src":[1934],"image_downsize":[138]}},"wp_mime_type_icon":{"doc":"\/**\n * Retrieve the icon for a MIME type.\n *\n * @since 2.1.0\n *\n * @param string|int $mime MIME type or attachment ID.\n * @return string|bool\n *\/","file":"post.php","line":4321,"missingDoc":false,"filters":["'icon_dir'","'icon_dir_uri'","'icon_dirs'","'wp_mime_type_icon'"],"uses":{"wp_cache_get":[4323,4346],"is_numeric":[4322,4328,4391],"preg_replace":[4332,4377],"wp_ext2type":[4335],"get_post":[4330],"includes_url":[4350],"array_keys":[4354,4385],"array_shift":[4355,4356],"readdir":[4358],"basename":[4359,4377],"substr":[4360,4362,4380,4381],"is_dir":[4363],"in_array":[4362],"strtolower":[4362],"closedir":[4369],"opendir":[4357],"wp_cache_add":[4372,4392],"is_array":[4348],"strpos":[4380,4381],"str_replace":[4382],"wp_match_mime_types":[4385]},"used_by":{"get_attachment_icon_src":[1940],"wp_get_attachment_image_src":[516],"wp_prepare_attachment_for_js":[1345]}},"wp_get_attachment_thumb_url":{"doc":"\/**\n * Retrieve URL for an attachment thumbnail.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID\n * @return string|bool False on failure. Thumbnail URL on success.\n *\/","file":"post.php","line":4269,"missingDoc":false,"filters":["'wp_get_attachment_thumb_url'"],"uses":{"get_post":[4271],"wp_get_attachment_url":[4273],"image_downsize":[4276],"wp_get_attachment_thumb_file":[4280],"str_replace":[4283],"basename":[4283,4283]},"used_by":{"get_attachment_icon_src":[1929]}},"get_attachment_icon":{"doc":"\/**\n * Retrieve HTML content of icon attachment image element.\n *\n * @since 2.0.0\n * @deprecated 2.5.0\n * @deprecated Use wp_get_attachment_image()\n * @see wp_get_attachment_image()\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default to false. Whether to have full size image.\n * @param array $max_dims Optional. Dimensions of image.\n * @return string HTML content.\n *\/","file":"deprecated.php","line":1966,"missingDoc":false,"filters":["'attachment_max_dims'","'attachment_icon'"],"uses":{"_deprecated_function":[1967],"get_post":[1969],"get_attachment_icon_src":[1972],"getimagesize":[1980],"file_exists":[1978],"esc_attr":[2003]},"used_by":{"get_attachment_innerHTML":[2029]}},"sanitize_url":{"doc":"\/**\n * Performs esc_url() for database or redirect usage.\n *\n * @since 2.3.1\n * @deprecated 2.8.0\n * @deprecated Use esc_url_raw()\n * @see esc_url_raw()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols An array of acceptable protocols.\n * @return string The cleaned URL.\n *\/","file":"deprecated.php","line":2066,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2067],"esc_url_raw":[2068]},"used_by":[]},"clean_url":{"doc":"\/**\n * Checks and cleans a URL.\n *\n * A number of characters are removed from the URL. If the URL is for displaying\n * (the default behaviour) ampersands are also replaced. The 'clean_url' filter\n * is applied to the returned cleaned URL.\n *\n * @since 1.2.0\n * @deprecated 3.0.0\n * @deprecated Use esc_url()\n * @see Alias for esc_url()\n *\n * @param string $url The URL to be cleaned.\n * @param array $protocols Optional. An array of acceptable protocols.\n * @param string $context Optional. How the URL will be used. Default is 'display'.\n * @return string The cleaned $url after the 'clean_url' filter is applied.\n *\/","file":"deprecated.php","line":2088,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2090,2092],"esc_url":[2093]},"used_by":[]},"js_escape":{"doc":"\/**\n * Escape single quotes, specialchar double quotes, and fix line endings.\n *\n * The filter 'js_escape' is also applied by esc_js()\n *\n * @since 2.0.4\n * @deprecated 2.8.0\n * @deprecated Use esc_js()\n * @see esc_js()\n *\n * @param string $text The text to be escaped.\n * @return string Escaped text.\n *\/","file":"deprecated.php","line":2109,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2110],"esc_js":[2111]},"used_by":[]},"wp_specialchars":{"doc":"\/**\n * Escaping for HTML blocks.\n *\n * @deprecated 2.8.0\n * @deprecated Use esc_html()\n * @see esc_html()\n *\/","file":"deprecated.php","line":2121,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2122],"func_get_args":[2124],"call_user_func_array":[2125],"esc_html":[2127],"func_num_args":[2123]},"used_by":[]},"attribute_escape":{"doc":"\/**\n * Escaping for HTML attributes.\n *\n * @since 2.0.6\n * @deprecated 2.8.0\n * @deprecated Use esc_attr()\n * @see esc_attr()\n *\n * @param string $text\n * @return string\n *\/","file":"deprecated.php","line":2142,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2143],"esc_attr":[2144]},"used_by":[]},"register_sidebar_widget":{"doc":"\/**\n * Register widget for sidebar with backwards compatibility.\n *\n * Allows $name to be an array that accepts either three elements to grab the\n * first element and the third for the name or just uses the first element of\n * the array for the name.\n *\n * Passes to {@link wp_register_sidebar_widget()} after argument list and\n * backwards compatibility is complete.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_register_sidebar_widget()\n * @see wp_register_sidebar_widget()\n *\n * @param string|int $name Widget ID.\n * @param callback $output_callback Run when widget is called.\n * @param string $classname Classname widget option.\n * @param mixed $params,... Widget parameters.\n *\/","file":"deprecated.php","line":2167,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2168],"sprintf":[2172],"count":[2171],"is_array":[2170],"sanitize_title":[2177],"is_string":[2179],"array_slice":[2181],"func_get_args":[2181],"array_merge":[2184],"call_user_func_array":[2186]},"used_by":[]},"unregister_sidebar_widget":{"doc":"\/**\n * Alias of {@link wp_unregister_sidebar_widget()}.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_unregister_sidebar_widget()\n * @see wp_unregister_sidebar_widget()\n *\n * @param int|string $id Widget ID.\n *\/","file":"deprecated.php","line":2199,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2200],"wp_unregister_sidebar_widget":[2201]},"used_by":[]},"wp_unregister_sidebar_widget":{"doc":"\/**\n * Remove widget from sidebar.\n *\n * @since 2.2.0\n *\n * @param int|string $id Widget ID.\n *\/","file":"widgets.php","line":702,"missingDoc":false,"filters":["'wp_unregister_sidebar_widget'"],"uses":{"wp_register_sidebar_widget":[705],"wp_unregister_widget_control":[706]},"used_by":{"unregister_sidebar_widget":[2201]}},"register_widget_control":{"doc":"\/**\n * Registers widget control callback for customizing options.\n *\n * Allows $name to be an array that accepts either three elements to grab the\n * first element and the third for the name or just uses the first element of\n * the array for the name.\n *\n * Passes to {@link wp_register_widget_control()} after the argument list has\n * been compiled.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_register_widget_control()\n * @see wp_register_widget_control()\n *\n * @param int|string $name Sidebar ID.\n * @param callback $control_callback Widget control callback to display and process form.\n * @param int $width Widget width.\n * @param int $height Widget height.\n *\/","file":"deprecated.php","line":2224,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2225],"sprintf":[2229],"count":[2228],"is_array":[2227],"sanitize_title":[2234],"array_slice":[2240],"func_get_args":[2240],"array_merge":[2243],"call_user_func_array":[2245]},"used_by":[]},"unregister_widget_control":{"doc":"\/**\n * Alias of {@link wp_unregister_widget_control()}.\n *\n * @since 2.2.0\n * @deprecated 2.8.0\n * @deprecated Use wp_unregister_widget_control()\n * @see wp_unregister_widget_control()\n *\n * @param int|string $id Widget ID.\n *\/","file":"deprecated.php","line":2258,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2259],"wp_unregister_widget_control":[2260]},"used_by":[]},"wp_unregister_widget_control":{"doc":"\/**\n * Remove control callback for widget.\n *\n * @since 2.2.0\n * @uses wp_register_widget_control() Unregisters by using empty callback.\n *\n * @param int|string $id Widget ID.\n *\/","file":"widgets.php","line":829,"missingDoc":false,"filters":[],"uses":{"wp_register_widget_control":[830]},"used_by":{"unregister_widget_control":[2260],"wp_unregister_sidebar_widget":[706]}},"delete_usermeta":{"doc":"\/**\n * Remove user meta data.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use delete_user_meta()\n * @see delete_user_meta()\n *\n * @param int $user_id User ID.\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @return bool True deletion completed and false if user_id is not a number.\n *\/","file":"deprecated.php","line":2276,"missingDoc":false,"filters":["'delete_usermeta'","'deleted_usermeta'"],"uses":{"_deprecated_function":[2277],"is_numeric":[2279],"preg_replace":[2281],"serialize":[2284],"is_array":[2283],"is_object":[2283],"trim":[2285],"get_row":[2287],"prepare":[2287,2293,2295],"query":[2293,2295],"clean_user_cache":[2297],"wp_cache_delete":[2298]},"used_by":{"update_usermeta":[2390]}},"clean_user_cache":{"doc":"\/**\n * Clean all user caches\n *\n * @since 3.0.0\n *\n * @param WP_User|int $user User object or ID to be cleaned from the cache\n *\/","file":"user.php","line":1176,"missingDoc":false,"filters":[],"uses":{"is_numeric":[1177],"exists":[1180],"wp_cache_delete":[1183,1184,1185,1186]},"used_by":{"delete_usermeta":[2297],"update_usermeta":[2405]}},"get_usermeta":{"doc":"\/**\n * Retrieve user metadata.\n *\n * If $user_id is not a number, then the function will fail over with a 'false'\n * boolean return value. Other returned values depend on whether there is only\n * one item to be returned, which be that single item type. If there is more\n * than one metadata value, then it will be list of metadata values.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use get_user_meta()\n * @see get_user_meta()\n *\n * @param int $user_id User ID\n * @param string $meta_key Optional. Metadata key.\n * @return mixed\n *\/","file":"deprecated.php","line":2323,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2324],"preg_replace":[2332],"wp_cache_get":[2333],"get_col":[2338,2340],"prepare":[2338,2340],"array_map":[2350],"count":[2352]},"used_by":[]},"update_usermeta":{"doc":"\/**\n * Update metadata of user.\n *\n * There is no need to serialize values, they will be serialized if it is\n * needed. The metadata key can only be a string with underscores. All else will\n * be removed.\n *\n * Will remove the metadata, if the meta value is empty.\n *\n * @since 2.0.0\n * @deprecated 3.0.0\n * @deprecated Use update_user_meta()\n * @see update_user_meta()\n *\n * @param int $user_id User ID\n * @param string $meta_key Metadata key.\n * @param mixed $meta_value Metadata value.\n * @return bool True on successful update, false on failure.\n *\/","file":"deprecated.php","line":2377,"missingDoc":false,"filters":["'update_usermeta'","'added_usermeta'","'updated_usermeta'"],"uses":{"_deprecated_function":[2378],"is_numeric":[2380],"preg_replace":[2382],"stripslashes":[2386],"is_string":[2385],"maybe_serialize":[2387],"delete_usermeta":[2390],"get_row":[2393],"prepare":[2393],"insert":[2399],"compact":[2399,2401,2401],"update":[2401],"clean_user_cache":[2405],"wp_cache_delete":[2406]},"used_by":[]},"maybe_serialize":{"doc":"\/**\n * Serialize data, if needed.\n *\n * @since 2.0.5\n *\n * @param mixed $data Data that might be serialized.\n * @return mixed A scalar data\n *\/","file":"functions.php","line":314,"missingDoc":false,"filters":[],"uses":{"serialize":[316,321],"is_array":[315],"is_object":[315],"is_serialized":[320]},"used_by":{"update_usermeta":[2387],"add_metadata":[60],"update_metadata":[139,145],"delete_metadata":[207],"update_metadata_by_mid":[420],"update_option":[245],"add_option":[317],"add_site_option":[827],"update_site_option":[918]}},"get_users_of_blog":{"doc":"\/**\n * Get users for the blog.\n *\n * For setups that use the multi-blog feature. Can be used outside of the\n * multi-blog feature.\n *\n * @since 2.2.0\n * @deprecated 3.1.0\n * @uses $wpdb WordPress database object for queries\n * @uses $blog_id The Blog id of the blog for those that use more than one blog\n *\n * @param int $id Blog ID.\n * @return array List of users that are part of that Blog ID\n *\/","file":"deprecated.php","line":2430,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2431],"get_blog_prefix":[2436],"get_results":[2437]},"used_by":[]},"automatic_feed_links":{"doc":"\/**\n * Enable\/disable automatic general feed link outputting.\n *\n * @since 2.8.0\n * @deprecated 3.0.0\n * @deprecated Use add_theme_support( 'automatic-feed-links' )\n *\n * @param boolean $add Optional, default is true. Add or remove links. Defaults to true.\n *\/","file":"deprecated.php","line":2450,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2451],"add_theme_support":[2454],"remove_action":[2456]},"used_by":[]},"add_theme_support":{"doc":"\/**\n * Allows a theme to register its support of a certain feature\n *\n * Must be called in the theme's functions.php file to work.\n * If attached to a hook, it must be after_setup_theme.\n * The init hook may be too late for some features.\n *\n * @since 2.9.0\n * @param string $feature the feature being added\n *\/","file":"theme.php","line":1251,"missingDoc":false,"filters":[],"uses":{"array_slice":[1257],"func_get_args":[1257],"func_num_args":[1254],"array_intersect":[1262],"array_keys":[1262],"get_post_format_slugs":[1262],"is_array":[1261,1270,1347],"add_theme_support":[1266],"wp_parse_args":[1294,1299,1363,1366],"define":[1310,1315,1320,1325,1330,1371,1376],"defined":[1307,1312,1317,1322,1327,1368,1373]},"used_by":{"automatic_feed_links":[2454],"add_custom_image_header":[3033],"add_custom_background":[3072],"register_nav_menus":[76],"add_editor_style":[1209],"add_theme_support":[1266],"_custom_header_background_just_in_time":[1395,1409],"_remove_theme_support":[1483],"register_sidebar":[572]}},"get_profile":{"doc":"\/**\n * Retrieve user data based on field.\n *\n * @since 1.5.0\n * @deprecated 3.0.0\n * @deprecated Use get_the_author_meta()\n * @see get_the_author_meta()\n *\/","file":"deprecated.php","line":2467,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2468],"get_user_by":[2470],"get_the_author_meta":[2473]},"used_by":[]},"get_user_by":{"doc":"\/**\n * Retrieve user info by a given field\n *\n * @since 2.8.0\n *\n * @param string $field The field to retrieve the user with. id | slug | email | login\n * @param int|string $value A value for $field. A user ID, slug, email address, or login name.\n * @return bool|object False on failure, WP_User object on success\n *\/","file":"pluggable.php","line":135,"missingDoc":false,"filters":[],"uses":{"init":[142]},"used_by":{"get_profile":[2470],"is_site_admin":[51],"get_user_details":[106],"get_user_id_from_string":[1338,1344],"get_userdatabylogin":[52],"get_user_by_email":[69],"wp_setcookie":[91],"get_userdata":[121],"wp_validate_auth_cookie":[540],"get_pages":[3710],"WP_Query::get_posts":[2323],"wp_authenticate_username_password":[87],"username_exists":[1198],"email_exists":[1215]}},"get_usernumposts":{"doc":"\/**\n * Number of posts user has written.\n *\n * @since 0.71\n * @deprecated 3.0.0\n * @deprecated Use count_user_posts()\n * @see count_user_posts()\n *\/","file":"deprecated.php","line":2484,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2485],"count_user_posts":[2486]},"used_by":[]},"funky_javascript_callback":{"doc":"\/**\n * Callback used to change %uXXXX to &#YYY; syntax\n *\n * @since 2.8.0\n * @access private\n * @deprecated 3.0.0\n *\n * @param array $matches Single Match\n * @return string An HTML entity\n *\/","file":"deprecated.php","line":2499,"missingDoc":false,"filters":[],"uses":{"base_convert":[2500]},"used_by":[]},"funky_javascript_fix":{"doc":"\/**\n * Fixes javascript bugs in browsers.\n *\n * Converts unicode characters to HTML numbered entities.\n *\n * @since 1.5.0\n * @uses $is_macIE\n * @uses $is_winIE\n * @deprecated 3.0.0\n *\n * @param string $text Text to be made safe.\n * @return string Fixed text.\n *\/","file":"deprecated.php","line":2516,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2517],"preg_replace_callback":[2522]},"used_by":[]},"is_taxonomy":{"doc":"\/**\n * Checks that the taxonomy name exists.\n *\n * @since 2.3.0\n * @deprecated 3.0.0\n * @deprecated Use taxonomy_exists()\n * @see taxonomy_exists()\n *\n * @param string $taxonomy Name of taxonomy object\n * @return bool Whether the taxonomy exists.\n *\/","file":"deprecated.php","line":2540,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2541],"taxonomy_exists":[2542]},"used_by":[]},"is_term":{"doc":"\/**\n * Check if Term exists.\n *\n * @since 2.3.0\n * @deprecated 3.0.0\n * @deprecated Use term_exists()\n * @see term_exists()\n *\n * @param int|string $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param int $parent ID of parent term under which to confine the exists search.\n * @return mixed Get the term id or Term Object, if exists.\n *\/","file":"deprecated.php","line":2558,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2559],"term_exists":[2560]},"used_by":[]},"term_exists":{"doc":"\/**\n * Check if Term exists.\n *\n * Formerly is_term(), introduced in 2.3.0.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n *\n * @uses $wpdb\n *\n * @param int|string $term The term to check\n * @param string $taxonomy The taxonomy name to use\n * @param int $parent ID of parent term under which to confine the exists search.\n * @return mixed Returns 0 if the term does not exist. Returns the term ID if no taxonomy is specified\n * \tand the term ID exists. Returns an array of the term ID and the taxonomy if the pairing exists.\n *\/","file":"taxonomy.php","line":1481,"missingDoc":false,"filters":[],"uses":{"get_row":[1492,1518,1521],"prepare":[1492,1494,1518,1521,1524,1527],"get_var":[1494,1524,1527],"is_int":[1487],"trim":[1497],"stripslashes":[1497],"sanitize_title":[1499]},"used_by":{"is_term":[2560],"wp_delete_term":[1768,1788],"wp_insert_term":[2106,2089,2086],"wp_set_object_terms":[2194],"wp_unique_term_slug":[2274,2286]}},"is_plugin_page":{"doc":"\/**\n * Is the current admin page generated by a plugin?\n *\n * @since 1.5.0\n * @deprecated 3.1.0\n * @deprecated Use global $plugin_page and\/or get_plugin_page_hookname() hooks.\n *\n * @global $plugin_page\n *\n * @return bool\n *\/","file":"deprecated.php","line":2574,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2575]},"used_by":[]},"update_category_cache":{"doc":"\/**\n * Update the categories cache.\n *\n * This function does not appear to be used anymore or does not appear to be\n * needed. It might be a legacy function left over from when there was a need\n * for updating the category cache.\n *\n * @since 1.5.0\n * @deprecated 3.1.0\n *\n * @return bool Always return True\n *\/","file":"deprecated.php","line":2597,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2598]},"used_by":[]},"wp_timezone_supported":{"doc":"\/**\n * Check for PHP timezone support\n *\n * @since 2.9.0\n * @deprecated 3.2.0\n *\n * @return bool\n *\/","file":"deprecated.php","line":2611,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2612]},"used_by":[]},"the_editor":{"doc":"\/**\n * Display editor: TinyMCE, HTML, or both.\n *\n * @since 2.1.0\n * @deprecated 3.3.0\n * @deprecated Use wp_editor()\n * @see wp_editor()\n *\n * @param string $content Textarea content.\n * @param string $id Optional, default is 'content'. HTML ID attribute value.\n * @param string $prev_id Optional, not used\n * @param bool $media_buttons Optional, default is true. Whether to display media buttons.\n * @param int $tab_index Optional, not used\n *\/","file":"deprecated.php","line":2631,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2632],"wp_editor":[2634]},"used_by":[]},"wp_editor":{"doc":"\/**\n * Renders an editor.\n *\n * Using this function is the proper way to output all needed components for both TinyMCE and Quicktags.\n * _WP_Editors should not be used directly. See http:\/\/core.trac.wordpress.org\/ticket\/17144.\n *\n * NOTE: Once initialized the TinyMCE editor cannot be safely moved in the DOM. For that reason\n * running wp_editor() inside of a metabox is not a good idea unless only Quicktags is used.\n * On the post edit screen several actions can be used to include additional editors\n * containing TinyMCE: 'edit_page_form', 'edit_form_advanced' and 'dbx_post_sidebar'.\n * See http:\/\/core.trac.wordpress.org\/ticket\/19173 for more information.\n *\n * @see wp-includes\/class-wp-editor.php\n * @since 3.3.0\n *\n * @param string $content Initial content for the editor.\n * @param string $editor_id HTML ID attribute value for the textarea and TinyMCE. Can only be \/[a-z]+\/.\n * @param array $settings See _WP_Editors::editor().\n *\/","file":"general-template.php","line":1807,"missingDoc":false,"filters":[],"uses":{"class_exists":[1808]},"used_by":{"the_editor":[2634]}},"get_user_metavalues":{"doc":"\/**\n * Perform the query to get the $metavalues array(s) needed by _fill_user and _fill_many_users\n *\n * @since 3.0.0\n * @deprecated 3.3.0\n *\n * @param array $ids User ID numbers list.\n * @return array of arrays. The array is indexed by user_id, containing $metavalues object arrays.\n *\/","file":"deprecated.php","line":2647,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2648],"array_map":[2652],"update_meta_cache":[2656]},"used_by":[]},"update_meta_cache":{"doc":"\/**\n * Update the metadata cache for the specified objects.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)\n * @param int|array $object_ids array or comma delimited list of object IDs to update cache for\n * @return mixed Metadata cache for the specified objects, or false on failure.\n *\/","file":"meta.php","line":524,"missingDoc":false,"filters":[],"uses":{"_get_meta_table":[528],"esc_sql":[531],"preg_replace":[536],"explode":[537],"is_array":[535,568,570],"array_map":[540],"wp_cache_get":[546],"join":[557],"get_results":[558],"prepare":[558],"intval":[563],"wp_cache_add":[581]},"used_by":{"get_user_metavalues":[2656],"get_metadata":[285],"metadata_exists":[329],"cache_users":[173],"update_postmeta_cache":[4736]}},"sanitize_user_object":{"doc":"\/**\n * Sanitize every user field.\n *\n * If the context is 'raw', then the user object or array will get minimal santization of the int fields.\n *\n * @since 2.3.0\n * @deprecated 3.3.0\n *\n * @param object|array $user The User Object or Array\n * @param string $context Optional, default is 'display'. How to sanitize user fields.\n * @return object|array The now sanitized User Object or Array (will be the same type as $user)\n *\/","file":"deprecated.php","line":2681,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2682],"get_object_vars":[2688],"sanitize_user_field":[2691,2699],"is_string":[2690],"is_numeric":[2690],"array_keys":[2689,2698],"is_a":[2687],"is_object":[2684]},"used_by":[]},"get_boundary_post_rel_link":{"doc":"\/**\n * Get boundary post relational link.\n *\n * Can either be start or end post relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param string $excluded_categories Optional. Excluded categories IDs.\n * @param bool $start Optional, default is true. Whether to display link to first or last post.\n * @return string\n *\/","file":"deprecated.php","line":2720,"missingDoc":false,"filters":["'the_title'","\"{$boundary}_post_rel_link\""],"uses":{"_deprecated_function":[2721],"get_boundary_post":[2723],"__":[2732,2732],"mysql2date":[2734],"get_option":[2734],"str_replace":[2736,2737],"esc_attr":[2741],"get_permalink":[2742]},"used_by":{"start_post_rel_link":[2761]}},"get_boundary_post":{"doc":"\/**\n * Retrieve boundary post.\n *\n * Boundary being either the first or last post by publish date within the constraints specified\n * by $in_same_cat or $excluded_categories.\n *\n * @since 2.8.0\n *\n * @param bool $in_same_cat Optional. Whether returned post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $start Optional. Whether to retrieve first or last post.\n * @return object\n *\/","file":"link-template.php","line":1305,"missingDoc":false,"filters":[],"uses":{"get_post":[1306],"is_single":[1307],"is_attachment":[1307],"explode":[1312],"is_array":[1311],"wp_get_object_terms":[1316],"array_map":[1319],"array_diff":[1320],"implode":[1329],"array_merge":[1329],"get_posts":[1333]},"used_by":{"get_boundary_post_rel_link":[2723]}},"start_post_rel_link":{"doc":"\/**\n * Display relational link for the first post.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param string $excluded_categories Optional. Excluded categories IDs.\n *\/","file":"deprecated.php","line":2758,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2759],"get_boundary_post_rel_link":[2761]},"used_by":[]},"get_index_rel_link":{"doc":"\/**\n * Get site index relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @return string\n *\/","file":"deprecated.php","line":2772,"missingDoc":false,"filters":["'index_rel_link'"],"uses":{"_deprecated_function":[2773],"esc_attr":[2775],"get_bloginfo":[2775,2775],"esc_url":[2775],"user_trailingslashit":[2775]},"used_by":{"index_rel_link":[2788]}},"index_rel_link":{"doc":"\/**\n * Display relational link for the site index.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2785,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2786],"get_index_rel_link":[2788]},"used_by":[]},"get_parent_post_rel_link":{"doc":"\/**\n * Get parent post relational link.\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\n * @param string $title Optional. Link title format.\n * @return string\n *\/","file":"deprecated.php","line":2800,"missingDoc":false,"filters":["'the_title'","'parent_post_rel_link'"],"uses":{"_deprecated_function":[2801],"get_post":[2804],"mysql2date":[2809],"get_option":[2809],"str_replace":[2811,2812],"esc_attr":[2816],"get_permalink":[2817]},"used_by":{"parent_post_rel_link":[2831]}},"parent_post_rel_link":{"doc":"\/**\n * Display relational link for parent item\n *\n * @since 2.8.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2828,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2829],"get_parent_post_rel_link":[2831]},"used_by":[]},"wp_admin_bar_dashboard_view_site_menu":{"doc":"\/**\n * Add the \"Dashboard\"\/\"Visit Site\" menu.\n *\n * @since 3.2.0\n * @deprecated 3.3.0\n *\/","file":"deprecated.php","line":2840,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2841],"get_current_user_id":[2843],"add_menu":[2847,2849,2851],"__":[2847,2849,2851],"home_url":[2847],"is_multisite":[2848],"get_dashboard_url":[2849],"admin_url":[2851],"is_admin":[2846]},"used_by":[]},"get_dashboard_url":{"doc":"\/**\n * Get the URL to the user's dashboard.\n *\n * If a user does not belong to any site, the global user dashboard is used. If the user belongs to the current site,\n * the dashboard for the current site is returned. If the user cannot edit the current site, the dashboard to the user's\n * primary blog is returned.\n *\n * @since 3.1.0\n *\n * @param int $user_id User ID\n * @param string $path Optional path relative to the dashboard. Use only paths known to both blog and user admins.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Dashboard url link with optional path appended.\n *\/","file":"link-template.php","line":2260,"missingDoc":false,"filters":["'user_dashboard_url'"],"uses":{"get_blogs_of_user":[2263],"user_admin_url":[2265,2277],"is_multisite":[2266],"admin_url":[2267,2271],"get_current_blog_id":[2269],"get_active_blog_for_user":[2273],"get_admin_url":[2275],"is_super_admin":[2270,2264],"in_array":[2270],"array_keys":[2270]},"used_by":{"wp_admin_bar_dashboard_view_site_menu":[2849],"get_edit_profile_url":[2301]}},"is_blog_user":{"doc":"\/**\n * Checks if the current user belong to a given blog.\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use is_user_member_of_blog()\n * @see is_user_member_of_blog()\n *\n * @param int $blog_id Blog ID\n * @return bool True if the current users belong to $blog_id, false if not.\n *\/","file":"deprecated.php","line":2866,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2867],"is_user_member_of_blog":[2869],"get_current_user_id":[2869]},"used_by":[]},"debug_fopen":{"doc":"\/**\n * Open the file handle for debugging.\n *\n * @since 0.71\n * @deprecated Use error_log()\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2880,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2881]},"used_by":[]},"debug_fwrite":{"doc":"\/**\n * Write contents to the file used for debugging.\n *\n * @since 0.71\n * @deprecated Use error_log() instead.\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2893,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2894],"error_log":[2896]},"used_by":[]},"debug_fclose":{"doc":"\/**\n * Close the debugging file handle.\n *\n * @since 0.71\n * @deprecated Use error_log()\n * @link http:\/\/www.php.net\/manual\/en\/function.error-log.php\n * @deprecated 3.4.0\n *\/","file":"deprecated.php","line":2907,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2908]},"used_by":[]},"get_themes":{"doc":"\/**\n * Retrieve list of themes with theme data in theme directory.\n *\n * The theme is broken, if it doesn't have a parent theme and is missing either\n * style.css and, or index.php. If the theme has a parent theme then it is\n * broken, if it is missing style.css; index.php is optional.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_themes()\n * @see wp_get_themes()\n *\n * @return array Theme list with theme data.\n *\/","file":"deprecated.php","line":2925,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2926],"wp_get_themes":[2932],"get":[2936],"get_stylesheet":[2938]},"used_by":{"get_theme":[2960]}},"get_theme":{"doc":"\/**\n * Retrieve theme data.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_theme()\n * @see wp_get_theme()\n *\n * @param string $theme Theme name.\n * @return array|null Null, if theme name does not exist. Theme data, if exists.\n *\/","file":"deprecated.php","line":2957,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2958],"get_themes":[2960],"is_array":[2961],"array_key_exists":[2961]},"used_by":[]},"get_current_theme":{"doc":"\/**\n * Retrieve current theme name.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use (string) wp_get_theme()\n * @see wp_get_theme()\n *\n * @return string\n *\/","file":"deprecated.php","line":2976,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2977],"get_option":[2979],"get":[2982],"wp_get_theme":[2982]},"used_by":[]},"clean_pre":{"doc":"\/**\n * Accepts matches array from preg_replace_callback in wpautop() or a string.\n *\n * Ensures that the contents of a <<pre>>...<<\/pre>> HTML block are not\n * converted into paragraphs or line-breaks.\n *\n * @since 1.2.0\n * @deprecated 3.4.0\n *\n * @param array|string $matches The array or string\n * @return string The pre block without paragraph\/line-break conversion.\n *\/","file":"deprecated.php","line":2997,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[2998],"is_array":[3000],"str_replace":[3005,3006,3007]},"used_by":[]},"add_custom_image_header":{"doc":"\/**\n * Add callbacks for image header display.\n *\n * @since 2.1.0\n * @deprecated 3.4.0\n * @deprecated Use add_theme_support('custom-header', $args)\n * @see add_theme_support()\n *\n * @param callback $wp_head_callback Call on 'wp_head' action.\n * @param callback $admin_head_callback Call on custom header administration screen.\n * @param callback $admin_preview_callback Output a custom header image div on the custom header administration screen. Optional.\n *\/","file":"deprecated.php","line":3025,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3026],"add_theme_support":[3033]},"used_by":[]},"remove_custom_image_header":{"doc":"\/**\n * Remove image header support.\n *\n * @since 3.1.0\n * @deprecated 3.4.0\n * @deprecated Use remove_theme_support('custom-header')\n * @see remove_theme_support()\n *\n * @return bool Whether support was removed.\n *\/","file":"deprecated.php","line":3046,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3047],"remove_theme_support":[3048]},"used_by":[]},"remove_theme_support":{"doc":"\/**\n * Allows a theme to de-register its support of a certain feature\n *\n * Should be called in the theme's functions.php file. Generally would\n * be used for child themes to override support from the parent theme.\n *\n * @since 3.0.0\n * @see add_theme_support()\n * @param string $feature the feature being added\n * @return bool Whether feature was removed.\n *\/","file":"theme.php","line":1462,"missingDoc":false,"filters":[],"uses":{"in_array":[1464],"_remove_theme_support":[1467]},"used_by":{"remove_custom_image_header":[3048],"remove_custom_background":[3085]}},"add_custom_background":{"doc":"\/**\n * Add callbacks for background image display.\n *\n * @since 3.0.0\n * @deprecated 3.4.0\n * @deprecated Use add_theme_support('custom-background, $args)\n * @see add_theme_support()\n *\n * @param callback $wp_head_callback Call on 'wp_head' action.\n * @param callback $admin_head_callback Call on custom background administration screen.\n * @param callback $admin_preview_callback Output a custom background image div on the custom background administration screen. Optional.\n *\/","file":"deprecated.php","line":3063,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3064],"add_theme_support":[3072]},"used_by":[]},"remove_custom_background":{"doc":"\/**\n * Remove custom background support.\n *\n * @since 3.1.0\n * @see add_custom_background()\n *\n * @return bool Whether support was removed.\n *\/","file":"deprecated.php","line":3083,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3084],"remove_theme_support":[3085]},"used_by":[]},"get_theme_data":{"doc":"\/**\n * Retrieve theme data from parsed theme file.\n *\n * @since 1.5.0\n * @deprecated 3.4.0\n * @deprecated Use wp_get_theme()\n * @see wp_get_theme()\n *\n * @param string $theme_file Theme file path.\n * @return array Theme data.\n *\/","file":"deprecated.php","line":3099,"missingDoc":false,"filters":["'extra_theme_headers'"],"uses":{"_deprecated_function":[3100],"basename":[3101],"dirname":[3101,3101,3101],"get":[3104,3109,3110,3111,3112,3113,3114,3119],"display":[3105,3106,3107,3108]},"used_by":[]},"update_page_cache":{"doc":"\/**\n * Alias of update_post_cache().\n *\n * @see update_post_cache() Posts and pages are the same, alias is intentional\n *\n * @since 1.5.1\n * @deprecated 3.4.0\n *\n * @param array $pages list of page objects\n *\/","file":"deprecated.php","line":3135,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3136],"update_post_cache":[3138]},"used_by":[]},"update_post_cache":{"doc":"\/**\n * Updates posts in cache.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 1.5.1\n *\n * @param array $posts Array of post objects\n *\/","file":"post.php","line":4615,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[4620]},"used_by":{"update_page_cache":[3138],"get_children":[316],"get_pages":[3811],"update_post_caches":[4690]}},"clean_page_cache":{"doc":"\/**\n * Will clean the page in the cache.\n *\n * Clean (read: delete) page from cache that matches $id. Will also clean cache\n * associated with 'all_page_ids' and 'get_pages'.\n *\n * @since 2.0.0\n * @deprecated 3.4.0\n *\n * @uses do_action() Will call the 'clean_page_cache' hook action.\n *\n * @param int $id Page ID to clean\n *\/","file":"deprecated.php","line":3154,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3155],"clean_post_cache":[3157]},"used_by":[]},"wp_explain_nonce":{"doc":"\/**\n * Retrieve nonce action \"Are you sure\" message.\n *\n * Deprecated in 3.4.1 and 3.5.0. Backported to 3.3.3.\n *\n * @since 2.0.4\n * @deprecated 3.4.1\n * @deprecated Use wp_nonce_ays()\n * @see wp_nonce_ays()\n *\n * @param string $action Nonce action.\n * @return string Are you sure message.\n *\/","file":"deprecated.php","line":3173,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3174],"__":[3175]},"used_by":[]},"sticky_class":{"doc":"\/**\n * Display \"sticky\" CSS class, if a post is sticky.\n *\n * @since 2.7.0\n * @deprecated 3.5.0\n * @deprecated Use post_class()\n * @see post_class()\n *\n * @param int $post_id An optional post ID.\n *\/","file":"deprecated.php","line":3188,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3189],"is_sticky":[3190]},"used_by":[]},"_get_post_ancestors":{"doc":"\/**\n * Retrieve post ancestors.\n *\n * This is no longer needed as WP_Post lazy-loads the ancestors\n * property with get_post_ancestors().\n *\n * @since 2.3.4\n * @deprecated 3.5.0\n * @see get_post_ancestors()\n *\/","file":"deprecated.php","line":3204,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3205]},"used_by":[]},"wp_load_image":{"doc":"\/**\n * Load an image from a string, if PHP supports it.\n *\n * @since 2.1.0\n * @deprecated 3.5.0\n * @see wp_get_image_editor()\n *\n * @param string $file Filename of the image to load.\n * @return resource The resulting image resource on success, Error string on failure.\n *\/","file":"deprecated.php","line":3218,"missingDoc":false,"filters":["'image_memory_limit'"],"uses":{"_deprecated_function":[3219],"get_attached_file":[3222],"is_numeric":[3221],"sprintf":[3225,3235],"__":[3225,3228,3235],"is_file":[3224],"function_exists":[3227],"ini_set":[3231],"imagecreatefromstring":[3232],"file_get_contents":[3232],"is_resource":[3234]},"used_by":[]},"image_resize":{"doc":"\/**\n * Scale down an image to fit a particular size and save a new copy of the image.\n *\n * The PNG transparency will be preserved using the function, as well as the\n * image type. If the file going in is PNG, then the resized image is going to\n * be PNG. The only supported image types are PNG, GIF, and JPEG.\n *\n * Some functionality requires API to exist, so some PHP version may lose out\n * support. This is not the fault of WordPress (where functionality is\n * downgraded, not actual defects), but of your PHP version.\n *\n * @since 2.5.0\n * @deprecated 3.5.0\n * @see wp_get_image_editor()\n *\n * @param string $file Image file path.\n * @param int $max_w Maximum width to resize to.\n * @param int $max_h Maximum height to resize to.\n * @param bool $crop Optional. Whether to crop image or resize.\n * @param string $suffix Optional. File suffix.\n * @param string $dest_path Optional. New image file path.\n * @param int $jpeg_quality Optional, default is 90. Image quality percentage.\n * @return mixed WP_Error on failure. String with new destination path.\n *\/","file":"deprecated.php","line":3264,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3265],"wp_get_image_editor":[3267],"is_wp_error":[3268,3273,3279],"set_quality":[3270],"resize":[3272],"generate_filename":[3276],"save":[3277]},"used_by":[]},"wp_get_image_editor":{"doc":"\/**\n * Returns a WP_Image_Editor instance and loads file into it.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $path Path to file to load\n * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return WP_Image_Editor|WP_Error\n *\/","file":"media.php","line":1163,"missingDoc":false,"filters":[],"uses":{"wp_check_filetype":[1167],"_wp_image_editor_choose":[1175],"load":[1179],"is_wp_error":[1181],"__":[1187]},"used_by":{"image_resize":[3267],"image_make_intermediate_size":[391]}},"wp_get_single_post":{"doc":"\/**\n * Retrieve a single post, based on post ID.\n *\n * Has categories in 'post_category' property or key. Has tags in 'tags_input'\n * property or key.\n *\n * @since 1.0.0\n * @deprecated 3.5.0\n * @see get_post()\n *\n * @param int $postid Post ID.\n * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A.\n * @return object|array Post object or array holding post contents and information\n *\/","file":"deprecated.php","line":3299,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3300],"get_post":[3301]},"used_by":[]},"user_pass_ok":{"doc":"\/**\n * Check that the user login name and password is correct.\n *\n * @since 0.71\n * @deprecated 3.5.0\n * @deprecated Use wp_authenticate()\n * @see wp_authenticate()\n *\n * @param string $user_login User name.\n * @param string $user_pass User password.\n * @return bool False if does not authenticate, true if username and password authenticates.\n *\/","file":"deprecated.php","line":3316,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3317],"wp_authenticate":[3318],"is_wp_error":[3319]},"used_by":[]},"_save_post_hook":{"doc":"\/**\n * Callback formerly fired on the save_post hook. No longer needed.\n *\n * @since 2.3.0\n * @deprecated 3.5.0\n *\/","file":"deprecated.php","line":3331,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"gd_edit_image_support":{"doc":"\/**\n * Check if the installed version of GD supports particular image type\n *\n * @since 2.9.0\n * @deprecated 3.5.0\n * @see wp_image_editor_supports()\n *\n * @param string $mime_type\n * @return bool\n *\/","file":"deprecated.php","line":3343,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[3344],"imagetypes":[3349,3351,3353],"function_exists":[3358,3360,3362,3346]},"used_by":[]},"feed_content_type":{"doc":"\/**\n * Return the content type for specified feed type.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.8.0\n *\/","file":"feed.php","line":501,"missingDoc":false,"filters":["'feed_content_type'"],"uses":{"get_default_feed":[503]},"used_by":{"__main":[8,8,8,8,8,8],"feed_links":[1609,1610],"feed_links_extra":[1672]}},"bloginfo_rss":{"doc":"\/**\n * Display RSS container for the bloginfo function.\n *\n * You can retrieve anything that you can using the get_bloginfo() function.\n * Everything will be stripped of tags and characters converted, when the values\n * are retrieved for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'bloginfo_rss' hook with two parameters.\n * @see get_bloginfo() For the list of possible values to display.\n *\n * @param string $show See get_bloginfo() for possible values.\n *\/","file":"feed.php","line":48,"missingDoc":false,"filters":["'bloginfo_rss'"],"uses":{"get_bloginfo_rss":[49]},"used_by":{"__main":[13,25,30,34,38,38,39,40,57,75,80,15,16,19,20,24,24,39,50,21,22,23,24,14,15,16,19,29,30,24,26,27,29]}},"ent2ncr":{"doc":"\/**\n * Converts named entities into numbered entities.\n *\n * @since 1.5.1\n *\n * @param string $text The text within which entities will be converted.\n * @return string Text with converted entities.\n *\/","file":"formatting.php","line":2209,"missingDoc":false,"filters":["'pre_ent2ncr'"],"uses":{"str_replace":[2476],"array_keys":[2476],"array_values":[2476]},"used_by":{"__main":[19,21,23,52,54,22,24,26,44,46,54]}},"get_the_title_rss":{"doc":"\/**\n * Retrieve the current post title for the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.0.0\n * @uses apply_filters() Calls 'the_title_rss' on the post title.\n *\n * @return string Current post title.\n *\/","file":"feed.php","line":115,"missingDoc":false,"filters":["'the_title_rss'"],"uses":{"get_the_title":[116]},"used_by":{"__main":[19,22],"the_title_rss":[130]}},"get_bloginfo_rss":{"doc":"\/**\n * RSS container for the bloginfo function.\n *\n * You can retrieve anything that you can using the get_bloginfo() function.\n * Everything will be stripped of tags and characters converted, when the values\n * are retrieved for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.5.1\n * @uses apply_filters() Calls 'get_bloginfo_rss' hook with two parameters.\n * @see get_bloginfo() For the list of possible values to display.\n *\n * @param string $show See get_bloginfo() for possible values.\n * @return string\n *\/","file":"feed.php","line":28,"missingDoc":false,"filters":["'get_bloginfo_rss'"],"uses":{"strip_tags":[29],"get_bloginfo":[29],"convert_chars":[30]},"used_by":{"__main":[21,23,24,26],"bloginfo_rss":[49],"get_the_generator":[2196,2199,2202,2208]}},"get_search_query":{"doc":"\/**\n * Retrieve the contents of the search WordPress query variable.\n *\n * The search query string is passed through {@link esc_attr()}\n * to ensure that it is safe for placing in an html attribute.\n *\n * @since 2.3.0\n * @uses esc_attr()\n *\n * @param bool $escaped Whether the result is escaped. Default true.\n * \tOnly use when you are later escaping it. Do not use unescaped.\n * @return string\n *\/","file":"general-template.php","line":1827,"missingDoc":false,"filters":["'get_search_query'"],"uses":{"get_query_var":[1828],"esc_attr":[1830]},"used_by":{"__main":[21,34,24,44],"get_search_form":[163],"feed_links_extra":[1664],"the_search_query":[1844],"get_search_link":[747]}},"get_wp_title_rss":{"doc":"\/**\n * Retrieve the blog title for the feed title.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n * @uses apply_filters() Calls 'get_wp_title_rss' hook on title.\n * @uses wp_title() See function for $sep parameter usage.\n *\n * @param string $sep Optional.How to separate the title. See wp_title() for more info.\n * @return string Error message on failure or blog title on success.\n *\/","file":"feed.php","line":82,"missingDoc":false,"filters":["'get_wp_title_rss'"],"uses":{"wp_title":[83],"get_error_message":[85],"is_wp_error":[84]},"used_by":{"__main":[23,26],"wp_title_rss":[102]}},"comments_link_feed":{"doc":"\/**\n * Outputs the link to the comments for the current post in an xml safe way\n *\n * @since 3.0.0\n * @return none\n *\/","file":"feed.php","line":200,"missingDoc":false,"filters":[],"uses":{"esc_url":[201],"get_comments_link":[201]},"used_by":{"__main":[30,37]}},"get_search_comments_feed_link":{"doc":"\/**\n * Retrieve the permalink for the comments feed of the search results.\n *\n * @since 2.5.0\n *\n * @param string $search_query Optional. Search query.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":804,"missingDoc":false,"filters":["'search_feed_link'"],"uses":{"get_default_feed":[808],"get_search_feed_link":[810],"get_search_permastruct":[812],"add_query_arg":[815,817]},"used_by":{"__main":[35,36]}},"have_comments":{"doc":"\/**\n * Whether there are comments to loop over.\n *\n * @see WP_Query::have_comments()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":801,"missingDoc":false,"filters":[],"uses":{"have_comments":[803]},"used_by":{"__main":[44,44,36,36,25],"have_comments":[803]}},"the_comment":{"doc":"\/**\n * Iterate comment index in the comment loop.\n *\n * @see WP_Query::the_comment()\n * @since 2.2.0\n * @uses $wp_query\n *\n * @return object\n *\/","file":"query.php","line":815,"missingDoc":false,"filters":[],"uses":{"the_comment":[817]},"used_by":{"__main":[44,36],"the_comment":[817]}},"get_comment_author_rss":{"doc":"\/**\n * Retrieve the current comment author for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.0.0\n * @uses apply_filters() Calls 'comment_author_rss' hook on comment author.\n * @uses get_comment_author()\n *\n * @return string Comment Author\n *\/","file":"feed.php","line":256,"missingDoc":false,"filters":["'comment_author_rss'"],"uses":{"get_comment_author":[257]},"used_by":{"__main":[52,54,44,46,50],"comment_author_rss":[268]}},"comment_link":{"doc":"\/**\n * Display the link to the comments.\n *\n * @since 1.5.0\n *\/","file":"feed.php","line":241,"missingDoc":false,"filters":[],"uses":{"esc_url":[242],"get_comment_link":[242]},"used_by":{"__main":[57,69,71,49]}},"comment_author_rss":{"doc":"\/**\n * Display the current comment author in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.0.0\n *\/","file":"feed.php","line":267,"missingDoc":false,"filters":[],"uses":{"get_comment_author_rss":[268]},"used_by":{"__main":[60]}},"comment_guid":{"doc":"\/**\n * Display the feed GUID for the current comment.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int|object $comment_id Optional comment object or id. Defaults to global comment object.\n *\/","file":"feed.php","line":213,"missingDoc":false,"filters":[],"uses":{"esc_url":[214],"get_comment_guid":[214]},"used_by":{"__main":[65,80,52]}},"get_the_password_form":{"doc":"\/**\n * Retrieve protected post password form content.\n *\n * @since 1.0.0\n * @uses apply_filters() Calls 'the_password_form' filter on output.\n *\n * @return string HTML content for password form for password protected post.\n *\/","file":"post-template.php","line":1222,"missingDoc":false,"filters":["'the_password_form'"],"uses":{"get_post":[1223],"rand":[1224],"esc_url":[1225],"site_url":[1225],"__":[1226,1227],"esc_attr__":[1227]},"used_by":{"__main":[69,55,48],"get_the_content":[193]}},"the_guid":{"doc":"\/**\n * Display the Post Global Unique Identifier (guid).\n *\n * The guid will appear to be a link, but should not be used as an link to the\n * post. The reason you should not use it as a link, is because of moving the\n * blog across domains.\n *\n * Url is escaped to make it xml safe\n *\n * @since 1.5.0\n *\n * @param int $id Optional. Post ID.\n *\/","file":"post-template.php","line":134,"missingDoc":false,"filters":[],"uses":{"esc_url":[135],"get_the_guid":[135]},"used_by":{"__main":[75,40,42]}},"wp_title_rss":{"doc":"\/**\n * Display the blog title for display of the feed title.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n * @uses apply_filters() Calls 'wp_title_rss' on the blog title.\n * @see wp_title() $sep parameter usage.\n *\n * @param string $sep Optional.\n *\/","file":"feed.php","line":101,"missingDoc":false,"filters":["'wp_title_rss'"],"uses":{"get_wp_title_rss":[102]},"used_by":{"__main":[19,22,14,24]}},"self_link":{"doc":"\/**\n * Display the link for the currently displayed feed in a XSS safe way.\n *\n * Generate a correct link for the atom:self element.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n *\/","file":"feed.php","line":489,"missingDoc":false,"filters":[],"uses":{"parse_url":[490],"home_url":[490],"esc_url":[491],"set_url_scheme":[491],"stripslashes":[491]},"used_by":{"__main":[26,28,25]}},"html_type_rss":{"doc":"\/**\n * Display the HTML type based on the blog setting.\n *\n * The two possible values are either 'xhtml' or 'html'.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.2.0\n *\/","file":"feed.php","line":358,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[359],"strpos":[360]},"used_by":{"__main":[38,44,46]}},"the_title_rss":{"doc":"\/**\n * Display the post title in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses get_the_title_rss() Used to retrieve current post title.\n *\/","file":"feed.php","line":129,"missingDoc":false,"filters":[],"uses":{"get_the_title_rss":[130]},"used_by":{"__main":[38,40,24,35]}},"get_post_modified_time":{"doc":"\/**\n * Retrieve the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional, default is 'U'. Either 'G', 'U', or php date format.\n * @param bool $gmt Optional, default is false. Whether to return the gmt time.\n * @param int|object $post Optional, default is global post object. A post_id or post object\n * @param bool $translate Optional, default is false. Whether to translate the result\n * @return string Returns timestamp\n *\/","file":"general-template.php","line":1517,"missingDoc":false,"filters":["'get_post_modified_time'"],"uses":{"get_post":[1518],"mysql2date":[1524]},"used_by":{"__main":[41],"get_the_modified_date":[1420,1422],"get_the_modified_time":[1500,1502]}},"get_post_time":{"doc":"\/**\n * Retrieve the time at which the post was written.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format.\n * @param bool $gmt Optional, default is false. Whether to return the gmt time.\n * @param int|object $post Optional post ID or object. Default is global $post object.\n * @param bool $translate Whether to translate the time string\n * @return string\n *\/","file":"general-template.php","line":1467,"missingDoc":false,"filters":["'get_post_time'"],"uses":{"get_post":[1468],"mysql2date":[1475]},"used_by":{"__main":[42,38],"get_the_time":[1450,1452]}},"the_category_rss":{"doc":"\/**\n * Display the post categories in the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @see get_the_category_rss() For better explanation.\n *\n * @param string $type Optional, default is the type returned by get_default_feed().\n *\/","file":"feed.php","line":345,"missingDoc":false,"filters":[],"uses":{"get_the_category_rss":[346]},"used_by":{"__main":[43,44,40]}},"the_excerpt_rss":{"doc":"\/**\n * Display the post excerpt for the feed.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 0.71\n * @uses apply_filters() Calls 'the_excerpt_rss' hook on the excerpt.\n *\/","file":"feed.php","line":177,"missingDoc":false,"filters":["'the_excerpt_rss'"],"uses":{"get_the_excerpt":[178]},"used_by":{"__main":[44,46,48,25,44,46,51]}},"the_content_feed":{"doc":"\/**\n * Display the post content for feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.9.0\n * @uses apply_filters() Calls 'the_content_feed' on the content before processing.\n * @see get_the_content()\n *\n * @param string $feed_type The type of feed. rss2 | atom | rss | rdf\n *\/","file":"feed.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_the_content_feed":[166]},"used_by":{"__main":[46,49]}},"atom_enclosure":{"doc":"\/**\n * Display the atom enclosure for the current post.\n *\n * Uses the global $post to check whether the post requires a password and if\n * the user has the password for the post. If not then it will return before\n * displaying.\n *\n * Also uses the function get_post_custom() to get the post's 'enclosure'\n * metadata field and parses the value to display the enclosure(s). The\n * enclosure(s) consist of link HTML tag(s) with a URI and other attributes.\n *\n * @package WordPress\n * @subpackage Template\n * @since 2.2.0\n * @uses apply_filters() Calls 'atom_enclosure' hook on atom enclosure.\n * @uses get_post_custom() To get the current post enclosure metadata.\n *\/","file":"feed.php","line":421,"missingDoc":false,"filters":["'atom_enclosure'"],"uses":{"post_password_required":[422],"explode":[428],"trim":[429,429,429],"htmlspecialchars":[429],"get_post_custom":[425]},"used_by":{"__main":[48]}},"rewind_posts":{"doc":"\/**\n * Rewind the loop posts.\n *\n * @see WP_Query::rewind_posts()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return null\n *\/","file":"query.php","line":769,"missingDoc":false,"filters":[],"uses":{"rewind_posts":[772]},"used_by":{"__main":[38],"rewind_posts":[772],"WP_Query::have_posts":[2874]}},"comment_text_rss":{"doc":"\/**\n * Display the current comment content for use in the feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 1.0.0\n * @uses apply_filters() Calls 'comment_text_rss' filter on comment content.\n * @uses get_comment_text()\n *\/","file":"feed.php","line":280,"missingDoc":false,"filters":["'comment_text_rss'"],"uses":{"get_comment_text":[281]},"used_by":{"__main":[57]}},"get_the_content_feed":{"doc":"\/**\n * Retrieve the post content for feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.9.0\n * @uses apply_filters() Calls 'the_content_feed' on the content before processing.\n * @see get_the_content()\n *\n * @param string $feed_type The type of feed. rss2 | atom | rss | rdf\n * @return string The filtered content.\n *\/","file":"feed.php","line":145,"missingDoc":false,"filters":["'the_content'","'the_content_feed'"],"uses":{"get_default_feed":[147],"get_the_content":[149],"str_replace":[150]},"used_by":{"__main":[47],"the_content_feed":[166]}},"rss_enclosure":{"doc":"\/**\n * Display the rss enclosure for the current post.\n *\n * Uses the global $post to check whether the post requires a password and if\n * the user has the password for the post. If not then it will return before\n * displaying.\n *\n * Also uses the function get_post_custom() to get the post's 'enclosure'\n * metadata field and parses the value to display the enclosure(s). The\n * enclosure(s) consist of enclosure HTML tag(s) with a URI and other\n * attributes.\n *\n * @package WordPress\n * @subpackage Template\n * @since 1.5.0\n * @uses apply_filters() Calls 'rss_enclosure' hook on rss enclosure.\n * @uses get_post_custom() To get the current post enclosure metadata.\n *\/","file":"feed.php","line":385,"missingDoc":false,"filters":["'rss_enclosure'"],"uses":{"post_password_required":[386],"explode":[392],"preg_split":[395],"trim":[395,398,398],"htmlspecialchars":[398],"get_post_custom":[389]},"used_by":{"__main":[56]}},"convert_chars":{"doc":"\/**\n * Converts a number of characters from a string.\n *\n * Metadata tags <<title>> and <<category>> are removed, <<br>> and <<hr>> are\n * converted into correct XHTML and Unicode characters are converted to the\n * valid range.\n *\n * @since 0.71\n *\n * @param string $content String of characters to be converted.\n * @param string $deprecated Not used.\n * @return string Converted string.\n *\/","file":"formatting.php","line":1079,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1081],"preg_replace":[1120,1121,1124],"strtr":[1127],"str_replace":[1130,1131]},"used_by":{"get_bloginfo_rss":[30],"wp_richedit_pre":[2494]}},"wp_title":{"doc":"\/**\n * Display or retrieve page title for all areas of blog.\n *\n * By default, the page title will display the separator before the page title,\n * so that the blog title will be before the page title. This is not good for\n * title display, since the blog title shows up on most tabs and not what is\n * important, which is the page that the user is looking at.\n *\n * There are also SEO benefits to having the blog title after or to the 'right'\n * or the page title. However, it is mostly common sense to have the blog title\n * to the right with most browsers supporting tabs. You can achieve this by\n * using the seplocation parameter and setting the value to 'right'. This change\n * was introduced around 2.5.0, in case backwards compatibility of themes is\n * important.\n *\n * @since 1.0.0\n *\n * @param string $sep Optional, default is '»'. How to separate the various items within the page title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @param string $seplocation Optional. Direction to display title, 'right'.\n * @return string|null String on retrieve, null when displaying.\n *\/","file":"general-template.php","line":521,"missingDoc":false,"filters":["'wp_title'"],"uses":{"get_query_var":[524,525,526,527,528],"single_post_title":[535],"is_single":[534],"is_home":[534],"is_front_page":[534,534],"is_page":[534],"single_term_title":[540,547],"is_category":[539],"is_tag":[539],"get_queried_object":[545,552],"get_taxonomy":[546],"is_tax":[544],"is_author":[551],"post_type_archive_title":[558],"is_post_type_archive":[557],"substr":[562,563,564],"get_month":[563,572],"intval":[564],"is_archive":[561,569],"zeroise":[574],"sprintf":[580],"__":[580,585],"strip_tags":[580],"is_search":[578],"is_404":[584],"explode":[594,598],"array_reverse":[595],"implode":[596,599]},"used_by":{"get_wp_title_rss":[83],"__main":[18]}},"get_the_excerpt":{"doc":"\/**\n * Retrieve the post excerpt.\n *\n * @since 0.71\n *\n * @param mixed $deprecated Not used.\n * @return string\n *\/","file":"post-template.php","line":260,"missingDoc":false,"filters":["'get_the_excerpt'"],"uses":{"_deprecated_argument":[262],"get_post":[264],"__":[267],"post_password_required":[266]},"used_by":{"the_excerpt_rss":[178],"the_excerpt":[249]}},"get_comment_guid":{"doc":"\/**\n * Retrieve the feed GUID for the current comment.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5.0\n *\n * @param int|object $comment_id Optional comment object or id. Defaults to global comment object.\n * @return bool|string false on failure or guid for comment on success.\n *\/","file":"feed.php","line":227,"missingDoc":false,"filters":[],"uses":{"get_comment":[228],"is_object":[230],"get_the_guid":[233]},"used_by":{"comment_guid":[214]}},"get_the_guid":{"doc":"\/**\n * Retrieve the Post Global Unique Identifier (guid).\n *\n * The guid will appear to be a link, but should not be used as an link to the\n * post. The reason you should not use it as a link, is because of moving the\n * blog across domains.\n *\n * @since 1.5.0\n *\n * @param int $id Optional. Post ID.\n * @return string\n *\/","file":"post-template.php","line":150,"missingDoc":false,"filters":["'get_the_guid'"],"uses":{"get_post":[151]},"used_by":{"get_comment_guid":[233],"the_guid":[135],"wp_get_attachment_url":[4229],"_transition_post_status":[4796]}},"get_the_category_rss":{"doc":"\/**\n * Retrieve all of the post categories, formatted for use in feeds.\n *\n * All of the categories for the current post in the feed loop, will be\n * retrieved and have feed markup added, so that they can easily be added to the\n * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds.\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.1.0\n * @uses apply_filters()\n *\n * @param string $type Optional, default is the type returned by get_default_feed().\n * @return string All of the post categories for displaying in the feed.\n *\/","file":"feed.php","line":301,"missingDoc":false,"filters":["'get_bloginfo_rss'","'the_category_rss'"],"uses":{"get_default_feed":[303],"get_the_category":[304],"get_the_tags":[305],"sanitize_term_field":[314,318],"array_unique":[321],"sprintf":[327],"esc_attr":[327,327],"get_bloginfo":[327],"html_entity_decode":[329],"get_option":[329]},"used_by":{"the_category_rss":[346]}},"prep_atom_text_construct":{"doc":"\/**\n * Determine the type of a string of data with the data formatted.\n *\n * Tell whether the type is text, html, or xhtml, per RFC 4287 section 3.1.\n *\n * In the case of WordPress, text is defined as containing no markup,\n * xhtml is defined as \"well formed\", and html as tag soup (i.e., the rest).\n *\n * Container div tags are added to xhtml values, per section 3.1.1.3.\n *\n * @link http:\/\/www.atomenabled.org\/developers\/syndication\/atom-format-spec.php#rfc.section.3.1\n *\n * @package WordPress\n * @subpackage Feed\n * @since 2.5\n *\n * @param string $data Input string\n * @return array array(type, value)\n *\/","file":"feed.php","line":454,"missingDoc":false,"filters":[],"uses":{"strpos":[455,455,465,473],"xml_parser_create":[459],"xml_parse":[460],"xml_get_error_code":[461],"xml_parser_free":[462],"htmlspecialchars":[476]},"used_by":[]},"_wptexturize_pushpop_element":{"doc":"\/**\n * Search for disabled element tags. Push element to stack on tag open and pop\n * on tag close. Assumes first character of $text is tag opening.\n *\n * @access private\n * @since 2.9.0\n *\n * @param string $text Text to check. First character is assumed to be $opening\n * @param array $stack Array used as stack of opened tag elements\n * @param string $disabled_elements Tags to match against formatted as regexp sub-expression\n * @param string $opening Tag opening character, assumed to be 1 character long\n * @param string $closing Tag closing character\n *\/","file":"formatting.php","line":146,"missingDoc":false,"filters":[],"uses":{"array_push":[159,169],"preg_match":[150,164],"substr":[150,164],"preg_quote":[163],"array_pop":[165],"strncmp":[148]},"used_by":{"wptexturize":[119,121]}},"_autop_newline_preservation_helper":{"doc":"\/**\n * Newline preservation help function for wpautop\n *\n * @since 3.1.0\n * @access private\n * @param array $matches preg_replace_callback matches array\n * @return string\n *\/","file":"formatting.php","line":268,"missingDoc":false,"filters":[],"uses":{"str_replace":[269]},"used_by":[]},"shortcode_unautop":{"doc":"\/**\n * Don't auto-p wrap shortcodes that stand alone\n *\n * Ensures that shortcodes are not wrapped in <<p>>...<<\/p>>.\n *\n * @since 2.9.0\n *\n * @param string $pee The content.\n * @return string The filtered content.\n *\/","file":"formatting.php","line":282,"missingDoc":false,"filters":[],"uses":{"is_array":[285],"join":[289],"array_map":[289],"array_keys":[289],"preg_replace":[323]},"used_by":[]},"seems_utf8":{"doc":"\/**\n * Checks to see if a string is utf8 encoded.\n *\n * NOTE: This function checks for 5-Byte sequences, UTF8\n * has Bytes Sequences with a maximum length of 4.\n *\n * @author bmorel at ssi dot fr (modified)\n * @since 1.2.1\n *\n * @param string $str The string to be checked\n * @return bool True if $str fits a UTF-8 model, false otherwise.\n *\/","file":"formatting.php","line":338,"missingDoc":false,"filters":[],"uses":{"strlen":[339],"ord":[341,350]},"used_by":{"remove_accents":[611],"sanitize_title_with_dashes":[976]}},"_wp_specialchars":{"doc":"\/**\n * Converts a number of special characters into their HTML entities.\n *\n * Specifically deals with: &, <, >, \", and '.\n *\n * $quote_style can be set to ENT_COMPAT to encode \" to\n * ", or ENT_QUOTES to do both. Default is ENT_NOQUOTES where no quotes are encoded.\n *\n * @since 1.2.2\n *\n * @param string $string The text which is to be encoded.\n * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.\n * @param string $charset Optional. The character encoding of the string. Default is false.\n * @param boolean $double_encode Optional. Whether to encode existing html entities. Default is false.\n * @return string The encoded text with HTML entities.\n *\/","file":"formatting.php","line":373,"missingDoc":false,"filters":[],"uses":{"strlen":[376],"preg_match":[380],"in_array":[386,399],"wp_load_alloptions":[393],"htmlspecialchars":[413,425],"wp_specialchars_decode":[416],"wp_kses_normalize_entities":[419],"preg_split":[422],"count":[424],"implode":[427],"str_replace":[432]},"used_by":{"esc_js":[2656],"esc_html":[2673],"esc_attr":[2687]}},"wp_kses_normalize_entities":{"doc":"\/**\n * Converts and fixes HTML entities.\n *\n * This function normalizes HTML entities. It will convert \"AT&T\" to the correct\n * \"AT&T\", \":\" to \":\", \"&#XYZZY;\" to \"&#XYZZY;\" and so on.\n *\n * @since 1.0.0\n *\n * @param string $string Content to normalize entities\n * @return string Content with normalized entities\n *\/","file":"kses.php","line":1114,"missingDoc":false,"filters":[],"uses":{"str_replace":[1117],"preg_replace_callback":[1121,1122,1123]},"used_by":{"_wp_specialchars":[419],"esc_url":[2599],"wp_kses":[481]}},"wp_check_invalid_utf8":{"doc":"\/**\n * Checks for invalid UTF8 in a string.\n *\n * @since 2.8\n *\n * @param string $string The text which is to be checked.\n * @param boolean $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false.\n * @return string The checked text.\n *\/","file":"formatting.php","line":508,"missingDoc":false,"filters":[],"uses":{"strlen":[511],"in_array":[518],"get_option":[518],"preg_match":[527,535],"iconv":[541],"function_exists":[540]},"used_by":{"esc_js":[2655],"esc_html":[2672],"esc_attr":[2686],"sanitize_text_field":[3220]}},"utf8_uri_encode":{"doc":"\/**\n * Encode the Unicode values to be used in the URI.\n *\n * @since 1.5.0\n *\n * @param string $utf8_string\n * @param int $length Max length of the string\n * @return string String with Unicode encoded for URI.\n *\/","file":"formatting.php","line":556,"missingDoc":false,"filters":[],"uses":{"strlen":[562],"ord":[565],"chr":[570],"count":[573,579],"dechex":[581,581,581,584,584]},"used_by":{"sanitize_title_with_dashes":[980]}},"remove_accents":{"doc":"\/**\n * Converts all accent characters to ASCII characters.\n *\n * If there are no accent characters, then the string given is just returned.\n *\n * @since 1.2.1\n *\n * @param string $string Text that might have accent characters\n * @return string Filtered string with replaced \"nice\" characters.\n *\/","file":"formatting.php","line":607,"missingDoc":false,"filters":[],"uses":{"preg_match":[608],"chr":[614,614,614,614,615,615,615,615,616,616,616,616,617,617,617,617,618,618,618,618,619,619,619,619,620,620,620,620,621,621,621,621,622,622,622,622,623,623,623,623,624,624,624,624,625,625,625,625,626,626,626,626,627,627,627,627,628,628,628,628,629,629,629,629,630,630,630,630,631,631,631,631,632,632,632,632,633,633,633,633,634,634,634,634,635,635,635,635,636,636,636,636,637,637,637,637,638,638,638,638,639,639,639,639,640,640,640,640,641,641,641,641,642,642,642,642,643,643,643,643,644,644,644,644,645,645,645,645,647,647,647,647,648,648,648,648,649,649,649,649,650,650,650,650,651,651,651,651,652,652,652,652,653,653,653,653,654,654,654,654,655,655,655,655,656,656,656,656,657,657,657,657,658,658,658,658,659,659,659,659,660,660,660,660,661,661,661,661,662,662,662,662,663,663,663,663,664,664,664,664,665,665,665,665,666,666,666,666,667,667,667,667,668,668,668,668,669,669,669,669,670,670,670,670,671,671,671,671,672,672,672,672,673,673,673,673,674,674,674,674,675,675,675,675,676,676,676,676,677,677,677,677,678,678,678,678,679,679,679,679,680,680,680,680,681,681,681,681,682,682,682,682,683,683,683,683,684,684,684,684,685,685,685,685,686,686,686,686,687,687,687,687,688,688,688,688,689,689,689,689,690,690,690,690,691,691,691,691,692,692,692,692,693,693,693,693,694,694,694,694,695,695,695,695,696,696,696,696,697,697,697,697,698,698,698,698,699,699,699,699,700,700,700,700,701,701,701,701,702,702,702,702,703,703,703,703,704,704,704,704,705,705,705,705,706,706,706,706,707,707,707,707,708,708,708,708,709,709,709,709,710,710,710,710,712,712,712,712,713,713,713,713,715,715,715,717,717,720,720,720,720,721,721,721,721,723,723,723,723,723,723,724,724,724,724,724,724,725,725,725,725,725,725,726,726,726,726,726,726,727,727,727,727,727,727,728,728,728,728,728,728,729,729,729,729,729,729,731,731,731,731,731,731,732,732,732,732,732,732,733,733,733,733,733,733,734,734,734,734,734,734,735,735,735,735,735,735,736,736,736,736,736,736,737,737,737,737,737,737,738,738,738,738,738,738,739,739,739,739,739,739,740,740,740,740,740,740,741,741,741,741,741,741,742,742,742,742,742,742,744,744,744,744,744,744,745,745,745,745,745,745,746,746,746,746,746,746,747,747,747,747,747,747,748,748,748,748,748,748,749,749,749,749,749,749,750,750,750,750,750,750,751,751,751,751,751,751,753,753,753,753,753,753,754,754,754,754,754,754,755,755,755,755,755,755,756,756,756,756,756,756,757,757,757,757,757,757,758,758,758,758,758,758,760,760,760,760,760,760,761,761,761,761,761,761,762,762,762,762,762,762,763,763,763,763,763,763,764,764,764,764,764,764,765,765,765,765,765,765,766,766,766,766,766,766,767,767,767,767,767,767,768,768,768,768,768,768,769,769,769,769,769,769,770,770,770,770,770,770,771,771,771,771,771,771,773,773,775,775,775,775,777,777,777,777,779,779,779,779,780,780,780,780,781,781,781,781,782,782,782,782,783,783,783,783,785,785,785,785,791,791,791,791,791,791,792,792,792,792,792,792,792,793,793,793,793,793,793,793,794,794,794,794,794,794,794,795,795,795,795,795,795,795,796,796,796,796,796,796,796,797,797,797,797,797,797,797,798,798,798,798,798,798,798,799,799,799,799,799,799,799,800,800,800,805,805,805,805,805,805,805,805,805],"strtr":[788,804],"str_replace":[807],"seems_utf8":[611]},"used_by":{"sanitize_user":[889],"sanitize_title":[940]}},"get_allowed_mime_types":{"doc":"\/**\n * Retrieve list of allowed mime types and file extensions.\n *\n * @since 2.8.6\n *\n * @uses apply_filters() Calls 'upload_mimes' on returned array\n * @uses wp_get_upload_mime_types() to fetch the list of mime types\n *\n * @return array Array of mime types keyed by the file extension regex corresponding to those types.\n *\/","file":"functions.php","line":2002,"missingDoc":false,"filters":["'upload_mimes'"],"uses":{"wp_get_mime_types":[2003]},"used_by":{"sanitize_file_name":[845],"wp_check_filetype":[1810]}},"wp_strip_all_tags":{"doc":"\/**\n * Properly strip all HTML tags including script and style\n *\n * @since 2.9.0\n *\n * @param string $string String containing HTML tags\n * @param bool $remove_breaks optional Whether to remove left over line breaks and white space chars\n * @return string The processed string.\n *\/","file":"formatting.php","line":3195,"missingDoc":false,"filters":[],"uses":{"preg_replace":[3196,3200],"strip_tags":[3197],"trim":[3202]},"used_by":{"sanitize_user":[888],"wp_trim_words":[2179],"wp_html_excerpt":[3094],"sanitize_text_field":[3225]}},"sanitize_title_for_query":{"doc":"","file":"formatting.php","line":950,"missingDoc":true,"filters":[],"uses":{"sanitize_title":[951]},"used_by":{"WP_Query::get_posts":[2105,2133,2145,2322]}},"sanitize_title_with_dashes":{"doc":"\/**\n * Sanitizes title, replacing whitespace and a few other characters with dashes.\n *\n * Limits the output to alphanumeric characters, underscore (_) and dash (-).\n * Whitespace becomes a dash.\n *\n * @since 1.2.0\n *\n * @param string $title The title to be sanitized.\n * @param string $raw_title Optional. Not used.\n * @param string $context Optional. The operation for which the string is sanitized.\n * @return string The sanitized title.\n *\/","file":"formatting.php","line":967,"missingDoc":false,"filters":[],"uses":{"strip_tags":[968],"preg_replace":[970,974,984,1012,1013,1014],"str_replace":[972,985,989,992,1009],"mb_strtolower":[978],"function_exists":[977],"utf8_uri_encode":[980],"seems_utf8":[976],"strtolower":[983],"trim":[1015]},"used_by":{"register_post_type":[1289],"register_taxonomy":[341,347]}},"sanitize_sql_orderby":{"doc":"\/**\n * Ensures a string is a valid SQL order by clause.\n *\n * Accepts one or more columns, with or without ASC\/DESC, and also accepts\n * RAND().\n *\n * @since 2.5.1\n *\n * @param string $orderby Order by string to be checked.\n * @return string|bool Returns the order by clause if it is a match, false otherwise.\n *\/","file":"formatting.php","line":1031,"missingDoc":false,"filters":[],"uses":{"preg_match":[1032]},"used_by":{"gallery_shortcode":[691]}},"balanceTags":{"doc":"\/**\n * Will only balance the tags if forced to and the option is set to balance tags.\n *\n * The option 'use_balanceTags' is used to determine whether the tags will be balanced.\n *\n * @since 0.71\n *\n * @param string $text Text to be balanced\n * @param bool $force If true, forces balancing, ignoring the value of the option. Default false.\n * @return string Balanced text\n *\/","file":"formatting.php","line":1147,"missingDoc":false,"filters":[],"uses":{"get_option":[1148],"force_balance_tags":[1150]},"used_by":[]},"force_balance_tags":{"doc":"\/**\n * Balances tags of string using a modified stack.\n *\n * @since 2.0.4\n *\n * @author Leonard Lin <leonard@acm.org>\n * @license GPL\n * @copyright November 4, 2001\n * @version 1.1\n * @todo Make better - change loop condition to $text in 1.2\n * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004\n *\t\t1.1 Fixed handling of append\/stack pop order of end text\n *\t\t\t Added Cleaning Hooks\n *\t\t1.0 First Version\n *\n * @param string $text Text to be balanced.\n * @return string Balanced text.\n *\/","file":"formatting.php","line":1171,"missingDoc":false,"filters":[],"uses":{"str_replace":[1182,1278,1279],"preg_replace":[1184],"preg_match":[1186],"strpos":[1189],"strlen":[1190],"strtolower":[1196,1222],"substr":[1196,1231,1235,1263,1264],"array_pop":[1206,1213,1245,1274],"trim":[1235],"in_array":[1234,1238,1244],"array_push":[1248]},"used_by":{"balanceTags":[1150],"get_the_content":[220]}},"format_to_edit":{"doc":"\/**\n * Acts on text which is about to be edited.\n *\n * The $content is run through esc_textarea(), which uses htmlspecialchars()\n * to convert special characters to HTML entities. If $richedit is set to true,\n * it is simply a holder for the 'format_to_edit' filter.\n *\n * @since 0.71\n *\n * @param string $content The text about to be edited.\n * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed).\n * @return string The text after the filter (and possibly htmlspecialchars()) has been run.\n *\/","file":"formatting.php","line":1297,"missingDoc":false,"filters":["'format_to_edit'"],"uses":{"esc_textarea":[1300]},"used_by":{"sanitize_post_field":[2025,2027]}},"format_to_post":{"doc":"\/**\n * Holder for the 'format_to_post' filter.\n *\n * @since 0.71\n *\n * @param string $content The text to pass through the filter.\n * @return string Text returned from the 'format_to_post' filter.\n *\/","file":"formatting.php","line":1312,"missingDoc":false,"filters":["'format_to_post'"],"uses":[],"used_by":[]},"zeroise":{"doc":"\/**\n * Add leading zeros when necessary.\n *\n * If you set the threshold to '4' and the number is '10', then you will get\n * back '0010'. If you set the threshold to '4' and the number is '5000', then you\n * will get back '5000'.\n *\n * Uses sprintf to append the amount of zeros based on the $threshold parameter\n * and the size of the number. If the number is large enough, then no zeros will\n * be appended.\n *\n * @since 0.71\n *\n * @param mixed $number Number to append zeros to if not greater than threshold.\n * @param int $threshold Digit places number needs to be to not have zeros added.\n * @return string Adds leading zeros to number if needed.\n *\/","file":"formatting.php","line":1334,"missingDoc":false,"filters":[],"uses":{"sprintf":[1335]},"used_by":{"antispambot":[1475],"wp_title":[574],"get_calendar":[1110,1122],"get_month_link":[369,372],"get_day_link":[398,399,402,402],"WP_Locale::get_month":[257]}},"backslashit":{"doc":"\/**\n * Adds backslashes before letters and before a number at the start of a string.\n *\n * @since 0.71\n *\n * @param string $string Value to which backslashes will be added.\n * @return string String with backslashes inserted.\n *\/","file":"formatting.php","line":1346,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1347,1348]},"used_by":{"date_i18n":[112,113,114,115,116,117,132]}},"addslashes_gpc":{"doc":"\/**\n * Adds slashes to escape strings.\n *\n * Slashes will first be removed if magic_quotes_gpc is set, see {@link\n * http:\/\/www.php.net\/magic_quotes} for more details.\n *\n * @since 0.71\n *\n * @param string $gpc The string returned from HTTP request data.\n * @return string Returns a string escaped with slashes.\n *\/","file":"formatting.php","line":1397,"missingDoc":false,"filters":[],"uses":{"stripslashes":[1399],"get_magic_quotes_gpc":[1398],"esc_sql":[1401]},"used_by":{"WP_Query::parse_tax_query":[1736],"WP_Query::get_posts":[2293,2355]}},"urlencode_deep":{"doc":"\/**\n * Navigates through an array and encodes the values to be used in a URL.\n *\n *\n * @since 2.2.0\n *\n * @param array|string $value The array or string to be encoded.\n * @return array|string $value The encoded array (or string from the callback).\n *\/","file":"formatting.php","line":1439,"missingDoc":false,"filters":[],"uses":{"is_array":[1440],"array_map":[1440],"urlencode":[1440]},"used_by":{"add_query_arg":[686]}},"antispambot":{"doc":"\/**\n * Converts email addresses characters to HTML entities to block spam bots.\n *\n * @since 0.71\n *\n * @param string $emailaddy Email address.\n * @param int $mailto Optional. Range from 0 to 1. Used for encoding.\n * @return string Converted email address.\n *\/","file":"formatting.php","line":1465,"missingDoc":false,"filters":[],"uses":{"srand":[1467],"microtime":[1467],"strlen":[1468],"floor":[1469],"rand":[1469],"ord":[1471,1475],"substr":[1471,1473,1475],"zeroise":[1475],"dechex":[1475],"str_replace":[1478]},"used_by":[]},"_make_url_clickable_cb":{"doc":"\/**\n * Callback to convert URI match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with URI address.\n *\/","file":"formatting.php","line":1494,"missingDoc":false,"filters":[],"uses":{"strpos":[1497],"substr_count":[1507,1507],"strrchr":[1508],"substr":[1509],"strrpos":[1509],"esc_url":[1512]},"used_by":[]},"_make_web_ftp_clickable_cb":{"doc":"\/**\n * Callback to convert URL match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with URL address.\n *\/","file":"formatting.php","line":1531,"missingDoc":false,"filters":[],"uses":{"esc_url":[1535],"substr":[1541,1542,1540],"strlen":[1542],"in_array":[1540]},"used_by":[]},"_make_email_clickable_cb":{"doc":"\/**\n * Callback to convert email address match to HTML A element.\n *\n * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link\n * make_clickable()}.\n *\n * @since 2.3.2\n * @access private\n *\n * @param array $matches Single Regex Match.\n * @return string HTML A element with email address.\n *\/","file":"formatting.php","line":1559,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"make_clickable":{"doc":"\/**\n * Convert plaintext URI to HTML links.\n *\n * Converts URI, www and ftp, and email addresses. Finishes by fixing links\n * within links.\n *\n * @since 0.71\n *\n * @param string $text Content to convert URIs.\n * @return string Content with converted URIs.\n *\/","file":"formatting.php","line":1575,"missingDoc":false,"filters":[],"uses":{"preg_split":[1577],"preg_match":[1579],"make_clickable":[1591],"strlen":[1588,1585],"_split_str_by_whitespace":[1587],"preg_replace_callback":[1612,1614,1615],"substr":[1617],"preg_replace":[1623]},"used_by":{"make_clickable":[1591]}},"_split_str_by_whitespace":{"doc":"\/**\n * Breaks a string into chunks by splitting at whitespace characters.\n * The length of each returned chunk is as close to the specified length goal as possible,\n * with the caveat that each chunk includes its trailing delimiter.\n * Chunks longer than the goal are guaranteed to not have any inner whitespace.\n *\n * Joining the returned chunks with empty delimiters reconstructs the input string losslessly.\n *\n * Input string must have no null characters (or eventual transformations on output chunks must not care about null characters)\n *\n * <code>\n * _split_str_by_whitespace( \"1234 67890 1234 67890a cd 1234 890 123456789 1234567890a 45678 1 3 5 7 90 \", 10 ) ==\n * array (\n * 0 => '1234 67890 ', \/\/ 11 characters: Perfect split\n * 1 => '1234 ', \/\/ 5 characters: '1234 67890a' was too long\n * 2 => '67890a cd ', \/\/ 10 characters: '67890a cd 1234' was too long\n * 3 => '1234 890 ', \/\/ 11 characters: Perfect split\n * 4 => '123456789 ', \/\/ 10 characters: '123456789 1234567890a' was too long\n * 5 => '1234567890a ', \/\/ 12 characters: Too long, but no inner whitespace on which to split\n * 6 => ' 45678 ', \/\/ 11 characters: Perfect split\n * 7 => '1 3 5 7 9', \/\/ 9 characters: End of $string\n * );\n * <\/code>\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $string The string to split.\n * @param int $goal The desired chunk length.\n * @return array Numeric array of chunks.\n *\/","file":"formatting.php","line":1658,"missingDoc":false,"filters":[],"uses":{"strtr":[1661],"strlen":[1663],"strrpos":[1664],"substr":[1664,1673,1674,1675],"strpos":[1667]},"used_by":{"make_clickable":[1587]}},"wp_rel_nofollow":{"doc":"\/**\n * Adds rel nofollow string to all HTML A elements in content.\n *\n * @since 1.5.0\n *\n * @param string $text Content that may contain HTML A elements.\n * @return string Converted content.\n *\/","file":"formatting.php","line":1693,"missingDoc":false,"filters":[],"uses":{"stripslashes":[1695],"preg_replace_callback":[1696],"esc_sql":[1697]},"used_by":[]},"wp_rel_nofollow_callback":{"doc":"\/**\n * Callback to used to add rel=nofollow string to HTML A element.\n *\n * Will remove already existing rel=\"nofollow\" and rel='nofollow' from the\n * string to prevent from invalidating (X)HTML.\n *\n * @since 2.3.0\n *\n * @param array $matches Single Match\n * @return string HTML A Element with rel nofollow.\n *\/","file":"formatting.php","line":1712,"missingDoc":false,"filters":[],"uses":{"str_replace":[1714]},"used_by":[]},"translate_smiley":{"doc":"\/**\n * Convert one smiley code to the icon graphic file equivalent.\n *\n * Looks up one smiley code in the $wpsmiliestrans global array and returns an\n * <img> string for that smiley.\n *\n * @global array $wpsmiliestrans\n * @since 2.8.0\n *\n * @param string $smiley Smiley code to convert to image.\n * @return string Image string for smiley.\n *\/","file":"formatting.php","line":1730,"missingDoc":false,"filters":["'smilies_src'"],"uses":{"count":[1733],"trim":[1737],"reset":[1737],"esc_attr":[1739],"includes_url":[1741],"site_url":[1741]},"used_by":[]},"convert_smilies":{"doc":"\/**\n * Convert text equivalent of smilies to images.\n *\n * Will only convert smilies if the option 'use_smilies' is true and the global\n * used in the function isn't empty.\n *\n * @since 0.71\n * @uses $wp_smiliessearch\n *\n * @param string $text Content to convert smilies from text.\n * @return string Converted content with text smilies replaced with images.\n *\/","file":"formatting.php","line":1758,"missingDoc":false,"filters":[],"uses":{"preg_split":[1763],"count":[1764],"preg_replace_callback":[1768],"strlen":[1767],"get_option":[1761]},"used_by":[]},"wp_iso_descrambler":{"doc":"\/**\n * Convert to ASCII from email subjects.\n *\n * @since 1.2.0\n *\n * @param string $string Subject line\n * @return string Converted string to ASCII\n *\/","file":"formatting.php","line":1857,"missingDoc":false,"filters":[],"uses":{"str_replace":[1862],"preg_replace_callback":[1863],"preg_match":[1859]},"used_by":[]},"_wp_iso_convert":{"doc":"\/**\n * Helper function to convert hex encoded chars to ASCII\n *\n * @since 3.1.0\n * @access private\n * @param array $match The preg_replace_callback matches array\n * @return array Converted chars\n *\/","file":"formatting.php","line":1876,"missingDoc":false,"filters":[],"uses":{"chr":[1877],"hexdec":[1877],"strtolower":[1877]},"used_by":[]},"iso8601_timezone_to_offset":{"doc":"\/**\n * Computes an offset in seconds from an iso8601 timezone.\n *\n * @since 1.5.0\n *\n * @param string $timezone Either 'Z' for 0 offset or '\u00b1hhmm'.\n * @return int|float The offset in seconds.\n *\/","file":"formatting.php","line":1947,"missingDoc":false,"filters":[],"uses":{"substr":[1952,1953,1954],"intval":[1953,1954]},"used_by":{"iso8601_to_datetime":[1977]}},"popuplinks":{"doc":"\/**\n * Adds a element attributes to open links in new windows.\n *\n * Comment text in popup windows should be filtered through this. Right now it's\n * a moderately dumb function, ideally it would detect whether a target or rel\n * attribute was already there and adjust its actions accordingly.\n *\n * @since 0.71\n *\n * @param string $text Content to replace links to open in a new window.\n * @return string Content that has filtered links.\n *\/","file":"formatting.php","line":2004,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2005]},"used_by":[]},"sanitize_email":{"doc":"\/**\n * Strips out all characters that are not allowable in an email.\n *\n * @since 1.5.0\n *\n * @param string $email Email address to filter.\n * @return string Filtered email address.\n *\/","file":"formatting.php","line":2017,"missingDoc":false,"filters":["'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'","'sanitize_email'"],"uses":{"strlen":[2019],"strpos":[2024],"explode":[2029,2052],"preg_replace":[2033,2040,2068],"trim":[2046,2065],"count":[2055,2077],"join":[2082]},"used_by":{"sanitize_option":[2761],"wpmu_validate_user_signup":[443],"wpmu_signup_user":[678]}},"human_time_diff":{"doc":"\/**\n * Determines the difference between two timestamps.\n *\n * The difference is returned in a human readable format such as \"1 hour\",\n * \"5 mins\", \"2 days\".\n *\n * @since 1.5.0\n *\n * @param int $from Unix timestamp from which the difference begins.\n * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set.\n * @return string Human readable time difference.\n *\/","file":"formatting.php","line":2103,"missingDoc":false,"filters":[],"uses":{"time":[2105],"abs":[2106],"round":[2108,2115,2121],"sprintf":[2113,2119,2125],"_n":[2113,2119,2125]},"used_by":[]},"wp_trim_excerpt":{"doc":"\/**\n * Generates an excerpt from the content, if needed.\n *\n * The excerpt word amount will be 55 words and if the amount is greater than\n * that, then the string ' [...]' will be appended to the excerpt. If the string\n * is less than 55 words, then the content will be returned as is.\n *\n * The 55 word limit can be modified by plugins\/themes using the excerpt_length filter\n * The ' [...]' string can be modified by plugins\/themes using the excerpt_more filter\n *\n * @since 1.5.0\n *\n * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.\n * @return string The excerpt.\n *\/","file":"formatting.php","line":2145,"missingDoc":false,"filters":["'the_content'","'excerpt_length'","'excerpt_more'","'wp_trim_excerpt'"],"uses":{"get_the_content":[2148],"strip_shortcodes":[2150],"str_replace":[2153],"wp_trim_words":[2156]},"used_by":[]},"strip_shortcodes":{"doc":"\/**\n * Remove all shortcode tags from the given content.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $content Content to remove shortcode tags.\n * @return string Content without shortcode tags.\n *\/","file":"shortcodes.php","line":315,"missingDoc":false,"filters":[],"uses":{"is_array":[318],"get_shortcode_regex":[321],"preg_replace_callback":[323]},"used_by":{"wp_trim_excerpt":[2150]}},"wp_trim_words":{"doc":"\/**\n * Trims text to a certain number of words.\n *\n * This function is localized. For languages that count 'words' by the individual\n * character (such as East Asian languages), the $num_words argument will apply\n * to the number of individual characters.\n *\n * @since 3.3.0\n *\n * @param string $text Text to trim.\n * @param int $num_words Number of words. Default 55.\n * @param string $more What to append if $text needs to be trimmed. Default '…'.\n * @return string Trimmed text.\n *\/","file":"formatting.php","line":2175,"missingDoc":false,"filters":["'wp_trim_words'"],"uses":{"__":[2177],"wp_strip_all_tags":[2179],"trim":[2183],"preg_replace":[2183],"preg_match_all":[2184],"array_slice":[2185],"preg_split":[2188],"_x":[2182],"preg_match":[2182],"get_option":[2182],"array_pop":[2192],"implode":[2193,2196],"count":[2191]},"used_by":{"wp_trim_excerpt":[2156],"wp_setup_nav_menu_item":[622]}},"wp_richedit_pre":{"doc":"\/**\n * Formats text for the rich text editor.\n *\n * The filter 'richedit_pre' is applied here. If $text is empty the filter will\n * be applied to an empty string.\n *\n * @since 2.0.0\n *\n * @param string $text The text to be formatted.\n * @return string The formatted text after filter is applied.\n *\/","file":"formatting.php","line":2490,"missingDoc":false,"filters":["'richedit_pre'","'richedit_pre'"],"uses":{"convert_chars":[2494],"wpautop":[2495],"htmlspecialchars":[2496]},"used_by":[]},"wp_htmledit_pre":{"doc":"\/**\n * Formats text for the HTML editor.\n *\n * Unless $output is empty it will pass through htmlspecialchars before the\n * 'htmledit_pre' filter is applied.\n *\n * @since 2.5.0\n *\n * @param string $output The text to be formatted.\n * @return string Formatted text after filter applied.\n *\/","file":"formatting.php","line":2512,"missingDoc":false,"filters":["'htmledit_pre'"],"uses":{"htmlspecialchars":[2514]},"used_by":[]},"_deep_replace":{"doc":"\/**\n * Perform a deep string replace operation to ensure the values in $search are no longer present\n *\n * Repeats the replacement operation until it no longer replaces anything so as to remove \"nested\" values\n * e.g. $subject = '%0%0%0DDD', $search ='%0D', $result ='' rather than the '%0%0DD' that\n * str_replace would return\n *\n * @since 2.8.1\n * @access private\n *\n * @param string|array $search\n * @param string $subject\n * @return string The processed string\n *\/","file":"formatting.php","line":2533,"missingDoc":false,"filters":[],"uses":{"strpos":[2539],"str_replace":[2541]},"used_by":{"esc_url":[2587],"wp_sanitize_redirect":[895]}},"wp_allowed_protocols":{"doc":"\/**\n * Retrieve a list of protocols to allow in HTML attributes.\n *\n * @since 3.3.0\n * @see wp_kses()\n * @see esc_url()\n *\n * @return array Array of allowed protocols\n *\/","file":"functions.php","line":3759,"missingDoc":false,"filters":["'kses_allowed_protocols'"],"uses":[],"used_by":{"esc_url":[2605],"_links_add_base":[3134],"wp_kses":[478]}},"wp_kses_bad_protocol":{"doc":"\/**\n * Sanitize string from bad protocols.\n *\n * This function removes all non-allowed protocols from the beginning of\n * $string. It ignores whitespace and the case of the letters, and it does\n * understand HTML entities. It does its work in a while loop, so it won't be\n * fooled by a string like \"javascript:javascript:alert(57)\".\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter bad protocols from\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Filtered content\n *\/","file":"kses.php","line":944,"missingDoc":false,"filters":[],"uses":{"wp_kses_no_null":[945],"wp_kses_bad_protocol_once":[950]},"used_by":{"esc_url":[2606],"wp_kses_hair":[797,813,829]}},"htmlentities2":{"doc":"\/**\n * Convert entities, while preserving already-encoded entities.\n *\n * @link http:\/\/www.php.net\/htmlentities Borrowed from the PHP Manual user notes.\n *\n * @since 1.2.2\n *\n * @param string $myHTML The text to be converted.\n * @return string Converted text.\n *\/","file":"formatting.php","line":2636,"missingDoc":false,"filters":[],"uses":{"get_html_translation_table":[2637],"chr":[2638],"preg_replace":[2639],"strtr":[2639]},"used_by":[]},"tag_escape":{"doc":"\/**\n * Escape a HTML tag name.\n *\n * @since 2.5.0\n *\n * @param string $tag_name\n * @return string\n *\/","file":"formatting.php","line":2712,"missingDoc":false,"filters":["'tag_escape'"],"uses":{"strtolower":[2713],"preg_replace":[2713]},"used_by":{"gallery_shortcode":[736,737]}},"wp_make_link_relative":{"doc":"\/**\n * Convert full URL paths to absolute paths.\n *\n * Removes the http or https protocols and the domain. Keeps the path '\/' at the\n * beginning, so it isn't a true relative link, but from the web root base.\n *\n * @since 2.1.0\n *\n * @param string $link Full URL path.\n * @return string Absolute path.\n *\/","file":"formatting.php","line":2740,"missingDoc":false,"filters":[],"uses":{"preg_replace":[2741]},"used_by":[]},"sanitize_option":{"doc":"\/**\n * Sanitises various option values based on the nature of the option.\n *\n * This is basically a switch statement which will pass $value through a number\n * of functions depending on the $option.\n *\n * @since 2.0.5\n *\n * @param string $option The name of the option.\n * @param string $value The unsanitised value.\n * @return string Sanitized value.\n *\/","file":"formatting.php","line":2756,"missingDoc":false,"filters":["\"sanitize_option_{$option}\""],"uses":{"sanitize_email":[2761],"get_option":[2763,2850,2860,2869,2901],"add_settings_error":[2765,2852,2862,2903],"__":[2765,2852,2862,2903],"function_exists":[2764,2851,2861,2902],"is_email":[2762],"absint":[2788],"abs":[2797],"wp_kses_post":[2809],"esc_html":[2810],"preg_replace":[2814,2843],"intval":[2822],"strip_tags":[2831],"wp_kses_data":[2832],"explode":[2836,2874,2885],"array_filter":[2837,2838,2876,2887],"array_map":[2837,2838,2876,2887],"implode":[2839],"esc_url_raw":[2848,2858,2910],"preg_match":[2847,2857,2891,2891],"get_available_languages":[2867],"in_array":[2868,2900],"is_array":[2873,2884],"array_values":[2876,2887],"timezone_identifiers_list":[2899],"str_replace":[2911]},"used_by":{"update_option":[227],"add_option":[308],"add_site_option":[823],"update_site_option":[913]}},"wp_kses_data":{"doc":"\/**\n * Sanitize content with allowed HTML Kses rules.\n *\n * @since 2.9.0\n * @uses $allowedtags\n *\n * @param string $data Content to filter, expected to not be escaped\n * @return string Filtered content\n *\/","file":"kses.php","line":1269,"missingDoc":false,"filters":[],"uses":{"wp_kses":[1270],"current_filter":[1270]},"used_by":{"sanitize_option":[2832]}},"get_available_languages":{"doc":"\/**\n * Get all available languages based on the presence of *.mo files in a given directory. The default directory is WP_LANG_DIR.\n *\n * @since 3.0.0\n *\n * @param string $dir A directory in which to search for language files. The default directory is WP_LANG_DIR.\n * @return array Array of language codes or an empty array if no languages are present. Language codes are formed by stripping the .mo extension from the language file names.\n *\/","file":"l10n.php","line":542,"missingDoc":false,"filters":[],"uses":{"basename":[546],"strpos":[547,547,548],"glob":[545],"is_null":[545]},"used_by":{"sanitize_option":[2867]}},"wp_parse_str":{"doc":"\/**\n * Parses a string into variables to be stored in an array.\n *\n * Uses {@link http:\/\/www.php.net\/parse_str parse_str()} and stripslashes if\n * {@link http:\/\/www.php.net\/magic_quotes magic_quotes_gpc} is on.\n *\n * @since 2.2.1\n * @uses apply_filters() for the 'wp_parse_str' filter.\n *\n * @param string $string The string to be parsed.\n * @param array $array Variables will be stored in this array.\n *\/","file":"formatting.php","line":2932,"missingDoc":false,"filters":["'wp_parse_str'"],"uses":{"parse_str":[2933],"stripslashes_deep":[2935],"get_magic_quotes_gpc":[2934]},"used_by":{"add_query_arg":[685],"wp_parse_args":[2557],"wp_style_loader_src":[624]}},"wp_pre_kses_less_than":{"doc":"\/**\n * Convert lone less than signs.\n *\n * KSES already converts lone greater than signs.\n *\n * @uses wp_pre_kses_less_than_callback in the callback function.\n * @since 2.3.0\n *\n * @param string $text Text to be converted.\n * @return string Converted text.\n *\/","file":"formatting.php","line":2950,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[2951]},"used_by":{"sanitize_text_field":[3223]}},"wp_pre_kses_less_than_callback":{"doc":"\/**\n * Callback function used by preg_replace.\n *\n * @uses esc_html to format the $matches text.\n * @since 2.3.0\n *\n * @param array $matches Populated by matches to preg_replace.\n * @return string The text returned after esc_html if needed.\n *\/","file":"formatting.php","line":2963,"missingDoc":false,"filters":[],"uses":{"esc_html":[2965],"strpos":[2964]},"used_by":[]},"wp_sprintf":{"doc":"\/**\n * WordPress implementation of PHP sprintf() with filters.\n *\n * @since 2.5.0\n * @link http:\/\/www.php.net\/sprintf\n *\n * @param string $pattern The string which formatted args are inserted.\n * @param mixed $args,... Arguments to be formatted into the $pattern string.\n * @return string The formatted string.\n *\/","file":"formatting.php","line":2979,"missingDoc":false,"filters":["'wp_sprintf'"],"uses":{"func_get_args":[2980],"strlen":[2981,2987],"substr":[2988,2993,3003],"strpos":[3000],"str_replace":[3010],"preg_match":[3008],"sprintf":[3021],"strval":[3021]},"used_by":{"get_the_taxonomies":[3125]}},"wp_sprintf_l":{"doc":"\/**\n * Localize list items before the rest of the content.\n *\n * The '%l' must be at the first characters can then contain the rest of the\n * content. The list items will have ', ', ', and', and ' and ' added depending\n * on the amount of list items in the $args parameter.\n *\n * @since 2.5.0\n *\n * @param string $pattern Content containing '%l' at the beginning.\n * @param array $args List items to prepend to the content and replace '%l'.\n * @return string Localized list items and rest of the content.\n *\/","file":"formatting.php","line":3044,"missingDoc":false,"filters":["'wp_sprintf_l'"],"uses":{"substr":[3046,3077],"__":[3056,3058,3060],"array_shift":[3064,3066,3070],"count":[3065,3068]},"used_by":[]},"links_add_base_url":{"doc":"\/**\n * Add a Base url to relative links in passed content.\n *\n * By default it supports the 'src' and 'href' attributes. However this can be\n * changed via the 3rd param.\n *\n * @since 2.7.0\n *\n * @param string $content String to search for links in.\n * @param string $base The base URL to prefix to links.\n * @param array $attrs The attributes which should be processed.\n * @return string The processed content.\n *\/","file":"formatting.php","line":3114,"missingDoc":false,"filters":[],"uses":{"implode":[3117],"preg_replace_callback":[3118]},"used_by":[]},"_links_add_base":{"doc":"\/**\n * Callback to add a base url to relative links in passed content.\n *\n * @since 2.7.0\n * @access private\n *\n * @param string $m The matched link.\n * @return string The processed link.\n *\/","file":"formatting.php","line":3130,"missingDoc":false,"filters":[],"uses":{"preg_match":[3134],"in_array":[3134],"wp_allowed_protocols":[3134],"path_join":[3136]},"used_by":[]},"path_join":{"doc":"\/**\n * Join two filesystem paths together (e.g. 'give me $path relative to $base').\n *\n * If the $path is absolute, then it the full path is returned.\n *\n * @since 2.5.0\n *\n * @param string $base\n * @param string $path\n * @return string The path with the base or absolute path.\n *\/","file":"functions.php","line":1390,"missingDoc":false,"filters":[],"uses":{"path_is_absolute":[1391],"rtrim":[1394],"ltrim":[1394]},"used_by":{"_links_add_base":[3136],"wp_upload_dir":[1532],"image_get_intermediate_size":[476,477],"wp_delete_attachment":[4130,4137,4142,4144]}},"links_add_target":{"doc":"\/**\n * Adds a Target attribute to all links in passed content.\n *\n * This function by default only applies to <a> tags, however this can be\n * modified by the 3rd param.\n *\n * <b>NOTE:<\/b> Any current target attributed will be stripped and replaced.\n *\n * @since 2.7.0\n *\n * @param string $content String to search for links in.\n * @param string $target The Target to add to the links.\n * @param array $tags An array of tags to apply to.\n * @return string The processed content.\n *\/","file":"formatting.php","line":3155,"missingDoc":false,"filters":[],"uses":{"implode":[3158],"preg_replace_callback":[3159]},"used_by":[]},"_links_add_target":{"doc":"\/**\n * Callback to add a target attribute to all links in passed content.\n *\n * @since 2.7.0\n * @access private\n *\n * @param string $m The matched link.\n * @return string The processed link.\n *\/","file":"formatting.php","line":3171,"missingDoc":false,"filters":[],"uses":{"preg_replace":[3174],"esc_attr":[3175]},"used_by":[]},"normalize_whitespace":{"doc":"","file":"formatting.php","line":3179,"missingDoc":true,"filters":[],"uses":{"trim":[3180],"str_replace":[3181],"preg_replace":[3182]},"used_by":{"wp_text_diff":[1711,1712]}},"sanitize_text_field":{"doc":"\/**\n * Sanitize a string from user input or from the db\n *\n * check for invalid UTF-8,\n * Convert single < characters to entity,\n * strip all tags,\n * remove line breaks, tabs and extra white space,\n * strip octets.\n *\n * @since 2.9.0\n *\n * @param string $str\n * @return string\n *\/","file":"formatting.php","line":3219,"missingDoc":false,"filters":["'sanitize_text_field'"],"uses":{"wp_check_invalid_utf8":[3220],"wp_pre_kses_less_than":[3223],"wp_strip_all_tags":[3225],"trim":[3227,3239],"preg_replace":[3227,3239],"strpos":[3222],"preg_match":[3232],"str_replace":[3233]},"used_by":[]},"capital_P_dangit":{"doc":"\/**\n * Forever eliminate \"Wordpress\" from the planet (or at least the little bit we can influence).\n *\n * Violating our coding standards for a good function name.\n *\n * @since 3.0.0\n *\/","file":"formatting.php","line":3265,"missingDoc":false,"filters":[],"uses":{"str_replace":[3268,3273],"current_filter":[3267],"_x":[3272]},"used_by":[]},"current_filter":{"doc":"\/**\n * Retrieve the name of the current filter or action.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n *\n * @return string Hook name of the current filter or action.\n *\/","file":"plugin.php","line":309,"missingDoc":false,"filters":[],"uses":{"end":[311]},"used_by":{"capital_P_dangit":[3267],"get_the_generator":[2164],"wp_filter_kses":[1257],"wp_kses_data":[1270],"wp_update_plugins":[156],"wp_update_themes":[265]}},"sanitize_mime_type":{"doc":"\/**\n * Sanitize a mime type\n *\n * @since 3.1.3\n *\n * @param string $mime_type Mime type\n * @return string Sanitized mime type\n *\/","file":"formatting.php","line":3288,"missingDoc":false,"filters":["'sanitize_mime_type'"],"uses":{"preg_replace":[3289]},"used_by":[]},"sanitize_trackback_urls":{"doc":"\/**\n * Sanitize space or carriage return separated URLs that are used to send trackbacks.\n *\n * @since 3.4.0\n *\n * @param string $to_ping Space or carriage return separated URLs\n * @return string URLs starting with the http or https protocol, separated by a carriage return.\n *\/","file":"formatting.php","line":3301,"missingDoc":false,"filters":["'sanitize_trackback_urls'"],"uses":{"preg_split":[3302],"trim":[3302],"preg_match":[3304],"array_map":[3307],"implode":[3308]},"used_by":{"wp_insert_post":[2837],"get_to_ping":[3363]}},"size_format":{"doc":"\/**\n * Convert number of bytes largest unit bytes will fit into.\n *\n * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts\n * number of bytes to human readable number by taking the number of that unit\n * that the bytes will go into it. Supports TB value.\n *\n * Please note that integers in PHP are limited to 32 bits, unless they are on\n * 64 bit architecture, then they have 64 bit size. If you need to place the\n * larger size then what PHP integer type will hold, then use a string. It will\n * be converted to a double, which should always have 64 bit length.\n *\n * Technically the correct unit names for powers of 1024 are KiB, MiB etc.\n * @link http:\/\/en.wikipedia.org\/wiki\/Byte\n *\n * @since 2.3.0\n *\n * @param int|string $bytes Number of bytes. Note max integer size for integers.\n * @param int $decimals Precision of number of decimal places. Deprecated.\n * @return bool|string False on failure. Number string on success.\n *\/","file":"functions.php","line":180,"missingDoc":false,"filters":[],"uses":{"number_format_i18n":[191],"doubleval":[190]},"used_by":[]},"get_weekstartend":{"doc":"\/**\n * Get the week start and end from the datetime or date string from mysql.\n *\n * @since 0.71\n *\n * @param string $mysqlstring Date or datetime field type from mysql.\n * @param int $start_of_week Optional. Start of the week as an integer.\n * @return array Keys are 'start' and 'end'.\n *\/","file":"functions.php","line":205,"missingDoc":false,"filters":[],"uses":{"substr":[206,207,208],"mktime":[209],"date":[210],"get_option":[212],"is_numeric":[211],"compact":[219]},"used_by":{"wp_get_archives":[1005]}},"maybe_unserialize":{"doc":"\/**\n * Unserialize value only if it was serialized.\n *\n * @since 2.0.0\n *\n * @param string $original Maybe unserialized original, if is needed.\n * @return mixed Unserialized data can be any type.\n *\/","file":"functions.php","line":230,"missingDoc":false,"filters":[],"uses":{"unserialize":[232],"is_serialized":[231]},"used_by":{"get_metadata":[294],"get_metadata_by_mid":[368],"wpmu_activate_signup":[846],"get_option":[91],"wp_load_core_site_options":[185],"get_site_option":[781],"wp_version_check":[95],"wp_update_plugins":[210],"wp_update_themes":[319],"count_users":[921]}},"is_serialized":{"doc":"\/**\n * Check value to find if it was serialized.\n *\n * If $data is not an string, then returned value will always be false.\n * Serialized data is always a string.\n *\n * @since 2.0.5\n *\n * @param mixed $data Value to check to see if was serialized.\n * @return bool False if not serialized and true if it was.\n *\/","file":"functions.php","line":247,"missingDoc":false,"filters":[],"uses":{"is_string":[249],"trim":[251],"strlen":[254],"preg_match":[269,273]},"used_by":{"maybe_unserialize":[231],"maybe_serialize":[320]}},"is_serialized_string":{"doc":"\/**\n * Check whether serialized data is of string type.\n *\n * @since 2.0.5\n *\n * @param mixed $data Serialized data\n * @return bool False if not a serialized string, true if it is.\n *\/","file":"functions.php","line":286,"missingDoc":false,"filters":[],"uses":{"is_string":[288],"trim":[290],"strlen":[291]},"used_by":[]},"get_enclosed":{"doc":"\/**\n * Retrieve enclosures already enclosed for a post.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param int $post_id Post ID.\n * @return array List of enclosures\n *\/","file":"post.php","line":3315,"missingDoc":false,"filters":["'get_enclosed'"],"uses":{"get_post_custom":[3316],"is_array":[3318,3322],"explode":[3325],"trim":[3326]},"used_by":{"do_enclose":[418]}},"wp_get_http_headers":{"doc":"\/**\n * Retrieve HTTP Headers from URL.\n *\n * @since 1.5.1\n *\n * @param string $url\n * @param bool $deprecated Not Used.\n * @return bool|string False on failure, headers on success.\n *\/","file":"functions.php","line":542,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[544],"wp_remote_head":[546],"is_wp_error":[548],"wp_remote_retrieve_headers":[551]},"used_by":{"do_enclose":[450]}},"wp_get_http":{"doc":"\/**\n * Perform a HTTP HEAD or GET request.\n *\n * If $file_path is a writable filename, this will do a GET request and write\n * the file to that path.\n *\n * @since 2.5.0\n *\n * @param string $url URL to fetch.\n * @param string|bool $file_path Optional. File path to write request to.\n * @param int $red (private) The number of Redirects followed, Upon 5 being hit, returns false.\n * @return bool|string False on failure and string of headers if HEAD request.\n *\/","file":"functions.php","line":491,"missingDoc":false,"filters":[],"uses":{"set_time_limit":[492],"wp_remote_request":[505],"is_wp_error":[507],"wp_remote_retrieve_headers":[510],"wp_remote_retrieve_response_code":[511],"wp_get_http":[515],"in_array":[514],"fopen":[522],"fwrite":[526],"wp_remote_retrieve_body":[526],"fclose":[527],"clearstatcache":[528]},"used_by":{"wp_get_http":[515]}},"is_new_day":{"doc":"\/**\n * Whether today is a new day.\n *\n * @since 0.71\n * @uses $day Today\n * @uses $previousday Previous day\n *\n * @return int 1 when new day, 0 if not a new day.\n *\/","file":"functions.php","line":563,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"build_query":{"doc":"\/**\n * Build URL query based on an associative and, or indexed array.\n *\n * This is a convenient function for easily building url queries. It sets the\n * separator to '&' and uses _http_build_query() function.\n *\n * @see _http_build_query() Used to build the query\n * @link http:\/\/us2.php.net\/manual\/en\/function.http-build-query.php more on what\n *\t\thttp_build_query() does.\n *\n * @since 2.3.0\n *\n * @param array $data URL-encode key\/value pairs.\n * @return string URL encoded string\n *\/","file":"functions.php","line":586,"missingDoc":false,"filters":[],"uses":{"_http_build_query":[587]},"used_by":{"add_query_arg":[699]}},"_http_build_query":{"doc":"","file":"functions.php","line":591,"missingDoc":true,"filters":[],"uses":{"urlencode":[596,609],"is_int":[597],"array_push":[607,609,611],"_http_build_query":[607],"is_array":[606],"is_object":[606],"ini_get":[615],"implode":[617]},"used_by":{"build_query":[587],"_http_build_query":[607]}},"add_magic_quotes":{"doc":"\/**\n * Walks the array while sanitizing the contents.\n *\n * @since 0.71\n *\n * @param array $array Array to used to walk while sanitizing contents.\n * @return array Sanitized $array.\n *\/","file":"functions.php","line":733,"missingDoc":false,"filters":[],"uses":{"add_magic_quotes":[736],"addslashes":[738],"is_array":[735]},"used_by":{"add_magic_quotes":[736],"wp_magic_quotes":[540,541,542,543],"wp_update_post":[2972,2979],"_wp_put_post_revision":[5079],"wp_restore_post_revision":[5158],"wp_update_term":[2364],"wp_update_user":[1466]}},"wp":{"doc":"\/**\n * Set up the WordPress query.\n *\n * @since 2.0.0\n *\n * @param string $query_vars Default WP_Query arguments.\n *\/","file":"functions.php","line":777,"missingDoc":false,"filters":[],"uses":{"main":[779]},"used_by":[]},"cache_javascript_headers":{"doc":"\/**\n * Set the headers for caching for 10 days with JavaScript content type.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":953,"missingDoc":false,"filters":[],"uses":{"header":[955,956,957],"get_bloginfo":[955],"gmdate":[957],"time":[957]},"used_by":[]},"get_num_queries":{"doc":"\/**\n * Retrieve the number of database queries during the WordPress execution.\n *\n * @since 2.0.0\n *\n * @return int Number of database queries\n *\/","file":"functions.php","line":967,"missingDoc":false,"filters":[],"uses":[],"used_by":{"__main":[20]}},"bool_from_yn":{"doc":"\/**\n * Whether input is yes or no. Must be 'y' to be true.\n *\n * @since 1.0.0\n *\n * @param string $yn Character string containing either 'y' or 'n'\n * @return bool True if yes, false on anything else\n *\/","file":"functions.php","line":980,"missingDoc":false,"filters":[],"uses":{"strtolower":[981]},"used_by":[]},"do_feed":{"doc":"\/**\n * Loads the feed template from the use of an action hook.\n *\n * If the feed action does not have a hook, then the function will die with a\n * message telling the visitor that the feed is not valid.\n *\n * It is better to only have one hook for each feed.\n *\n * @since 2.1.0\n * @uses $wp_query Used to tell if the use a comment feed.\n * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed.\n *\/","file":"functions.php","line":996,"missingDoc":false,"filters":[],"uses":{"get_query_var":[999],"preg_replace":[1002],"get_default_feed":[1005],"sprintf":[1009],"__":[1009],"esc_html":[1009],"wp_die":[1010],"has_action":[1008]},"used_by":{"__main":[18]}},"has_action":{"doc":"\/**\n * Check if any action has been registered for a hook.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @see has_filter() has_action() is an alias of has_filter().\n *\n * @param string $tag The name of the action hook.\n * @param callback $function_to_check optional.\n * @return mixed If $function_to_check is omitted, returns boolean for whether the hook has anything registered.\n * \tWhen checking a specific function, the priority of that hook is returned, or false if the function is not attached.\n * \tWhen using the $function_to_check argument, this function may return a non-boolean value that evaluates to false\n * \t(e.g.) 0, so use the === operator for testing the return value.\n *\/","file":"plugin.php","line":509,"missingDoc":false,"filters":[],"uses":{"has_filter":[510]},"used_by":{"do_feed":[1008]}},"do_feed_rdf":{"doc":"\/**\n * Load the RDF RSS 0.91 Feed template.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":1021,"missingDoc":false,"filters":[],"uses":{"load_template":[1022]},"used_by":[]},"load_template":{"doc":"\/**\n * Require the template file with WordPress environment.\n *\n * The globals are set up for the template file to ensure that the WordPress\n * environment is available from within the function. The query variables are\n * also available.\n *\n * @since 1.5.0\n *\n * @param string $_template_file Path to template file.\n * @param bool $require_once Whether to require_once or require. Default true.\n *\/","file":"template.php","line":406,"missingDoc":false,"filters":[],"uses":{"extract":[410],"is_array":[409]},"used_by":{"do_feed_rdf":[1022],"do_feed_rss":[1031],"do_feed_rss2":[1043,1045],"do_feed_atom":[1057,1059],"get_header":[35],"get_footer":[64],"get_sidebar":[93],"locate_template":[389]}},"do_feed_rss":{"doc":"\/**\n * Load the RSS 1.0 Feed Template.\n *\n * @since 2.1.0\n *\/","file":"functions.php","line":1030,"missingDoc":false,"filters":[],"uses":{"load_template":[1031]},"used_by":[]},"do_feed_rss2":{"doc":"\/**\n * Load either the RSS2 comment feed or the RSS2 posts feed.\n *\n * @since 2.1.0\n *\n * @param bool $for_comments True for the comment feed, false for normal feed.\n *\/","file":"functions.php","line":1041,"missingDoc":false,"filters":[],"uses":{"load_template":[1043,1045]},"used_by":[]},"do_feed_atom":{"doc":"\/**\n * Load either Atom comment feed or Atom posts feed.\n *\n * @since 2.1.0\n *\n * @param bool $for_comments True for the comment feed, false for normal feed.\n *\/","file":"functions.php","line":1055,"missingDoc":false,"filters":[],"uses":{"load_template":[1057,1059]},"used_by":[]},"do_robots":{"doc":"\/**\n * Display the robots.txt file content.\n *\n * The echo content should be with usage of the permalinks or for creating the\n * robots.txt file.\n *\n * @since 2.1.0\n * @uses do_action() Calls 'do_robotstxt' hook for displaying robots.txt rules.\n *\/","file":"functions.php","line":1071,"missingDoc":false,"filters":["'do_robotstxt'","'robots_txt'"],"uses":{"header":[1072],"get_option":[1077],"parse_url":[1081],"site_url":[1081]},"used_by":[]},"wp_load_translations_early":{"doc":"\/**\n * Attempts an early load of translations.\n *\n * Used for errors encountered during the initial loading process, before the locale has been\n * properly detected and loaded.\n *\n * Designed for unusual load sequences (like setup-config.php) or for when the script will then\n * terminate with an error, otherwise there is a risk that a file can be double-included.\n *\n * @since 3.4.0\n * @access private\n *\/","file":"load.php","line":692,"missingDoc":false,"filters":[],"uses":{"function_exists":[700],"did_action":[700],"defined":[717,729,732,750],"is_dir":[729,732,735,738],"array_unique":[744],"load_textdomain":[749,751],"file_exists":[750,748]},"used_by":{"is_blog_installed":[1150],"dead_db":[2765],"wp_check_php_mysql_versions":[107,112],"wp_maintenance":[161],"wp_set_wpdb_vars":[369],"wpmu_current_site":[216],"ms_not_installed":[235],"__main":[34,120],"wpdb::select":[845],"wpdb::print_error":[1026],"wpdb::db_connect":[1144]}},"dead_db":{"doc":"\/**\n * Load custom DB error or display WordPress DB error.\n *\n * If a file exists in the wp-content directory named db-error.php, then it will\n * be loaded instead of displaying the WordPress DB error. If it is not found,\n * then the WordPress DB error will be displayed instead.\n *\n * The WordPress DB error sets the HTTP status header to 500 to try to prevent\n * search engines from caching the message. Custom DB messages should do the\n * same.\n *\n * This function was backported to the the WordPress 2.3.2, but originally was\n * added in WordPress 2.5.0.\n *\n * @since 2.3.2\n * @uses $wpdb\n *\/","file":"functions.php","line":2747,"missingDoc":false,"filters":[],"uses":{"file_exists":[2751],"wp_die":[2758],"defined":[2757,2757],"status_header":[2761],"nocache_headers":[2762],"header":[2763],"wp_load_translations_early":[2765],"is_rtl":[2768],"_e":[2771,2775]},"used_by":{"is_blog_installed":[1154],"wp_set_wpdb_vars":[356]}},"wp_nonce_url":{"doc":"\/**\n * Retrieve URL with nonce added to URL query.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $actionurl URL to add nonce action\n * @param string $action Optional. Nonce action name\n * @return string URL with nonce action added.\n *\/","file":"functions.php","line":1175,"missingDoc":false,"filters":[],"uses":{"str_replace":[1176],"esc_html":[1177],"add_query_arg":[1177],"wp_create_nonce":[1177]},"used_by":{"wp_logout_url":[219],"get_delete_post_link":[969],"wp_list_post_revisions":[1401]}},"wp_referer_field":{"doc":"\/**\n * Retrieve or display referer hidden field for forms.\n *\n * The referer link is the current Request URI from the server super global. The\n * input name is '_wp_http_referer', in case you wanted to check manually.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param bool $echo Whether to echo or return the referer field.\n * @return string Referer field.\n *\/","file":"functions.php","line":1234,"missingDoc":false,"filters":[],"uses":{"esc_attr":[1235]},"used_by":{"wp_nonce_field":[1213]}},"wp_original_referer_field":{"doc":"\/**\n * Retrieve or display original referer hidden field for forms.\n *\n * The input name is '_wp_original_http_referer' and will be either the same\n * value of {@link wp_referer_field()}, if that was posted already or it will\n * be the current page, if it doesn't exist.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param bool $echo Whether to echo the original http referer\n * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.\n * @return string Original referer field.\n *\/","file":"functions.php","line":1258,"missingDoc":false,"filters":[],"uses":{"wp_get_referer":[1259],"wp_get_original_referer":[1260,1260],"esc_attr":[1261],"stripslashes":[1261]},"used_by":[]},"wp_get_referer":{"doc":"\/**\n * Retrieve referer from '_wp_http_referer' or HTTP referer. If it's the same\n * as the current request URL, will return false.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @return string|bool False on failure. Referer URL on success.\n *\/","file":"functions.php","line":1277,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_original_referer_field":[1259],"wp_nonce_ays":[2026,2025],"auth_redirect":[785,785],"check_admin_referer":[811]}},"wp_get_original_referer":{"doc":"\/**\n * Retrieve original referer that was posted, if it exists.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @return string|bool False if no original referer or original referer if set.\n *\/","file":"functions.php","line":1298,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_original_referer_field":[1260,1260]}},"wp_mkdir_p":{"doc":"\/**\n * Recursive directory creation based on full path.\n *\n * Will attempt to set permissions on folders.\n *\n * @since 2.0.1\n *\n * @param string $target Full path to attempt to create.\n * @return bool Whether the path was created. True if path already exists.\n *\/","file":"functions.php","line":1314,"missingDoc":false,"filters":[],"uses":{"explode":[1319],"wp_is_stream":[1318],"str_replace":[1323],"rtrim":[1331],"is_dir":[1336,1344],"file_exists":[1335],"stat":[1340],"dirname":[1340,1344,1349],"chmod":[1342],"mkdir":[1339],"wp_mkdir_p":[1350,1349]},"used_by":{"wp_mkdir_p":[1350,1349],"wp_upload_dir":[1617],"wp_upload_bits":[1740]}},"path_is_absolute":{"doc":"\/**\n * Test if a give filesystem path is absolute ('\/foo\/bar', 'c:\\windows').\n *\n * @since 2.5.0\n *\n * @param string $path File path\n * @return bool True if path is absolute, false is not absolute.\n *\/","file":"functions.php","line":1363,"missingDoc":false,"filters":[],"uses":{"realpath":[1365],"strlen":[1368],"preg_match":[1372]},"used_by":{"path_join":[1391],"locate_template":[376]}},"win_is_writable":{"doc":"\/**\n * Workaround for Windows bug in is_writable() function\n *\n * PHP has issues with Windows ACL's for determine if a \n * directory is writable or not, this works around them by\n * checking the ability to open files rather than relying\n * upon PHP to interprate the OS ACL.\n *\n * @link http:\/\/bugs.php.net\/bug.php?id=27609\n * @link http:\/\/bugs.php.net\/bug.php?id=30931\n *\n * @since 2.8.0\n *\n * @param string $path\n * @return bool\n *\/","file":"functions.php","line":1473,"missingDoc":false,"filters":[],"uses":{"win_is_writable":[1476,1478],"uniqid":[1476,1478],"mt_rand":[1476,1478],"is_dir":[1477],"strlen":[1475],"file_exists":[1481],"fopen":[1482],"fclose":[1485],"unlink":[1487]},"used_by":{"wp_is_writable":[1452],"win_is_writable":[1476,1478]}},"ms_is_switched":{"doc":"\/**\n * Determines if switch_to_blog() is in effect\n *\n * @since 3.5.0\n *\n * @return bool True if switched, false otherwise.\n *\/","file":"ms-blogs.php","line":626,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_upload_dir":[1569]}},"is_main_site":{"doc":"\/**\n * Is main site?\n *\n *\n * @since 3.0.0\n * @package WordPress\n *\n * @param int $blog_id optional blog id to test (default current blog)\n * @return bool True if not multisite or $blog_id is main site\n *\/","file":"functions.php","line":3219,"missingDoc":false,"filters":[],"uses":{"is_multisite":[3222],"get_current_blog_id":[3226]},"used_by":{"wp_upload_dir":[1552],"is_main_blog":[127],"maybe_redirect_404":[1653],"wp_schedule_update_network_counts":[1913],"WP_Rewrite::rewrite_rules":[1536],"__main":[431]}},"wp_unique_filename":{"doc":"\/**\n * Get a filename that is sanitized and unique for the given directory.\n *\n * If the filename is not unique, then a number will be added to the filename\n * before the extension, and will continue adding numbers until the filename is\n * unique.\n *\n * The callback is passed three parameters, the first one is the directory, the\n * second is the filename, and the third is the extension.\n *\n * @since 2.5.0\n *\n * @param string $dir\n * @param string $filename\n * @param mixed $unique_filename_callback Callback.\n * @return string New filename, if given wasn't unique.\n *\/","file":"functions.php","line":1647,"missingDoc":false,"filters":[],"uses":{"sanitize_file_name":[1649],"pathinfo":[1652],"basename":[1654],"call_user_func":[1662],"strtolower":[1668,1667],"preg_replace":[1669],"preg_quote":[1669],"file_exists":[1672,1672,1681],"str_replace":[1674,1675,1685],"is_callable":[1661]},"used_by":{"wp_upload_bits":[1737]}},"wp_check_filetype":{"doc":"\/**\n * Retrieve the file type from the file name.\n *\n * You can optionally define the mime array, if needed.\n *\n * @since 2.0.4\n *\n * @param string $filename File name or path.\n * @param array $mimes Optional. Key is the file extension with value as the mime type.\n * @return array Values with extension first and mime type.\n *\/","file":"functions.php","line":1808,"missingDoc":false,"filters":[],"uses":{"get_allowed_mime_types":[1810],"preg_match":[1816],"compact":[1823]},"used_by":{"wp_upload_bits":[1722],"wp_check_filetype_and_ext":[1847,1883],"wp_get_image_editor":[1167],"__main":[32]}},"wp_ext2type":{"doc":"\/**\n * Retrieve the file type based on the extension name.\n *\n * @package WordPress\n * @since 2.5.0\n * @uses apply_filters() Calls 'ext2type' hook on default supported types.\n *\n * @param string $ext The extension to search.\n * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found.\n *\/","file":"functions.php","line":1781,"missingDoc":false,"filters":["'ext2type'"],"uses":{"in_array":[1793]},"used_by":{"wp_mime_type_icon":[4335]}},"wp_check_filetype_and_ext":{"doc":"\/**\n * Attempt to determine the real file type of a file.\n * If unable to, the file name extension will be used to determine type.\n *\n * If it's determined that the extension does not match the file's real type,\n * then the \"proper_filename\" value will be set with a proper filename and extension.\n *\n * Currently this function only supports validating images known to getimagesize().\n *\n * @since 3.0.0\n *\n * @param string $file Full path to the image.\n * @param string $filename The filename of the image (may differ from $file due to $file being in a tmp directory)\n * @param array $mimes Optional. Key is the file extension with value as the mime type.\n * @return array Values for the extension, MIME, and either a corrected filename or false if original $filename is valid\n *\/","file":"functions.php","line":1842,"missingDoc":false,"filters":["'getimagesize_mimes_to_exts'","'wp_check_filetype_and_ext'"],"uses":{"wp_check_filetype":[1847,1883],"extract":[1848,1884],"compact":[1852,1891],"file_exists":[1851],"getimagesize":[1858],"explode":[1874],"array_pop":[1875],"implode":[1877],"strpos":[1855],"function_exists":[1855]},"used_by":[]},"wp_nonce_ays":{"doc":"\/**\n * Display \"Are You Sure\" message to confirm the action being taken.\n *\n * If the action has the nonce explain message, then it will be displayed along\n * with the \"Are you sure?\" message.\n *\n * @package WordPress\n * @subpackage Security\n * @since 2.0.4\n *\n * @param string $action The nonce action.\n *\/","file":"functions.php","line":2018,"missingDoc":false,"filters":[],"uses":{"__":[2019,2021,2022,2024,2026],"sprintf":[2021,2022],"get_bloginfo":[2021],"wp_logout_url":[2022],"esc_url":[2026],"remove_query_arg":[2026],"wp_get_referer":[2026,2025],"wp_die":[2029]},"used_by":{"check_admin_referer":[814]}},"_default_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution and display HTML message with error message.\n *\n * This is the default handler for wp_die if you want a custom one for your\n * site then you can overload using the wp_die_handler filter in wp_die\n *\n * @since 3.0.0\n * @access private\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2071,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2073],"function_exists":[2075,2077,2117,2123,2123],"get_error_data":[2079],"is_array":[2080],"get_error_messages":[2083],"count":[2084],"join":[2092],"is_string":[2095],"is_wp_error":[2077],"__":[2100,2112],"status_header":[2106],"nocache_headers":[2107],"header":[2108],"headers_sent":[2105],"is_rtl":[2117],"language_attributes":[2123],"did_action":[2104]},"used_by":[]},"language_attributes":{"doc":"\/**\n * Display the language attributes for the html tag.\n *\n * Builds up a set of html attributes containing the text direction and language\n * information for the page.\n *\n * @since 2.1.0\n *\n * @param string $doctype The type of html document (xhtml|html).\n *\/","file":"general-template.php","line":1857,"missingDoc":false,"filters":["'language_attributes'"],"uses":{"function_exists":[1861],"is_rtl":[1861],"get_option":[1865,1868],"get_bloginfo":[1864],"implode":[1872]},"used_by":{"_default_wp_die_handler":[2123],"__main":[13,13]}},"did_action":{"doc":"\/**\n * Retrieve the number of times an action is fired.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.1\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action hook.\n * @return int The number of times action hook <tt>$tag<\/tt> is fired\n *\/","file":"plugin.php","line":424,"missingDoc":false,"filters":[],"uses":[],"used_by":{"_default_wp_die_handler":[2104],"wp_print_scripts":[28],"wp_register_script":[55],"wp_localize_script":[89],"wp_deregister_script":[108],"wp_enqueue_script":[128],"wp_dequeue_script":[152],"wp_script_is":[178],"wp_print_styles":[29],"wp_add_inline_style":[56],"wp_register_style":[84],"wp_deregister_style":[105],"wp_enqueue_style":[136],"wp_dequeue_style":[158],"wp_style_is":[185],"wp_admin_css":[2095],"wp_load_translations_early":[700],"wp_enqueue_media":[1431],"switch_to_blog":[544],"restore_current_blog":[605],"wp_default_scripts":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"print_head_scripts":[646],"wp_print_head_scripts":[725],"create_initial_taxonomies":[24],"_remove_theme_support":[1492,1502],"wp_register_sidebar_widget":[646],"wp_register_widget_control":[746],"_register_widget_form_callback":[802]}},"_xmlrpc_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution and display XML message with error message.\n *\n * This is the handler for wp_die when processing XMLRPC requests.\n *\n * @since 3.2.0\n * @access private\n *\n * @param string $message Error message.\n * @param string $title Error title.\n * @param string|array $args Optional arguments to control behavior.\n *\/","file":"functions.php","line":2267,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2271],"output":[2275],"getXml":[2275]},"used_by":[]},"_ajax_wp_die_handler":{"doc":"\/**\n * Kill WordPress ajax execution.\n *\n * This is the handler for wp_die when processing Ajax requests.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $message Optional. Response to print.\n *\/","file":"functions.php","line":2290,"missingDoc":false,"filters":[],"uses":{"is_scalar":[2291]},"used_by":[]},"_scalar_wp_die_handler":{"doc":"\/**\n * Kill WordPress execution.\n *\n * This is the handler for wp_die when processing APP requests.\n *\n * @since 3.4.0\n * @access private\n *\n * @param string $message Optional. Response to print.\n *\/","file":"functions.php","line":2306,"missingDoc":false,"filters":[],"uses":{"is_scalar":[2307]},"used_by":[]},"wp_send_json":{"doc":"\/**\n * Send a JSON response back to an Ajax request.\n *\n * @since 3.5.0\n *\n * @param mixed $response Variable (usually an array or object) to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2319,"missingDoc":false,"filters":[],"uses":{"header":[2320],"get_option":[2320],"json_encode":[2321],"wp_die":[2323],"defined":[2322]},"used_by":{"wp_send_json_success":[2341],"wp_send_json_error":[2357]}},"wp_send_json_success":{"doc":"\/**\n * Send a JSON response back to an Ajax request, indicating success.\n *\n * @since 3.5.0\n *\n * @param mixed $data Data to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2335,"missingDoc":false,"filters":[],"uses":{"wp_send_json":[2341]},"used_by":[]},"wp_send_json_error":{"doc":"\/**\n * Send a JSON response back to an Ajax request, indicating failure.\n *\n * @since 3.5.0\n *\n * @param mixed $data Data to encode as JSON, then print and die.\n *\/","file":"functions.php","line":2351,"missingDoc":false,"filters":[],"uses":{"wp_send_json":[2357]},"used_by":[]},"_config_wp_home":{"doc":"\/**\n * Retrieve the WordPress home page URL.\n *\n * If the constant named 'WP_HOME' exists, then it will be used and returned by\n * the function. This can be used to counter the redirection on your local\n * development environment.\n *\n * @access private\n * @package WordPress\n * @since 2.2.0\n *\n * @param string $url URL for the home location\n * @return string Homepage location.\n *\/","file":"functions.php","line":2374,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[2376],"defined":[2375]},"used_by":[]},"_config_wp_siteurl":{"doc":"\/**\n * Retrieve the WordPress site URL.\n *\n * If the constant named 'WP_SITEURL' is defined, then the value in that\n * constant will always be returned. This can be used for debugging a site on\n * your localhost while not having to change the database to your URL.\n *\n * @access private\n * @package WordPress\n * @since 2.2.0\n *\n * @param string $url URL to set the WordPress site location.\n * @return string The WordPress Site URL\n *\/","file":"functions.php","line":2394,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[2396],"defined":[2395]},"used_by":[]},"_mce_set_direction":{"doc":"\/**\n * Set the localized direction for MCE plugin.\n *\n * Will only set the direction to 'rtl', if the WordPress locale has the text\n * direction set to 'rtl'.\n *\n * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array\n * keys. These keys are then returned in the $input array.\n *\n * @access private\n * @package WordPress\n * @subpackage MCE\n * @since 2.1.0\n *\n * @param array $input MCE plugin array.\n * @return array Direction set for 'rtl', if needed by locale.\n *\/","file":"functions.php","line":2417,"missingDoc":false,"filters":[],"uses":{"is_rtl":[2418]},"used_by":[]},"smilies_init":{"doc":"\/**\n * Convert smiley code to the icon graphic file equivalent.\n *\n * You can turn off smilies, by going to the write setting screen and unchecking\n * the box, or by setting 'use_smilies' option to false or removing the option.\n *\n * Plugins may override the default smiley list by setting the $wpsmiliestrans\n * to an array, with the key the code the blogger types in and the value the\n * image file.\n *\n * The $wp_smiliessearch global is for the regular expression and is set each\n * time the function is called.\n *\n * The full list of smilies can be found in the function and won't be listed in\n * the description. Probably should create a Codex page for it, so that it is\n * available.\n *\n * @global array $wpsmiliestrans\n * @global array $wp_smiliessearch\n * @since 2.2.0\n *\/","file":"functions.php","line":2448,"missingDoc":false,"filters":[],"uses":{"get_option":[2452],"count":[2505],"krsort":[2514],"substr":[2520,2521],"preg_quote":[2529,2533]},"used_by":[]},"wp_parse_id_list":{"doc":"\/**\n * Clean up an array, comma- or space-separated list of IDs.\n *\n * @since 3.0.0\n *\n * @param array|string $list\n * @return array Sanitized array of IDs\n *\/","file":"functions.php","line":2572,"missingDoc":false,"filters":[],"uses":{"preg_split":[2574],"is_array":[2573],"array_unique":[2576],"array_map":[2576]},"used_by":{"get_posts":[1717,1721],"get_pages":[3674,3689],"get_terms":[1287,1302,1316],"WP_User_Query::prepare_query":[522,525]}},"wp_filter_object_list":{"doc":"\/**\n * Filters a list of objects, based on a set of key => value arguments.\n *\n * @since 3.0.0\n *\n * @param array $list An array of objects to filter\n * @param array $args An array of key => value arguments to match against each object\n * @param string $operator The logical operation to perform. 'or' means only one element\n *\tfrom the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @param bool|string $field A field from the object to place instead of the entire object\n * @return array A list of objects or object fields\n *\/","file":"functions.php","line":2609,"missingDoc":false,"filters":[],"uses":{"is_array":[2610],"wp_list_filter":[2613],"wp_list_pluck":[2616]},"used_by":{"get_post_stati":[1029],"get_post_types":[1123],"get_taxonomies":[143]}},"wp_list_filter":{"doc":"\/**\n * Filters a list of objects, based on a set of key => value arguments.\n *\n * @since 3.1.0\n *\n * @param array $list An array of objects to filter\n * @param array $args An array of key => value arguments to match against each object\n * @param string $operator The logical operation to perform:\n * 'AND' means all elements from the array must match;\n * 'OR' means only one element needs to match;\n * 'NOT' means no elements may match.\n * The default is 'AND'.\n * @return array\n *\/","file":"functions.php","line":2635,"missingDoc":false,"filters":[],"uses":{"is_array":[2636],"strtoupper":[2642],"count":[2643],"array_key_exists":[2651]},"used_by":{"wp_filter_object_list":[2613],"WP_Query::get_posts":[2242,2258,2270],"WP_Query::get_queried_object":[2995]}},"wp_maybe_load_widgets":{"doc":"\/**\n * Determines if Widgets library should be loaded.\n *\n * Checks to make sure that the widgets library hasn't already been loaded. If\n * it hasn't, then it will load the widgets library and run an action hook.\n *\n * @since 2.2.0\n * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value.\n *\/","file":"functions.php","line":2694,"missingDoc":false,"filters":["'load_default_widgets'"],"uses":{"add_action":[2698]},"used_by":[]},"wp_widgets_add_menu":{"doc":"\/**\n * Append the Widgets menu to the themes main menu.\n *\n * @since 2.2.0\n * @uses $submenu The administration submenu list.\n *\/","file":"functions.php","line":2707,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[2710],"__":[2713],"ksort":[2714]},"used_by":[]},"wp_ob_end_flush_all":{"doc":"\/**\n * Flush all output buffers for PHP 5.2.\n *\n * Make sure all output buffers are flushed before our singletons our destroyed.\n *\n * @since 2.2.0\n *\/","file":"functions.php","line":2724,"missingDoc":false,"filters":[],"uses":{"ob_get_level":[2725],"ob_end_flush":[2727]},"used_by":[]},"url_is_accessable_via_ssl":{"doc":"\/**\n * Determines if the blog can be accessed over SSL.\n *\n * Determines if blog can be accessed over SSL by using cURL to access the site\n * using the https in the siteurl. Requires cURL extension to work correctly.\n *\n * @since 2.5.0\n *\n * @param string $url\n * @return bool Whether SSL access is available\n *\/","file":"functions.php","line":2805,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[2808],"curl_init":[2810],"curl_setopt":[2811,2812,2813,2814,2815],"curl_exec":[2817],"curl_getinfo":[2819],"curl_close":[2820],"in_array":[2807],"get_loaded_extensions":[2807]},"used_by":[]},"is_lighttpd_before_150":{"doc":"\/**\n * Is the server running earlier than 1.5.0 version of lighttpd?\n *\n * @since 2.5.0\n *\n * @return bool Whether the server is running lighttpd < 1.5.0\n *\/","file":"functions.php","line":2992,"missingDoc":false,"filters":[],"uses":{"explode":[2993],"version_compare":[2995]},"used_by":[]},"apache_mod_loaded":{"doc":"\/**\n * Does the specified module exist in the Apache config?\n *\n * @since 2.5.0\n *\n * @param string $mod e.g. mod_rewrite\n * @param bool $default The default return value if the module is not found\n * @return bool\n *\/","file":"functions.php","line":3007,"missingDoc":false,"filters":[],"uses":{"apache_get_modules":[3014],"in_array":[3015],"function_exists":[3017,3013],"ob_start":[3018],"phpinfo":[3019],"ob_get_clean":[3020],"strpos":[3021]},"used_by":[]},"validate_file":{"doc":"\/**\n * File validates against allowed set of defined rules.\n *\n * A return value of '1' means that the $file contains either '..' or '.\/'. A\n * return value of '2' means that the $file contains ':' after the first\n * character. A return value of '3' means that the file is not in the allowed\n * files list.\n *\n * @since 1.2.0\n *\n * @param string $file File path.\n * @param array $allowed_files List of allowed files.\n * @return int 0 means nothing is wrong, greater than 0 means something was wrong.\n *\/","file":"functions.php","line":3069,"missingDoc":false,"filters":[],"uses":{"strpos":[3070,3073],"in_array":[3076],"substr":[3079]},"used_by":{"wp_get_active_and_valid_plugins":[495],"wp_get_active_network_plugins":[49],"get_page_template":[248],"preview_theme":[565,572]}},"wp_guess_url":{"doc":"\/**\n * Guess the URL for the site.\n *\n * Will remove wp-admin links to retrieve only return URLs not in the wp-admin\n * directory.\n *\n * @since 2.6.0\n *\n * @return string\n *\/","file":"functions.php","line":3154,"missingDoc":false,"filters":[],"uses":{"is_ssl":[3158],"preg_replace":[3159],"defined":[3155],"rtrim":[3162]},"used_by":{"wp_not_installed":[431],"wp_default_scripts":[53],"wp_default_styles":[495]}},"wp_suspend_cache_invalidation":{"doc":"\/**\n * Suspend cache invalidation.\n *\n * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations\n * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent\n * cache when invalidation is suspended.\n *\n * @since 2.7.0\n *\n * @param bool $suspend Whether to suspend or enable cache invalidation\n * @return bool The current suspend setting\n *\/","file":"functions.php","line":3201,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"global_terms_enabled":{"doc":"\/**\n * Whether global terms are enabled.\n *\n *\n * @since 3.0.0\n * @package WordPress\n *\n * @return bool True if multisite and global terms enabled\n *\/","file":"functions.php","line":3240,"missingDoc":false,"filters":["'global_terms_enabled'"],"uses":{"is_multisite":[3241],"get_site_option":[3250],"is_null":[3247,3245]},"used_by":{"global_terms":[1530]}},"wp_timezone_override_offset":{"doc":"\/**\n * gmt_offset modification for smart timezone handling.\n *\n * Overrides the gmt_offset option if we have a timezone_string available.\n *\n * @since 2.8.0\n *\n * @return float|bool\n *\/","file":"functions.php","line":3264,"missingDoc":false,"filters":[],"uses":{"get_option":[3265],"timezone_open":[3269],"date_create":[3270],"round":[3274],"timezone_offset_get":[3274]},"used_by":[]},"_wp_timezone_choice_usort_callback":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.9.0\n *\n * @param unknown_type $a\n * @param unknown_type $b\n * @return int\n *\/","file":"functions.php","line":3286,"missingDoc":false,"filters":[],"uses":{"strnatcasecmp":[3291,3305,3309,3311,3320],"substr":[3290,3290,3294,3300]},"used_by":[]},"wp_timezone_choice":{"doc":"\/**\n * Gives a nicely formatted list of timezone strings. \/\/ temporary! Not in final\n *\n * @since 2.9.0\n *\n * @param string $selected_zone Selected Zone\n * @return string\n *\/","file":"functions.php","line":3332,"missingDoc":false,"filters":[],"uses":{"get_locale":[3339],"load_textdomain":[3341],"explode":[3347],"in_array":[3348],"translate":[3366,3367,3368],"str_replace":[3366,3367,3368,3439],"timezone_identifiers_list":[3346],"usort":[3371],"__":[3376,3425],"esc_attr":[3392,3412,3425,3445],"join":[3407,3450],"esc_html":[3412,3445],"esc_attr__":[3421,3429]},"used_by":[]},"wp_scheduled_delete":{"doc":"\/**\n * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS.\n *\n * @since 2.9.0\n *\/","file":"functions.php","line":3471,"missingDoc":false,"filters":[],"uses":{"time":[3474],"get_results":[3476,3493],"prepare":[3476,3493],"get_post":[3483],"delete_post_meta":[3486,3487],"wp_delete_post":[3489],"get_comment":[3500],"delete_comment_meta":[3503,3504],"wp_delete_comment":[3506]},"used_by":[]},"_search_terms_tidy":{"doc":"\/**\n * Used internally to tidy up the search terms.\n *\n * @access private\n * @since 2.9.0\n *\n * @param string $t\n * @return string\n *\/","file":"functions.php","line":3567,"missingDoc":false,"filters":[],"uses":{"trim":[3568]},"used_by":[]},"__return_true":{"doc":"\/**\n * Returns true.\n *\n * Useful for returning true to filters easily.\n *\n * @since 3.0.0\n * @see __return_false()\n * @return bool true\n *\/","file":"functions.php","line":3580,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_false":{"doc":"\/**\n * Returns false.\n *\n * Useful for returning false to filters easily.\n *\n * @since 3.0.0\n * @see __return_true()\n * @return bool false\n *\/","file":"functions.php","line":3593,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_zero":{"doc":"\/**\n * Returns 0.\n *\n * Useful for returning 0 to filters easily.\n *\n * @since 3.0.0\n * @see __return_zero()\n * @return int 0\n *\/","file":"functions.php","line":3606,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_empty_array":{"doc":"\/**\n * Returns an empty array.\n *\n * Useful for returning an empty array to filters easily.\n *\n * @since 3.0.0\n * @see __return_zero()\n * @return array Empty array\n *\/","file":"functions.php","line":3619,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"__return_null":{"doc":"\/**\n * Returns null.\n *\n * Useful for returning null to filters easily.\n *\n * @since 3.4.0\n * @return null\n *\/","file":"functions.php","line":3631,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"send_nosniff_header":{"doc":"\/**\n * Send a HTTP header to disable content type sniffing in browsers which support it.\n *\n * @link http:\/\/blogs.msdn.com\/ie\/archive\/2008\/07\/02\/ie8-security-part-v-comprehensive-protection.aspx\n * @link http:\/\/src.chromium.org\/viewvc\/chrome?view=rev&revision=6985\n *\n * @since 3.0.0\n * @return none\n *\/","file":"functions.php","line":3644,"missingDoc":false,"filters":[],"uses":{"header":[3645]},"used_by":[]},"_wp_mysql_week":{"doc":"\/**\n * Returns a MySQL expression for selecting the week number based on the start_of_week option.\n *\n * @internal\n * @since 3.0.0\n * @param string $column\n * @return string\n *\/","file":"functions.php","line":3656,"missingDoc":false,"filters":[],"uses":{"get_option":[3657]},"used_by":{"wp_get_archives":[987],"WP_Query::get_posts":[2151]}},"wp_find_hierarchy_loop":{"doc":"\/**\n * Finds hierarchy loops using a callback function that maps object IDs to parent IDs.\n *\n * @since 3.1.0\n * @access private\n *\n * @param callback $callback function that accepts ( ID, $callback_args ) and outputs parent_ID\n * @param int $start The ID to start the loop check at\n * @param int $start_parent the parent_ID of $start to use instead of calling $callback( $start ). Use null to always use $callback\n * @param array $callback_args optional additional arguments to send to $callback\n * @return array IDs of all members of loop\n *\/","file":"functions.php","line":3684,"missingDoc":false,"filters":[],"uses":{"is_null":[3685],"wp_find_hierarchy_loop_tortoise_hare":[3687,3690]},"used_by":{"wp_check_post_hierarchy_for_loops":[5302],"wp_check_term_hierarchy_for_loops":[3289]}},"wp_find_hierarchy_loop_tortoise_hare":{"doc":"\/**\n * Uses the \"The Tortoise and the Hare\" algorithm to detect loops.\n *\n * For every step of the algorithm, the hare takes two steps and the tortoise one.\n * If the hare ever laps the tortoise, there must be a loop.\n *\n * @since 3.1.0\n * @access private\n *\n * @param callback $callback function that accepts ( ID, callback_arg, ... ) and outputs parent_ID\n * @param int $start The ID to start the loop check at\n * @param array $override an array of ( ID => parent_ID, ... ) to use instead of $callback\n * @param array $callback_args optional additional arguments to send to $callback\n * @param bool $_return_loop Return loop members or just detect presence of loop?\n * Only set to true if you already know the given $start is part of a loop\n * (otherwise the returned array might include branches)\n * @return mixed scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if $_return_loop\n *\/","file":"functions.php","line":3711,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[3720,3722,3732],"array_merge":[3720,3722,3732]},"used_by":{"wp_find_hierarchy_loop":[3687,3690]}},"send_frame_options_header":{"doc":"\/**\n * Send a HTTP header to limit rendering of pages to same origin iframes.\n *\n * @link https:\/\/developer.mozilla.org\/en\/the_x-frame-options_response_header\n *\n * @since 3.1.3\n * @return none\n *\/","file":"functions.php","line":3746,"missingDoc":false,"filters":[],"uses":{"header":[3747]},"used_by":[]},"wp_debug_backtrace_summary":{"doc":"\/**\n * Return a comma separated string of functions that have been called to get to the current point in code.\n *\n * @link http:\/\/core.trac.wordpress.org\/ticket\/19589\n * @since 3.4\n *\n * @param string $ignore_class A class to ignore all function calls within - useful when you want to just give info about the callee\n * @param int $skip_frames A number of stack frames to skip - useful for unwinding back to the source of the issue\n * @param bool $pretty Whether or not you want a comma separated string or raw array returned\n * @return string|array Either a string containing a reversed comma separated trace or an array of individual calls.\n *\/","file":"functions.php","line":3781,"missingDoc":false,"filters":[],"uses":{"debug_backtrace":[3783,3785],"version_compare":[3782],"is_null":[3788],"in_array":[3802,3800],"str_replace":[3803],"join":[3810],"array_reverse":[3810]},"used_by":{"wpdb::get_caller":[1724]}},"_get_non_cached_ids":{"doc":"\/**\n * Retrieve ids that are not already present in the cache\n *\n * @since 3.4.0\n *\n * @param array $object_ids ID list\n * @param string $cache_key The cache bucket to check against\n *\n * @return array\n *\/","file":"functions.php","line":3825,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[3829]},"used_by":{"cache_users":[159],"_prime_post_caches":[5555]}},"wp_checkdate":{"doc":"\/**\n * Test if the supplied date is valid for the Gregorian calendar\n *\n * @since 3.5.0\n *\n * @return bool true|false\n *\/","file":"functions.php","line":3880,"missingDoc":false,"filters":["'wp_checkdate'"],"uses":{"checkdate":[3881]},"used_by":{"wp_insert_post":[2794]}},"wp_print_scripts":{"doc":"\/**\n * Prints script tags in document head.\n *\n * Called by admin-header.php and by wp_head hook. Since it is called by wp_head\n * on every page load, the function does not instantiate the WP_Scripts object\n * unless script names are explicitly passed. Does make use of already\n * instantiated $wp_scripts if present. Use provided wp_print_scripts hook to\n * register\/enqueue new scripts.\n *\n * @since r16\n * @see WP_Dependencies::print_scripts()\n *\/","file":"functions.wp-scripts.php","line":21,"missingDoc":false,"filters":["'wp_print_scripts'"],"uses":{"_doing_it_wrong":[29],"sprintf":[29],"__":[29],"did_action":[28],"is_a":[27],"do_items":[38]},"used_by":[]},"wp_register_script":{"doc":"\/**\n * Register new Javascript file.\n *\n * @since r16\n * @param string $handle Script name\n * @param string $src Script url\n * @param array $deps (optional) Array of script names on which this script depends\n * @param string|bool $ver (optional) Script version (used for cache busting), set to null to disable\n * @param bool $in_footer (optional) Whether to enqueue the script before <\/head> or before <\/body>\n * @return null\n *\/","file":"functions.wp-scripts.php","line":52,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[56],"sprintf":[56],"__":[56],"did_action":[55],"is_a":[54],"add":[61],"add_data":[63]},"used_by":[]},"wp_localize_script":{"doc":"\/**\n * Wrapper for $wp_scripts->localize().\n *\n * Used to localizes a script.\n * Works only if the script has already been added.\n * Accepts an associative array $l10n and creates JS object:\n * \"$object_name\" = {\n * key: value,\n * key: value,\n * ...\n * }\n * See http:\/\/core.trac.wordpress.org\/ticket\/11520 for more information.\n *\n * @since r16\n *\n * @param string $handle The script handle that was registered or used in script-loader\n * @param string $object_name Name for the created JS object. This is passed directly so it should be qualified JS variable \/[a-zA-Z0-9_]+\/\n * @param array $l10n Associative PHP array containing the translated strings. HTML entities will be converted and the array will be JSON encoded.\n * @return bool Whether the localization was added successfully.\n *\/","file":"functions.wp-scripts.php","line":86,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[90],"sprintf":[90],"__":[90],"did_action":[89],"is_a":[88],"localize":[96]},"used_by":{"wp_enqueue_media":[1540],"wp_just_in_time_script_localization":[577]}},"wp_deregister_script":{"doc":"\/**\n * Remove a registered script.\n *\n * @since r16\n * @see WP_Scripts::remove() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":105,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[109],"sprintf":[109],"__":[109],"did_action":[108],"is_a":[107],"remove":[114]},"used_by":[]},"wp_dequeue_script":{"doc":"\/**\n * Remove an enqueued script.\n *\n * @since WP 3.1\n * @see WP_Scripts::dequeue() For parameter information.\n *\/","file":"functions.wp-scripts.php","line":149,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[153],"sprintf":[153],"__":[153],"did_action":[152],"is_a":[151],"dequeue":[158]},"used_by":[]},"wp_script_is":{"doc":"\/**\n * Check whether script has been added to WordPress Scripts.\n *\n * By default, checks if the script has been enqueued. You can also\n * pass 'registered' to $list, to see if the script is registered,\n * and you can check processing statuses with 'to_do' and 'done'.\n *\n * @since WP unknown; BP unknown\n *\n * @param string $handle Name of the script.\n * @param string $list Optional. Defaults to 'enqueued'. Values are\n * \t'registered', 'enqueued' (or 'queue'), 'to_do', and 'done'.\n * @return bool Whether script is in the list.\n *\/","file":"functions.wp-scripts.php","line":175,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[179],"sprintf":[179],"__":[179],"did_action":[178],"is_a":[177],"query":[184]},"used_by":[]},"wp_add_inline_style":{"doc":"\/**\n * Adds extra CSS.\n *\n * Works only if the stylesheet has already been added.\n * Accepts a string $data containing the CSS. If two or more CSS code blocks are\n * added to the same stylesheet $handle, they will be printed in the order\n * they were added, i.e. the latter added styles can redeclare the previous.\n *\n * @since 3.3.0\n * @see WP_Scripts::add_inline_style()\n *\/","file":"functions.wp-styles.php","line":53,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[57],"sprintf":[57],"__":[57],"did_action":[56],"is_a":[55],"add_inline_style":[62]},"used_by":[]},"wp_register_style":{"doc":"\/**\n * Register CSS style file.\n *\n * @since r79\n * @see WP_Styles::add() For additional information.\n * @global object $wp_styles The WP_Styles object for printing styles.\n * @link http:\/\/www.w3.org\/TR\/CSS2\/media.html#media-types List of CSS media types.\n *\n * @param string $handle Name of the stylesheet.\n * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '\/css\/mystyle.css'.\n * @param array $deps Array of handles of any stylesheet that this stylesheet depends on.\n * (Stylesheets that must be loaded before this stylesheet.) Pass an empty array if there are no dependencies.\n * @param string|bool $ver String specifying the stylesheet version number. Set to null to disable.\n * Used to ensure that the correct version is sent to the client regardless of caching.\n * @param string $media The media for which this stylesheet has been defined.\n *\/","file":"functions.wp-styles.php","line":81,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[85],"sprintf":[85],"__":[85],"did_action":[84],"is_a":[83],"add":[90]},"used_by":[]},"wp_deregister_style":{"doc":"\/**\n * Remove a registered CSS file.\n *\n * @since r79\n * @see WP_Styles::remove() For additional information.\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param string $handle Name of the stylesheet.\n *\/","file":"functions.wp-styles.php","line":102,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[106],"sprintf":[106],"__":[106],"did_action":[105],"is_a":[104],"remove":[111]},"used_by":[]},"wp_dequeue_style":{"doc":"\/**\n * Remove an enqueued style.\n *\n * @since WP 3.1\n * @see WP_Styles::dequeue() For parameter information.\n *\/","file":"functions.wp-styles.php","line":155,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[159],"sprintf":[159],"__":[159],"did_action":[158],"is_a":[157],"dequeue":[164]},"used_by":[]},"wp_style_is":{"doc":"\/**\n * Check whether style has been added to WordPress Styles.\n *\n * By default, checks if the style has been enqueued. You can also\n * pass 'registered' to $list, to see if the style is registered,\n * and you can check processing statuses with 'to_do' and 'done'.\n *\n * @since WP unknown; BP unknown\n * @global object $wp_styles The WP_Styles object for printing styles.\n *\n * @param string $handle Name of the stylesheet.\n * @param string $list Optional. Defaults to 'enqueued'. Values are\n * \t'registered', 'enqueued' (or 'queue'), 'to_do', and 'done'.\n * @return bool Whether style is in the list.\n *\/","file":"functions.wp-styles.php","line":182,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[186],"sprintf":[186],"__":[186],"did_action":[185],"is_a":[184],"query":[191]},"used_by":[]},"get_header":{"doc":"\/**\n * Load header template.\n *\n * Includes the header template for a theme or if a name is specified then a\n * specialised header will be included.\n *\n * For the parameter, if the file is called \"header-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_header' action.\n *\n * @param string $name The name of the specialised header.\n *\/","file":"general-template.php","line":24,"missingDoc":false,"filters":["'get_header'"],"uses":{"load_template":[35],"locate_template":[34]},"used_by":{"Gettext_Translations::gettext_select_plural_form":[145],"Gettext_Translations::set_header":[222]}},"locate_template":{"doc":"\/**\n * Retrieve the name of the highest priority template file that exists.\n *\n * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which\n * inherit from a parent theme can just overload one file.\n *\n * @since 2.7.0\n * @uses apply_filters() Calls 'locate_template' filter on array of template names.\n *\n * @param string|array $template_names Template file(s) to search for, in order.\n * @param bool $load If true the template file will be loaded if it is found.\n * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false.\n * @return string The template filename if one is located.\n *\/","file":"template.php","line":369,"missingDoc":false,"filters":["'locate_template'"],"uses":{"file_exists":[382,379,376],"path_is_absolute":[376],"load_template":[389]},"used_by":{"get_header":[34],"get_footer":[63],"get_sidebar":[92],"get_template_part":[128],"get_search_form":[155],"get_query_template":[29]}},"get_footer":{"doc":"\/**\n * Load footer template.\n *\n * Includes the footer template for a theme or if a name is specified then a\n * specialised footer will be included.\n *\n * For the parameter, if the file is called \"footer-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_footer' action.\n *\n * @param string $name The name of the specialised footer.\n *\/","file":"general-template.php","line":53,"missingDoc":false,"filters":["'get_footer'"],"uses":{"load_template":[64],"locate_template":[63]},"used_by":[]},"get_sidebar":{"doc":"\/**\n * Load sidebar template.\n *\n * Includes the sidebar template for a theme or if a name is specified then a\n * specialised sidebar will be included.\n *\n * For the parameter, if the file is called \"sidebar-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 1.5.0\n * @uses do_action() Calls 'get_sidebar' action.\n *\n * @param string $name The name of the specialised sidebar.\n *\/","file":"general-template.php","line":82,"missingDoc":false,"filters":["'get_sidebar'"],"uses":{"load_template":[93],"locate_template":[92]},"used_by":[]},"get_template_part":{"doc":"\/**\n * Load a template part into a template\n *\n * Makes it easy for a theme to reuse sections of code in a easy to overload way\n * for child themes.\n *\n * Includes the named template part for a theme or if a name is specified then a\n * specialised part will be included. If the theme contains no {slug}.php file\n * then no template will be included.\n *\n * The template is included using require, not require_once, so you may include the\n * same template part multiple times.\n *\n * For the $name parameter, if the file is called \"{slug}-special.php\" then specify\n * \"special\".\n *\n * @uses locate_template()\n * @since 3.0.0\n * @uses do_action() Calls 'get_template_part_{$slug}' action.\n *\n * @param string $slug The slug name for the generic template.\n * @param string $name The name of the specialised template.\n *\/","file":"general-template.php","line":119,"missingDoc":false,"filters":["\"get_template_part_{$slug}\""],"uses":{"locate_template":[128]},"used_by":[]},"wp_login_form":{"doc":"\/**\n * Provides a simple login form for use anywhere within WordPress. By default, it echoes\n * the HTML immediately. Pass array('echo'=>false) to return the string instead.\n *\n * @since 3.0.0\n * @param array $args Configuration options to modify the form output.\n * @return string|null String when retrieving, null when displaying.\n *\/","file":"general-template.php","line":257,"missingDoc":false,"filters":["'login_form_defaults'","'login_form_top'","'login_form_middle'","'login_form_bottom'"],"uses":{"is_ssl":[259],"__":[261,262,263,264],"wp_parse_args":[273],"esc_url":[276,290],"site_url":[276],"esc_attr":[279,280,280,283,284,287,289,289],"esc_html":[279,283,287]},"used_by":[]},"wp_lostpassword_url":{"doc":"\/**\n * Returns the Lost Password URL.\n *\n * Returns the URL that allows the user to retrieve the lost password\n *\n * @since 2.8.0\n * @uses site_url() To generate the lost password URL\n * @uses apply_filters() calls 'lostpassword_url' hook on the lostpassword url\n *\n * @param string $redirect Path to redirect to on login.\n * @return string Lost password URL.\n *\/","file":"general-template.php","line":313,"missingDoc":false,"filters":["'lostpassword_url'"],"uses":{"add_query_arg":[319],"network_site_url":[319]},"used_by":{"wp_authenticate_username_password":[90,111]}},"get_stylesheet_uri":{"doc":"\/**\n * Retrieve URI of current theme stylesheet.\n *\n * The stylesheet file name is 'style.css' which is appended to {@link\n * get_stylesheet_directory_uri() stylesheet directory URI} path.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'stylesheet_uri' filter on stylesheet URI path and stylesheet directory URI.\n *\n * @return string\n *\/","file":"theme.php","line":192,"missingDoc":false,"filters":["'stylesheet_uri'"],"uses":{"get_stylesheet_directory_uri":[193]},"used_by":{"get_bloginfo":[442]}},"single_post_title":{"doc":"\/**\n * Display or retrieve page title for post.\n *\n * This is optimized for single.php template file for displaying the post title.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":628,"missingDoc":false,"filters":["'single_post_title'"],"uses":{"get_queried_object":[629]},"used_by":{"wp_title":[535]}},"single_term_title":{"doc":"\/**\n * Display or retrieve page title for taxonomy term archive.\n *\n * Useful for taxonomy term template files for displaying the taxonomy term page title.\n * It has less overhead than {@link wp_title()}, because of its limited implementation.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 3.1.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":725,"missingDoc":false,"filters":["'single_cat_title'","'single_tag_title'","'single_term_title'"],"uses":{"get_queried_object":[726],"is_tag":[733],"is_tax":[735],"is_category":[731]},"used_by":{"wp_title":[540,547],"single_cat_title":[684],"single_tag_title":[705]}},"post_type_archive_title":{"doc":"\/**\n * Display or retrieve title for a post type archive.\n *\n * This is optimized for archive.php and archive-{$post_type}.php template files\n * for displaying the title of the post type.\n *\n * @since 3.1.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":653,"missingDoc":false,"filters":["'post_type_archive_title'"],"uses":{"is_post_type_archive":[654],"get_queried_object":[657]},"used_by":{"wp_title":[558],"feed_links_extra":[1667]}},"is_archive":{"doc":"\/**\n * Is the query for an existing archive page?\n *\n * Month, Year, Category, Author, Post Type archive...\n *\n * @see WP_Query::is_archive()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":139,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[143],"__":[143],"is_archive":[147]},"used_by":{"wp_title":[561,569],"get_body_class":[412,453],"is_archive":[147],"__main":[40]}},"single_cat_title":{"doc":"\/**\n * Display or retrieve page title for category archive.\n *\n * This is useful for category template file or files, because it is optimized\n * for category page title and with less overhead than {@link wp_title()}.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":683,"missingDoc":false,"filters":[],"uses":{"single_term_title":[684]},"used_by":{"__main":[32]}},"single_tag_title":{"doc":"\/**\n * Display or retrieve page title for tag post archive.\n *\n * Useful for tag template files for displaying the tag page title. It has less\n * overhead than {@link wp_title()}, because of its limited implementation.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 2.3.0\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":704,"missingDoc":false,"filters":[],"uses":{"single_term_title":[705]},"used_by":[]},"single_month_title":{"doc":"\/**\n * Display or retrieve page title for post archive based on date.\n *\n * Useful for when the template only needs to display the month and year, if\n * either are available. Optimized for just this purpose, so if it is all that\n * is needed, should be better than {@link wp_title()}.\n *\n * It does not support placing the separator after the title, but by leaving the\n * prefix parameter empty, you can set the title separator manually. The prefix\n * does not automatically place a space between the prefix, so if there should\n * be a space, the parameter value will need to have it at the end.\n *\n * @since 0.71\n *\n * @param string $prefix Optional. What to display before the title.\n * @param bool $display Optional, default is true. Whether to display or retrieve title.\n * @return string|null Title when retrieving, null when displaying or failure.\n *\/","file":"general-template.php","line":767,"missingDoc":false,"filters":[],"uses":{"get_query_var":[770,771,772],"get_month":[776,779],"substr":[778,779]},"used_by":[]},"get_archives_link":{"doc":"\/**\n * Retrieve archive link content based on predefined or custom code.\n *\n * The format can be one of four styles. The 'link' for head element, 'option'\n * for use in the select element, 'html' for use in list (either ol or ul HTML\n * elements). Custom content is also supported using the before and after\n * parameters.\n *\n * The 'link' format uses the link HTML element with the <em>archives<\/em>\n * relationship. The before and after parameters are not used. The text\n * parameter is used to describe the link.\n *\n * The 'option' format uses the option HTML element for use in select element.\n * The value is the url parameter and the before and after parameters are used\n * between the text description.\n *\n * The 'html' format, which is the default, uses the li HTML element for use in\n * the list HTML elements. The before parameter is before the link and the after\n * parameter is after the closing link.\n *\n * The custom format uses the before parameter before the link ('a' HTML\n * element) and the after parameter after the closing link tag. If the above\n * three values for the format are not used, then custom format is assumed.\n *\n * @since 1.0.0\n *\n * @param string $url URL to archive.\n * @param string $text Archive text description.\n * @param string $format Optional, default is 'html'. Can be 'link', 'option', 'html', or custom.\n * @param string $before Optional.\n * @param string $after Optional.\n * @return string HTML link content for archive.\n *\/","file":"general-template.php","line":825,"missingDoc":false,"filters":["'get_archives_link'"],"uses":{"wptexturize":[826],"esc_attr":[827],"esc_url":[828]},"used_by":{"wp_get_archives":[940,961,983,1012,1036]}},"calendar_week_mod":{"doc":"\/**\n * Get number of days since the start of the week.\n *\n * @since 1.5.0\n *\n * @param int $num Number of day.\n * @return int Days since the start of the week.\n *\/","file":"general-template.php","line":1055,"missingDoc":false,"filters":[],"uses":{"floor":[1057]},"used_by":{"get_calendar":[1232,1253,1257]}},"delete_get_calendar_cache":{"doc":"\/**\n * Purge the cached results of get_calendar.\n *\n * @see get_calendar\n * @since 2.1.0\n *\/","file":"general-template.php","line":1279,"missingDoc":false,"filters":[],"uses":{"wp_cache_delete":[1280]},"used_by":[]},"the_date_xml":{"doc":"\/**\n * Outputs the date in iso8601 format for xml files.\n *\n * @since 1.0.0\n *\/","file":"general-template.php","line":1320,"missingDoc":false,"filters":[],"uses":{"mysql2date":[1321],"get_post":[1321]},"used_by":[]},"the_date":{"doc":"\/**\n * Display or Retrieve the date the current $post was written (once per date)\n *\n * Will only output the date if the current post's date is different from the\n * previous one output.\n *\n * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the\n * function is called several times for each post.\n *\n * HTML output can be filtered with 'the_date'.\n * Date string output can be filtered with 'get_the_date'.\n *\n * @since 0.71\n * @uses get_the_date()\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @param string $before Optional. Output before the date.\n * @param string $after Optional. Output after the date.\n * @param bool $echo Optional, default is display. Whether to echo the date or return it.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1344,"missingDoc":false,"filters":["'the_date'"],"uses":{"get_the_date":[1349]},"used_by":[]},"the_modified_date":{"doc":"\/**\n * Display the date on which the post was last modified.\n *\n * @since 2.1.0\n *\n * @param string $d Optional. PHP date format defaults to the date_format option if not specified.\n * @param string $before Optional. Output before the date.\n * @param string $after Optional. Output after the date.\n * @param bool $echo Optional, default is display. Whether to echo the date or return it.\n * @return string|null Null if displaying, string if retrieving.\n *\/","file":"general-template.php","line":1398,"missingDoc":false,"filters":["'the_modified_date'"],"uses":{"get_the_modified_date":[1400]},"used_by":[]},"get_the_modified_date":{"doc":"\/**\n * Retrieve the date on which the post was last modified.\n *\n * @since 2.1.0\n *\n * @param string $d Optional. PHP date format. Defaults to the \"date_format\" option\n * @return string\n *\/","file":"general-template.php","line":1418,"missingDoc":false,"filters":["'get_the_modified_date'"],"uses":{"get_post_modified_time":[1420,1422],"get_option":[1420]},"used_by":{"the_modified_date":[1400]}},"the_time":{"doc":"\/**\n * Display the time at which the post was written.\n *\n * @since 0.71\n *\n * @param string $d Either 'G', 'U', or php date format.\n *\/","file":"general-template.php","line":1433,"missingDoc":false,"filters":["'the_time'"],"uses":{"get_the_time":[1434]},"used_by":[]},"get_the_time":{"doc":"\/**\n * Retrieve the time at which the post was written.\n *\n * @since 1.5.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n * @param int|object $post Optional post ID or object. Default is global $post object.\n * @return string\n *\/","file":"general-template.php","line":1446,"missingDoc":false,"filters":["'get_the_time'"],"uses":{"get_post":[1447],"get_post_time":[1450,1452],"get_option":[1450]},"used_by":{"the_time":[1434],"__main":[35,38,41]}},"the_modified_time":{"doc":"\/**\n * Display the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n *\/","file":"general-template.php","line":1486,"missingDoc":false,"filters":["'the_modified_time'"],"uses":{"get_the_modified_time":[1487]},"used_by":[]},"get_the_modified_time":{"doc":"\/**\n * Retrieve the time at which the post was last modified.\n *\n * @since 2.0.0\n *\n * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option.\n * @return string\n *\/","file":"general-template.php","line":1498,"missingDoc":false,"filters":["'get_the_modified_time'"],"uses":{"get_post_modified_time":[1500,1502],"get_option":[1500]},"used_by":{"the_modified_time":[1487]}},"the_weekday":{"doc":"\/**\n * Display the weekday on which the post was written.\n *\n * @since 0.71\n * @uses $wp_locale\n * @uses $post\n *\/","file":"general-template.php","line":1536,"missingDoc":false,"filters":["'the_weekday'"],"uses":{"get_weekday":[1538],"mysql2date":[1538],"get_post":[1538]},"used_by":[]},"the_weekday_date":{"doc":"\/**\n * Display the weekday on which the post was written.\n *\n * Will only output the weekday if the current post's weekday is different from\n * the previous one output.\n *\n * @since 0.71\n *\n * @param string $before Optional Output before the date.\n * @param string $after Optional Output after the date.\n *\/","file":"general-template.php","line":1554,"missingDoc":false,"filters":["'the_weekday_date'"],"uses":{"get_weekday":[1559],"mysql2date":[1559],"get_post":[1559]},"used_by":[]},"wp_head":{"doc":"\/**\n * Fire the wp_head action\n *\n * @since 1.2.0\n * @uses do_action() Calls 'wp_head' hook.\n *\/","file":"general-template.php","line":1573,"missingDoc":false,"filters":["'wp_head'"],"uses":[],"used_by":{"__main":[38]}},"wp_footer":{"doc":"\/**\n * Fire the wp_footer action\n *\n * @since 1.5.1\n * @uses do_action() Calls 'wp_footer' hook.\n *\/","file":"general-template.php","line":1583,"missingDoc":false,"filters":["'wp_footer'"],"uses":[],"used_by":{"__main":[28]}},"feed_links":{"doc":"\/**\n * Display the links to the general feeds.\n *\n * @since 2.8.0\n *\n * @param array $args Optional arguments.\n *\/","file":"general-template.php","line":1594,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1595],"_x":[1600],"__":[1602,1604],"wp_parse_args":[1607],"feed_content_type":[1609,1610],"esc_attr":[1609,1610],"sprintf":[1609,1610],"get_bloginfo":[1609,1610],"get_feed_link":[1609,1610],"get_default_feed":[1610]},"used_by":[]},"feed_links_extra":{"doc":"\/**\n * Display the links to the extra feeds such as category feeds.\n *\n * @since 2.8.0\n *\n * @param array $args Optional arguments.\n *\/","file":"general-template.php","line":1620,"missingDoc":false,"filters":[],"uses":{"_x":[1623],"__":[1625,1627,1629,1631,1633,1635],"wp_parse_args":[1638],"get_post":[1642],"sprintf":[1645,1651,1656,1661,1664,1667],"get_bloginfo":[1645,1651,1656,1661,1664,1667],"esc_html":[1645],"get_the_title":[1645],"get_post_comments_feed_link":[1646],"comments_open":[1644],"pings_open":[1644],"is_category":[1648],"get_queried_object":[1649,1654,1668],"get_category_feed_link":[1652],"is_tag":[1653],"get_tag_feed_link":[1657],"is_author":[1658],"intval":[1659],"get_query_var":[1659],"get_the_author_meta":[1661],"get_author_feed_link":[1662],"is_search":[1663],"get_search_query":[1664],"get_search_feed_link":[1665],"is_post_type_archive":[1666],"post_type_archive_title":[1667],"get_post_type_archive_feed_link":[1668],"is_single":[1640],"is_page":[1640],"feed_content_type":[1672],"esc_attr":[1672],"esc_url":[1672]},"used_by":[]},"get_search_feed_link":{"doc":"\/**\n * Retrieve the permalink for the feed of the search results.\n *\n * @since 2.5.0\n *\n * @param string $search_query Optional. Search query.\n * @param string $feed Optional. Feed type.\n * @return string\n *\/","file":"link-template.php","line":774,"missingDoc":false,"filters":["'search_feed_link'"],"uses":{"get_search_link":[776],"get_default_feed":[779],"get_search_permastruct":[781],"add_query_arg":[784],"trailingslashit":[786]},"used_by":{"feed_links_extra":[1665],"get_search_comments_feed_link":[810]}},"get_post_type_archive_feed_link":{"doc":"\/**\n * Retrieve the permalink for a post type archive feed.\n *\n * @since 3.1.0\n *\n * @param string $post_type Post type\n * @param string $feed Optional. Feed type\n * @return string\n *\/","file":"link-template.php","line":863,"missingDoc":false,"filters":["'post_type_archive_feed_link'"],"uses":{"get_default_feed":[864],"get_post_type_archive_link":[868],"get_post_type_object":[870],"trailingslashit":[872],"add_query_arg":[877],"get_option":[871]},"used_by":{"feed_links_extra":[1668]}},"rsd_link":{"doc":"\/**\n * Display the link to the Really Simple Discovery service endpoint.\n *\n * @link http:\/\/archipelago.phrasewise.com\/rsd\n * @since 2.0.0\n *\/","file":"general-template.php","line":1681,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1682]},"used_by":[]},"wlwmanifest_link":{"doc":"\/**\n * Display the link to the Windows Live Writer manifest file.\n *\n * @link http:\/\/msdn.microsoft.com\/en-us\/library\/bb463265.aspx\n * @since 2.3.1\n *\/","file":"general-template.php","line":1691,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1693]},"used_by":[]},"noindex":{"doc":"\/**\n * Display a noindex meta tag if required by the blog configuration.\n *\n * If a blog is marked as not being public then the noindex meta tag will be\n * output to tell web robots not to index the page content. Add this to the wp_head action.\n * Typical usage is as a wp_head callback. add_action( 'wp_head', 'noindex' );\n *\n * @see wp_no_robots\n *\n * @since 2.1.0\n *\/","file":"general-template.php","line":1707,"missingDoc":false,"filters":[],"uses":{"wp_no_robots":[1710],"get_option":[1709]},"used_by":[]},"wp_no_robots":{"doc":"\/**\n * Display a noindex meta tag.\n *\n * Outputs a noindex meta tag that tells web robots not to index the page content.\n * Typical usage is as a wp_head callback. add_action( 'wp_head', 'wp_no_robots' );\n *\n * @since 3.3.0\n *\/","file":"general-template.php","line":1721,"missingDoc":false,"filters":[],"uses":[],"used_by":{"noindex":[1710]}},"rich_edit_exists":{"doc":"\/**\n * Determine if TinyMCE is available.\n *\n * Checks to see if the user has deleted the tinymce files to slim down there WordPress install.\n *\n * @since 2.1.0\n *\n * @return bool Whether TinyMCE exists.\n *\/","file":"general-template.php","line":1734,"missingDoc":false,"filters":[],"uses":{"file_exists":[1737]},"used_by":[]},"the_search_query":{"doc":"\/**\n * Display the contents of the search query variable.\n *\n * The search query string is passed through {@link esc_attr()}\n * to ensure that it is safe for placing in an html attribute.\n *\n * @uses esc_attr()\n * @since 2.1.0\n *\/","file":"general-template.php","line":1843,"missingDoc":false,"filters":["'the_search_query'"],"uses":{"esc_attr":[1844],"get_search_query":[1844]},"used_by":[]},"paginate_links":{"doc":"\/**\n * Retrieve paginated link for archive post pages.\n *\n * Technically, the function can be used to create paginated link list for any\n * area. The 'base' argument is used to reference the url, which will be used to\n * create the paginated links. The 'format' argument is then used for replacing\n * the page number. It is however, most likely and by default, to be used on the\n * archive post pages.\n *\n * The 'type' argument controls format of the returned value. The default is\n * 'plain', which is just a string with the links separated by a newline\n * character. The other possible values are either 'array' or 'list'. The\n * 'array' value will return an array of the paginated link list to offer full\n * control of display. The 'list' value will place all of the paginated links in\n * an unordered HTML list.\n *\n * The 'total' argument is the total amount of pages and is an integer. The\n * 'current' argument is the current page number and is also an integer.\n *\n * An example of the 'base' argument is \"http:\/\/example.com\/all_posts.php%_%\"\n * and the '%_%' is required. The '%_%' will be replaced by the contents of in\n * the 'format' argument. An example for the 'format' argument is \"?page=%#%\"\n * and the '%#%' is also required. The '%#%' will be replaced with the page\n * number.\n *\n * You can include the previous and next links in the list by setting the\n * 'prev_next' argument to true, which it is by default. You can set the\n * previous text, by using the 'prev_text' argument. You can set the next text\n * by setting the 'next_text' argument.\n *\n * If the 'show_all' argument is set to true, then it will show all of the pages\n * instead of a short list of the pages near the current page. By default, the\n * 'show_all' is set to false and controlled by the 'end_size' and 'mid_size'\n * arguments. The 'end_size' argument is how many numbers on either the start\n * and the end list edges, by default is 1. The 'mid_size' argument is how many\n * numbers to either side of current page, but not including current page.\n *\n * It is possible to add query vars to the link by using the 'add_args' argument\n * and see {@link add_query_arg()} for more information.\n *\n * @since 2.1.0\n *\n * @param string|array $args Optional. Override defaults.\n * @return array|string String of page links or array of page links.\n *\/","file":"general-template.php","line":1922,"missingDoc":false,"filters":["'paginate_links'","'paginate_links'","'paginate_links'"],"uses":{"__":[1930,1931,1978],"wp_parse_args":[1939],"extract":[1940],"is_array":[1949],"str_replace":[1956,1957,1970,1971,1984,1985],"add_query_arg":[1959,1973,1987],"esc_url":[1961,1975,1989],"number_format_i18n":[1964],"join":[1997,2001]},"used_by":{"paginate_comments_links":[1828]}},"wp_admin_css_color":{"doc":"\/**\n * Registers an admin colour scheme css file.\n *\n * Allows a plugin to register a new admin colour scheme. For example:\n * <code>\n * wp_admin_css_color('classic', __('Classic'), admin_url(\"css\/colors-classic.css\"),\n * array('#07273E', '#14568A', '#D54E21', '#2683AE'));\n * <\/code>\n *\n * @since 2.5.0\n *\n * @param string $key The unique key for this theme.\n * @param string $name The name of the theme.\n * @param string $url The url of the css file containing the colour scheme.\n * @param array $colors Optional An array of CSS color definitions which are used to give the user a feel for the theme.\n *\/","file":"general-template.php","line":2023,"missingDoc":false,"filters":[],"uses":[],"used_by":{"register_admin_color_schemes":[2038,2040]}},"register_admin_color_schemes":{"doc":"\/**\n * Registers the default Admin color schemes\n *\n * @since 3.0.0\n *\/","file":"general-template.php","line":2037,"missingDoc":false,"filters":[],"uses":{"wp_admin_css_color":[2038,2040],"_x":[2038,2040],"admin_url":[2038,2040]},"used_by":[]},"wp_admin_css_uri":{"doc":"\/**\n * Display the URL of a WordPress admin CSS file.\n *\n * @see WP_Styles::_css_href and its style_loader_src filter.\n *\n * @since 2.3.0\n *\n * @param string $file file relative to wp-admin\/ without its \".css\" extension.\n *\/","file":"general-template.php","line":2053,"missingDoc":false,"filters":["'wp_admin_css_uri'"],"uses":{"admin_url":[2057],"defined":[2054],"add_query_arg":[2059],"get_bloginfo":[2059]},"used_by":{"wp_admin_css":[2102,2104]}},"wp_admin_css":{"doc":"\/**\n * Enqueues or directly prints a stylesheet link to the specified CSS file.\n *\n * \"Intelligently\" decides to enqueue or to print the CSS file. If the\n * 'wp_print_styles' action has *not* yet been called, the CSS file will be\n * enqueued. If the wp_print_styles action *has* been called, the CSS link will\n * be printed. Printing may be forced by passing true as the $force_echo\n * (second) parameter.\n *\n * For backward compatibility with WordPress 2.3 calling method: If the $file\n * (first) parameter does not correspond to a registered CSS file, we assume\n * $file is a file relative to wp-admin\/ without its \".css\" extension. A\n * stylesheet link to that generated URL is printed.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_styles WordPress Styles Object\n *\n * @param string $file Optional. Style handle name or file name (without \".css\" extension) relative\n * \t to wp-admin\/. Defaults to 'wp-admin'.\n * @param bool $force_echo Optional. Force the stylesheet link to be printed rather than enqueued.\n *\/","file":"general-template.php","line":2086,"missingDoc":false,"filters":["'wp_admin_css'","'wp_admin_css'"],"uses":{"is_a":[2088],"strpos":[2092],"substr":[2092],"wp_print_styles":[2096],"wp_enqueue_style":[2098],"did_action":[2095],"query":[2094],"esc_url":[2102,2104],"wp_admin_css_uri":[2102,2104],"function_exists":[2103],"is_rtl":[2103]},"used_by":{"__main":[19]}},"wp_generator":{"doc":"\/**\n * Display the XHTML generator that is generated on the wp_head hook.\n *\n * @since 2.5.0\n *\/","file":"general-template.php","line":2129,"missingDoc":false,"filters":["'wp_generator_type'"],"uses":{"the_generator":[2130]},"used_by":[]},"the_generator":{"doc":"\/**\n * Display the generator XML or Comment for RSS, ATOM, etc.\n *\n * Returns the correct generator type for the requested output format. Allows\n * for a plugin to filter generators overall the the_generator filter.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'the_generator' hook.\n *\n * @param string $type The type of generator to output - (html|xhtml|atom|rss2|rdf|comment|export).\n *\/","file":"general-template.php","line":2144,"missingDoc":false,"filters":["'the_generator'"],"uses":{"get_the_generator":[2145]},"used_by":{"wp_generator":[2130]}},"get_the_generator":{"doc":"\/**\n * Creates the generator XML or Comment for RSS, ATOM, etc.\n *\n * Returns the correct generator type for the requested output format. Allows\n * for a plugin to filter generators on an individual basis using the\n * 'get_the_generator_{$type}' filter.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'get_the_generator_$type' hook.\n *\n * @param string $type The type of generator to return - (html|xhtml|atom|rss2|rdf|comment|export).\n * @return string The HTML content for the generator.\n *\/","file":"general-template.php","line":2161,"missingDoc":false,"filters":["\"get_the_generator_{$type}\""],"uses":{"current_filter":[2164],"get_bloginfo":[2190,2193,2205],"get_bloginfo_rss":[2196,2199,2202,2208],"date":[2208]},"used_by":{"the_generator":[2145]}},"__checked_selected_helper":{"doc":"\/**\n * Private helper function for checked, selected, and disabled.\n *\n * Compares the first two arguments and if identical marks as $type\n *\n * @since 2.8.0\n * @access private\n *\n * @param mixed $helper One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @param string $type The type of checked|selected|disabled we are doing\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2276,"missingDoc":false,"filters":[],"uses":[],"used_by":{"checked":[2227],"selected":[2243],"disabled":[2259]}},"disabled":{"doc":"\/**\n * Outputs the html disabled attribute.\n *\n * Compares the first two arguments and if identical marks as disabled\n *\n * @since 3.0.0\n *\n * @param mixed $disabled One of the values to compare\n * @param mixed $current (true) The other value to compare if not just true\n * @param bool $echo Whether to echo or just return the string\n * @return string html attribute or empty string\n *\/","file":"general-template.php","line":2258,"missingDoc":false,"filters":[],"uses":{"__checked_selected_helper":[2259]},"used_by":[]},"_wp_http_get_object":{"doc":"\/**\n * Returns the initialized WP_Http Object\n *\n * @since 2.7.0\n * @access private\n *\n * @return WP_Http HTTP Transport object.\n *\/","file":"http.php","line":22,"missingDoc":false,"filters":[],"uses":{"is_null":[25]},"used_by":{"wp_remote_request":[59],"wp_remote_get":[75],"wp_remote_post":[91],"wp_remote_head":[107],"wp_http_supports":[205]}},"wp_remote_retrieve_response_message":{"doc":"\/**\n * Retrieve only the response message from the raw response.\n *\n * Will return an empty array if incorrect parameter value is given.\n *\n * @since 2.7.0\n *\n * @param array $response HTTP response.\n * @return string The response message. Empty string on incorrect parameter given.\n *\/","file":"http.php","line":172,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[173],"is_array":[173]},"used_by":[]},"wp_http_supports":{"doc":"\/**\n * Determines if there is an HTTP Transport that can process this request.\n *\n * @since 3.2.0\n *\n * @param array $capabilities Array of capabilities to test or a wp_remote_request() $args array.\n * @param string $url Optional. If given, will check if the URL requires SSL and adds that requirement to the capabilities array.\n *\n * @return bool\n *\/","file":"http.php","line":204,"missingDoc":false,"filters":[],"uses":{"_wp_http_get_object":[205],"wp_parse_args":[207],"count":[209,212],"array_combine":[213],"array_values":[213],"array_fill":[213],"array_filter":[212],"array_keys":[212],"parse_url":[217],"_get_first_available_transport":[223]},"used_by":[]},"get_http_origin":{"doc":"\/**\n * Get the HTTP Origin of the current request.\n *\n * @since 3.4.0\n *\n * @return string URL of the origin. Empty string if no origin.\n *\/","file":"http.php","line":233,"missingDoc":false,"filters":["'http_origin'"],"uses":[],"used_by":{"is_allowed_http_origin":[275],"send_origin_headers":[297]}},"get_allowed_http_origins":{"doc":"\/**\n * Retrieve list of allowed http origins.\n *\n * @since 3.4.0\n *\n * @return array Array of origin URLs.\n *\/","file":"http.php","line":248,"missingDoc":false,"filters":["'allowed_http_origins'"],"uses":{"parse_url":[249,250],"admin_url":[249],"home_url":[250],"array_unique":[253]},"used_by":{"is_allowed_http_origin":[277]}},"is_allowed_http_origin":{"doc":"\/**\n * Determines if the http origin is an authorized one.\n *\n * @since 3.4.0\n *\n * @param string Origin URL. If not provided, the value of get_http_origin() is used.\n * @return bool True if the origin is allowed. False otherwise.\n *\/","file":"http.php","line":271,"missingDoc":false,"filters":["'allowed_http_origin'"],"uses":{"get_http_origin":[275],"in_array":[277],"get_allowed_http_origins":[277]},"used_by":{"send_origin_headers":[299]}},"mce_escape":{"doc":"","file":"js\/tinymce\/langs\/wp-langs.php","line":10,"missingDoc":true,"filters":[],"uses":{"esc_js":[11]},"used_by":[]},"wp_mce_translation":{"doc":"","file":"js\/tinymce\/langs\/wp-langs.php","line":14,"missingDoc":true,"filters":[],"uses":{"__":[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,81,82,83,84,85,89,90,91,92,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95,95,95,95,95,96,96,96,96,96,96,96,100,104,108,109,113,114,115,116,117,121,122,126,130,131,135,139,143,144,148,152,156,157,158,159,160,161,165,169,170,171,172,173,177,178,179,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,206,210,214,215,219,223,227,231,232,233,234,235,236,237,238,239,240,244,248,249,250,251,252,253,254,255,256,257,261,265,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,391,392,393,394,395,396,397,398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,501,502,503,504,505,506,507,508,509,510,511,512,513,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],"_x":[357,401],"json_encode":[554,555,556,557,558,559]},"used_by":{"__main":[564]}},"EnchantSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param String $lang Selected language code (like en_US or de_DE). Shortcodes like \"en\" and \"de\" work with enchant >= 1.4.1\n * @param Array $words Array of words to check.\n * @return Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/EnchantSpell.php","line":20,"missingDoc":false,"filters":[],"uses":{"enchant_broker_init":[21],"enchant_broker_request_dict":[24],"enchant_dict_check":[28],"trim":[30],"enchant_broker_free_dict":[35],"enchant_broker_dict_exists":[23],"enchant_broker_free":[39]},"used_by":[]},"EnchantSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions for a specific word.\n *\n * @param String $lang Selected language code (like en_US or de_DE). Shortcodes like \"en\" and \"de\" work with enchant >= 1.4.1\n * @param String $word Specific word to get suggestions for.\n * @return Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/EnchantSpell.php","line":49,"missingDoc":false,"filters":[],"uses":{"enchant_broker_init":[50],"enchant_broker_request_dict":[53],"enchant_dict_suggest":[54],"is_array":[57],"enchant_broker_free_dict":[60],"enchant_broker_dict_exists":[52],"enchant_broker_free":[65]},"used_by":[]},"GoogleSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":18,"missingDoc":false,"filters":[],"uses":{"implode":[19],"_getMatches":[20],"count":[23],"_unhtmlentities":[24],"mb_substr":[24]},"used_by":[]},"GoogleSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":36,"missingDoc":false,"filters":[],"uses":{"_getMatches":[39],"explode":[42],"utf8_encode":[42],"_unhtmlentities":[42],"count":[41]},"used_by":[]},"GoogleSpell::_getMatches":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":53,"missingDoc":true,"filters":[],"uses":{"preg_replace":[54,55],"strlen":[68],"curl_init":[79],"curl_setopt":[80,81,82,83],"curl_exec":[84],"curl_close":[85],"fsockopen":[88],"fwrite":[91],"feof":[95],"fgets":[96],"fclose":[98],"function_exists":[77],"preg_match_all":[105]},"used_by":[]},"GoogleSpell::_unhtmlentities":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/GoogleSpell.php","line":110,"missingDoc":true,"filters":[],"uses":{"preg_replace":[111,112],"get_html_translation_table":[114],"array_flip":[115],"strtr":[117]},"used_by":[]},"PSpell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":18,"missingDoc":false,"filters":[],"uses":{"_getPLink":[19],"utf8_encode":[24],"pspell_check":[23],"trim":[23]},"used_by":[]},"PSpell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":37,"missingDoc":false,"filters":[],"uses":{"pspell_suggest":[38],"_getPLink":[38],"count":[40],"utf8_encode":[41]},"used_by":[]},"PSpell::_getPLink":{"doc":"\/**\n * Opens a link for pspell.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpell.php","line":49,"missingDoc":false,"filters":[],"uses":{"throwError":[52,76],"function_exists":[51],"pspell_new":[55]},"used_by":[]},"PSpellShell::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":18,"missingDoc":false,"filters":[],"uses":{"_getCMD":[19],"fwrite":[22,25],"fclose":[27],"throwError":[29],"fopen":[21],"shell_exec":[31],"unlink":[32],"preg_split":[35],"preg_match":[44],"utf8_encode":[47],"trim":[47]},"used_by":[]},"PSpellShell::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":60,"missingDoc":false,"filters":[],"uses":{"_getCMD":[61],"mb_convert_encoding":[64],"mb_detect_encoding":[64],"utf8_encode":[66],"function_exists":[63],"fwrite":[69,70],"fclose":[71],"throwError":[73],"fopen":[68],"shell_exec":[75],"unlink":[76],"preg_split":[79],"preg_match":[88],"array_slice":[91],"explode":[91],"count":[93],"trim":[94]},"used_by":[]},"PSpellShell::_getCMD":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/PSpellShell.php","line":103,"missingDoc":true,"filters":[],"uses":{"tempnam":[104],"preg_replace":[107],"strtolower":[107],"preg_match":[110],"php_uname":[110]},"used_by":[]},"SpellChecker::SpellChecker":{"doc":"\/**\n * Constructor.\n *\n * @param $config Configuration name\/value array.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":16,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::loopback":{"doc":"\/**\n * Simple loopback function everything that gets in will be send back.\n *\n * @param $args.. Arguments.\n * @return {Array} Array of all input arguments. \n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":26,"missingDoc":false,"filters":[],"uses":{"func_get_args":[27]},"used_by":[]},"SpellChecker::checkWords":{"doc":"\/**\n * Spellchecks an array of words.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {Array} $words Array of words to spellcheck.\n * @return {Array} Array of misspelled words.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":37,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::getSuggestions":{"doc":"\/**\n * Returns suggestions of for a specific word.\n *\n * @param {String} $lang Language code like sv or en.\n * @param {String} $word Specific word to get suggestions for.\n * @return {Array} Array of suggestions for the specified word.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":48,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SpellChecker::throwError":{"doc":"\/**\n * Throws an error message back to the user. This will stop all execution.\n *\n * @param {String} $str Message to send back to user.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/SpellChecker.php","line":57,"missingDoc":false,"filters":[],"uses":{"addslashes":[58]},"used_by":[]},"Moxiecode_JSONReader::Moxiecode_JSONReader":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":32,"missingDoc":true,"filters":[],"uses":{"strlen":[34]},"used_by":[]},"Moxiecode_JSONReader::getToken":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":41,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getLocation":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":45,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getTokenName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":49,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::getValue":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":85,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::readToken":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":89,"missingDoc":true,"filters":[],"uses":{"read":[90],"readAway":[99,106,119,126],"array_pop":[103,123],"_readString":[136],"_readNull":[140],"_readBool":[145],"_readNumber":[150],"is_numeric":[149]},"used_by":[]},"Moxiecode_JSONReader::_readBool":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":159,"missingDoc":true,"filters":[],"uses":{"skip":[164,166],"readAway":[168]},"used_by":[]},"Moxiecode_JSONReader::_readNull":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":176,"missingDoc":true,"filters":[],"uses":{"skip":[180],"readAway":[181]},"used_by":[]},"Moxiecode_JSONReader::_readString":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":189,"missingDoc":true,"filters":[],"uses":{"peek":[194],"read":[198,201,224,239,246],"_int2utf8":[224],"hexdec":[224],"readAway":[254]},"used_by":[]},"Moxiecode_JSONReader::_int2utf8":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":270,"missingDoc":true,"filters":[],"uses":{"intval":[271],"chr":[275,278,281,281,284,284,284,287,287,287,287]},"used_by":[]},"Moxiecode_JSONReader::_readNumber":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":291,"missingDoc":true,"filters":[],"uses":{"peek":[298],"read":[303],"is_numeric":[299],"readAway":[308],"floatval":[312],"intval":[314]},"used_by":[]},"Moxiecode_JSONReader::readAway":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":322,"missingDoc":true,"filters":[],"uses":{"peek":[323],"read":[327]},"used_by":[]},"Moxiecode_JSONReader::read":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":331,"missingDoc":true,"filters":[],"uses":{"substr":[334]},"used_by":[]},"Moxiecode_JSONReader::skip":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":345,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSONReader::peek":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":349,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::Moxiecode_JSON":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":363,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::decode":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":366,"missingDoc":true,"filters":[],"uses":{"readValue":[369]},"used_by":[]},"Moxiecode_JSON::readValue":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":372,"missingDoc":true,"filters":[],"uses":{"readToken":[379],"getToken":[380],"getLocation":[386,413,418],"getValue":[388,392,396,401],"addArray":[407,409],"count":[421,420],"array_pop":[422]},"used_by":[]},"Moxiecode_JSON::addArray":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":432,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_JSON::getDelim":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":444,"missingDoc":true,"filters":[],"uses":{"getLocation":[445]},"used_by":[]},"Moxiecode_JSON::encode":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":456,"missingDoc":true,"filters":[],"uses":{"gettype":[457],"encodeString":[472],"_encodeArray":[475,478],"get_object_vars":[478]},"used_by":[]},"Moxiecode_JSON::encodeString":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":484,"missingDoc":true,"filters":[],"uses":{"strlen":[489],"ord":[524,527,531,531,535,535,535,539,539,539,539,543,543,543,543,543],"pack":[527,531,535,539,543],"sprintf":[529,533,537,541,545],"bin2hex":[529,533,537,541,545],"_utf82utf16":[529,533,537,541,545],"preg_match":[486]},"used_by":[]},"Moxiecode_JSON::_utf82utf16":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":557,"missingDoc":true,"filters":[],"uses":{"mb_convert_encoding":[559],"function_exists":[558],"strlen":[561],"chr":[566,566,569,569],"ord":[566,566,566,569,569,569,569]},"used_by":[]},"Moxiecode_JSON::_encodeArray":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/JSON.php","line":575,"missingDoc":true,"filters":[],"uses":{"array_keys":[579],"count":[580,587],"encodeString":[582],"encode":[582,585],"is_int":[581]},"used_by":[]},"Moxiecode_Logger::Moxiecode_Logger":{"doc":"\/**\n * Constructs a new logger instance.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":34,"missingDoc":false,"filters":[],"uses":{"setMaxSize":[37]},"used_by":[]},"Moxiecode_Logger::setLevel":{"doc":"\/**\n * Sets the current log level, use the MC_LOGGER constants.\n *\n * @param int $level Log level instance for example MC_LOGGER_DEBUG.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":48,"missingDoc":false,"filters":[],"uses":{"strtolower":[50],"is_string":[49]},"used_by":[]},"Moxiecode_Logger::getLevel":{"doc":"\/**\n * Returns the current log level for example MC_LOGGER_DEBUG.\n *\n * @return int Current log level for example MC_LOGGER_DEBUG.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":85,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setPath":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":89,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getPath":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":93,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setFileName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":97,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getFileName":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":101,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setFormat":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":105,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getFormat":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":109,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setMaxSize":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":113,"missingDoc":true,"filters":[],"uses":{"intval":[115],"preg_replace":[115],"strpos":[118,122],"strtolower":[118,122]},"used_by":[]},"Moxiecode_Logger::getMaxSize":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":129,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::setMaxFiles":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":133,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::getMaxFiles":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":137,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::debug":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":141,"missingDoc":true,"filters":[],"uses":{"func_get_args":[142],"_logMsg":[143],"implode":[143]},"used_by":[]},"Moxiecode_Logger::info":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":146,"missingDoc":true,"filters":[],"uses":{"func_get_args":[147],"_logMsg":[148],"implode":[148]},"used_by":[]},"Moxiecode_Logger::warn":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":151,"missingDoc":true,"filters":[],"uses":{"func_get_args":[152],"_logMsg":[153],"implode":[153]},"used_by":[]},"Moxiecode_Logger::error":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":156,"missingDoc":true,"filters":[],"uses":{"func_get_args":[157],"_logMsg":[158],"implode":[158]},"used_by":[]},"Moxiecode_Logger::fatal":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":161,"missingDoc":true,"filters":[],"uses":{"func_get_args":[162],"_logMsg":[163],"implode":[163]},"used_by":[]},"Moxiecode_Logger::isDebugEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":166,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isInfoEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":170,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isWarnEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":174,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isErrorEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":178,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::isFatalEnabled":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":182,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Moxiecode_Logger::_logMsg":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":186,"missingDoc":true,"filters":[],"uses":{"toOSPath":[192,235,236,242,245],"str_replace":[216,219,220,221],"strtolower":[216,220],"date":[219],"filesize":[226],"strlen":[228],"file_exists":[225,238,246],"rename":[239,242],"unlink":[247],"fputs":[252],"fflush":[253],"fclose":[254],"fopen":[251]},"used_by":[]},"Moxiecode_Logger::toOSPath":{"doc":"\/**\n * Converts a Unix path to OS specific path.\n *\n * @param String $path Unix path to convert.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/classes\/utils\/Logger.php","line":263,"missingDoc":false,"filters":[],"uses":{"str_replace":[264]},"used_by":[]},"getRequestParam":{"doc":"\/**\n * Returns an request value by name without magic quoting.\n *\n * @param String $name Name of parameter to get.\n * @param String $default_value Default value to return if value not found.\n * @return String request value by name without magic quoting or default value.\n *\/","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":28,"missingDoc":false,"filters":[],"uses":{"is_array":[32]},"used_by":{"__main":[25]}},"getLogger":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":44,"missingDoc":true,"filters":[],"uses":{"getLogger":[48],"setPath":[54],"dirname":[54],"setMaxSize":[55],"setMaxFiles":[56],"setFormat":[57]},"used_by":{"getLogger":[48],"debug":[66],"info":[73],"error":[80],"warn":[87],"fatal":[94]}},"debug":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":63,"missingDoc":true,"filters":[],"uses":{"func_get_args":[64],"getLogger":[66],"debug":[67],"implode":[67]},"used_by":{"debug":[67],"fetch_rss":[432,451,474,484,513],"RSSCache::get":[744]}},"info":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":70,"missingDoc":true,"filters":[],"uses":{"func_get_args":[71],"getLogger":[73],"info":[74],"implode":[74]},"used_by":{"info":[74]}},"warn":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":84,"missingDoc":true,"filters":[],"uses":{"func_get_args":[85],"getLogger":[87],"warn":[88],"implode":[88]},"used_by":{"warn":[88]}},"fatal":{"doc":"","file":"js\/tinymce\/plugins\/spellchecker\/includes\/general.php","line":91,"missingDoc":true,"filters":[],"uses":{"func_get_args":[92],"getLogger":[94],"fatal":[95],"implode":[95]},"used_by":{"fatal":[95]}},"get_file":{"doc":"","file":"js\/tinymce\/wp-tinymce.php","line":11,"missingDoc":true,"filters":[],"uses":{"realpath":[14],"function_exists":[13],"is_file":[16],"file_get_contents":[19]},"used_by":{"__main":[35,36,30]}},"wp_kses_array_lc":{"doc":"\/**\n * Goes through an array and changes the keys to all lower case.\n *\n * @since 1.0.0\n *\n * @param array $inarray Unfiltered array\n * @return array Fixed array with all lowercase keys\n *\/","file":"kses.php","line":998,"missingDoc":false,"filters":[],"uses":{"strtolower":[1002,1006]},"used_by":{"__main":[452,453]}},"wp_kses_no_null":{"doc":"\/**\n * Removes any null characters in $string.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":967,"missingDoc":false,"filters":[],"uses":{"preg_replace":[968,969]},"used_by":{"wp_kses":[479],"wp_kses_bad_protocol":[945],"wp_kses_bad_protocol_once2":[1087],"safecss_filter_attr":[1404],"wp_sanitize_redirect":[891],"get_the_content":[202]}},"wp_kses_js_entities":{"doc":"\/**\n * Removes the HTML JavaScript entities found in early versions of Netscape 4.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":1022,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1023]},"used_by":{"wp_kses":[480]}},"wp_kses_hook":{"doc":"\/**\n * You add any kses hooks here.\n *\n * There is currently only one kses WordPress hook and it is called here. All\n * parameters are passed to the hooks and expected to receive a string.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter through kses\n * @param array $allowed_html List of allowed HTML elements\n * @param array $allowed_protocols Allowed protocol in links\n * @return string Filtered content through 'pre_kses' hook\n *\/","file":"kses.php","line":536,"missingDoc":false,"filters":["'pre_kses'"],"uses":[],"used_by":{"wp_kses":[482]}},"wp_kses_split":{"doc":"\/**\n * Searches for HTML tags, no matter how malformed.\n *\n * It also matches stray \">\" characters.\n *\n * @since 1.0.0\n *\n * @param string $string Content to filter\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Content with fixed HTML tags\n *\/","file":"kses.php","line":564,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[568]},"used_by":{"wp_kses":[483]}},"wp_kses_allowed_html":{"doc":"\/**\n * Return a list of allowed tags and attributes for a given context.\n *\n * @since 3.5.0\n *\n * @param string $context The context for which to retrieve tags. Allowed values are\n * post | strip | data | entities or the name of a field filter such as pre_user_description.\n * @return array List of allowed tags and their allowed attributes.\n *\/","file":"kses.php","line":495,"missingDoc":false,"filters":["'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'","'wp_kses_allowed_html'"],"uses":{"is_array":[498]},"used_by":{"wp_kses_split2":[633],"wp_kses_attr":[667]}},"wp_kses_version":{"doc":"\/**\n * This function returns kses' version number.\n *\n * @since 1.0.0\n *\n * @return string KSES Version Number\n *\/","file":"kses.php","line":548,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_wp_kses_split_callback":{"doc":"\/**\n * Callback for wp_kses_split.\n *\n * @since 3.1.0\n * @access private\n *\/","file":"kses.php","line":577,"missingDoc":false,"filters":[],"uses":{"wp_kses_split2":[579]},"used_by":[]},"wp_kses_split2":{"doc":"\/**\n * Callback for wp_kses_split for fixing malformed HTML tags.\n *\n * This function does a lot of work. It rejects some very malformed things like\n * <:::>. It returns an empty string, if the element isn't allowed (look ma, no\n * strip_tags()!). Otherwise it splits the tag into an element and an attribute\n * list.\n *\n * After the tag is split into an element and an attribute list, it is run\n * through another filter which will remove illegal attributes and once that is\n * completed, will be returned.\n *\n * @access private\n * @since 1.0.0\n * @uses wp_kses_attr()\n *\n * @param string $string Content to filter\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Fixed HTML element\n *\/","file":"kses.php","line":603,"missingDoc":false,"filters":[],"uses":{"wp_kses_stripslashes":[604],"substr":[606,610],"str_replace":[611],"wp_kses":[612],"preg_replace":[617,619],"preg_match":[624],"trim":[628],"wp_kses_allowed_html":[633],"is_array":[632],"strtolower":[635],"wp_kses_attr":[643]},"used_by":{"_wp_kses_split_callback":[579]}},"wp_kses_stripslashes":{"doc":"\/**\n * Strips slashes from in front of quotes.\n *\n * This function changes the character sequence \\\" to just \". It leaves all\n * other slashes alone. It's really weird, but the quoting from\n * preg_replace(\/\/e) seems to require this.\n *\n * @since 1.0.0\n *\n * @param string $string String to strip slashes\n * @return string Fixed string with quoted slashes\n *\/","file":"kses.php","line":986,"missingDoc":false,"filters":[],"uses":{"preg_replace":[987]},"used_by":{"wp_kses_split2":[604]}},"wp_kses_attr":{"doc":"\/**\n * Removes all attributes, if none are allowed for this element.\n *\n * If some are allowed it calls wp_kses_hair() to split them further, and then\n * it builds up new HTML code from the data that kses_hair() returns. It also\n * removes \"<\" and \">\" characters, if there are any left. One more thing it does\n * is to check if the tag has a closing XHTML slash, and if it does, it puts one\n * in the returned code as well.\n *\n * @since 1.0.0\n *\n * @param string $element HTML element\/tag\n * @param string $attr HTML attributes from HTML element to closing HTML element tag\n * @param array $allowed_html Allowed HTML elements\n * @param array $allowed_protocols Allowed protocols to keep\n * @return string Sanitized HTML element\n *\/","file":"kses.php","line":663,"missingDoc":false,"filters":[],"uses":{"wp_kses_allowed_html":[667],"is_array":[666,704],"preg_match":[670],"strtolower":[674,674,684,686,689,693],"count":[674],"wp_kses_hair":[678],"safecss_filter_attr":[695],"str_replace":[701],"wp_kses_check_attr_val":[712],"preg_replace":[724]},"used_by":{"wp_kses_split2":[643]}},"wp_kses_hair":{"doc":"\/**\n * Builds an attribute list from string containing attributes.\n *\n * This function does a lot of work. It parses an attribute list into an array\n * with attribute data, and tries to do the right thing even if it gets weird\n * input. It will add quotes around attribute values that don't have any quotes\n * or apostrophes around them, to make it easier to produce HTML code that will\n * conform to W3C's HTML specification. It will also remove bad URL protocols\n * from attribute values. It also reduces duplicate attributes by using the\n * attribute defined first (foo='bar' foo='baz' will result in foo='bar').\n *\n * @since 1.0.0\n *\n * @param string $attr Attribute list from HTML element to closing HTML element tag\n * @param array $allowed_protocols Allowed protocols to keep\n * @return array List of attributes after parsing\n *\/","file":"kses.php","line":746,"missingDoc":false,"filters":[],"uses":{"strlen":[754],"preg_replace":[763,774,785,804,820,837],"preg_match":[760,770,778,792,808,824],"array_key_exists":[782,799,815,831,850],"wp_kses_bad_protocol":[797,813,829],"in_array":[796,812,828],"strtolower":[796,812,828],"wp_kses_html_error":[845]},"used_by":{"wp_kses_attr":[678]}},"safecss_filter_attr":{"doc":"\/**\n * Inline CSS filter\n *\n * @since 2.8.1\n *\/","file":"kses.php","line":1400,"missingDoc":false,"filters":["'safe_style_css'"],"uses":{"_deprecated_argument":[1402],"wp_kses_no_null":[1404],"str_replace":[1405],"preg_match":[1407],"explode":[1410,1435],"trim":[1410,1430,1436],"in_array":[1436],"strpos":[1432]},"used_by":{"wp_kses_attr":[695]}},"wp_kses_check_attr_val":{"doc":"\/**\n * Performs different checks for attribute values.\n *\n * The currently implemented checks are \"maxlen\", \"minlen\", \"maxval\", \"minval\"\n * and \"valueless\".\n *\n * @since 1.0.0\n *\n * @param string $value Attribute value\n * @param string $vless Whether the value is valueless. Use 'y' or 'n'\n * @param string $checkname What $checkvalue is checking for.\n * @param mixed $checkvalue What constraint the value should pass\n * @return bool Whether check passes\n *\/","file":"kses.php","line":872,"missingDoc":false,"filters":[],"uses":{"strtolower":[875,922],"strlen":[881,889],"preg_match":[900,910]},"used_by":{"wp_kses_attr":[712]}},"wp_kses_html_error":{"doc":"\/**\n * Handles parsing errors in wp_kses_hair().\n *\n * The general plan is to remove everything to and including some whitespace,\n * but it deals with quotes and apostrophes as well.\n *\n * @since 1.0.0\n *\n * @param string $string\n * @return string\n *\/","file":"kses.php","line":1037,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1038]},"used_by":{"wp_kses_hair":[845]}},"wp_kses_bad_protocol_once":{"doc":"\/**\n * Sanitizes content from bad protocols and other characters.\n *\n * This function searches for URL protocols at the beginning of $string, while\n * handling whitespace and HTML entities.\n *\n * @since 1.0.0\n *\n * @param string $string Content to check for bad protocols\n * @param string $allowed_protocols Allowed protocols\n * @return string Sanitized content\n *\/","file":"kses.php","line":1053,"missingDoc":false,"filters":[],"uses":{"preg_split":[1054],"trim":[1056],"wp_kses_bad_protocol_once2":[1057],"wp_kses_bad_protocol_once":[1061],"preg_match":[1055]},"used_by":{"wp_kses_bad_protocol":[950],"wp_kses_bad_protocol_once":[1061]}},"wp_kses_bad_protocol_once2":{"doc":"\/**\n * Callback for wp_kses_bad_protocol_once() regular expression.\n *\n * This function processes URL protocols, checks to see if they're in the\n * whitelist or not, and returns different data depending on the answer.\n *\n * @access private\n * @since 1.0.0\n *\n * @param string $string URI scheme to check against the whitelist\n * @param string $allowed_protocols Allowed protocols\n * @return string Sanitized content\n *\/","file":"kses.php","line":1084,"missingDoc":false,"filters":[],"uses":{"wp_kses_decode_entities":[1085],"preg_replace":[1086],"wp_kses_no_null":[1087],"strtolower":[1088,1092]},"used_by":{"wp_kses_bad_protocol_once":[1057]}},"wp_kses_decode_entities":{"doc":"\/**\n * Convert all entities to their character counterparts.\n *\n * This function decodes numeric HTML entities (A and A). It doesn't do\n * anything with other entities like ä, but we don't need them in the URL\n * protocol whitelisting system anyway.\n *\n * @since 1.0.0\n *\n * @param string $string Content to change entities\n * @return string Content after decoded entities\n *\/","file":"kses.php","line":1220,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[1221,1222]},"used_by":{"wp_kses_bad_protocol_once2":[1085]}},"wp_kses_named_entities":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() regular expression.\n *\n * This function only accepts valid named entity references, which are finite,\n * case-sensitive, and highly scrutinized by HTML and XML validators.\n *\n * @since 3.0.0\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1139,"missingDoc":false,"filters":[],"uses":{"in_array":[1146]},"used_by":[]},"wp_kses_normalize_entities2":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() regular expression.\n *\n * This function helps wp_kses_normalize_entities() to only accept 16-bit values\n * and nothing more for &#number; entities.\n *\n * @access private\n * @since 1.0.0\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1161,"missingDoc":false,"filters":[],"uses":{"str_pad":[1167],"ltrim":[1167],"valid_unicode":[1166]},"used_by":[]},"valid_unicode":{"doc":"\/**\n * Helper function to determine if a Unicode value is valid.\n *\n * @param int $i Unicode value\n * @return bool True if the value was a valid Unicode number\n *\/","file":"kses.php","line":1201,"missingDoc":false,"filters":[],"uses":[],"used_by":{"wp_kses_normalize_entities2":[1166],"wp_kses_normalize_entities3":[1192]}},"wp_kses_normalize_entities3":{"doc":"\/**\n * Callback for wp_kses_normalize_entities() for regular expression.\n *\n * This function helps wp_kses_normalize_entities() to only accept valid Unicode\n * numeric entities in hex form.\n *\n * @access private\n *\n * @param array $matches preg_replace_callback() matches array\n * @return string Correctly encoded entity\n *\/","file":"kses.php","line":1187,"missingDoc":false,"filters":[],"uses":{"valid_unicode":[1192],"hexdec":[1192],"ltrim":[1192]},"used_by":[]},"_wp_kses_decode_entities_chr":{"doc":"\/**\n * Regex callback for wp_kses_decode_entities()\n *\n * @param array $match preg match\n * @return string\n *\/","file":"kses.php","line":1233,"missingDoc":false,"filters":[],"uses":{"chr":[1234]},"used_by":[]},"_wp_kses_decode_entities_chr_hexdec":{"doc":"\/**\n * Regex callback for wp_kses_decode_entities()\n *\n * @param array $match preg match\n * @return string\n *\/","file":"kses.php","line":1243,"missingDoc":false,"filters":[],"uses":{"chr":[1244],"hexdec":[1244]},"used_by":[]},"wp_filter_kses":{"doc":"\/**\n * Sanitize content with allowed HTML Kses rules.\n *\n * @since 1.0.0\n * @uses $allowedtags\n *\n * @param string $data Content to filter, expected to be escaped with slashes\n * @return string Filtered content\n *\/","file":"kses.php","line":1256,"missingDoc":false,"filters":[],"uses":{"addslashes":[1257],"wp_kses":[1257],"stripslashes":[1257],"current_filter":[1257]},"used_by":[]},"wp_filter_nohtml_kses":{"doc":"\/**\n * Strips all of the HTML in the content.\n *\n * @since 2.1.0\n *\n * @param string $data Content to strip all HTML from\n * @return string Filtered content without any HTML\n *\/","file":"kses.php","line":1311,"missingDoc":false,"filters":[],"uses":{"addslashes":[1312],"wp_kses":[1312],"stripslashes":[1312]},"used_by":[]},"kses_init_filters":{"doc":"\/**\n * Adds all Kses input form content filters.\n *\n * All hooks have default priority. The wp_filter_kses() function is added to\n * the 'pre_comment_content' and 'title_save_pre' hooks.\n *\n * The wp_filter_post_kses() function is added to the 'content_save_pre',\n * 'excerpt_save_pre', and 'content_filtered_save_pre' hooks.\n *\n * @since 2.0.0\n * @uses add_filter() See description for what functions are added to what hooks.\n *\/","file":"kses.php","line":1327,"missingDoc":false,"filters":[],"uses":{"add_filter":[1329,1333,1335,1338,1339,1340],"current_user_can":[1332]},"used_by":{"kses_init":[1389]}},"kses_remove_filters":{"doc":"\/**\n * Removes all Kses input form content filters.\n *\n * A quick procedural method to removing all of the filters that kses uses for\n * content in WordPress Loop.\n *\n * Does not remove the kses_init() function from 'init' hook (priority is\n * default). Also does not remove kses_init() function from 'set_current_user'\n * hook (priority is also default).\n *\n * @since 2.0.6\n *\/","file":"kses.php","line":1355,"missingDoc":false,"filters":[],"uses":{"remove_filter":[1357,1360,1361,1364,1365,1366]},"used_by":{"kses_init":[1386]}},"kses_init":{"doc":"\/**\n * Sets up most of the Kses filters for input form content.\n *\n * If you remove the kses_init() function from 'init' hook and\n * 'set_current_user' (priority is default), then none of the Kses filter hooks\n * will be added.\n *\n * First removes all of the Kses filters in case the current user does not need\n * to have Kses filter the content. If the user does not have unfiltered_html\n * capability, then Kses filters are added.\n *\n * @uses kses_remove_filters() Removes the Kses filters\n * @uses kses_init_filters() Adds the Kses filters back if the user\n *\t\tdoes not have unfiltered HTML capability.\n * @since 2.0.0\n *\/","file":"kses.php","line":1385,"missingDoc":false,"filters":[],"uses":{"kses_remove_filters":[1386],"kses_init_filters":[1389],"current_user_can":[1388]},"used_by":[]},"_wp_add_global_attributes":{"doc":"\/**\n * Helper function to add global attributes to a tag in the allowed html list.\n *\n * @since 3.5.0\n * @access private\n *\n * @param array $value An array of attributes.\n * @return array The array of attributes with global attributes added.\n *\/","file":"kses.php","line":1458,"missingDoc":false,"filters":[],"uses":{"array_merge":[1470],"is_array":[1469]},"used_by":[]},"get_translations_for_domain":{"doc":"\/**\n * Returns the Translations instance for a domain. If there isn't one,\n * returns empty Translations instance.\n *\n * @param string $domain\n * @return object A Translation instance\n *\/","file":"l10n.php","line":500,"missingDoc":false,"filters":[],"uses":[],"used_by":{"translate":[68],"translate_with_gettext_context":[81],"_n":[239],"_nx":[252]}},"translate_with_gettext_context":{"doc":"","file":"l10n.php","line":80,"missingDoc":true,"filters":["'gettext_with_context'"],"uses":{"get_translations_for_domain":[81],"translate":[82]},"used_by":{"_x":[190],"esc_attr_x":[209],"esc_html_x":[213],"translate_user_role":[531]}},"esc_html__":{"doc":"\/**\n * Retrieves the translation of $text and escapes it for safe use in HTML output.\n * If there is no translation, or the domain isn't loaded, the original text is returned.\n *\n * @see translate() An alias of translate()\n * @see esc_html()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n * @return string Translated text\n *\/","file":"l10n.php","line":128,"missingDoc":false,"filters":[],"uses":{"esc_html":[129],"translate":[129]},"used_by":[]},"esc_html_e":{"doc":"\/**\n * Displays translated text that has been escaped for safe use in HTML output.\n *\n * @see translate() Echoes returned translate() string\n * @see esc_html()\n * @since 2.8.0\n *\n * @param string $text Text to translate\n * @param string $domain Optional. Domain to retrieve the translated text\n *\/","file":"l10n.php","line":169,"missingDoc":false,"filters":[],"uses":{"esc_html":[170],"translate":[170]},"used_by":{"wp_print_media_templates":[180]}},"esc_attr_x":{"doc":"","file":"l10n.php","line":208,"missingDoc":true,"filters":[],"uses":{"esc_attr":[209],"translate_with_gettext_context":[209]},"used_by":[]},"esc_html_x":{"doc":"","file":"l10n.php","line":212,"missingDoc":true,"filters":[],"uses":{"esc_html":[213],"translate_with_gettext_context":[213]},"used_by":[]},"_nx":{"doc":"\/**\n * A hybrid of _n() and _x(). It supports contexts and plurals.\n *\n * @see _n()\n * @see _x()\n *\n *\/","file":"l10n.php","line":251,"missingDoc":false,"filters":["'ngettext_with_context'"],"uses":{"get_translations_for_domain":[252],"translate_plural":[253]},"used_by":{"translate_nooped_plural":[305]}},"_n_noop":{"doc":"\/**\n * Register plural strings in POT file, but don't translate them.\n *\n * Used when you want to keep structures with translatable plural strings and\n * use them later.\n *\n * Example:\n * $messages = array(\n * \t'post' => _n_noop('%s post', '%s posts'),\n * \t'page' => _n_noop('%s pages', '%s pages')\n * );\n * ...\n * $message = $messages[$type];\n * $usable_text = sprintf( translate_nooped_plural( $message, $count ), $count );\n *\n * @since 2.5\n * @param string $singular Single form to be i18ned\n * @param string $plural Plural form to be i18ned\n * @param string $domain Optional. The domain identifier the text will be retrieved in\n * @return array array($singular, $plural)\n *\/","file":"l10n.php","line":278,"missingDoc":false,"filters":[],"uses":[],"used_by":{"create_initial_post_types":[113,120,127,134,141,148],"get_post_mime_types":[2194,2195,2196]}},"_nx_noop":{"doc":"\/**\n * Register plural strings with context in POT file, but don't translate them.\n *\n * @see _n_noop()\n *\/","file":"l10n.php","line":287,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"translate_nooped_plural":{"doc":"\/**\n * Translate the result of _n_noop() or _nx_noop()\n *\n * @since 3.1\n * @param array $nooped_plural Array with singular, plural and context keys, usually the result of _n_noop() or _nx_noop()\n * @param int $count Number of objects\n * @param string $domain Optional. The domain identifier the text should be retrieved in. If $nooped_plural contains\n * \ta domain passed to _n_noop() or _nx_noop(), it will override this value.\n *\/","file":"l10n.php","line":300,"missingDoc":false,"filters":[],"uses":{"_nx":[305],"_n":[307]},"used_by":[]},"unload_textdomain":{"doc":"\/**\n * Unloads translations for a domain\n *\n * @since 3.0.0\n * @param string $domain Textdomain to be unloaded\n * @return bool Whether textdomain was unloaded\n *\/","file":"l10n.php","line":359,"missingDoc":false,"filters":["'override_unload_textdomain'","'unload_textdomain'"],"uses":[],"used_by":[]},"load_default_textdomain":{"doc":"\/**\n * Loads default translated strings based on locale.\n *\n * Loads the .mo file in WP_LANG_DIR constant path from WordPress root. The\n * translated (.mo) file is named based on the locale.\n *\n * @since 1.5.0\n *\/","file":"l10n.php","line":385,"missingDoc":false,"filters":[],"uses":{"get_locale":[386],"load_textdomain":[388,391,396,399],"is_multisite":[390],"defined":[390,395,398],"file_exists":[390],"is_admin":[395],"is_network_admin":[398]},"used_by":[]},"load_plugin_textdomain":{"doc":"\/**\n * Loads the plugin's translated strings.\n *\n * If the path is not given then it will be the root of the plugin directory.\n * The .mo file should be named based on the domain with a dash, and then the locale exactly.\n *\n * @since 1.5.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $abs_rel_path Optional. Relative path to ABSPATH of a folder,\n * \twhere the .mo file resides. Deprecated, but still functional until 2.7\n * @param string $plugin_rel_path Optional. Relative path to WP_PLUGIN_DIR. This is the preferred argument to use. It takes precedence over $abs_rel_path\n *\/","file":"l10n.php","line":416,"missingDoc":false,"filters":["'plugin_locale'"],"uses":{"get_locale":[417],"trim":[420,423],"_deprecated_argument":[422],"load_textdomain":[429]},"used_by":[]},"load_muplugin_textdomain":{"doc":"\/**\n * Load the translated strings for a plugin residing in the mu-plugins dir.\n *\n * @since 3.0.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n * @param string $mu_plugin_rel_path Relative to WPMU_PLUGIN_DIR directory in which\n * the MO file resides. Defaults to empty string.\n *\/","file":"l10n.php","line":441,"missingDoc":false,"filters":["'plugin_locale'"],"uses":{"get_locale":[442],"ltrim":[443],"load_textdomain":[444],"trailingslashit":[444]},"used_by":[]},"load_child_theme_textdomain":{"doc":"\/**\n * Loads the child themes translated strings.\n *\n * If the current locale exists as a .mo file in the child themes root directory, it\n * will be included in the translated strings by the $domain.\n *\n * The .mo files must be named based on the locale exactly.\n *\n * @since 2.9.0\n *\n * @param string $domain Unique identifier for retrieving translated strings\n *\/","file":"l10n.php","line":487,"missingDoc":false,"filters":[],"uses":{"get_stylesheet_directory":[489],"load_theme_textdomain":[490]},"used_by":[]},"translate_user_role":{"doc":"\/**\n * Translates role name. Since the role names are in the database and\n * not in the source there are dummy gettext calls to get them into the POT\n * file and this function properly translates them back.\n *\n * The before_last_bar() call is needed, because older installs keep the roles\n * using the old context format: 'Role name|User role' and just skipping the\n * content after the last bar is easier than fixing them in the DB. New installs\n * won't suffer from that problem.\n *\/","file":"l10n.php","line":530,"missingDoc":false,"filters":[],"uses":{"translate_with_gettext_context":[531],"before_last_bar":[531]},"used_by":[]},"permalink_anchor":{"doc":"\/**\n * Display permalink anchor for current post.\n *\n * The permalink mode title will use the post title for the 'a' element 'id'\n * attribute. The id mode uses 'post-' with the post ID for the 'id' attribute.\n *\n * @since 0.71\n *\n * @param string $mode Permalink mode can be either 'title', 'id', or default, which is 'id'.\n *\/","file":"link-template.php","line":57,"missingDoc":false,"filters":[],"uses":{"get_post":[58],"strtolower":[59],"sanitize_title":[61]},"used_by":[]},"get_page_link":{"doc":"\/**\n * Retrieve the permalink for current page or page ID.\n *\n * Respects page_on_front. Use this one.\n *\n * @since 1.5.0\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional, defaults to false. Whether to keep page name.\n * @param bool $sample Optional, defaults to false. Is it a sample permalink.\n * @return string\n *\/","file":"link-template.php","line":240,"missingDoc":false,"filters":["'page_link'"],"uses":{"get_post":[241],"home_url":[244],"_get_page_link":[246],"get_option":[243,243]},"used_by":{"get_permalink":[107]}},"get_post_permalink":{"doc":"\/**\n * Retrieve the permalink for a post with a custom post type.\n *\n * @since 3.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $leavename Optional, defaults to false. Whether to keep post name.\n * @param bool $sample Optional, defaults to false. Is it a sample permalink.\n * @return string\n *\/","file":"link-template.php","line":178,"missingDoc":false,"filters":["'post_type_link'"],"uses":{"get_post":[181],"is_wp_error":[183],"get_extra_permastruct":[186],"in_array":[190],"get_post_type_object":[192],"get_page_uri":[197],"str_replace":[198],"home_url":[200,206],"user_trailingslashit":[200],"add_query_arg":[203,205]},"used_by":{"get_permalink":[111]}},"get_page_uri":{"doc":"\/**\n * Builds URI for a page.\n *\n * Sub pages will be in the \"directory\" under the parent page post name.\n *\n * @since 1.5.0\n *\n * @param mixed $page Page object or page ID.\n * @return string Page URI.\n *\/","file":"post.php","line":3596,"missingDoc":false,"filters":[],"uses":{"get_post":[3597,3602]},"used_by":{"get_post_permalink":[197],"_get_page_link":[275],"WP_Rewrite::page_uri_index":[839,843]}},"_get_page_link":{"doc":"\/**\n * Retrieve the page permalink.\n *\n * Ignores page_on_front. Internal use only.\n *\n * @since 2.1.0\n * @access private\n *\n * @param mixed $post Optional. Post ID or object.\n * @param bool $leavename Optional. Leave name.\n * @param bool $sample Optional. Sample permalink.\n * @return string\n *\/","file":"link-template.php","line":264,"missingDoc":false,"filters":["'_get_page_link'"],"uses":{"get_post":[267],"in_array":[269],"get_page_permastruct":[271],"str_replace":[275],"get_page_uri":[275],"home_url":[278,281],"user_trailingslashit":[279]},"used_by":{"get_page_link":[246],"get_attachment_link":[308],"get_post_comments_feed_link":[476]}},"the_feed_link":{"doc":"\/**\n * Display the permalink for the feed type.\n *\n * @since 3.0.0\n *\n * @param string $anchor The link's anchor text.\n * @param string $feed Optional, defaults to default feed. Feed type.\n *\/","file":"link-template.php","line":414,"missingDoc":false,"filters":["'the_feed_link'"],"uses":{"esc_url":[415],"get_feed_link":[415]},"used_by":[]},"get_post_field":{"doc":"\/**\n * Retrieve data from a post field based on Post ID.\n *\n * Examples of the post field will be, 'post_type', 'post_status', 'post_content',\n * etc and based off of the post object property or key names.\n *\n * The context values are based off of the taxonomy filter functions and\n * supported values are found within those functions.\n *\n * @since 2.3.0\n * @uses sanitize_post_field() See for possible $context values.\n *\n * @param string $field Post field name\n * @param id $post Post ID\n * @param string $context Optional. How to filter the field. Default is display.\n * @return bool|string False on failure or returns the value in post field\n *\/","file":"post.php","line":724,"missingDoc":false,"filters":[],"uses":{"get_post":[725],"sanitize_post_field":[733]},"used_by":{"get_post_comments_feed_link":[485],"wp_update_nav_menu_item":[309],"wp_insert_post":[2722,2762,2780,2920]}},"edit_tag_link":{"doc":"\/**\n * Display or retrieve edit tag link with formatting.\n *\n * @since 2.7.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int|object $tag Tag object or ID\n * @return string HTML content.\n *\/","file":"link-template.php","line":668,"missingDoc":false,"filters":["'edit_tag_link'"],"uses":{"edit_term_link":[669]},"used_by":[]},"edit_term_link":{"doc":"\/**\n * Display or retrieve edit term link with formatting.\n *\n * @since 3.1.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param object $term Term object\n * @return string HTML content.\n *\/","file":"link-template.php","line":715,"missingDoc":false,"filters":["'edit_term_link'"],"uses":{"get_queried_object":[717],"is_null":[716],"get_taxonomy":[720],"current_user_can":[721],"__":[725],"get_edit_term_link":[727]},"used_by":{"edit_tag_link":[669]}},"get_search_link":{"doc":"\/**\n* Retrieve permalink for search.\n*\n* @since 3.0.0\n* @param string $query Optional. The query string to use. If empty the current query is used.\n* @return string\n*\/","file":"link-template.php","line":743,"missingDoc":false,"filters":["'search_link'"],"uses":{"get_search_query":[747],"stripslashes":[749],"get_search_permastruct":[751],"home_url":[754,759],"urlencode":[754,756],"str_replace":[757,758],"user_trailingslashit":[759]},"used_by":{"get_search_feed_link":[776]}},"get_post_type_archive_link":{"doc":"\/**\n * Retrieve the permalink for a post type archive.\n *\n * @since 3.1.0\n *\n * @param string $post_type Post type\n * @return string\n *\/","file":"link-template.php","line":832,"missingDoc":false,"filters":["'post_type_archive_link'"],"uses":{"get_post_type_object":[834],"home_url":[846,848],"user_trailingslashit":[846],"get_option":[840],"is_array":[840]},"used_by":{"get_post_type_archive_feed_link":[868]}},"edit_post_link":{"doc":"\/**\n * Display edit post link for post.\n *\n * @since 1.0.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int $id Optional. Post ID.\n *\/","file":"link-template.php","line":924,"missingDoc":false,"filters":["'edit_post_link'"],"uses":{"get_post":[925],"get_edit_post_link":[928],"__":[932],"get_post_type_object":[934],"esc_attr":[935]},"used_by":[]},"get_delete_post_link":{"doc":"\/**\n * Retrieve delete posts link for post.\n *\n * Can be used within the WordPress loop or outside of it, with any post type.\n *\n * @since 2.9.0\n *\n * @param int $id Optional. Post ID.\n * @param string $deprecated Not used.\n * @param bool $force_delete Whether to bypass trash and force deletion. Default is false.\n * @return string\n *\/","file":"link-template.php","line":951,"missingDoc":false,"filters":["'get_delete_post_link'"],"uses":{"_deprecated_argument":[953],"get_post":[955],"get_post_type_object":[958],"current_user_can":[962],"add_query_arg":[967],"admin_url":[967],"sprintf":[967],"wp_nonce_url":[969]},"used_by":[]},"get_edit_comment_link":{"doc":"\/**\n * Retrieve edit comment link.\n *\n * @since 2.3.0\n *\n * @param int $comment_id Optional. Comment ID.\n * @return string\n *\/","file":"link-template.php","line":980,"missingDoc":false,"filters":["'get_edit_comment_link'"],"uses":{"get_comment":[981],"current_user_can":[983],"admin_url":[986]},"used_by":{"edit_comment_link":[1009]}},"get_edit_bookmark_link":{"doc":"\/**\n * Display edit bookmark (literally a URL external to blog) link.\n *\n * @since 2.7.0\n *\n * @param int $link Optional. Bookmark ID.\n * @return string\n *\/","file":"link-template.php","line":1021,"missingDoc":false,"filters":["'get_edit_bookmark_link'"],"uses":{"get_bookmark":[1022],"current_user_can":[1024],"admin_url":[1027]},"used_by":{"edit_bookmark_link":[1050]}},"edit_bookmark_link":{"doc":"\/**\n * Display edit bookmark (literally a URL external to blog) link anchor content.\n *\n * @since 2.7.0\n *\n * @param string $link Optional. Anchor text.\n * @param string $before Optional. Display before edit link.\n * @param string $after Optional. Display after edit link.\n * @param int $bookmark Optional. Bookmark ID.\n *\/","file":"link-template.php","line":1041,"missingDoc":false,"filters":["'edit_bookmark_link'"],"uses":{"get_bookmark":[1042],"current_user_can":[1044],"__":[1048],"get_edit_bookmark_link":[1050],"esc_attr__":[1050]},"used_by":[]},"get_adjacent_post":{"doc":"\/**\n * Retrieve adjacent post.\n *\n * Can either be next or previous post.\n *\n * @since 2.5.0\n *\n * @param bool $in_same_cat Optional. Whether post should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional. Whether to retrieve previous post.\n * @return mixed Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.\n *\/","file":"link-template.php","line":1122,"missingDoc":false,"filters":["\"get_{$adjacent}_post_join\"","\"get_{$adjacent}_post_where\"","\"get_{$adjacent}_post_sort\""],"uses":{"get_post":[1125,1182,1193],"is_object_in_taxonomy":[1136],"wp_get_object_terms":[1138],"is_wp_error":[1139],"implode":[1141,1164],"_deprecated_argument":[1149],"sprintf":[1149],"__":[1149],"explode":[1150,1152],"strpos":[1148],"is_array":[1146],"array_map":[1156],"array_diff":[1159],"prepare":[1174],"md5":[1178],"wp_cache_get":[1179],"get_var":[1186],"wp_cache_set":[1190]},"used_by":{"get_previous_post":[1094],"get_next_post":[1107],"get_adjacent_post_rel_link":[1215],"adjacent_post_link":[1381]}},"get_adjacent_post_rel_link":{"doc":"\/**\n * Get adjacent post relational link.\n *\n * Can either be next or previous post relational link.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional, default is true. Whether to display link to previous or next post.\n * @return string\n *\/","file":"link-template.php","line":1211,"missingDoc":false,"filters":["'the_title'","\"{$adjacent}_post_rel_link\""],"uses":{"get_post":[1213,1212],"get_adjacent_post":[1215],"is_attachment":[1212],"__":[1221,1221],"mysql2date":[1225],"get_option":[1225],"str_replace":[1227,1228],"esc_attr":[1232],"get_permalink":[1233]},"used_by":{"adjacent_posts_rel_link":[1249,1250],"next_post_rel_link":[1276],"prev_post_rel_link":[1289]}},"adjacent_posts_rel_link":{"doc":"\/**\n * Display relational links for the posts adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1248,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1249,1250]},"used_by":{"adjacent_posts_rel_link_wp_head":[1263]}},"adjacent_posts_rel_link_wp_head":{"doc":"\/**\n * Display relational links for the posts adjacent to the current post for single post pages.\n *\n * This is meant to be attached to actions like 'wp_head'. Do not call this directly in plugins or theme templates.\n * @since 3.0.0\n *\n *\/","file":"link-template.php","line":1260,"missingDoc":false,"filters":[],"uses":{"is_singular":[1261],"is_attachment":[1261],"adjacent_posts_rel_link":[1263]},"used_by":[]},"next_post_rel_link":{"doc":"\/**\n * Display relational link for the next post adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1275,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1276]},"used_by":[]},"prev_post_rel_link":{"doc":"\/**\n * Display relational link for the previous post adjacent to the current post.\n *\n * @since 2.8.0\n *\n * @param string $title Optional. Link title format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1288,"missingDoc":false,"filters":[],"uses":{"get_adjacent_post_rel_link":[1289]},"used_by":[]},"previous_post_link":{"doc":"\/**\n * Display previous post link that is adjacent to the current post.\n *\n * @since 1.5.0\n *\n * @param string $format Optional. Link anchor format.\n * @param string $link Optional. Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1346,"missingDoc":false,"filters":[],"uses":{"adjacent_post_link":[1347]},"used_by":[]},"adjacent_post_link":{"doc":"\/**\n * Display adjacent post link.\n *\n * Can be either next post link or previous.\n *\n * @since 2.5.0\n *\n * @param string $format Link anchor format.\n * @param string $link Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n * @param bool $previous Optional, default is true. Whether to display link to previous or next post.\n *\/","file":"link-template.php","line":1377,"missingDoc":false,"filters":["'the_title'","\"{$adjacent}_post_link\""],"uses":{"get_post":[1379,1379],"get_adjacent_post":[1381],"is_attachment":[1378],"__":[1389,1389],"mysql2date":[1392],"get_option":[1392],"get_permalink":[1395],"str_replace":[1396,1397,1400]},"used_by":{"previous_post_link":[1347],"next_post_link":[1361]}},"next_post_link":{"doc":"\/**\n * Display next post link that is adjacent to the current post.\n *\n * @since 1.5.0\n *\n * @param string $format Optional. Link anchor format.\n * @param string $link Optional. Link permalink format.\n * @param bool $in_same_cat Optional. Whether link should be in a same category.\n * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.\n *\/","file":"link-template.php","line":1360,"missingDoc":false,"filters":[],"uses":{"adjacent_post_link":[1361]},"used_by":[]},"get_pagenum_link":{"doc":"\/**\n* Retrieve links for page numbers.\n*\n* @since 1.5.0\n*\n* @param int $pagenum Optional. Page ID.\n* @param bool $escape Optional. Whether to escape the URL for display, with esc_url(). Defaults to true.\n* \tOtherwise, prepares the URL with esc_url_raw().\n* @return string\n*\/","file":"link-template.php","line":1418,"missingDoc":false,"filters":["'get_pagenum_link'"],"uses":{"remove_query_arg":[1423],"parse_url":[1425],"home_url":[1425],"preg_quote":[1427],"preg_replace":[1429,1430,1446,1451,1452],"trailingslashit":[1433,1455,1461],"get_bloginfo":[1433,1455],"add_query_arg":[1436],"preg_match":[1442],"ltrim":[1453],"using_index_permalinks":[1457],"user_trailingslashit":[1461],"using_permalinks":[1432],"is_admin":[1432],"esc_url":[1470],"esc_url_raw":[1472]},"used_by":{"get_next_posts_page_link":[1493],"get_previous_posts_page_link":[1574]}},"get_next_posts_page_link":{"doc":"\/**\n * Retrieve next posts page link.\n *\n * Backported from 2.1.3 to 2.0.10.\n *\n * @since 2.0.10\n *\n * @param int $max_page Optional. Max pages.\n * @return string\n *\/","file":"link-template.php","line":1485,"missingDoc":false,"filters":[],"uses":{"intval":[1491],"get_pagenum_link":[1493],"is_single":[1488]},"used_by":{"next_posts":[1506]}},"next_posts":{"doc":"\/**\n * Display or return the next posts page link.\n *\n * @since 0.71\n *\n * @param int $max_page Optional. Max pages.\n * @param boolean $echo Optional. Echo or return;\n *\/","file":"link-template.php","line":1505,"missingDoc":false,"filters":[],"uses":{"esc_url":[1506],"get_next_posts_page_link":[1506]},"used_by":{"get_next_posts_link":[1539]}},"get_next_posts_link":{"doc":"\/**\n * Return the next posts page link.\n *\n * @since 2.7.0\n *\n * @param string $label Content for link text.\n * @param int $max_page Optional. Max pages.\n * @return string|null\n *\/","file":"link-template.php","line":1523,"missingDoc":false,"filters":["'next_posts_link_attributes'"],"uses":{"intval":[1532],"__":[1535],"next_posts":[1539],"preg_replace":[1539],"is_single":[1537]},"used_by":{"next_posts_link":[1553],"get_posts_nav_link":[1658]}},"next_posts_link":{"doc":"\/**\n * Display the next posts page link.\n *\n * @since 0.71\n * @uses get_next_posts_link()\n *\n * @param string $label Content for link text.\n * @param int $max_page Optional. Max pages.\n *\/","file":"link-template.php","line":1552,"missingDoc":false,"filters":[],"uses":{"get_next_posts_link":[1553]},"used_by":[]},"get_previous_posts_page_link":{"doc":"\/**\n * Retrieve previous posts page link.\n *\n * Will only return string, if not on a single page or post.\n *\n * Backported to 2.0.10 from 2.1.3.\n *\n * @since 2.0.10\n *\n * @return string|null\n *\/","file":"link-template.php","line":1567,"missingDoc":false,"filters":[],"uses":{"intval":[1571],"get_pagenum_link":[1574],"is_single":[1570]},"used_by":{"previous_posts":[1586]}},"previous_posts":{"doc":"\/**\n * Display or return the previous posts page link.\n *\n * @since 0.71\n *\n * @param boolean $echo Optional. Echo or return;\n *\/","file":"link-template.php","line":1585,"missingDoc":false,"filters":[],"uses":{"esc_url":[1586],"get_previous_posts_page_link":[1586]},"used_by":{"get_previous_posts_link":[1610]}},"get_previous_posts_link":{"doc":"\/**\n * Return the previous posts page link.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Previous page link text.\n * @return string|null\n *\/","file":"link-template.php","line":1602,"missingDoc":false,"filters":["'previous_posts_link_attributes'"],"uses":{"__":[1606],"previous_posts":[1610],"preg_replace":[1610],"is_single":[1608]},"used_by":{"previous_posts_link":[1623],"get_posts_nav_link":[1656]}},"previous_posts_link":{"doc":"\/**\n * Display the previous posts page link.\n *\n * @since 0.71\n * @uses get_previous_posts_link()\n *\n * @param string $label Optional. Previous page link text.\n *\/","file":"link-template.php","line":1622,"missingDoc":false,"filters":[],"uses":{"get_previous_posts_link":[1623]},"used_by":[]},"get_posts_nav_link":{"doc":"\/**\n * Return post pages link navigation for previous and next pages.\n *\n * @since 2.8\n *\n * @param string|array $args Optional args.\n * @return string The posts link navigation.\n *\/","file":"link-template.php","line":1634,"missingDoc":false,"filters":[],"uses":{"__":[1642,1643],"wp_parse_args":[1645],"get_query_var":[1648],"get_previous_posts_link":[1656],"preg_replace":[1657],"get_next_posts_link":[1658],"is_singular":[1639]},"used_by":{"posts_nav_link":[1676]}},"posts_nav_link":{"doc":"\/**\n * Display post pages link navigation for previous and next pages.\n *\n * @since 0.71\n *\n * @param string $sep Optional. Separator for posts navigation links.\n * @param string $prelabel Optional. Label for previous pages.\n * @param string $nxtlabel Optional Label for next pages.\n *\/","file":"link-template.php","line":1674,"missingDoc":false,"filters":[],"uses":{"array_filter":[1675],"compact":[1675],"get_posts_nav_link":[1676]},"used_by":[]},"get_comments_pagenum_link":{"doc":"\/**\n * Retrieve comments page number link.\n *\n * @since 2.7.0\n *\n * @param int $pagenum Optional. Page number.\n * @return string\n *\/","file":"link-template.php","line":1687,"missingDoc":false,"filters":["'get_comments_pagenum_link'"],"uses":{"get_permalink":[1692],"user_trailingslashit":[1697,1703],"trailingslashit":[1697,1703],"add_query_arg":[1699,1705],"using_permalinks":[1696,1702],"get_option":[1694]},"used_by":{"get_next_comments_link":[1746],"get_previous_comments_link":[1783],"rel_canonical":[2323]}},"get_next_comments_link":{"doc":"\/**\n * Return the link to next comments page.\n *\n * @since 2.7.1\n *\n * @param string $label Optional. Label for link text.\n * @param int $max_page Optional. Max page.\n * @return string|null\n *\/","file":"link-template.php","line":1724,"missingDoc":false,"filters":["'next_comments_link_attributes'"],"uses":{"is_singular":[1727],"get_option":[1727],"get_query_var":[1730],"intval":[1732],"get_comment_pages_count":[1738],"__":[1744],"esc_url":[1746],"get_comments_pagenum_link":[1746],"preg_replace":[1746]},"used_by":{"next_comments_link":[1758]}},"next_comments_link":{"doc":"\/**\n * Display the link to next comments page.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Label for link text.\n * @param int $max_page Optional. Max page.\n *\/","file":"link-template.php","line":1757,"missingDoc":false,"filters":[],"uses":{"get_next_comments_link":[1758]},"used_by":{"__main":[31,40]}},"get_previous_comments_link":{"doc":"\/**\n * Return the previous comments page link.\n *\n * @since 2.7.1\n *\n * @param string $label Optional. Label for comments link text.\n * @return string|null\n *\/","file":"link-template.php","line":1769,"missingDoc":false,"filters":["'previous_comments_link_attributes'"],"uses":{"is_singular":[1770],"get_option":[1770],"get_query_var":[1773],"intval":[1775,1778],"__":[1781],"esc_url":[1783],"get_comments_pagenum_link":[1783],"preg_replace":[1783]},"used_by":{"previous_comments_link":[1794]}},"previous_comments_link":{"doc":"\/**\n * Display the previous comments page link.\n *\n * @since 2.7.0\n *\n * @param string $label Optional. Label for comments link text.\n *\/","file":"link-template.php","line":1793,"missingDoc":false,"filters":[],"uses":{"get_previous_comments_link":[1794]},"used_by":{"__main":[30,39]}},"paginate_comments_links":{"doc":"\/**\n * Create pagination links for the comments on the current post.\n *\n * @see paginate_links()\n * @since 2.7.0\n *\n * @param string|array $args Optional args. See paginate_links().\n * @return string Markup for pagination links.\n*\/","file":"link-template.php","line":1806,"missingDoc":false,"filters":[],"uses":{"is_singular":[1809],"get_option":[1809],"get_query_var":[1812],"get_comment_pages_count":[1815],"add_query_arg":[1817],"user_trailingslashit":[1825],"trailingslashit":[1825],"get_permalink":[1825],"using_permalinks":[1824],"wp_parse_args":[1827],"paginate_links":[1828]},"used_by":[]},"get_shortcut_link":{"doc":"\/**\n * Retrieve the Press This bookmarklet link.\n *\n * Use this in 'a' element 'href' attribute.\n *\n * @since 2.6.0\n *\n * @return string\n *\/","file":"link-template.php","line":1845,"missingDoc":false,"filters":["'shortcut_link'"],"uses":{"admin_url":[1854],"str_replace":[1862]},"used_by":[]},"get_site_url":{"doc":"\/**\n * Retrieve the site url for a given site.\n *\n * Returns the 'site_url' option with the appropriate protocol, 'https' if\n * is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is\n * overridden.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path Optional. Path relative to the site url.\n * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'.\n * @return string Site url link with optional path appended.\n*\/","file":"link-template.php","line":1963,"missingDoc":false,"filters":["'site_url'"],"uses":{"get_option":[1965,1968],"switch_to_blog":[1967],"restore_current_blog":[1969],"is_multisite":[1964],"set_url_scheme":[1972],"ltrim":[1975],"is_string":[1974],"strpos":[1974]},"used_by":{"site_url":[1945],"get_admin_url":[2006]}},"get_admin_url":{"doc":"\/**\n * Retrieve the url to the admin area for a given site.\n *\n * @package WordPress\n * @since 3.0.0\n *\n * @param int $blog_id (optional) Blog ID. Defaults to current blog.\n * @param string $path Optional path relative to the admin url.\n * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.\n * @return string Admin url link with optional path appended.\n*\/","file":"link-template.php","line":2005,"missingDoc":false,"filters":["'admin_url'"],"uses":{"get_site_url":[2006],"ltrim":[2009],"is_string":[2008],"strpos":[2008]},"used_by":{"admin_url":[1991],"get_dashboard_url":[2275]}},"plugins_url":{"doc":"\/**\n * Retrieve the url to the plugins directory or to a specific file within that directory.\n * You can hardcode the plugin slug in $path or pass __FILE__ as a second argument to get the correct folder name.\n *\n * @package WordPress\n * @since 2.6.0\n *\n * @param string $path Optional. Path relative to the plugins url.\n * @param string $plugin Optional. The plugin file that you want to be relative to - i.e. pass in __FILE__\n * @return string Plugins url link with optional path appended.\n*\/","file":"link-template.php","line":2061,"missingDoc":false,"filters":["'plugins_url'"],"uses":{"str_replace":[2065],"preg_replace":[2066],"strpos":[2069,2083],"set_url_scheme":[2075],"dirname":[2078],"plugin_basename":[2078],"ltrim":[2080,2084],"is_string":[2077,2083]},"used_by":{"plugin_dir_url":[600],"get_theme_root_uri":[485]}},"plugin_basename":{"doc":"\/**\n * Gets the basename of a plugin.\n *\n * This method extracts the name of a plugin from its filename.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.5\n *\n * @access private\n *\n * @param string $file The filename of plugin.\n * @return string The name of a plugin.\n * @uses WP_PLUGIN_DIR\n *\/","file":"plugin.php","line":565,"missingDoc":false,"filters":[],"uses":{"str_replace":[566,568,570],"preg_replace":[567,569,571,572],"preg_quote":[572,572],"trim":[573]},"used_by":{"plugins_url":[2078],"register_activation_hook":[623],"register_deactivation_hook":[648],"register_uninstall_hook":[687]}},"rel_canonical":{"doc":"\/**\n * Output rel=canonical for singular queries.\n *\n * @package WordPress\n * @since 2.9.0\n*\/","file":"link-template.php","line":2312,"missingDoc":false,"filters":[],"uses":{"is_singular":[2313],"get_queried_object_id":[2317],"get_permalink":[2320],"get_comments_pagenum_link":[2323],"get_query_var":[2322]},"used_by":[]},"wp_shortlink_wp_head":{"doc":"\/**\n * Inject rel=shortlink into head if a shortlink is defined for the current page.\n *\n * Attached to the wp_head action.\n *\n * @since 3.0.0\n *\n * @uses wp_get_shortlink()\n *\/","file":"link-template.php","line":2379,"missingDoc":false,"filters":[],"uses":{"wp_get_shortlink":[2380],"esc_url":[2385]},"used_by":[]},"wp_shortlink_header":{"doc":"\/**\n * Send a Link: rel=shortlink header if a shortlink is defined for the current page.\n *\n * Attached to the wp action.\n *\n * @since 3.0.0\n *\n * @uses wp_get_shortlink()\n *\/","file":"link-template.php","line":2397,"missingDoc":false,"filters":[],"uses":{"headers_sent":[2398],"wp_get_shortlink":[2401],"header":[2406]},"used_by":[]},"the_shortlink":{"doc":"\/**\n * Display the Short Link for a Post\n *\n * Must be called from inside \"The Loop\"\n *\n * Call like the_shortlink(__('Shortlinkage FTW'))\n *\n * @since 3.0.0\n *\n * @param string $text Optional The link text or HTML to be displayed. Defaults to 'This is the short link.'\n * @param string $title Optional The tooltip for the link. Must be sanitized. Defaults to the sanitized post title.\n * @param string $before Optional HTML to display before the link.\n * @param string $after Optional HTML to display after the link.\n *\/","file":"link-template.php","line":2423,"missingDoc":false,"filters":["'the_shortlink'"],"uses":{"get_post":[2424],"__":[2427],"the_title_attribute":[2430],"wp_get_shortlink":[2432],"esc_url":[2435]},"used_by":[]},"wp_unregister_GLOBALS":{"doc":"\/**\n * Turn register globals off.\n *\n * @access private\n * @since 2.1.0\n * @return null Will return null if register_globals PHP directive was disabled\n *\/","file":"load.php","line":17,"missingDoc":false,"filters":[],"uses":{"ini_get":[18],"array_merge":[27],"is_array":[27],"in_array":[29]},"used_by":[]},"wp_fix_server_vars":{"doc":"\/**\n * Fix $_SERVER variables for various setups.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":41,"missingDoc":false,"filters":[],"uses":{"array_merge":[49],"php_sapi_name":[52],"preg_match":[52],"strpos":[82,86],"strlen":[82],"preg_replace":[92]},"used_by":[]},"wp_check_php_mysql_versions":{"doc":"\/**\n * Check for the required PHP version, and the MySQL extension or a database drop-in.\n *\n * Dies if requirements are not met.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":103,"missingDoc":false,"filters":[],"uses":{"phpversion":[105],"wp_load_translations_early":[107,112],"sprintf":[108],"__":[108,113],"version_compare":[106],"extension_loaded":[111],"file_exists":[111]},"used_by":[]},"wp_favicon_request":{"doc":"\/**\n * Don't load all of WordPress when handling a favicon.ico request.\n * Instead, send the headers for a zero-length favicon and bail.\n *\n * @since 3.0.0\n *\/","file":"load.php","line":123,"missingDoc":false,"filters":[],"uses":{"header":[125,126]},"used_by":[]},"wp_maintenance":{"doc":"\/**\n * Dies with a maintenance message when conditions are met.\n *\n * Checks for a file in the WordPress root directory named \".maintenance\".\n * This file will contain the variable $upgrading, set to the time the file\n * was created. If the file was created less than 10 minutes ago, WordPress\n * enters maintenance mode and displays a message.\n *\n * The default message can be replaced by using a drop-in (maintenance.php in\n * the wp-content directory).\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":145,"missingDoc":false,"filters":[],"uses":{"file_exists":[146,156],"defined":[146],"time":[153],"wp_load_translations_early":[161],"header":[166,167,168],"is_rtl":[171],"_e":[174,178]},"used_by":[]},"timer_start":{"doc":"\/**\n * PHP 5 standard microtime start capture.\n *\n * @access private\n * @since 0.71\n * @global float $timestart Seconds from when function is called.\n * @return bool Always returns true.\n *\/","file":"load.php","line":193,"missingDoc":false,"filters":[],"uses":{"microtime":[195]},"used_by":{"wpdb::query":[1193]}},"timer_stop":{"doc":"\/**\n * Return and\/or display the time from the page start to when function is called.\n *\n * You can get the results and print them by doing:\n * <code>\n * $nTimePageTookToExecute = timer_stop();\n * echo $nTimePageTookToExecute;\n * <\/code>\n *\n * Or instead, you can do:\n * <code>\n * timer_stop(1);\n * <\/code>\n * which will do what the above does. If you need the result, you can assign it to a variable, but\n * in most cases, you only need to echo it.\n *\n * @since 0.71\n * @global float $timestart Seconds from when timer_start() is called\n * @global float $timeend Seconds from when function is called\n *\n * @param int $display Use '0' or null to not echo anything and 1 to echo the total time\n * @param int $precision The amount of digits from the right of the decimal to display. Default is 3.\n * @return float The \"second.microsecond\" finished time calculation\n *\/","file":"load.php","line":223,"missingDoc":false,"filters":[],"uses":{"microtime":[225],"function_exists":[227],"number_format_i18n":[227],"number_format":[227]},"used_by":{"__main":[118,20],"wpdb::query":[1199]}},"wp_debug_mode":{"doc":"\/**\n * Sets PHP error handling and handles WordPress debug mode.\n *\n * Uses three constants: WP_DEBUG, WP_DEBUG_DISPLAY, and WP_DEBUG_LOG. All three can be\n * defined in wp-config.php. Example: <code> define( 'WP_DEBUG', true ); <\/code>\n *\n * WP_DEBUG_DISPLAY and WP_DEBUG_LOG perform no function unless WP_DEBUG is true.\n * WP_DEBUG defaults to false.\n *\n * When WP_DEBUG is true, all PHP notices are reported. WordPress will also display\n * notices, including one when a deprecated WordPress function, function argument,\n * or file is used. Deprecated code may be removed from a later version.\n *\n * It is strongly recommended that plugin and theme developers use WP_DEBUG in their\n * development environments.\n *\n * When WP_DEBUG_DISPLAY is true, WordPress will force errors to be displayed.\n * WP_DEBUG_DISPLAY defaults to true. Defining it as null prevents WordPress from\n * changing the global configuration setting. Defining WP_DEBUG_DISPLAY as false\n * will force errors to be hidden.\n *\n * When WP_DEBUG_LOG is true, errors will be logged to wp-content\/debug.log.\n * WP_DEBUG_LOG defaults to false.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":260,"missingDoc":false,"filters":[],"uses":{"error_reporting":[265,267,279],"defined":[264],"ini_set":[270,272,275,276]},"used_by":[]},"wp_set_lang_dir":{"doc":"\/**\n * Sets the location of the language directory.\n *\n * To set directory manually, define <code>WP_LANG_DIR<\/code> in wp-config.php.\n *\n * If the language directory exists within WP_CONTENT_DIR, that is used.\n * Otherwise if the language directory exists within WPINC, that's used.\n * Finally, if neither of the preceding directories are found,\n * WP_CONTENT_DIR\/languages is used.\n *\n * The WP_LANG_DIR constant was introduced in 2.1.0.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":298,"missingDoc":false,"filters":[],"uses":{"define":[301,304,307,310],"defined":[302,308,299],"file_exists":[300],"is_dir":[300,300]},"used_by":[]},"require_wp_db":{"doc":"\/**\n * Load the correct database class file.\n *\n * This function is used to load the database class file either at runtime or by\n * wp-admin\/setup-config.php. We must globalize $wpdb to ensure that it is\n * defined globally by the inline code in wp-db.php.\n *\n * @since 2.5.0\n * @global $wpdb WordPress Database Object\n *\/","file":"load.php","line":326,"missingDoc":false,"filters":[],"uses":{"file_exists":[330]},"used_by":[]},"wp_set_wpdb_vars":{"doc":"\/**\n * Sets the database table prefix and the format specifiers for database table columns.\n *\n * Columns not listed here default to %s.\n *\n * @see wpdb::$field_types Since 2.8.0\n * @see wpdb::prepare()\n * @see wpdb::insert()\n * @see wpdb::update()\n * @see wpdb::set_prefix()\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":353,"missingDoc":false,"filters":[],"uses":{"dead_db":[356],"set_prefix":[366],"wp_load_translations_early":[369],"wp_die":[370],"__":[370],"is_wp_error":[368]},"used_by":[]},"wp_start_object_cache":{"doc":"\/**\n * Starts the WordPress object cache.\n *\n * If an object-cache.php file exists in the wp-content directory,\n * it uses that drop-in as an external object cache.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":383,"missingDoc":false,"filters":[],"uses":{"file_exists":[388,396],"function_exists":[387,406,411],"wp_cache_switch_to_blog":[407],"wp_cache_init":[409],"wp_cache_add_global_groups":[412],"wp_cache_add_non_persistent_groups":[413]},"used_by":{"__main":[133]}},"wp_not_installed":{"doc":"\/**\n * Redirects to the installer if WordPress is not installed.\n *\n * Dies with an error message when multisite is enabled.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":425,"missingDoc":false,"filters":[],"uses":{"wp_die":[428],"__":[428],"is_blog_installed":[427,429],"defined":[427,429],"strpos":[429],"wp_guess_url":[431],"wp_redirect":[436],"is_multisite":[426]},"used_by":[]},"wp_get_mu_plugins":{"doc":"\/**\n * Returns array of must-use plugin files to be included in global scope.\n *\n * The default directory is wp-content\/mu-plugins. To change the default directory\n * manually, define <code>WPMU_PLUGIN_DIR<\/code> and <code>WPMU_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.0.0\n * @return array Files to include\n *\/","file":"load.php","line":452,"missingDoc":false,"filters":[],"uses":{"is_dir":[454],"opendir":[456],"readdir":[458],"substr":[459],"closedir":[462],"sort":[463]},"used_by":[]},"wp_get_active_and_valid_plugins":{"doc":"\/**\n * Returns array of plugin files to be included in global scope.\n *\n * The default directory is wp-content\/plugins. To change the default directory\n * manually, define <code>WP_PLUGIN_DIR<\/code> and <code>WP_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.0.0\n * @return array Files to include\n *\/","file":"load.php","line":479,"missingDoc":false,"filters":[],"uses":{"get_option":[481,484],"_deprecated_file":[485],"array_unshift":[486],"file_exists":[484,497],"defined":[489],"is_multisite":[492],"wp_get_active_network_plugins":[492],"validate_file":[495],"substr":[496],"in_array":[499]},"used_by":[]},"wp_get_active_network_plugins":{"doc":"\/**\n * Returns array of network plugin files to be included in global scope.\n *\n * The default directory is wp-content\/plugins. To change the default directory\n * manually, define <code>WP_PLUGIN_DIR<\/code> and <code>WP_PLUGIN_URL<\/code>\n * in wp-config.php.\n *\n * @access private\n * @since 3.1.0\n * @return array Files to include\n *\/","file":"ms-load.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_site_option":[40],"array_keys":[45],"sort":[46],"validate_file":[49],"substr":[50],"file_exists":[51]},"used_by":{"wp_get_active_and_valid_plugins":[492]}},"wp_set_internal_encoding":{"doc":"\/**\n * Sets internal encoding using mb_internal_encoding().\n *\n * In most cases the default internal encoding is latin1, which is of no use,\n * since we want to use the mb_ functions for utf-8 strings.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":515,"missingDoc":false,"filters":[],"uses":{"mb_internal_encoding":[518,517],"get_option":[517],"function_exists":[516]},"used_by":[]},"wp_magic_quotes":{"doc":"\/**\n * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.\n *\n * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,\n * or $_ENV are needed, use those superglobals directly.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"load.php","line":531,"missingDoc":false,"filters":[],"uses":{"stripslashes_deep":[534,535,536],"get_magic_quotes_gpc":[533],"add_magic_quotes":[540,541,542,543],"array_merge":[546]},"used_by":[]},"shutdown_action_hook":{"doc":"\/**\n * Runs just before PHP shuts down execution.\n *\n * @access private\n * @since 1.2.0\n *\/","file":"load.php","line":555,"missingDoc":false,"filters":["'shutdown'"],"uses":{"wp_cache_close":[557]},"used_by":[]},"wp_clone":{"doc":"\/**\n * Copy an object.\n *\n * @since 2.7.0\n * @deprecated 3.2\n *\n * @param object $object The object to clone\n * @return object The cloned object\n *\/","file":"load.php","line":570,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::init":{"doc":"\/**\n * Sets up the translated strings and object properties.\n *\n * The method creates the translatable strings for various\n * calendar elements. Which allows for specifying locale\n * specific calendar names and text direction.\n *\n * @since 2.1.0\n * @access private\n *\/","file":"locale.php","line":97,"missingDoc":false,"filters":[],"uses":{"__":[99,100,101,102,103,104,105,109,109,110,110,111,111,112,112,113,113,114,114,115,115,122,122,123,123,124,124,125,125,126,126,127,127,128,128,131,132,133,134,135,136,137,138,139,140,141,142,146,146,147,147,148,148,149,149,150,150,151,151,152,152,153,153,154,154,155,155,156,156,157,157,164,165,166,167,173,177],"preg_replace":[118,160],"_x":[184]},"used_by":[]},"WP_Locale::get_weekday":{"doc":"\/**\n * Retrieve the full translated weekday word.\n *\n * Week starts on translated Sunday and can be fetched\n * by using 0 (zero). So the week starts with 0 (zero)\n * and ends on Saturday with is fetched by using 6 (six).\n *\n * @since 2.1.0\n * @access public\n *\n * @param int $weekday_number 0 for Sunday through 6 Saturday\n * @return string Full translated weekday\n *\/","file":"locale.php","line":201,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_weekday_initial":{"doc":"\/**\n * Retrieve the translated weekday initial.\n *\n * The weekday initial is retrieved by the translated\n * full weekday word. When translating the weekday initial\n * pay attention to make sure that the starting letter does\n * not conflict.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $weekday_name\n * @return string\n *\/","file":"locale.php","line":219,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_weekday_abbrev":{"doc":"\/**\n * Retrieve the translated weekday abbreviation.\n *\n * The weekday abbreviation is retrieved by the translated\n * full weekday word.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $weekday_name Full translated weekday word\n * @return string Translated weekday abbreviation\n *\/","file":"locale.php","line":235,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_month":{"doc":"\/**\n * Retrieve the full translated month by month number.\n *\n * The $month_number parameter has to be a string\n * because it must have the '0' in front of any number\n * that is less than 10. Starts from '01' and ends at\n * '12'.\n *\n * You can use an integer instead and it will add the\n * '0' before the numbers less than 10 for you.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string|int $month_number '01' through '12'\n * @return string Translated full month name\n *\/","file":"locale.php","line":256,"missingDoc":false,"filters":[],"uses":{"zeroise":[257]},"used_by":[]},"WP_Locale::get_month_abbrev":{"doc":"\/**\n * Retrieve translated version of month abbreviation string.\n *\n * The $month_name parameter is expected to be the translated or\n * translatable version of the month.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $month_name Translated month to get abbreviated version\n * @return string Translated abbreviated month\n *\/","file":"locale.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::get_meridiem":{"doc":"\/**\n * Retrieve translated version of meridiem string.\n *\n * The $meridiem parameter is expected to not be translated.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $meridiem Either 'am', 'pm', 'AM', or 'PM'. Not translated version.\n * @return string Translated version\n *\/","file":"locale.php","line":287,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::register_globals":{"doc":"\/**\n * Global variables are deprecated. For backwards compatibility only.\n *\n * @deprecated For backwards compatibility only.\n * @access private\n *\n * @since 2.1.0\n *\/","file":"locale.php","line":299,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Locale::__construct":{"doc":"\/**\n * Constructor which calls helper methods to set up object variables\n *\n * @uses WP_Locale::init()\n * @uses WP_Locale::register_globals()\n * @since 2.1.0\n *\n * @return WP_Locale\n *\/","file":"locale.php","line":316,"missingDoc":false,"filters":[],"uses":{"init":[317],"register_globals":[318]},"used_by":[]},"WP_Locale::is_rtl":{"doc":"\/**\n * Checks if current locale is RTL.\n *\n * @since 3.0.0\n * @return bool Whether locale is RTL.\n *\/","file":"locale.php","line":327,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_print_media_templates":{"doc":"\/**\n * Prints the templates used in the media manager.\n *\n * @since 3.5.0\n *\/","file":"media-template.php","line":15,"missingDoc":false,"filters":["'upload_ui_over_quota'","'pre-upload-ui'","'pre-plupload-upload-ui'","'post-plupload-upload-ui'","'post-plupload-upload-ui'","'post-upload-ui'","'image_size_names_choose'","'disable_captions'","'print_media_templates'"],"uses":{"strpos":[18],"esc_attr_e":[32,160,164,166,168,267,270,273,276,292,295,298,301,351,354,405,408,411,414,423,426,429],"_e":[40,51,53,58,59,110,111,125,148,152,176,203,204,209,222,226,231,236,245,248,255,259,284,310,340,343,360,372,379,391,397,402,420],"is_multisite":[52],"is_upload_space_available":[52],"add_action":[71],"remove_action":[69],"wp_max_upload_size":[76],"count":[79],"printf":[93,99],"__":[93,99,319,320,321,322],"esc_html":[93,93,330,365],"admin_url":[97],"_device_can_upload":[50],"esc_html_e":[180],"esc_js":[327],"esc_attr":[329,364],"selected":[329,364]},"used_by":[]},"is_upload_space_available":{"doc":"\/**\n * Determines if there is any upload space left in the current blog's quota.\n *\n * @since 3.0.0\n * @return bool True if space is available, false otherwise.\n *\/","file":"ms-functions.php","line":1998,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1999],"get_upload_space_available":[2002]},"used_by":{"wp_print_media_templates":[52],"wp_plupload_default_settings":[1290]}},"wp_max_upload_size":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.5.0\n *\n * @return unknown\n *\/","file":"media.php","line":1146,"missingDoc":false,"filters":["'upload_size_limit'"],"uses":{"wp_convert_hr_to_bytes":[1147,1148],"ini_get":[1147,1148],"min":[1149]},"used_by":{"wp_print_media_templates":[76],"wp_plupload_default_settings":[1254]}},"image_constrain_size_for_editor":{"doc":"\/**\n * Scale down the default size of an image.\n *\n * This is so that the image is a better fit for the editor and theme.\n *\n * The $size parameter accepts either an array or a string. The supported string\n * values are 'thumb' or 'thumbnail' for the given thumbnail size or defaults at\n * 128 width and 96 height in pixels. Also supported for the string value is\n * 'medium' and 'full'. The 'full' isn't actually supported, but any value other\n * than the supported will result in the content_width size or 500 if that is\n * not set.\n *\n * Finally, there is a filter named 'editor_max_image_size', that will be called\n * on the calculated array for width and height, respectively. The second\n * parameter will be the value that was in the $size parameter. The returned\n * type for the hook is an array with the width as the first element and the\n * height as the second element.\n *\n * @since 2.5.0\n * @uses wp_constrain_dimensions() This function passes the widths and the heights.\n *\n * @param int $width Width of the image\n * @param int $height Height of the image\n * @param string|array $size Size of what the result image should be.\n * @param context Could be 'display' (like in a theme) or 'edit' (like inserting into an editor)\n * @return array Width and height of what the result image should resize to.\n *\/","file":"media.php","line":36,"missingDoc":false,"filters":["'editor_max_image_size'"],"uses":{"is_admin":[40],"intval":[47,48,56,57,65,66,68,67,70,71,73,72],"get_option":[47,48,56,57,65,66],"min":[68,73],"count":[69],"in_array":[69],"array_keys":[69],"is_array":[42],"wp_constrain_dimensions":[83]},"used_by":{"image_downsize":[175],"image_get_intermediate_size":[442,462],"wp_prepare_attachment_for_js":[1395]}},"wp_constrain_dimensions":{"doc":"\/**\n * Calculates the new dimensions for a downsampled image.\n *\n * If either width or height are empty, no constraint is applied on\n * that dimension.\n *\n * @since 2.5.0\n *\n * @param int $current_width Current width of the image.\n * @param int $current_height Current height of the image.\n * @param int $max_width Optional. Maximum wanted width.\n * @param int $max_height Optional. Maximum wanted height.\n * @return array First item is the width, the second item is the height.\n *\/","file":"media.php","line":259,"missingDoc":false,"filters":[],"uses":{"min":[277],"max":[278],"intval":[280,280,287,288]},"used_by":{"image_constrain_size_for_editor":[83],"image_resize_dimensions":[361],"wp_expand_dimensions":[1002]}},"image_hwstring":{"doc":"\/**\n * Retrieve width and height attributes using given width and height values.\n *\n * Both attributes are required in the sense that both parameters must have a\n * value, but are optional in that if you set them to false or null, then they\n * will not be added to the returned string.\n *\n * You can set the value using a string, but it will only take numeric values.\n * If you wish to put 'px' after the numbers, then it will be stripped out of\n * the return.\n *\n * @since 2.5.0\n *\n * @param int|string $width Optional. Width attribute value.\n * @param int|string $height Optional. Height attribute value.\n * @return string HTML attributes for width and, or height.\n *\/","file":"media.php","line":103,"missingDoc":false,"filters":[],"uses":{"intval":[106,108]},"used_by":{"get_image_tag":[231],"wp_get_attachment_image":[550]}},"wp_get_attachment_thumb_file":{"doc":"\/**\n * Retrieve thumbnail for an attachment.\n *\n * @since 2.1.0\n *\n * @param int $post_id Attachment ID.\n * @return mixed False on failure. Thumbnail file path on success.\n *\/","file":"post.php","line":4247,"missingDoc":false,"filters":["'wp_get_attachment_thumb_file'"],"uses":{"get_post":[4249],"is_array":[4251],"wp_get_attachment_metadata":[4251],"get_attached_file":[4254],"str_replace":[4256],"basename":[4256],"file_exists":[4256]},"used_by":{"image_downsize":[160],"wp_get_attachment_thumb_url":[4280]}},"image_get_intermediate_size":{"doc":"\/**\n * Retrieve the image's intermediate size (resized) path, width, and height.\n *\n * The $size parameter can be an array with the width and height respectively.\n * If the size matches the 'sizes' metadata array for width and height, then it\n * will be used. If there is no direct match, then the nearest image size larger\n * than the specified size will be used. If nothing is found, then the function\n * will break out and return false.\n *\n * The metadata 'sizes' is used for compatible sizes that can be used for the\n * parameter $size value.\n *\n * The url path will be given, when the $size parameter is a string.\n *\n * If you are passing an array for the $size, you should consider using\n * add_image_size() so that a cropped version is generated. It's much more\n * efficient than having to find the closest-sized image and then having the\n * browser scale down the image.\n *\n * @since 2.5.0\n * @see add_image_size()\n *\n * @param int $post_id Attachment ID for image.\n * @param array|string $size Optional, default is 'thumbnail'. Size of image, either array or string.\n * @return bool|array False on failure or array of file path, width, and height on success.\n *\/","file":"media.php","line":432,"missingDoc":false,"filters":[],"uses":{"is_array":[433,437,469],"wp_get_attachment_metadata":[433],"image_constrain_size_for_editor":[442,462],"compact":[443,463],"ksort":[450],"image_resize_dimensions":[456],"wp_get_attachment_url":[475],"path_join":[476,477],"dirname":[476,477]},"used_by":{"image_downsize":[152],"wp_delete_attachment":[4097]}},"add_image_size":{"doc":"\/**\n * Registers a new image size\n *\n * @since 2.9.0\n *\/","file":"media.php","line":188,"missingDoc":false,"filters":[],"uses":{"absint":[190,190]},"used_by":{"set_post_thumbnail_size":[199]}},"set_post_thumbnail_size":{"doc":"\/**\n * Registers an image size for the post thumbnail\n *\n * @since 2.9.0\n *\/","file":"media.php","line":198,"missingDoc":false,"filters":[],"uses":{"add_image_size":[199]},"used_by":[]},"get_image_tag":{"doc":"\/**\n * An <img src \/> tag for an image attachment, scaling it down if requested.\n *\n * The filter 'get_image_tag_class' allows for changing the class name for the\n * image without having to use regular expressions on the HTML content. The\n * parameters are: what WordPress will use for the class, the Attachment ID,\n * image align value, and the size the image should be.\n *\n * The second filter 'get_image_tag' has the HTML content, which can then be\n * further manipulated by a plugin to change all attribute values and even HTML\n * content.\n *\n * @since 2.5.0\n *\n * @uses apply_filters() The 'get_image_tag_class' filter is the IMG element\n *\t\tclass attribute.\n * @uses apply_filters() The 'get_image_tag' filter is the full IMG element with\n *\t\tall attributes.\n *\n * @param int $id Attachment ID.\n * @param string $alt Image Description for the alt attribute.\n * @param string $title Image Description for the title attribute.\n * @param string $align Part of the class name for aligning the image.\n * @param string $size Optional. Default is 'medium'.\n * @return string HTML IMG element for given image attachment\n *\/","file":"media.php","line":228,"missingDoc":false,"filters":["'get_image_tag_class'","'get_image_tag'"],"uses":{"image_downsize":[230],"image_hwstring":[231],"esc_attr":[233,235,235,238,238]},"used_by":[]},"image_make_intermediate_size":{"doc":"\/**\n * Resize an image to make a thumbnail or intermediate size.\n *\n * The returned array has the file size, the image width, and image height. The\n * filter 'image_make_intermediate_size' can be used to hook in and change the\n * values of the returned array. The only parameter is the resized file path.\n *\n * @since 2.5.0\n *\n * @param string $file File path.\n * @param int $width Image width.\n * @param int $height Image height.\n * @param bool $crop Optional, default is false. Whether to crop image to specified height and width or resize.\n * @return bool|array False, if no image was created. Metadata array on success.\n *\/","file":"media.php","line":389,"missingDoc":false,"filters":[],"uses":{"wp_get_image_editor":[391],"is_wp_error":[393,393,398],"resize":[393],"save":[396]},"used_by":[]},"get_intermediate_image_sizes":{"doc":"\/**\n * Get the available image sizes\n * @since 3.0.0\n * @return array Returns a filtered array of image size strings\n *\/","file":"media.php","line":487,"missingDoc":false,"filters":["'intermediate_image_sizes'"],"uses":{"array_merge":[491],"array_keys":[491],"count":[490]},"used_by":{"wp_delete_attachment":[4096]}},"wp_get_attachment_image_src":{"doc":"\/**\n * Retrieve an image to represent an attachment.\n *\n * A mime icon for files, thumbnail or intermediate size for images.\n *\n * @since 2.5.0\n *\n * @param int $attachment_id Image attachment ID.\n * @param string $size Optional, default is 'thumbnail'.\n * @param bool $icon Optional, default is false. Whether it is an icon.\n * @return bool|array Returns an array (url, width, height), or false, if no image is available.\n *\/","file":"media.php","line":508,"missingDoc":false,"filters":["'icon_dir'"],"uses":{"image_downsize":[511],"wp_basename":[518],"getimagesize":[519],"wp_mime_type_icon":[516]},"used_by":{"wp_get_attachment_image":[547]}},"wp_get_attachment_image":{"doc":"\/**\n * Get an HTML img element representing an image attachment\n *\n * While $size will accept an array, it is better to register a size with\n * add_image_size() so that a cropped version is generated. It's much more\n * efficient than having to find the closest-sized image and then having the\n * browser scale down the image.\n *\n * @see add_image_size()\n * @uses apply_filters() Calls 'wp_get_attachment_image_attributes' hook on attributes array\n * @uses wp_get_attachment_image_src() Gets attachment file URL and dimensions\n * @since 2.5.0\n *\n * @param int $attachment_id Image attachment ID.\n * @param string $size Optional, default is 'thumbnail'.\n * @param bool $icon Optional, default is false. Whether it is an icon.\n * @return string HTML img element or empty string on failure.\n *\/","file":"media.php","line":544,"missingDoc":false,"filters":["'wp_get_attachment_image_attributes'"],"uses":{"wp_get_attachment_image_src":[547],"image_hwstring":[550],"join":[552],"is_array":[551],"get_post":[553],"trim":[557,560,562],"strip_tags":[557,560,562],"get_post_meta":[557],"wp_parse_args":[564],"array_map":[566],"rtrim":[567]},"used_by":{"wp_get_attachment_link":[1176],"get_the_post_thumbnail":[93],"set_post_thumbnail":[5380]}},"_wp_post_thumbnail_class_filter":{"doc":"\/**\n * Adds a 'wp-post-image' class to post thumbnails\n * Uses the begin_fetch_post_thumbnail_html and end_fetch_post_thumbnail_html action hooks to\n * dynamically add\/remove itself so as to only filter post thumbnails\n *\n * @since 2.9.0\n * @param array $attr Attributes including src, class, alt, title\n * @return array\n *\/","file":"media.php","line":586,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_wp_post_thumbnail_class_filter_add":{"doc":"\/**\n * Adds _wp_post_thumbnail_class_filter to the wp_get_attachment_image_attributes filter\n *\n * @since 2.9.0\n *\/","file":"media.php","line":596,"missingDoc":false,"filters":[],"uses":{"add_filter":[597]},"used_by":[]},"_wp_post_thumbnail_class_filter_remove":{"doc":"\/**\n * Removes _wp_post_thumbnail_class_filter from the wp_get_attachment_image_attributes filter\n *\n * @since 2.9.0\n *\/","file":"media.php","line":605,"missingDoc":false,"filters":[],"uses":{"remove_filter":[606]},"used_by":[]},"img_caption_shortcode":{"doc":"\/**\n * The Caption shortcode.\n *\n * Allows a plugin to replace the content that would otherwise be returned. The\n * filter is 'img_caption_shortcode' and passes an empty string, the attr\n * parameter and the content parameter values.\n *\n * The supported attributes for the shortcode are 'id', 'align', 'width', and\n * 'caption'.\n *\n * @since 2.6.0\n *\n * @param array $attr Attributes attributed to the shortcode.\n * @param string $content Optional. Shortcode content.\n * @return string\n *\/","file":"media.php","line":628,"missingDoc":false,"filters":["'img_caption_shortcode'"],"uses":{"trim":[633],"preg_match":[631],"extract":[642],"shortcode_atts":[642],"esc_attr":[652,654],"do_shortcode":[655]},"used_by":[]},"shortcode_atts":{"doc":"\/**\n * Combine user attributes with known attributes and fill in defaults when needed.\n *\n * The pairs should be considered to be all of the attributes which are\n * supported by the caller and given as a list. The returned attributes will\n * only contain the attributes in the $pairs list.\n *\n * If the $atts list has unsupported attributes, then they will be ignored and\n * removed from the final returned list.\n *\n * @since 2.5\n *\n * @param array $pairs Entire list of supported attributes and their defaults.\n * @param array $atts User defined attributes in shortcode tag.\n * @return array Combined and filtered attribute list.\n *\/","file":"shortcodes.php","line":294,"missingDoc":false,"filters":[],"uses":{"array_key_exists":[298]},"used_by":{"img_caption_shortcode":[642],"gallery_shortcode":[696]}},"gallery_shortcode":{"doc":"\/**\n * The Gallery shortcode.\n *\n * This implements the functionality of the Gallery Shortcode for displaying\n * WordPress images on a post.\n *\n * @since 2.5.0\n *\n * @param array $attr Attributes of the shortcode.\n * @return string HTML content to display gallery.\n *\/","file":"media.php","line":671,"missingDoc":false,"filters":["'post_gallery'","'use_default_gallery_style'","'gallery_style'"],"uses":{"get_post":[672],"sanitize_sql_orderby":[691],"extract":[696],"shortcode_atts":[696],"intval":[709,738],"get_posts":[714],"get_children":[721,723],"wp_get_attachment_link":[732,771,771],"is_feed":[729],"tag_escape":[736,737],"floor":[739],"is_rtl":[740],"sanitize_html_class":[765],"wptexturize":[781],"trim":[778]},"used_by":[]},"get_children":{"doc":"\/**\n * Retrieve all children of the post parent ID.\n *\n * Normally, without any enhancements, the children would apply to pages. In the\n * context of the inner workings of WordPress, pages, posts, and attachments\n * share the same table, so therefore the functionality could apply to any one\n * of them. It is then noted that while this function does not work on posts, it\n * does not mean that it won't work on posts. It is recommended that you know\n * what context you wish to retrieve the children of.\n *\n * Attachments may also be made the child of a post, so if that is an accurate\n * statement (which needs to be verified), it would then be possible to get\n * all of the attachments for a post. Attachments have since changed since\n * version 2.5, so this is most likely unaccurate, but serves generally as an\n * example of what is possible.\n *\n * The arguments listed as defaults are for this function and also of the\n * {@link get_posts()} function. The arguments are combined with the\n * get_children defaults and are then passed to the {@link get_posts()}\n * function, which accepts additional arguments. You can replace the defaults in\n * this function, listed below and the additional arguments listed in the\n * {@link get_posts()} function.\n *\n * The 'post_parent' is the most important argument and important attention\n * needs to be paid to the $args parameter. If you pass either an object or an\n * integer (number), then just the 'post_parent' is grabbed and everything else\n * is lost. If you don't specify any arguments, then it is assumed that you are\n * in The Loop and the post parent will be grabbed for from the current post.\n *\n * The 'post_parent' argument is the ID to get the children. The 'numberposts'\n * is the amount of posts to retrieve that has a default of '-1', which is\n * used to get all of the posts. Giving a number higher than 0 will only\n * retrieve that amount of posts.\n *\n * The 'post_type' and 'post_status' arguments can be used to choose what\n * criteria of posts to retrieve. The 'post_type' can be anything, but WordPress\n * post types are 'post', 'pages', and 'attachments'. The 'post_status'\n * argument will accept any post status within the write administration panels.\n *\n * @see get_posts() Has additional arguments that can be replaced.\n * @internal Claims made in the long description might be inaccurate.\n *\n * @since 2.0.0\n *\n * @param mixed $args Optional. User defined arguments for replacing the defaults.\n * @param string $output Optional. Constant for return type, either OBJECT (default), ARRAY_A, ARRAY_N.\n * @return array|bool False on failure and the type will be determined by $output parameter.\n *\/","file":"post.php","line":290,"missingDoc":false,"filters":[],"uses":{"is_object":[298],"is_numeric":[300],"wp_parse_args":[309],"get_posts":[311],"update_post_cache":[316],"get_object_vars":[325,329],"array_values":[329]},"used_by":{"gallery_shortcode":[721,723],"adjacent_image_link":[831],"wp_get_post_revisions":[5221]}},"wp_get_attachment_link":{"doc":"\/**\n * Retrieve an attachment page link using an image or icon, if possible.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'wp_get_attachment_link' filter on HTML content with same parameters as function.\n *\n * @param int $id Optional. Post ID.\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string.\n * @param bool $permalink Optional, default is false. Whether to add permalink to image.\n * @param bool $icon Optional, default is false. Whether to include icon.\n * @param string|bool $text Optional, default is false. If string, then will be link text.\n * @return string HTML content.\n *\/","file":"post-template.php","line":1161,"missingDoc":false,"filters":["'wp_get_attachment_link'"],"uses":{"intval":[1162],"get_post":[1163],"__":[1166],"wp_get_attachment_url":[1165],"get_attachment_link":[1169],"esc_attr":[1171],"wp_get_attachment_image":[1176],"trim":[1180]},"used_by":{"gallery_shortcode":[732,771,771],"adjacent_image_link":[842],"the_attachment_link":[1143,1145],"prepend_attachment":[1203]}},"previous_image_link":{"doc":"\/**\n * Display previous image link that has the same post parent.\n *\n * @since 2.5.0\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text;\n * @param string $text Optional, default is false. If included, link will reflect $text variable.\n * @return string HTML content.\n *\/","file":"media.php","line":804,"missingDoc":false,"filters":[],"uses":{"adjacent_image_link":[805]},"used_by":[]},"adjacent_image_link":{"doc":"\/**\n * Display next or previous image link that has the same post parent.\n *\n * Retrieves the current attachment object from the $post global.\n *\n * @since 2.5.0\n *\n * @param bool $prev Optional. Default is true to display previous link, false for next.\n *\/","file":"media.php","line":829,"missingDoc":false,"filters":["\"{$adjacent}_image_link\""],"uses":{"get_post":[830],"array_values":[831],"get_children":[831],"wp_get_attachment_link":[842]},"used_by":{"previous_image_link":[805],"next_image_link":[817]}},"next_image_link":{"doc":"\/**\n * Display next image link that has the same post parent.\n *\n * @since 2.5.0\n * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text;\n * @param string $text Optional, default is false. If included, link will reflect $text variable.\n * @return string HTML content.\n *\/","file":"media.php","line":816,"missingDoc":false,"filters":[],"uses":{"adjacent_image_link":[817]},"used_by":[]},"get_attachment_taxonomies":{"doc":"\/**\n * Retrieve taxonomies attached to the attachment.\n *\n * @since 2.5.0\n *\n * @param int|array|object $attachment Attachment ID, Attachment data array, or Attachment data object.\n * @return array Empty array on failure. List of taxonomies on success.\n *\/","file":"media.php","line":857,"missingDoc":false,"filters":[],"uses":{"get_post":[859],"is_array":[860],"is_int":[858],"is_object":[863],"basename":[866],"substr":[871],"strrpos":[871],"strpos":[870,874],"explode":[875],"array_merge":[883],"get_object_taxonomies":[882],"array_unique":[885]},"used_by":{"get_object_taxonomies":[170]}},"get_taxonomies_for_attachments":{"doc":"\/**\n * Return all of the taxonomy names that are registered for attachments.\n *\n * Handles mime-type-specific taxonomies such as attachment:image and attachment:video.\n *\n * @since 3.5.0\n * @see get_attachment_taxonomies()\n * @uses get_taxonomies()\n *\n * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default.\n * @return array The names of all taxonomy of $object_type.\n *\/","file":"media.php","line":900,"missingDoc":false,"filters":[],"uses":{"strpos":[904],"get_taxonomies":[902]},"used_by":{"WP_Query::get_posts":[2227]}},"wp_embed_register_handler":{"doc":"\/**\n * Register an embed handler. This function should probably only be used for sites that do not support oEmbed.\n *\n * @since 2.9.0\n * @see WP_Embed::register_handler()\n *\/","file":"media.php","line":942,"missingDoc":false,"filters":[],"uses":{"register_handler":[944]},"used_by":{"wp_maybe_load_embeds":[1076]}},"wp_embed_unregister_handler":{"doc":"\/**\n * Unregister a previously registered embed handler.\n *\n * @since 2.9.0\n * @see WP_Embed::unregister_handler()\n *\/","file":"media.php","line":953,"missingDoc":false,"filters":[],"uses":{"unregister_handler":[955]},"used_by":[]},"wp_expand_dimensions":{"doc":"\/**\n * Based on a supplied width\/height example, return the biggest possible dimensions based on the max width\/height.\n *\n * @since 2.9.0\n * @uses wp_constrain_dimensions() This function passes the widths and the heights.\n *\n * @param int $example_width The width of an example embed.\n * @param int $example_height The height of an example embed.\n * @param int $max_width The maximum allowed width.\n * @param int $max_height The maximum allowed height.\n * @return array The maximum possible width and height based on the example ratio.\n *\/","file":"media.php","line":996,"missingDoc":false,"filters":[],"uses":{"wp_constrain_dimensions":[1002]},"used_by":{"wp_embed_handler_googlevideo":[1097]}},"wp_oembed_add_provider":{"doc":"\/**\n * Adds a URL format and oEmbed provider URL pair.\n *\n * @since 2.9.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n *\n * @param string $format The format of URL that this provider can handle. You can use asterisks as wildcards.\n * @param string $provider The URL to the oEmbed provider.\n * @param boolean $regex Whether the $format parameter is in a regex format.\n *\/","file":"media.php","line":1036,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1038]},"used_by":[]},"wp_oembed_remove_provider":{"doc":"\/**\n * Removes an oEmbed provider.\n *\n * @since 3.5.0\n * @see WP_oEmbed\n *\n * @uses _wp_oembed_get_object()\n *\n * @param string $format The URL format for the oEmbed provider to remove.\n *\/","file":"media.php","line":1052,"missingDoc":false,"filters":[],"uses":{"_wp_oembed_get_object":[1055]},"used_by":[]},"wp_maybe_load_embeds":{"doc":"\/**\n * Determines if default embed handlers should be loaded.\n *\n * Checks to make sure that the embeds library hasn't already been loaded. If\n * it hasn't, then it will load the embeds library.\n *\n * @since 2.9.0\n *\/","file":"media.php","line":1073,"missingDoc":false,"filters":["'load_default_embeds'"],"uses":{"wp_embed_register_handler":[1076]},"used_by":[]},"wp_embed_handler_googlevideo":{"doc":"\/**\n * The Google Video embed handler callback. Google Video does not support oEmbed.\n *\n * @see WP_Embed::register_handler()\n * @see WP_Embed::shortcode()\n *\n * @param array $matches The regex matches from the provided regex when calling {@link wp_embed_register_handler()}.\n * @param array $attr Embed attributes.\n * @param string $url The original URL that was matched by the regex.\n * @param array $rawattr The original unmodified attributes.\n * @return string The embed HTML.\n *\/","file":"media.php","line":1091,"missingDoc":false,"filters":["'embed_googlevideo'"],"uses":{"wp_expand_dimensions":[1097],"esc_attr":[1100,1100,1100]},"used_by":[]},"wp_convert_hr_to_bytes":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.3.0\n *\n * @param unknown_type $size\n * @return unknown\n *\/","file":"media.php","line":1111,"missingDoc":false,"filters":[],"uses":{"strtolower":[1112],"intval":[1115,1117,1119],"strpos":[1116,1118,1114]},"used_by":{"wp_max_upload_size":[1147,1148]}},"wp_convert_bytes_to_hr":{"doc":"\/**\n * {@internal Missing Short Description}}\n *\n * @since 2.3.0\n *\n * @param unknown_type $bytes\n * @return unknown\n *\/","file":"media.php","line":1131,"missingDoc":false,"filters":[],"uses":{"log":[1133],"pow":[1135]},"used_by":[]},"_wp_image_editor_choose":{"doc":"\/**\n * Tests which editors are capable of supporting the request.\n *\n * @since 3.5.0\n * @access private\n *\n * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return string|bool Class name for the first editor that claims to support the request. False if no editor claims to support the request.\n *\/","file":"media.php","line":1212,"missingDoc":false,"filters":["'wp_image_editors'"],"uses":{"call_user_func":[1221,1225],"array_diff":[1232],"get_class_methods":[1232]},"used_by":{"wp_get_image_editor":[1175],"wp_image_editor_supports":[1200]}},"wp_image_editor_supports":{"doc":"\/**\n * Tests whether there is an editor that supports a given mime type or methods.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string|array $args Array of requirements. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} }\n * @return boolean true if an eligible editor is found; false otherwise\n *\/","file":"media.php","line":1199,"missingDoc":false,"filters":[],"uses":{"_wp_image_editor_choose":[1200]},"used_by":[]},"wp_plupload_default_settings":{"doc":"\/**\n * Prints default plupload arguments.\n *\n * @since 3.4.0\n *\/","file":"media.php","line":1247,"missingDoc":false,"filters":["'plupload_default_settings'","'plupload_default_params'"],"uses":{"get_data":[1250],"strpos":[1251],"wp_max_upload_size":[1254],"admin_url":[1261],"includes_url":[1262,1263],"__":[1264],"wp_is_mobile":[1271,1287],"wp_create_nonce":[1281],"_device_can_upload":[1288],"is_multisite":[1290],"is_upload_space_available":[1290],"json_encode":[1293],"add_data":[1298]},"used_by":{"wp_enqueue_media":[1544]}},"wp_prepare_attachment_for_js":{"doc":"\/**\n * Prepares an attachment post object for JS, where it is expected\n * to be JSON-encoded and fit into an Attachment model.\n *\n * @since 3.5.0\n *\n * @param mixed $attachment Attachment ID or object.\n * @return array Array of attachment details.\n *\/","file":"media.php","line":1311,"missingDoc":false,"filters":["'image_size_names_choose'","'image_downsize'","'wp_prepare_attachment_for_js'"],"uses":{"get_post":[1312],"wp_get_attachment_metadata":[1318],"explode":[1320],"strpos":[1319],"wp_get_attachment_url":[1324],"basename":[1329],"get_attachment_link":[1331],"get_post_meta":[1332],"strtotime":[1339,1340],"wp_mime_type_icon":[1345],"mysql2date":[1346],"get_option":[1346],"wp_create_nonce":[1355,1360],"get_edit_post_link":[1356],"current_user_can":[1354,1359],"__":[1365,1366,1367,1368],"str_replace":[1388],"wp_basename":[1388],"image_constrain_size_for_editor":[1395],"array_merge":[1413],"get_compat_media_markup":[1417],"function_exists":[1416]},"used_by":[]},"wp_enqueue_media":{"doc":"\/**\n * Enqueues all scripts, styles, settings, and templates necessary to use\n * all media JS APIs.\n *\n * @since 3.5.0\n *\/","file":"media.php","line":1428,"missingDoc":false,"filters":["'media_upload_tabs'","'disable_captions'","'media_view_settings'","'media_view_strings'","'wp_enqueue_media'"],"uses":{"did_action":[1431],"wp_parse_args":[1437],"get_option":[1453,1454,1455],"add_query_arg":[1460],"admin_url":[1460],"wp_list_pluck":[1461],"get_post_mime_types":[1461],"wp_create_nonce":[1464,1477],"get_post":[1474],"get_post_meta":[1481],"current_theme_supports":[1480],"post_type_supports":[1480],"is_post_type_hierarchical":[1486],"__":[1490,1491,1492,1493,1494,1499,1500,1503,1504,1507,1508,1509,1510,1511,1512,1513,1513,1514,1514,1515,1518,1521,1522,1525,1526,1527,1528,1529,1530,1531,1532],"wp_localize_script":[1540],"wp_enqueue_script":[1542],"wp_enqueue_style":[1543],"wp_plupload_default_settings":[1544],"add_action":[1547,1548]},"used_by":[]},"get_post_mime_types":{"doc":"\/**\n * Get default post mime types\n *\n * @since 2.9.0\n *\n * @return array\n *\/","file":"post.php","line":2192,"missingDoc":false,"filters":["'post_mime_types'"],"uses":{"__":[2194,2194,2195,2195,2196,2196],"_n_noop":[2194,2195,2196]},"used_by":{"wp_enqueue_media":[1461]}},"is_post_type_hierarchical":{"doc":"\/**\n * Whether the post type is hierarchical.\n *\n * A false return value might also mean that the post type does not exist.\n *\n * @since 3.0.0\n * @see get_post_type_object\n *\n * @param string $post_type Post type name\n * @return bool Whether post type is hierarchical.\n *\/","file":"post.php","line":1043,"missingDoc":false,"filters":[],"uses":{"post_type_exists":[1044],"get_post_type_object":[1047]},"used_by":{"wp_enqueue_media":[1486],"_wp_menu_item_classes_by_context":[267,424],"wp_delete_post":[2327,2372],"wp_check_for_changed_slugs":[4427],"clean_post_cache":[4659],"wp_old_slug_redirect":[3587],"WP_Rewrite::generate_rewrite_rules":[1397]}},"_get_meta_table":{"doc":"\/**\n * Retrieve the name of the metadata table for the specified object type.\n *\n * @since 2.9.0\n * @uses $wpdb WordPress database object for queries.\n *\n * @param string $type Type of object to get metadata table for (e.g., comment, post, or user)\n * @return mixed Metadata table name, or false if no metadata table exists\n *\/","file":"meta.php","line":843,"missingDoc":false,"filters":[],"uses":[],"used_by":{"add_metadata":[38],"update_metadata":[108],"delete_metadata":[191],"get_metadata_by_mid":[357],"update_metadata_by_mid":[397],"delete_metadata_by_mid":[477],"update_meta_cache":[528],"WP_Meta_Query::get_sql":[706]}},"sanitize_meta":{"doc":"\/**\n * Sanitize meta value\n *\n * @since 3.1.3\n *\n * @param string $meta_key Meta key\n * @param mixed $meta_value Meta value to sanitize\n * @param string $meta_type Type of meta\n * @return mixed Sanitized $meta_value\n *\/","file":"meta.php","line":878,"missingDoc":false,"filters":["\"sanitize_{$meta_type}_meta_{$meta_key}\""],"uses":[],"used_by":{"add_metadata":[48],"update_metadata":[120],"update_metadata_by_mid":[419]}},"get_meta_sql":{"doc":"\/**\n * Given a meta query, generates SQL clauses to be appended to a main query\n *\n * @since 3.2.0\n *\n * @see WP_Meta_Query\n *\n * @param array $meta_query A meta query\n * @param string $type Type of meta\n * @param string $primary_table\n * @param string $primary_id_column\n * @param object $context (optional) The main query object\n * @return array( 'join' => $join_sql, 'where' => $where_sql )\n *\/","file":"meta.php","line":601,"missingDoc":false,"filters":[],"uses":{"get_sql":[603]},"used_by":[]},"WP_Meta_Query::__construct":{"doc":"\/**\n * Constructor\n *\n * @param array $meta_query (optional) A meta query\n *\/","file":"meta.php","line":643,"missingDoc":false,"filters":[],"uses":{"strtoupper":[647],"is_array":[656]},"used_by":[]},"WP_Meta_Query::parse_query_vars":{"doc":"\/**\n * Constructs a meta query based on 'meta_*' query vars\n *\n * @since 3.2.0\n * @access public\n *\n * @param array $qv The query variables\n *\/","file":"meta.php","line":671,"missingDoc":false,"filters":[],"uses":{"array_merge":[685],"is_array":[684],"__construct":[688]},"used_by":[]},"WP_Meta_Query::get_sql":{"doc":"\/**\n * Generates SQL clauses to be appended to a main query.\n *\n * @since 3.2.0\n * @access public\n *\n * @param string $type Type of meta\n * @param string $primary_table\n * @param string $primary_id_column\n * @param object $context (optional) The main query object\n * @return array( 'join' => $join_sql, 'where' => $where_sql )\n *\/","file":"meta.php","line":703,"missingDoc":false,"filters":[],"uses":{"_get_meta_table":[706],"esc_sql":[709],"prepare":[734,781,816],"trim":[734,738,798],"strtoupper":[739,749],"in_array":[743,753,789],"is_array":[751,790],"count":[762,802],"is_null":[783],"preg_split":[791],"substr":[802,803,806,801],"str_repeat":[802],"array_slice":[804],"like_escape":[807],"array_filter":[819],"implode":[824,826],"apply_filters_ref_array":[830],"compact":[830]},"used_by":[]},"register_meta":{"doc":"\/**\n * Register meta key\n *\n * @since 3.3.0\n *\n * @param string $meta_type Type of meta\n * @param string $meta_key Meta key\n * @param string|array $sanitize_callback A function or method to call when sanitizing the value of $meta_key.\n * @param string|array $auth_callback Optional. A function or method to call when performing edit_post_meta, add_post_meta, and delete_post_meta capability checks.\n * @param array $args Arguments\n *\/","file":"meta.php","line":893,"missingDoc":false,"filters":[],"uses":{"add_filter":[895,905],"is_callable":[894,904],"is_protected_meta":[898]},"used_by":[]},"wpmu_update_blogs_date":{"doc":"\/**\n * Update the last_updated field for the current blog.\n *\n * @since MU\n *\/","file":"ms-blogs.php","line":16,"missingDoc":false,"filters":["'wpmu_blog_updated'"],"uses":{"update_blog_details":[19],"current_time":[19]},"used_by":{"_update_blog_date_on_post_publish":[751],"_update_blog_date_on_post_delete":[771]}},"update_blog_details":{"doc":"\/**\n * Update the details for a blog. Updates the blogs table for a given blog id.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n * @param array $details Array of details keyed by blogs table field names.\n * @return bool True if update succeeds, false otherwise.\n *\/","file":"ms-blogs.php","line":272,"missingDoc":false,"filters":["'make_spam_blog'","'make_ham_blog'","'mature_blog'","'unmature_blog'","'archive_blog'","'unarchive_blog'","'make_delete_blog'","'make_undelete_blog'"],"uses":{"get_object_vars":[279,285],"is_object":[278],"get_blog_details":[281],"array_merge":[287],"current_time":[288],"array_intersect":[292],"array_keys":[292],"update":[295],"switch_to_blog":[333],"update_option":[334],"restore_current_blog":[335],"refresh_blog_details":[338]},"used_by":{"wpmu_update_blogs_date":[19]}},"get_blogaddress_by_id":{"doc":"\/**\n * Get a full blog URL, given a blog id.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n * @return string\n *\/","file":"ms-blogs.php","line":32,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[33],"esc_url":[34]},"used_by":{"install_blog":[1145],"wpmu_welcome_notification":[1236]}},"get_blogaddress_by_name":{"doc":"\/**\n * Get a full blog URL, given a blog name.\n *\n * @since MU\n *\n * @param string $blogname The (subdomain or directory) name\n * @return string\n *\/","file":"ms-blogs.php","line":45,"missingDoc":false,"filters":[],"uses":{"rtrim":[51],"network_home_url":[51,55],"preg_replace":[53],"is_subdomain_install":[48],"esc_url":[57]},"used_by":[]},"is_subdomain_install":{"doc":"\/**\n * Whether a subdomain configuration is enabled.\n *\n * @since 3.0.0\n *\n * @return bool True if subdomain configuration is enabled, false otherwise.\n *\/","file":"ms-load.php","line":18,"missingDoc":false,"filters":[],"uses":{"defined":[19,22]},"used_by":{"get_blogaddress_by_name":[48],"get_blogaddress_by_domain":[70],"get_id_from_blogname":[103],"get_blog_details":[148],"ms_cookie_constants":[66,76],"wpmu_validate_blog_signup":[558,577,594],"wpmu_signup_blog_notification":[727],"wpmu_create_blog":[957],"wpmu_current_site":[199],"__main":[52,83]}},"get_blogaddress_by_domain":{"doc":"\/**\n * Get a full blog URL, given a domain and a path.\n *\n * @since MU\n *\n * @param string $domain\n * @param string $path\n * @return string\n *\/","file":"ms-blogs.php","line":69,"missingDoc":false,"filters":[],"uses":{"substr":[74,75],"strpos":[74,75],"is_subdomain_install":[70],"esc_url":[83]},"used_by":[]},"get_id_from_blogname":{"doc":"\/**\n * Given a blog's (subdomain or directory) slug, retrieve its id.\n *\n * @since MU\n *\n * @param string $slug\n * @return int A blog id\n *\/","file":"ms-blogs.php","line":94,"missingDoc":false,"filters":[],"uses":{"trim":[97],"wp_cache_get":[99],"is_subdomain_install":[103],"get_var":[111],"prepare":[111],"wp_cache_set":[112]},"used_by":{"get_blog_details":[172]}},"refresh_blog_details":{"doc":"\/**\n * Clear the blog details cache.\n *\n * @since MU\n *\n * @param int $blog_id Blog ID\n *\/","file":"ms-blogs.php","line":254,"missingDoc":false,"filters":["'refresh_blog_details'"],"uses":{"get_blog_details":[256],"clean_blog_cache":[258]},"used_by":{"update_blog_details":[338],"update_blog_option":[479],"update_blog_status":[680],"insert_blog":[1114]}},"clean_blog_cache":{"doc":"\/**\n * Clean the blog cache\n *\n * @since 3.5.0\n *\n * @param stdClass $blog The blog details as returned from get_blog_details()\n *\/","file":"ms-blogs.php","line":350,"missingDoc":false,"filters":[],"uses":{"md5":[352],"wp_cache_delete":[354,355,356,357,358,359,360],"trim":[359]},"used_by":{"refresh_blog_details":[258]}},"get_blog_option":{"doc":"\/**\n * Retrieve option value for a given blog id based on name of option.\n *\n * If the option does not exist or does not have a value, then the return value\n * will be false. This is useful to check whether you need to install an option\n * and is commonly used during installation of plugin options and to test\n * whether upgrading is required.\n *\n * If the option was serialized then it will be unserialized when it is returned.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.\n * @param mixed $default Optional. Default value to return if the option does not exist.\n * @return mixed Value set for the option.\n *\/","file":"ms-blogs.php","line":380,"missingDoc":false,"filters":["'blog_option_' . $option"],"uses":{"get_current_blog_id":[384,386],"get_option":[387,390],"switch_to_blog":[389],"restore_current_blog":[391]},"used_by":{"install_blog":[1161]}},"add_blog_option":{"doc":"\/**\n * Add a new option for a given blog id.\n *\n * You do not need to serialize values. If the value needs to be serialized, then\n * it will be serialized before it is inserted into the database. Remember,\n * resources can not be serialized or added as an option.\n *\n * You can create options without values and then update the values later.\n * Existing options will not be updated and checks are performed to ensure that you\n * aren't adding a protected WordPress option. Care should be taken to not name\n * options the same as the ones which are protected.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"ms-blogs.php","line":415,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[419,421],"add_option":[422,425],"switch_to_blog":[424],"restore_current_blog":[426]},"used_by":[]},"delete_blog_option":{"doc":"\/**\n * Removes option by name for a given blog id. Prevents removal of protected WordPress options.\n *\n * @since MU\n *\n * @param int $id A blog ID. Can be null to refer to the current blog.\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if option is successfully deleted. False on failure.\n *\/","file":"ms-blogs.php","line":440,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[444,446],"delete_option":[447,450],"switch_to_blog":[449],"restore_current_blog":[451]},"used_by":[]},"update_blog_option":{"doc":"\/**\n * Update an option for a particular blog.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $option The option key\n * @param mixed $value The option value\n * @return bool True on success, false on failrue.\n *\/","file":"ms-blogs.php","line":466,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[470],"update_option":[473,476],"get_current_blog_id":[472],"switch_to_blog":[475],"restore_current_blog":[477],"refresh_blog_details":[479]},"used_by":[]},"is_archived":{"doc":"\/**\n * Check if a particular blog is archived.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @return string Whether the blog is archived or not\n *\/","file":"ms-blogs.php","line":638,"missingDoc":false,"filters":[],"uses":{"get_blog_status":[639]},"used_by":[]},"get_blog_status":{"doc":"\/**\n * Get a blog details field.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $pref A field name\n * @return bool $value\n *\/","file":"ms-blogs.php","line":703,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[706],"get_var":[710],"prepare":[710]},"used_by":{"is_archived":[639]}},"update_archived":{"doc":"\/**\n * Update the 'archived' status of a particular blog.\n *\n * @since MU\n *\n * @param int $id The blog id\n * @param string $archived The new status\n * @return string $archived\n *\/","file":"ms-blogs.php","line":651,"missingDoc":false,"filters":[],"uses":{"update_blog_status":[652]},"used_by":[]},"update_blog_status":{"doc":"\/**\n * Update a blog details field.\n *\n * @since MU\n *\n * @param int $blog_id BLog ID\n * @param string $pref A field name\n * @param string $value Value for $pref\n * @return string $value\n *\/","file":"ms-blogs.php","line":666,"missingDoc":false,"filters":["'make_spam_blog'","'make_ham_blog'","'mature_blog'","'unmature_blog'","'archive_blog'","'unarchive_blog'","'make_delete_blog'","'make_undelete_blog'"],"uses":{"_deprecated_argument":[670],"in_array":[672],"update":[675],"current_time":[675],"refresh_blog_details":[680]},"used_by":{"update_archived":[652],"wpmu_create_blog":[984],"update_blog_public":[1775]}},"get_last_updated":{"doc":"\/**\n * Get a list of most recently updated blogs.\n *\n * @since MU\n *\n * @param mixed $deprecated Not used\n * @param int $start The offset\n * @param int $quantity The maximum number of blogs to retrieve. Default is 40.\n * @return array The list of blogs\n *\/","file":"ms-blogs.php","line":723,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[727],"get_results":[729],"prepare":[729]},"used_by":[]},"_update_blog_date_on_post_publish":{"doc":"\/**\n * Handler for updating the blog date when a post is published or an already published post is changed.\n *\n * @since 3.3.0\n *\n * @param string $new_status The new post status\n * @param string $old_status The old post status\n * @param object $post Post object\n *\/","file":"ms-blogs.php","line":741,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[742],"wpmu_update_blogs_date":[751]},"used_by":[]},"_update_blog_date_on_post_delete":{"doc":"\/**\n * Handler for updating the blog date when a published post is deleted.\n *\n * @since 3.4.0\n *\n * @param int $post_id Post ID\n *\/","file":"ms-blogs.php","line":761,"missingDoc":false,"filters":[],"uses":{"get_post":[762],"get_post_type_object":[764],"wpmu_update_blogs_date":[771]},"used_by":[]},"ms_upload_constants":{"doc":"\/**\n * Defines Multisite upload constants.\n *\n * Exists for backward compatibility with legacy file-serving through\n * wp-includes\/ms-files.php (wp-content\/blogs.php in MU).\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":18,"missingDoc":false,"filters":[],"uses":{"add_filter":[22],"get_site_option":[24],"define":[29,34,38],"defined":[28,37,33]},"used_by":{"__main":[136]}},"ms_cookie_constants":{"doc":"\/**\n * Defines Multisite cookie constants.\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":47,"missingDoc":false,"filters":[],"uses":{"define":[54,60,67,69,78,80],"defined":[53,59,65,76],"is_subdomain_install":[66,76],"trim":[66],"parse_url":[66],"get_option":[66]},"used_by":[]},"ms_file_constants":{"doc":"\/**\n * Defines Multisite file constants.\n *\n * Exists for backward compatibility with legacy file-serving through\n * wp-includes\/ms-files.php (wp-content\/blogs.php in MU).\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":92,"missingDoc":false,"filters":[],"uses":{"define":[98,105],"defined":[97,104]},"used_by":{"__main":[17]}},"ms_subdomain_constants":{"doc":"\/**\n * Defines Multisite subdomain constants and handles warnings and notices.\n *\n * VHOST is deprecated in favor of SUBDOMAIN_INSTALL, which is a bool.\n *\n * On first call, the constants are checked and defined. On second call,\n * we will have translations loaded and can trigger warnings easily.\n *\n * @since 3.0.0\n *\/","file":"ms-default-constants.php","line":118,"missingDoc":false,"filters":[],"uses":{"__":[126,128],"trigger_error":[128],"_deprecated_argument":[130],"defined":[141,143,135,135],"define":[142,145,147,148]},"used_by":{"__main":[21]}},"generate_random_password":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use wp_generate_password()\n * @see wp_generate_password()\n *\/","file":"ms-deprecated.php","line":22,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[23],"wp_generate_password":[24]},"used_by":[]},"wp_generate_password":{"doc":"\/**\n * Generates a random password drawn from the defined set of characters.\n *\n * @since 2.5\n *\n * @param int $length The length of password to generate\n * @param bool $special_chars Whether to include standard special characters. Default true.\n * @param bool $extra_special_chars Whether to include other special characters. Used when\n * generating secret keys and salts. Default false.\n * @return string The random password\n **\/","file":"pluggable.php","line":1490,"missingDoc":false,"filters":["'random_password'"],"uses":{"substr":[1499],"wp_rand":[1499],"strlen":[1499]},"used_by":{"generate_random_password":[24],"wpmu_activate_signup":[849],"wp_salt":[1363,1372]}},"is_site_admin":{"doc":"\/**\n * Determine if user is a site admin.\n *\n * Plugins should use is_multisite() instead of checking if this function exists\n * to determine if multisite is enabled.\n *\n * This function must reside in a file included only if is_multisite() due to\n * legacy function_exists() checks to determine if multisite is enabled.\n *\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_super_admin()\n * @see is_super_admin()\n * @see is_multisite()\n *\n *\/","file":"ms-deprecated.php","line":43,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[44],"get_current_user_id":[47],"get_user_by":[51],"exists":[52],"is_super_admin":[57]},"used_by":[]},"graceful_fail":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use wp_die()\n * @see wp_die()\n *\/","file":"ms-deprecated.php","line":67,"missingDoc":false,"filters":["'graceful_fail'","'graceful_fail_template'"],"uses":{"_deprecated_function":[68],"sprintf":[94]},"used_by":[]},"get_user_details":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use get_user_by()\n * @see get_user_by()\n *\/","file":"ms-deprecated.php","line":104,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[105],"get_user_by":[106]},"used_by":[]},"clear_global_post_cache":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use clean_post_cache()\n * @see clean_post_cache()\n *\/","file":"ms-deprecated.php","line":115,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[116]},"used_by":[]},"is_main_blog":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_main_site()\n * @see is_main_site()\n *\/","file":"ms-deprecated.php","line":125,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[126],"is_main_site":[127]},"used_by":[]},"validate_email":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated Use is_email()\n * @see is_email()\n *\/","file":"ms-deprecated.php","line":136,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[137],"is_email":[138]},"used_by":[]},"get_blog_list":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated No alternative available. For performance reasons this function is not recommended.\n *\/","file":"ms-deprecated.php","line":146,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[147],"get_results":[150],"prepare":[150],"get_var":[154],"get_blog_prefix":[154],"is_array":[159],"array_slice":[163,165],"count":[163]},"used_by":{"get_most_active_blogs":[176]}},"get_most_active_blogs":{"doc":"\/**\n * @since MU\n * @deprecated 3.0.0\n * @deprecated No alternative available. For performance reasons this function is not recommended.\n *\/","file":"ms-deprecated.php","line":173,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[174],"get_blog_list":[176],"reset":[178,184,194],"arsort":[183],"is_array":[177,193],"esc_url":[196],"array_slice":[201]},"used_by":[]},"wpmu_admin_do_redirect":{"doc":"\/**\n * Redirect a user based on $_GET or $_POST arguments.\n *\n * The function looks for redirect arguments in the following order:\n * 1) $_GET['ref']\n * 2) $_POST['ref']\n * 3) $_SERVER['HTTP_REFERER']\n * 4) $_GET['redirect']\n * 5) $_POST['redirect']\n * 6) $url\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use wp_redirect()\n * @uses wpmu_admin_redirect_add_updated_param()\n *\n * @param string $url\n *\/","file":"ms-deprecated.php","line":222,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[223],"wpmu_admin_redirect_add_updated_param":[232,241,246],"wp_redirect":[233,237,248],"esc_html":[244],"substr":[244,243]},"used_by":[]},"wpmu_admin_redirect_add_updated_param":{"doc":"\/**\n * Adds an 'updated=true' argument to a URL.\n *\n * @since MU\n * @deprecated 3.3.0\n * @deprecated Use add_query_arg()\n *\n * @param string $url\n * @return string\n *\/","file":"ms-deprecated.php","line":262,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[263],"strpos":[266,265]},"used_by":{"wpmu_admin_do_redirect":[232,241,246]}},"get_sitestats":{"doc":"\/**\n * Gets the network's site and user counts.\n *\n * @since MU 1.0\n * @uses get_blog_count()\n * @uses get_user_count()\n *\n * @return array Site and user count for the network.\n *\/","file":"ms-functions.php","line":19,"missingDoc":false,"filters":[],"uses":{"get_blog_count":[23],"get_user_count":[24]},"used_by":[]},"get_blog_count":{"doc":"\/**\n * The number of active sites on your installation.\n *\n * The count is cached and updated twice daily. This is not a live count.\n *\n * @since MU 1.0\n *\n * @param int $id Optional. A site_id.\n * @return int\n *\/","file":"ms-functions.php","line":144,"missingDoc":false,"filters":[],"uses":{"get_site_option":[145]},"used_by":{"get_sitestats":[23],"wp_version_check":[56]}},"get_user_count":{"doc":"\/**\n * The number of active users in your installation.\n *\n * The count is cached and updated twice daily. This is not a live count.\n *\n * @since MU 2.7\n *\n * @return int\n *\/","file":"ms-functions.php","line":130,"missingDoc":false,"filters":[],"uses":{"get_site_option":[131]},"used_by":{"get_sitestats":[24],"wp_version_check":[55]}},"get_admin_users_for_domain":{"doc":"\/**\n * Get the admin for a domain\/path combination.\n *\n * @since MU 1.0\n *\n * @param string $sitedomain Optional. Site domain.\n * @param string $path Optional. Site path.\n * @return array The network admins\n *\/","file":"ms-functions.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_var":[45],"prepare":[45,48],"get_results":[48]},"used_by":[]},"add_user_to_blog":{"doc":"\/**\n * Add a user to a blog.\n *\n * Use the 'add_user_to_blog' action to fire an event when\n * users are added to a blog.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the blog you're adding the user to.\n * @param int $user_id ID of the user you're adding.\n * @param string $role The role you want the user to have\n * @return bool\n *\/","file":"ms-functions.php","line":178,"missingDoc":false,"filters":["'add_user_to_blog'"],"uses":{"switch_to_blog":[179],"get_userdata":[181],"restore_current_blog":[184,198],"__":[185],"update_user_meta":[189,191],"get_blog_details":[190],"get_user_meta":[188],"set_role":[194],"wp_cache_delete":[197]},"used_by":{"get_active_blog_for_user":[90],"wpmu_create_blog":[980],"add_existing_user_to_blog":[1703],"add_new_user_to_blog":[1724]}},"get_blog_post":{"doc":"\/**\n * Get a blog post from any site on the network.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the blog.\n * @param int $post_id ID of the post you're looking for.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"ms-functions.php","line":157,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[158],"get_post":[159],"restore_current_blog":[160]},"used_by":[]},"remove_user_from_blog":{"doc":"\/**\n * Remove a user from a blog.\n *\n * Use the 'remove_user_from_blog' action to fire an event when\n * users are removed from a blog.\n *\n * Accepts an optional $reassign parameter, if you want to\n * reassign the user's blog posts to another user upon removal.\n *\n * @since MU 1.0\n *\n * @param int $user_id ID of the user you're removing.\n * @param int $blog_id ID of the blog you're removing the user from.\n * @param string $reassign Optional. A user to whom to reassign posts.\n * @return bool\n *\/","file":"ms-functions.php","line":218,"missingDoc":false,"filters":["'remove_user_from_blog'"],"uses":{"switch_to_blog":[220],"get_user_meta":[226],"get_blogs_of_user":[230,252],"update_user_meta":[239,240,254,255],"get_userdata":[244],"restore_current_blog":[246,264],"__":[247],"remove_all_caps":[250],"count":[253],"query":[260,261],"prepare":[260,261]},"used_by":{"add_new_user_to_blog":[1723]}},"create_empty_blog":{"doc":"\/**\n * Create an empty blog.\n *\n * @since MU 1.0\n * @uses install_blog()\n *\n * @param string $domain The new blog's domain.\n * @param string $path The new blog's path.\n * @param string $weblog_title The new blog's title.\n * @param int $site_id Optional. Defaults to 1.\n * @return int The ID of the newly created blog\n *\/","file":"ms-functions.php","line":281,"missingDoc":false,"filters":[],"uses":{"addslashes":[282,283],"__":[290,297],"domain_exists":[289],"insert_blog":[296],"switch_to_blog":[299],"install_blog":[300],"restore_current_blog":[301]},"used_by":[]},"domain_exists":{"doc":"\/**\n * Check whether a blogname is already taken.\n *\n * Used during the new site registration process to ensure\n * that each blogname is unique.\n *\n * @since MU\n *\n * @param string $domain The domain to be checked.\n * @param string $path The path to be checked.\n * @param int $site_id Optional. Relevant only on multi-network installs.\n * @return int\n *\/","file":"ms-functions.php","line":1085,"missingDoc":false,"filters":["'domain_exists'"],"uses":{"get_var":[1087],"prepare":[1087]},"used_by":{"create_empty_blog":[289],"wpmu_validate_blog_signup":[601],"wpmu_create_blog":[967]}},"insert_blog":{"doc":"\/**\n * Store basic site info in the blogs table.\n *\n * This function creates a row in the wp_blogs table and returns\n * the new blog's ID. It is the first step in creating a new blog.\n *\n * @since MU\n *\n * @param string $domain The domain of the new site.\n * @param string $path The path of the new site.\n * @param int $site_id Unless you're running a multi-network install, be sure to set this value to 1.\n * @return int The ID of the new row\n *\/","file":"ms-functions.php","line":1104,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[1107],"insert":[1110],"current_time":[1110],"refresh_blog_details":[1114]},"used_by":{"create_empty_blog":[296],"wpmu_create_blog":[973]}},"install_blog":{"doc":"\/**\n * Install an empty blog.\n *\n * Creates the new blog tables and options. If calling this function\n * directly, be sure to use switch_to_blog() first, so that $wpdb\n * points to the new blog.\n *\n * @since MU\n * @uses make_db_current_silent()\n * @uses populate_roles()\n *\n * @param int $blog_id The value returned by insert_blog().\n * @param string $blog_title The title of the new site.\n *\/","file":"ms-functions.php","line":1132,"missingDoc":false,"filters":[],"uses":{"suppress_errors":[1140,1143],"__":[1142,1142],"get_results":[1141],"get_blogaddress_by_id":[1145],"make_db_current_silent":[1148],"populate_options":[1149],"populate_roles":[1150],"_init":[1151],"untrailingslashit":[1153],"update_option":[1155,1156,1159,1161,1163,1164],"get_blog_option":[1161],"get_site_option":[1158],"stripslashes":[1163],"get_blog_prefix":[1167],"delete_metadata":[1168,1169]},"used_by":{"create_empty_blog":[300],"wpmu_create_blog":[977]}},"get_blog_permalink":{"doc":"\/**\n * Get the permalink for a post on another blog.\n *\n * @since MU 1.0\n *\n * @param int $blog_id ID of the source blog.\n * @param int $post_id ID of the desired post.\n * @return string The post's permalink\n *\/","file":"ms-functions.php","line":315,"missingDoc":false,"filters":[],"uses":{"switch_to_blog":[316],"get_permalink":[317],"restore_current_blog":[318]},"used_by":[]},"get_blog_id_from_url":{"doc":"\/**\n * Get a blog's numeric ID from its URL.\n *\n * On a subdirectory installation like example.com\/blog1\/,\n * $domain will be the root 'example.com' and $path the\n * subdirectory '\/blog1\/'. With subdomains like blog1.example.com,\n * $domain is 'blog1.example.com' and $path is '\/'.\n *\n * @since MU 2.6.5\n *\n * @param string $domain\n * @param string $path Optional. Not required for subdomain installations.\n * @return int 0 if no blog found, otherwise the ID of the matching blog\n *\/","file":"ms-functions.php","line":337,"missingDoc":false,"filters":[],"uses":{"strtolower":[340,341],"wp_cache_get":[342],"md5":[342,352,356],"get_var":[349],"prepare":[349],"wp_cache_set":[352,356]},"used_by":[]},"is_email_address_unsafe":{"doc":"\/**\n * Checks an email address against a list of banned domains.\n *\n * This function checks against the Banned Email Domains list\n * at wp-admin\/network\/settings.php. The check is only run on\n * self-registrations; user creation at wp-admin\/network\/users.php\n * bypasses this check.\n *\n * @since MU\n *\n * @param string $user_email The email provided by the user at registration.\n * @return bool Returns true when the email address is banned.\n *\/","file":"ms-functions.php","line":376,"missingDoc":false,"filters":["'is_email_address_unsafe'"],"uses":{"get_site_option":[377],"explode":[379,384],"is_array":[378,383],"substr":[396],"strlen":[396]},"used_by":{"wpmu_validate_user_signup":[456]}},"wpmu_validate_user_signup":{"doc":"\/**\n * Processes new user registrations.\n *\n * Checks the data provided by the user during signup. Verifies\n * the validity and uniqueness of user names and user email addresses,\n * and checks email addresses against admin-provided domain\n * whitelists and blacklists.\n *\n * The hook 'wpmu_validate_user_signup' provides an easy way\n * to modify the signup process. The value $result, which is passed\n * to the hook, contains both the user-provided info and the error\n * messages created by the function. 'wpmu_validate_user_signup' allows\n * you to process the data in any way you'd like, and unset the\n * relevant errors if necessary.\n *\n * @since MU\n * @uses is_email_address_unsafe()\n * @uses username_exists()\n * @uses email_exists()\n *\n * @param string $user_name The login name provided by the user.\n * @param string $user_email The email provided by the user.\n * @return array Contains username, email, and error messages.\n *\/","file":"ms-functions.php","line":430,"missingDoc":false,"filters":["'wpmu_validate_user_signup'"],"uses":{"preg_replace":[436],"sanitize_user":[436],"add":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"__":[439,446,454,457,460,463,469,472,478,483,487,499,502,512],"preg_match":[438,467],"sanitize_email":[443],"get_site_option":[448,474],"add_site_option":[451],"is_array":[449,475],"in_array":[453,477],"is_email_address_unsafe":[456],"strlen":[459],"strpos":[462,476],"is_email":[471],"substr":[476],"username_exists":[482],"email_exists":[486],"get_row":[490,505],"prepare":[490,505],"mysql2date":[492,507],"current_time":[493,507],"delete":[497,510]},"used_by":[]},"add_site_option":{"doc":"\/**\n * Add a new site option.\n *\n * Existing options will not be updated. Note that prior to 3.3 this wasn't the case.\n *\n * @see add_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses apply_filters() Calls 'pre_add_site_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'add_site_option_$option' and 'add_site_option' hooks on success.\n *\n * @param string $option Name of option to add. Expected to not be SQL-escaped.\n * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.\n * @return bool False if option was not added and true if option was added.\n *\/","file":"option.php","line":810,"missingDoc":false,"filters":["'pre_add_site_option_' . $option","\"add_site_option_{$option}\"","'add_site_option'"],"uses":{"add_option":[816],"get_site_option":[820],"sanitize_option":[823],"wp_cache_set":[824],"maybe_serialize":[827],"insert":[828],"is_multisite":[815]},"used_by":{"wpmu_validate_user_signup":[451],"wpmu_validate_blog_signup":[554],"update_site_option":[908],"set_site_transient":[1043,1044]}},"username_exists":{"doc":"\/**\n * Checks whether the given username exists.\n *\n * @since 2.0.0\n *\n * @param string $username Username.\n * @return null|int The user's ID on success, and null on failure.\n *\/","file":"user.php","line":1197,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1198]},"used_by":{"wpmu_validate_user_signup":[482],"wpmu_validate_blog_signup":[604],"wpmu_activate_signup":[851],"wp_insert_user":[1312]}},"email_exists":{"doc":"\/**\n * Checks whether the given email exists.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $email Email.\n * @return bool|int The user's ID on success, and false on failure.\n *\/","file":"user.php","line":1214,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1215]},"used_by":{"wpmu_validate_user_signup":[486],"wp_insert_user":[1327]}},"wpmu_validate_blog_signup":{"doc":"\/**\n * Processes new site registrations.\n *\n * Checks the data provided by the user during blog signup. Verifies\n * the validity and uniqueness of blog paths and domains.\n *\n * This function prevents the current user from registering a new site\n * with a blogname equivalent to another user's login name. Passing the\n * $user parameter to the function, where $user is the other user, is\n * effectively an override of this limitation.\n *\n * Filter 'wpmu_validate_blog_signup' if you want to modify\n * the way that WordPress validates new site signups.\n *\n * @since MU\n * @uses domain_exists()\n * @uses username_exists()\n *\n * @param string $blogname The blog name provided by the user. Must be unique.\n * @param string $blog_title The blog title provided by the user.\n * @return array Contains the new site data and error messages.\n *\/","file":"ms-functions.php","line":542,"missingDoc":false,"filters":["'subdirectory_reserved_names'","'newblogname'","'wpmu_validate_blog_signup'"],"uses":{"strip_tags":[547],"substr":[548],"get_site_option":[551],"add_site_option":[554],"array_merge":[559],"is_subdomain_install":[558,577,594],"add":[562,565,568,571,574,578,584,591,602,606,617],"__":[562,565,568,571,574,578,584,591,602,606,617],"preg_match":[564,582],"in_array":[567],"strlen":[570],"is_super_admin":[570],"strpos":[573],"get_var":[577],"prepare":[577,610],"get_blog_prefix":[577],"stripslashes":[588],"preg_replace":[595],"domain_exists":[601],"is_object":[605,605],"username_exists":[604],"get_row":[610],"current_time":[612],"mysql2date":[612],"delete":[615]},"used_by":[]},"wpmu_signup_blog":{"doc":"\/**\n * Record site signup information for future activation.\n *\n * @since MU\n * @uses wpmu_signup_blog_notification()\n *\n * @param string $domain The requested domain.\n * @param string $path The requested path.\n * @param string $title The requested site title.\n * @param string $user The user's requested login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, contains the requested privacy setting and lang_id.\n *\/","file":"ms-functions.php","line":637,"missingDoc":false,"filters":[],"uses":{"substr":[640],"md5":[640],"time":[640],"rand":[640],"serialize":[641],"escape":[642,643,644],"insert":[646],"current_time":[652],"wpmu_signup_blog_notification":[657]},"used_by":[]},"wpmu_signup_blog_notification":{"doc":"\/**\n * Notify user of signup success.\n *\n * This is the notification function used when site registration\n * is enabled.\n *\n * Filter 'wpmu_signup_blog_notification' to bypass this function or\n * replace it with your own notification behavior.\n *\n * Filter 'wpmu_signup_blog_notification_email' and\n * 'wpmu_signup_blog_notification_subject' to change the content\n * and subject line of the email sent to newly registered users.\n *\n * @since MU\n *\n * @param string $domain The new blog domain.\n * @param string $path The new blog path.\n * @param string $title The site title.\n * @param string $user The user's login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, contains the requested privacy setting and lang_id.\n * @param string $key The activation key created in wpmu_signup_blog()\n * @return bool\n *\/","file":"ms-functions.php","line":720,"missingDoc":false,"filters":["'wpmu_signup_blog_notification'","'wpmu_signup_blog_notification_email'","'wpmu_signup_blog_notification_subject'"],"uses":{"network_site_url":[728],"is_subdomain_install":[727],"esc_url":[732,744,754],"get_site_option":[733,736,736],"esc_html":[736],"get_option":[737],"sprintf":[738,748],"__":[740,750],"wp_mail":[756]},"used_by":{"wpmu_signup_blog":[657]}},"wpmu_signup_user":{"doc":"\/**\n * Record user signup information for future activation.\n *\n * This function is used when user registration is open but\n * new site registration is not.\n *\n * @since MU\n * @uses wpmu_signup_user_notification()\n *\n * @param string $user The user's requested login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, this is an empty array.\n *\/","file":"ms-functions.php","line":673,"missingDoc":false,"filters":[],"uses":{"preg_replace":[677],"sanitize_user":[677],"sanitize_email":[678],"substr":[679],"md5":[679],"time":[679],"rand":[679],"serialize":[680],"insert":[682],"current_time":[688],"wpmu_signup_user_notification":[693]},"used_by":[]},"wpmu_signup_user_notification":{"doc":"\/**\n * Notify user of signup success.\n *\n * This is the notification function used when no new site has\n * been requested.\n *\n * Filter 'wpmu_signup_user_notification' to bypass this function or\n * replace it with your own notification behavior.\n *\n * Filter 'wpmu_signup_user_notification_email' and\n * 'wpmu_signup_user_notification_subject' to change the content\n * and subject line of the email sent to newly registered users.\n *\n * @since MU\n *\n * @param string $user The user's login name.\n * @param string $user_email The user's email address.\n * @param array $meta By default, an empty array.\n * @param string $key The activation key created in wpmu_signup_user()\n * @return bool\n *\/","file":"ms-functions.php","line":781,"missingDoc":false,"filters":["'wpmu_signup_user_notification'","'wpmu_signup_user_notification_email'","'wpmu_signup_user_notification_subject'"],"uses":{"get_site_option":[786,789,789],"esc_html":[789],"get_option":[790],"sprintf":[791,799],"__":[793,801],"site_url":[796],"wp_mail":[807]},"used_by":{"wpmu_signup_user":[693]}},"wp_mail":{"doc":"\/**\n * Send mail, similar to PHP's mail\n *\n * A true return value does not automatically mean that the user received the\n * email successfully. It just only means that the method used was able to\n * process the request without any errors.\n *\n * Using the two 'wp_mail_from' and 'wp_mail_from_name' hooks allow from\n * creating a from address like 'Name <email@address.com>' when both are set. If\n * just 'wp_mail_from' is set, then just the email address will be used with no\n * name.\n *\n * The default content type is 'text\/plain' which does not allow using HTML.\n * However, you can set the content type of the email by using the\n * 'wp_mail_content_type' filter.\n *\n * The default charset is based on the charset used on the blog. The charset can\n * be set using the 'wp_mail_charset' filter.\n *\n * @since 1.2.1\n * @uses apply_filters() Calls 'wp_mail' hook on an array of all of the parameters.\n * @uses apply_filters() Calls 'wp_mail_from' hook to get the from email address.\n * @uses apply_filters() Calls 'wp_mail_from_name' hook to get the from address name.\n * @uses apply_filters() Calls 'wp_mail_content_type' hook to get the email content type.\n * @uses apply_filters() Calls 'wp_mail_charset' hook to get the email charset\n * @uses do_action_ref_array() Calls 'phpmailer_init' hook on the reference to\n *\t\tphpmailer object.\n * @uses PHPMailer\n *\n * @param string|array $to Array or comma-separated list of email addresses to send message.\n * @param string $subject Email subject\n * @param string $message Message contents\n * @param string|array $headers Optional. Additional headers.\n * @param string|array $attachments Optional. Files to attach.\n * @return bool Whether the email contents were sent successfully.\n *\/","file":"pluggable.php","line":214,"missingDoc":false,"filters":["'wp_mail'","'wp_mail_from'","'wp_mail_from_name'","'wp_mail_content_type'","'wp_mail_charset'","'phpmailer_init'"],"uses":{"extract":[216],"compact":[216],"explode":[219,237,257,281,294,297,345],"str_replace":[219,237,252,269,273,284,286],"is_array":[218,234,344],"is_object":[224],"is_a":[224],"preg_split":[251],"trim":[251,252,257,260,261,270,274,276,282,284,286,290,301,301],"stripos":[250,285,283,433],"strpos":[249,268,272,266,280],"strtolower":[263,331],"substr":[268,272,333,332],"array_merge":[294,297],"ClearAddresses":[309],"ClearAllRecipients":[310],"ClearAttachments":[311],"ClearBCCs":[312],"ClearCCs":[313],"ClearCustomHeaders":[314],"ClearReplyTos":[315],"count":[352,374,392],"preg_match":[351,373,391],"AddAddress":[357],"AddCc":[379],"AddBcc":[397],"IsMail":[405],"IsHTML":[418],"get_bloginfo":[422],"AddCustomHeader":[430,434],"sprintf":[430,434],"AddAttachment":[440],"Send":[451]},"used_by":{"wpmu_signup_blog_notification":[756],"wpmu_signup_user_notification":[807],"newblog_notify_siteadmin":[1034],"newuser_notify_siteadmin":[1068],"wpmu_welcome_notification":[1259],"wpmu_welcome_user_notification":[1307],"wp_notify_postauthor":[1078],"wp_notify_moderator":[1161],"wp_password_change_notification":[1183],"wp_new_user_notification":[1211,1220]}},"wpmu_activate_signup":{"doc":"\/**\n * Activate a signup.\n *\n * Hook to 'wpmu_activate_user' or 'wpmu_activate_blog' for events\n * that should happen only when users or sites are self-created (since\n * those actions are not called when users and sites are created\n * by a Super Admin).\n *\n * @since MU\n * @uses wp_generate_password()\n * @uses wpmu_welcome_user_notification()\n * @uses add_user_to_blog()\n * @uses add_new_user_to_blog()\n * @uses wpmu_create_user()\n * @uses wpmu_create_blog()\n * @uses wpmu_welcome_notification()\n *\n * @param string $key The activation key provided to the user.\n * @return array An array containing information about the activated user and\/or blog\n *\/","file":"ms-functions.php","line":831,"missingDoc":false,"filters":["'wpmu_activate_user'","'wpmu_activate_blog'"],"uses":{"get_row":[834],"prepare":[834],"__":[837,841,843,859,867],"maybe_unserialize":[846],"escape":[847,848],"wp_generate_password":[849],"username_exists":[851],"wpmu_create_user":[854],"current_time":[861],"update":[864,884,889],"wpmu_welcome_user_notification":[869],"add_new_user_to_blog":[871],"wpmu_create_blog":[876],"add_data":[883],"get_error_code":[882],"is_wp_error":[879],"wpmu_welcome_notification":[890]},"used_by":[]},"wpmu_create_user":{"doc":"\/**\n * Create a user.\n *\n * This function runs when a user self-registers as well as when\n * a Super Admin creates a new user. Hook to 'wpmu_new_user' for events\n * that should affect all new users, but only on Multisite (otherwise\n * use 'user_register').\n *\n * @since MU\n * @uses wp_create_user()\n *\n * @param string $user_name The new user's login name.\n * @param string $password The new user's password.\n * @param string $email The new user's email address.\n * @return mixed Returns false on failure, or int $user_id on success\n *\/","file":"ms-functions.php","line":912,"missingDoc":false,"filters":["'wpmu_new_user'"],"uses":{"preg_replace":[913],"sanitize_user":[913],"wp_create_user":[915],"is_wp_error":[916],"delete_user_option":[920,921]},"used_by":{"wpmu_activate_signup":[854]}},"wpmu_welcome_user_notification":{"doc":"\/**\n * Notify a user that her account activation has been successful.\n *\n * Filter 'wpmu_welcome_user_notification' to disable or bypass.\n *\n * Filter 'update_welcome_user_email' and 'update_welcome_user_subject' to\n * modify the content and subject line of the notification email.\n *\n * @since MU\n *\n * @param int $user_id\n * @param string $password\n * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization.\n * @return bool\n *\/","file":"ms-functions.php","line":1278,"missingDoc":false,"filters":["'wpmu_welcome_user_notification'","'update_welcome_user_email'","'update_welcome_user_subject'"],"uses":{"get_site_option":[1284,1294,1299,1299],"get_userdata":[1286],"str_replace":[1289,1290,1291,1292],"wp_login_url":[1292],"esc_html":[1299],"get_option":[1300],"sprintf":[1306],"__":[1306],"wp_mail":[1307]},"used_by":{"wpmu_activate_signup":[869]}},"add_new_user_to_blog":{"doc":"\/**\n * Add a newly created user to the appropriate blog\n *\n * @since MU\n *\n * @param int $user_id\n * @param string $email\n * @param array $meta\n *\/","file":"ms-functions.php","line":1718,"missingDoc":false,"filters":[],"uses":{"remove_user_from_blog":[1723],"add_user_to_blog":[1724],"update_user_meta":[1725]},"used_by":{"wpmu_activate_signup":[871]}},"wpmu_create_blog":{"doc":"\/**\n * Create a site.\n *\n * This function runs when a user self-registers a new site as well\n * as when a Super Admin creates a new site. Hook to 'wpmu_new_blog'\n * for events that should affect all new sites.\n *\n * On subdirectory installs, $domain is the same as the main site's\n * domain, and the path is the subdirectory name (eg 'example.com'\n * and '\/blog1\/'). On subdomain installs, $domain is the new subdomain +\n * root domain (eg 'blog1.example.com'), and $path is '\/'.\n *\n * @since MU\n * @uses domain_exists()\n * @uses insert_blog()\n * @uses wp_install_defaults()\n * @uses add_user_to_blog()\n *\n * @param string $domain The new site's domain.\n * @param string $path The new site's path.\n * @param string $title The new site's title.\n * @param int $user_id The user ID of the new site's admin.\n * @param array $meta Optional. Used to set initial site options.\n * @param int $site_id Optional. Only relevant on multi-network installs.\n * @return mixed Returns WP_Error object on failure, int $blog_id on success\n *\/","file":"ms-functions.php","line":954,"missingDoc":false,"filters":["'wpmu_new_blog'"],"uses":{"preg_replace":[955],"sanitize_user":[955],"str_replace":[958],"is_subdomain_install":[957],"strip_tags":[960],"__":[968,974],"domain_exists":[967],"define":[971],"defined":[970],"insert_blog":[973],"switch_to_blog":[976],"install_blog":[977],"wp_install_defaults":[978],"add_user_to_blog":[980],"update_blog_status":[984],"update_option":[986,990],"is_array":[982],"add_option":[989],"get_site_option":[989],"update_user_meta":[993],"is_super_admin":[992],"get_user_meta":[992],"restore_current_blog":[995]},"used_by":{"wpmu_activate_signup":[876]}},"wpmu_welcome_notification":{"doc":"\/**\n * Notify a user that her blog activation has been successful.\n *\n * Filter 'wpmu_welcome_notification' to disable or bypass.\n *\n * Filter 'update_welcome_email' and 'update_welcome_subject' to\n * modify the content and subject line of the notification email.\n *\n * @since MU\n *\n * @param int $blog_id\n * @param int $user_id\n * @param string $password\n * @param string $title The new blog's title\n * @param array $meta Optional. Not used in the default function, but is passed along to hooks for customization.\n * @return bool\n *\/","file":"ms-functions.php","line":1214,"missingDoc":false,"filters":["'wpmu_welcome_notification'","'update_welcome_email'","'update_welcome_subject'"],"uses":{"stripslashes":[1220,1222,1258],"get_site_option":[1220,1246,1251,1251],"__":[1222,1258],"get_blogaddress_by_id":[1236],"get_userdata":[1237],"str_replace":[1239,1240,1241,1242,1243],"esc_html":[1251],"get_option":[1252],"sprintf":[1258],"wp_mail":[1259]},"used_by":{"wpmu_activate_signup":[890]}},"delete_user_option":{"doc":"\/**\n * Delete user option with global blog capability.\n *\n * User options are just like user metadata except that they have support for\n * global blog options. If the 'global' parameter is false, which it is by default\n * it will prepend the WordPress table prefix to the option name.\n *\n * @since 3.0.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param int $user_id User ID\n * @param string $option_name User option name.\n * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).\n * @return unknown\n *\/","file":"user.php","line":302,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[307]},"used_by":{"wpmu_create_user":[920,921]}},"newblog_notify_siteadmin":{"doc":"\/**\n * Notifies the network admin that a new site has been activated.\n *\n * Filter 'newblog_notify_siteadmin' to change the content of\n * the notification email.\n *\n * @since MU\n *\n * @param int $blog_id The new site's ID.\n * @return bool\n *\/","file":"ms-functions.php","line":1012,"missingDoc":false,"filters":["'newblog_notify_siteadmin'"],"uses":{"get_site_option":[1013,1016],"is_email":[1017],"esc_url":[1020],"network_admin_url":[1020],"switch_to_blog":[1022],"get_option":[1023],"site_url":[1024],"restore_current_blog":[1025],"sprintf":[1027,1034],"__":[1027,1034],"wp_mail":[1034]},"used_by":[]},"newuser_notify_siteadmin":{"doc":"\/**\n * Notifies the network admin that a new user has been activated.\n *\n * Filter 'newuser_notify_siteadmin' to change the content of\n * the notification email.\n *\n * @since MU\n * @uses apply_filters() Filter newuser_notify_siteadmin to change the content of the email message\n *\n * @param int $user_id The new user's ID.\n * @return bool\n *\/","file":"ms-functions.php","line":1050,"missingDoc":false,"filters":["'newuser_notify_siteadmin'"],"uses":{"get_site_option":[1051,1054],"is_email":[1056],"get_userdata":[1059],"esc_url":[1061],"network_admin_url":[1061],"sprintf":[1062,1068],"__":[1062,1068],"wp_mail":[1068]},"used_by":[]},"install_blog_defaults":{"doc":"\/**\n * Set blog defaults.\n *\n * This function creates a row in the wp_blogs table.\n *\n * @since MU\n * @deprecated MU\n * @deprecated Use wp_install_defaults()\n * @uses wp_install_defaults()\n *\n * @param int $blog_id Ignored in this function.\n * @param int $user_id\n *\/","file":"ms-functions.php","line":1185,"missingDoc":false,"filters":[],"uses":{"suppress_errors":[1190,1194],"wp_install_defaults":[1192]},"used_by":[]},"get_current_site":{"doc":"\/**\n * Get the current site info.\n *\n * Returns an object containing the ID, domain, path, and site_name\n * of the site being viewed.\n *\n * @since MU\n *\n * @return object\n *\/","file":"ms-functions.php","line":1321,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_user_id_from_string":{"doc":"\/**\n * Get a numeric user ID from either an email address or a login.\n *\n * @since MU\n * @uses is_email()\n *\n * @param string $string\n * @return int\n *\/","file":"ms-functions.php","line":1335,"missingDoc":false,"filters":[],"uses":{"get_user_by":[1338,1344],"is_numeric":[1341],"is_email":[1337]},"used_by":{"is_user_spammy":[1753]}},"get_most_recent_post_of_user":{"doc":"\/**\n * Get a user's most recent post.\n *\n * Walks through each of a user's blogs to find the post with\n * the most recent post_date_gmt.\n *\n * @since MU\n * @uses get_blogs_of_user()\n *\n * @param int $user_id\n * @return array Contains the blog_id, post_id, post_date_gmt, and post_gmt_ts\n *\/","file":"ms-functions.php","line":1364,"missingDoc":false,"filters":[],"uses":{"get_blogs_of_user":[1367],"get_blog_prefix":[1373],"get_row":[1374],"prepare":[1374],"strtotime":[1378]},"used_by":[]},"get_dirsize":{"doc":"\/**\n * Get the size of a directory.\n *\n * A helper function that is used primarily to check whether\n * a blog has exceeded its allowed upload space.\n *\n * @since MU\n * @uses recurse_dirsize()\n *\n * @param string $directory\n * @return int\n *\/","file":"ms-functions.php","line":1411,"missingDoc":false,"filters":[],"uses":{"get_transient":[1412],"is_array":[1413,1416],"recurse_dirsize":[1419],"set_transient":[1421]},"used_by":{"get_space_used":[1947]}},"recurse_dirsize":{"doc":"\/**\n * Get the size of a directory recursively.\n *\n * Used by get_dirsize() to get a directory's size when it contains\n * other directories.\n *\n * @since MU\n *\n * @param string $directory\n * @return int\n *\/","file":"ms-functions.php","line":1436,"missingDoc":false,"filters":[],"uses":{"untrailingslashit":[1439],"file_exists":[1441],"is_dir":[1441,1450],"is_readable":[1441],"readdir":[1445],"filesize":[1449],"recurse_dirsize":[1451],"is_file":[1448],"closedir":[1457],"opendir":[1444]},"used_by":{"get_dirsize":[1419],"recurse_dirsize":[1451]}},"check_upload_mimes":{"doc":"\/**\n * Check an array of MIME types against a whitelist.\n *\n * WordPress ships with a set of allowed upload filetypes,\n * which is defined in wp-includes\/functions.php in\n * get_allowed_mime_types(). This function is used to filter\n * that list against the filetype whitelist provided by Multisite\n * Super Admins at wp-admin\/network\/settings.php.\n *\n * @since MU\n *\n * @param array $mimes\n * @return array\n *\/","file":"ms-functions.php","line":1476,"missingDoc":false,"filters":[],"uses":{"explode":[1477],"get_site_option":[1477],"strpos":[1480]},"used_by":[]},"update_posts_count":{"doc":"\/**\n * Update a blog's post count.\n *\n * WordPress MS stores a blog's post count as an option so as\n * to avoid extraneous COUNTs when a blog's details are fetched\n * with get_blog_details(). This function is called when posts\n * are published to make sure the count stays current.\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1497,"missingDoc":false,"filters":[],"uses":{"update_option":[1499],"get_var":[1499]},"used_by":[]},"wpmu_log_new_registrations":{"doc":"\/**\n * Logs user registrations.\n *\n * @since MU\n *\n * @param int $blog_id\n * @param int $user_id\n *\/","file":"ms-functions.php","line":1510,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1512],"insert":[1513],"preg_replace":[1513],"current_time":[1513]},"used_by":[]},"global_terms":{"doc":"\/**\n * Maintains a canonical list of terms by syncing terms created for each blog with the global terms table.\n *\n * @since 3.0.0\n *\n * @see term_id_filter\n *\n * @param int $term_id An ID for a term on the current blog.\n * @return int An ID from the global terms table mapped from $term_id.\n *\/","file":"ms-functions.php","line":1526,"missingDoc":false,"filters":[],"uses":{"global_terms_enabled":[1530],"intval":[1542],"get_row":[1543,1561],"prepare":[1543,1545,1547,1561],"get_var":[1545,1547,1554,1555],"insert":[1549,1557],"max":[1556],"mt_rand":[1556],"global_terms":[1563],"update_option":[1570],"get_option":[1569],"update":[1572,1573,1574],"clean_term_cache":[1576]},"used_by":{"global_terms":[1563]}},"redirect_this_site":{"doc":"\/**\n * Ensure that the current site's domain is listed in the allowed redirect host list.\n *\n * @see wp_validate_redirect()\n * @since MU\n *\n * @return array The current site's domain\n *\/","file":"ms-functions.php","line":1592,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"upload_is_file_too_big":{"doc":"\/**\n * Check whether an upload is too big.\n *\n * @since MU\n *\n * @param array $upload\n * @return mixed If the upload is under the size limit, $upload is returned. Otherwise returns an error message.\n *\/","file":"ms-functions.php","line":1605,"missingDoc":false,"filters":[],"uses":{"is_array":[1606],"defined":[1606],"get_site_option":[1606,1610,1609],"sprintf":[1610],"__":[1610],"strlen":[1609]},"used_by":[]},"signup_nonce_fields":{"doc":"\/**\n * Add a nonce field to the signup page.\n *\n * @since MU\n * @uses wp_nonce_field()\n *\/","file":"ms-functions.php","line":1621,"missingDoc":false,"filters":[],"uses":{"mt_rand":[1622],"wp_nonce_field":[1624]},"used_by":[]},"signup_nonce_check":{"doc":"\/**\n * Process the signup nonce created in signup_nonce_fields().\n *\n * @since MU\n * @uses wp_create_nonce()\n *\n * @param array $result\n * @return array\n *\/","file":"ms-functions.php","line":1636,"missingDoc":false,"filters":[],"uses":{"strpos":[1637],"wp_die":[1641],"__":[1641],"wp_create_nonce":[1640]},"used_by":[]},"maybe_redirect_404":{"doc":"\/**\n * Correct 404 redirects when NOBLOGREDIRECT is defined.\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1651,"missingDoc":false,"filters":["'blog_redirect_404'"],"uses":{"network_home_url":[1655],"wp_redirect":[1656],"is_main_site":[1653],"is_404":[1653],"defined":[1653]},"used_by":[]},"maybe_add_existing_user_to_blog":{"doc":"\/**\n * Add a new user to a blog by visiting \/newbloguser\/username\/.\n *\n * This will only work when the user's details are saved as an option\n * keyed as 'new_user_x', where 'x' is the username of the user to be\n * added, as when a user is invited through the regular WP Add User interface.\n *\n * @since MU\n * @uses add_existing_user_to_blog()\n *\/","file":"ms-functions.php","line":1671,"missingDoc":false,"filters":[],"uses":{"strpos":[1672],"explode":[1675],"array_pop":[1676,1679],"get_option":[1681],"delete_option":[1683],"wp_die":[1686,1688],"sprintf":[1686,1688],"__":[1686,1688,1688],"home_url":[1686,1688],"is_wp_error":[1685],"add_existing_user_to_blog":[1685],"admin_url":[1688]},"used_by":[]},"add_existing_user_to_blog":{"doc":"\/**\n * Add a user to a blog based on details from maybe_add_existing_user_to_blog().\n *\n * @since MU\n * @uses add_user_to_blog()\n *\n * @param array $details\n *\/","file":"ms-functions.php","line":1699,"missingDoc":false,"filters":["'added_existing_user'"],"uses":{"add_user_to_blog":[1703],"is_array":[1702]},"used_by":{"maybe_add_existing_user_to_blog":[1685]}},"fix_phpmailer_messageid":{"doc":"\/**\n * Correct From host on outgoing mail to match the site domain\n *\n * @since MU\n *\/","file":"ms-functions.php","line":1734,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"is_user_spammy":{"doc":"\/**\n * Check to see whether a user is marked as a spammer, based on username\n *\n * @since MU\n * @uses get_current_user_id()\n * @uses get_user_id_from_string()\n *\n * @param string $username\n * @return bool\n *\/","file":"ms-functions.php","line":1749,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[1751],"get_user_id_from_string":[1753],"get_userdata":[1755]},"used_by":[]},"update_blog_public":{"doc":"\/**\n * Update this blog's 'public' setting in the global blogs table.\n *\n * Public blogs have a setting of 1, private blogs are 0.\n *\n * @since MU\n * @uses update_blog_status()\n *\n * @param int $old_value\n * @param int $value The new public value\n * @return bool\n *\/","file":"ms-functions.php","line":1772,"missingDoc":false,"filters":["'update_blog_public'"],"uses":{"update_blog_status":[1775]},"used_by":[]},"get_dashboard_blog":{"doc":"\/**\n * Get the \"dashboard blog\", the blog where users without a blog edit their profile data.\n *\n * @since MU\n * @uses get_blog_details()\n *\n * @return int\n *\/","file":"ms-functions.php","line":1787,"missingDoc":false,"filters":[],"uses":{"get_blog_details":[1789,1791],"get_site_option":[1788]},"used_by":[]},"is_user_option_local":{"doc":"\/**\n * Check whether a usermeta key has to do with the current blog.\n *\n * @since MU\n * @uses wp_get_current_user()\n *\n * @param string $key\n * @param int $user_id Optional. Defaults to current user.\n * @param int $blog_id Optional. Defaults to current blog.\n * @return bool\n *\/","file":"ms-functions.php","line":1805,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[1808],"get_blog_prefix":[1814]},"used_by":[]},"users_can_register_signup_filter":{"doc":"\/**\n * Check whether users can self-register, based on Network settings.\n *\n * @since MU\n *\n * @return bool\n *\/","file":"ms-functions.php","line":1829,"missingDoc":false,"filters":[],"uses":{"get_site_option":[1830]},"used_by":[]},"welcome_user_msg_filter":{"doc":"\/**\n * Ensure that the welcome message is not empty. Currently unused.\n *\n * @since MU\n *\n * @param string $text\n * @return string\n *\/","file":"ms-functions.php","line":1846,"missingDoc":false,"filters":[],"uses":{"remove_filter":[1848],"__":[1849],"update_site_option":[1861]},"used_by":[]},"update_site_option":{"doc":"\/**\n * Update the value of a site option that was already added.\n *\n * @see update_option()\n * @since 2.8.0\n * @package WordPress\n * @subpackage Option\n *\n * @uses apply_filters() Calls 'pre_update_site_option_$option' hook to allow overwriting the\n * \toption value to be stored.\n * @uses do_action() Calls 'update_site_option_$option' and 'update_site_option' hooks on success.\n *\n * @param string $option Name of option. Expected to not be SQL-escaped.\n * @param mixed $value Option value. Expected to not be SQL-escaped.\n * @return bool False if value was not updated and true if value was updated.\n *\/","file":"option.php","line":898,"missingDoc":false,"filters":["'pre_update_site_option_' . $option","\"update_site_option_{$option}\"","'update_site_option'"],"uses":{"get_site_option":[901],"add_site_option":[908],"update_option":[911],"sanitize_option":[913],"wp_cache_set":[915],"maybe_serialize":[918],"update":[919],"is_multisite":[910]},"used_by":{"welcome_user_msg_filter":[1861],"wp_update_network_counts":[1929,1932],"set_site_transient":[1047,1048],"wp_salt":[1364,1373]}},"force_ssl_content":{"doc":"\/**\n * Whether to force SSL on content.\n *\n * @since 2.8.5\n *\n * @param string|bool $force\n * @return bool True if forced, false if not forced.\n *\/","file":"ms-functions.php","line":1875,"missingDoc":false,"filters":[],"uses":[],"used_by":{"filter_SSL":[1901]}},"filter_SSL":{"doc":"\/**\n * Formats a URL to use https.\n *\n * Useful as a filter.\n *\n * @since 2.8.5\n *\n * @param string URL\n * @return string URL with https as the scheme\n *\/","file":"ms-functions.php","line":1897,"missingDoc":false,"filters":[],"uses":{"get_bloginfo":[1899],"is_string":[1898],"set_url_scheme":[1902],"force_ssl_content":[1901],"is_ssl":[1901]},"used_by":[]},"wp_schedule_update_network_counts":{"doc":"\/**\n * Schedule update of the network-wide counts for the current network.\n *\n * @since 3.1.0\n *\/","file":"ms-functions.php","line":1912,"missingDoc":false,"filters":[],"uses":{"is_main_site":[1913],"wp_schedule_event":[1917],"time":[1917],"wp_next_scheduled":[1916],"defined":[1916]},"used_by":[]},"wp_update_network_counts":{"doc":"\/**\n * Update the network-wide counts for the current network.\n *\n * @since 3.1.0\n *\/","file":"ms-functions.php","line":1925,"missingDoc":false,"filters":[],"uses":{"get_var":[1928,1931],"prepare":[1928],"update_site_option":[1929,1932]},"used_by":[]},"get_space_used":{"doc":"\/**\n * Returns the space used by the current blog.\n *\n * @since 3.5.0\n *\n * @return int Used space in megabytes\n *\/","file":"ms-functions.php","line":1942,"missingDoc":false,"filters":["'pre_get_space_used'"],"uses":{"wp_upload_dir":[1946],"get_dirsize":[1947]},"used_by":{"get_upload_space_available":[1984]}},"get_space_allowed":{"doc":"\/**\n * Returns the upload quota for the current blog.\n *\n * @since MU\n *\n * @return int Quota in megabytes\n *\/","file":"ms-functions.php","line":1960,"missingDoc":false,"filters":[],"uses":{"get_option":[1961],"get_site_option":[1964],"is_numeric":[1963,1966]},"used_by":{"get_upload_space_available":[1980]}},"get_upload_space_available":{"doc":"\/**\n * Determines if there is any upload space left in the current blog's quota.\n *\n * @since 3.0.0\n *\n * @return int of upload space available in bytes\n *\/","file":"ms-functions.php","line":1979,"missingDoc":false,"filters":[],"uses":{"get_space_allowed":[1980],"get_site_option":[1981],"get_space_used":[1984]},"used_by":{"is_upload_space_available":[2002],"upload_size_limit_filter":[2015]}},"upload_size_limit_filter":{"doc":"\/**\n * @since 3.0.0\n *\n * @return int of upload size limit in bytes\n *\/","file":"ms-functions.php","line":2010,"missingDoc":false,"filters":[],"uses":{"get_site_option":[2011,2012],"min":[2013,2015],"get_upload_space_available":[2015]},"used_by":[]},"ms_site_check":{"doc":"\/**\n * Checks status of current blog.\n *\n * Checks if the blog is deleted, inactive, archived, or spammed.\n *\n * Dies with a default message if the blog does not pass the check.\n *\n * To change the default message when a blog does not pass the check,\n * use the wp-content\/blog-deleted.php, blog-inactive.php and\n * blog-suspended.php drop-ins.\n *\n * @return bool|string Returns true on success, or drop-in file to include.\n *\/","file":"ms-load.php","line":71,"missingDoc":false,"filters":["'ms_site_check'"],"uses":{"get_blog_details":[74],"is_super_admin":[82],"wp_die":[89,96,103],"__":[89,96,103],"file_exists":[86,93,100],"sprintf":[96],"str_replace":[96],"get_site_option":[96]},"used_by":[]},"get_current_site_name":{"doc":"\/**\n * Sets current site name.\n *\n * @access private\n * @since 3.0.0\n * @return object $current_site object with site_name\n *\/","file":"ms-load.php","line":116,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[119],"get_var":[121],"prepare":[121],"ucfirst":[123],"wp_cache_set":[124]},"used_by":{"wpmu_current_site":[173],"__main":[114]}},"wpmu_current_site":{"doc":"\/**\n * Sets current_site object.\n *\n * @access private\n * @since 3.0.0\n * @return object $current_site object\n *\/","file":"ms-load.php","line":137,"missingDoc":false,"filters":[],"uses":{"defined":[144,149,147,143,143,210],"substr":[153,154,175,174,179,200],"wp_load_core_site_options":[158,170],"wp_cache_get":[163],"get_results":[167],"get_var":[172],"prepare":[172,182,184,188,190,201,207],"get_current_site_name":[173],"wp_cache_set":[176],"count":[168,218],"strpos":[179,200],"get_row":[182,184,188,190,201,207],"is_subdomain_install":[199],"wp_load_translations_early":[216],"wp_die":[219,221],"sprintf":[219],"__":[219,221]},"used_by":{"__main":[48]}},"wp_load_core_site_options":{"doc":"\/**\n * Loads and caches certain often requested site options if is_multisite() and a persistent cache is not being used.\n *\n * @since 3.0.0\n * @package WordPress\n * @subpackage Option\n *\n * @param int $site_id Optional site ID for which to query the options. Defaults to the current site.\n *\/","file":"option.php","line":168,"missingDoc":false,"filters":[],"uses":{"is_multisite":[171],"defined":[171],"implode":[179],"get_results":[180],"prepare":[180],"maybe_unserialize":[185],"wp_cache_set":[187]},"used_by":{"wpmu_current_site":[158,170]}},"ms_not_installed":{"doc":"\/**\n * Displays a failure message.\n *\n * Used when a blog's tables do not exist. Checks for a missing $wpdb->site table as well.\n *\n * @access private\n * @since 3.0.0\n *\/","file":"ms-load.php","line":232,"missingDoc":false,"filters":[],"uses":{"wp_load_translations_early":[235],"__":[237,241,242,244,246,247,248,249],"is_admin":[239],"sprintf":[244,246],"rtrim":[246],"get_var":[243],"tables":[250],"wp_die":[257]},"used_by":{"__main":[104]}},"Walker_Nav_Menu::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n *\/","file":"nav-menu-template.php","line":40,"missingDoc":false,"filters":[],"uses":{"str_repeat":[41]},"used_by":[]},"Walker_Nav_Menu::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n *\/","file":"nav-menu-template.php","line":52,"missingDoc":false,"filters":[],"uses":{"str_repeat":[53]},"used_by":[]},"Walker_Nav_Menu::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $item Menu item data object.\n * @param int $depth Depth of menu item. Used for padding.\n * @param int $current_page Menu item ID.\n * @param object $args\n *\/","file":"nav-menu-template.php","line":67,"missingDoc":false,"filters":["'nav_menu_css_class'","'nav_menu_item_id'","'the_title'","'walker_nav_menu_start_el'"],"uses":{"str_repeat":[68],"join":[75],"array_filter":[75],"esc_attr":[76,79,83,84,85,86]},"used_by":[]},"Walker_Nav_Menu::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 3.0.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $item Page data object. Not used.\n * @param int $depth Depth of page. Not Used.\n *\/","file":"nav-menu-template.php","line":105,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_get_nav_menu_items":{"doc":"\/**\n * Returns all menu items of a navigation menu.\n *\n * @since 3.0.0\n *\n * @param string $menu menu name, id, or slug\n * @param string $args\n * @return mixed $items array of menu items, else false.\n *\/","file":"nav-menu.php","line":470,"missingDoc":false,"filters":["'wp_get_nav_menu_items'"],"uses":{"wp_get_nav_menu_object":[473],"get_objects_in_term":[480],"wp_parse_args":[487],"implode":[489],"count":[488],"get_posts":[493,516],"is_wp_error":[495],"is_array":[495],"get_post_meta":[504,505,506],"array_keys":[515,522],"get_terms":[523],"array_map":[529],"array_filter":[532],"is_admin":[531],"usort":[536]},"used_by":{"wp_nav_menu":[158,167],"wp_update_nav_menu_item":[304],"_wp_auto_add_pages_to_menu":[774]}},"_wp_menu_item_classes_by_context":{"doc":"\/**\n * Add the class property classes for the current context, if applicable.\n *\n * @access private\n * @since 3.0\n *\n * @param array $menu_items The current menu item objects to which to add the class property information.\n *\/","file":"nav-menu-template.php","line":253,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[256],"get_option":[265],"_get_term_hierarchy":[270,296],"wp_get_object_terms":[271],"array_merge":[273],"is_array":[272],"is_taxonomy_hierarchical":[269,295],"get_object_taxonomies":[268],"is_post_type_hierarchical":[267,424],"array_filter":[315,407,408,409],"home_url":[317,384,397],"get_post_meta":[348,378],"in_array":[349,379,384,372,329,425,433,444,448,452,457,459],"untrailingslashit":[366,369,370,384,384,397],"set_url_scheme":[367],"strpos":[368,368],"substr":[368],"preg_replace":[370],"is_front_page":[393],"array_unique":[405,407,408,409,463],"intval":[444]},"used_by":{"wp_nav_menu":[198]}},"walk_nav_menu_tree":{"doc":"\/**\n * Retrieve the HTML list content for nav menu items.\n *\n * @uses Walker_Nav_Menu to create HTML list content.\n * @since 3.0.0\n * @see Walker::walk() for parameters and return description.\n *\/","file":"nav-menu-template.php","line":474,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[478]},"used_by":{"wp_nav_menu":[208]}},"_get_term_hierarchy":{"doc":"\/**\n * Retrieves children of taxonomy as Term IDs.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n *\n * @uses update_option() Stores all of the children in \"$taxonomy_children\"\n *\t option. That is the name of the taxonomy, immediately followed by '_children'.\n *\n * @param string $taxonomy Taxonomy Name\n * @return array Empty if $taxonomy isn't hierarchical or returns children as Term IDs.\n *\/","file":"taxonomy.php","line":2763,"missingDoc":false,"filters":[],"uses":{"is_taxonomy_hierarchical":[2764],"get_option":[2766],"is_array":[2768],"get_terms":[2771],"update_option":[2776]},"used_by":{"_wp_menu_item_classes_by_context":[270,296],"get_term_children":[1013],"get_terms":[1229,1235,1413],"clean_term_cache":[2629],"_get_term_children":[2803],"_pad_term_counts":[2860]}},"_nav_menu_item_id_use_once":{"doc":"\/**\n * Prevents a menu item ID from being used more than once.\n *\n * @since 3.0.1\n * @access private\n *\/","file":"nav-menu-template.php","line":487,"missingDoc":false,"filters":[],"uses":{"in_array":[489]},"used_by":[]},"is_nav_menu":{"doc":"\/**\n * Check if the given ID is a navigation menu.\n *\n * Returns true if it is; false otherwise.\n *\n * @since 3.0.0\n *\n * @param int|string $menu The menu to check (id, slug, or name)\n * @return bool Whether the menu exists.\n *\/","file":"nav-menu.php","line":49,"missingDoc":false,"filters":[],"uses":{"wp_get_nav_menu_object":[53],"is_wp_error":[57]},"used_by":[]},"register_nav_menus":{"doc":"\/**\n * Register navigation menus for a theme.\n *\n * @since 3.0.0\n *\n * @param array $locations Associative array of menu location identifiers (like a slug) and descriptive text.\n *\/","file":"nav-menu.php","line":73,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[76],"array_merge":[78]},"used_by":{"register_nav_menu":[107]}},"unregister_nav_menu":{"doc":"\/**\n * Unregisters a navigation menu for a theme.\n *\n * @param array $location the menu location identifier\n *\n * @return bool True on success, false on failure.\n *\/","file":"nav-menu.php","line":88,"missingDoc":false,"filters":[],"uses":{"is_array":[91]},"used_by":[]},"register_nav_menu":{"doc":"\/**\n * Register a navigation menu for a theme.\n *\n * @since 3.0.0\n *\n * @param string $location Menu location identifier, like a slug.\n * @param string $description Menu location descriptive text.\n *\/","file":"nav-menu.php","line":106,"missingDoc":false,"filters":[],"uses":{"register_nav_menus":[107]},"used_by":[]},"has_nav_menu":{"doc":"\/**\n * Whether a registered nav menu location has a menu assigned to it.\n *\n * @since 3.0.0\n * @param string $location Menu location identifier.\n * @return bool Whether location has a menu.\n *\/","file":"nav-menu.php","line":140,"missingDoc":false,"filters":[],"uses":{"get_nav_menu_locations":[141]},"used_by":[]},"is_nav_menu_item":{"doc":"\/**\n * Determine whether the given ID is a nav menu item.\n *\n * @since 3.0.0\n *\n * @param int $menu_item_id The ID of the potential nav menu item.\n * @return bool Whether the given ID is that of a nav menu item.\n *\/","file":"nav-menu.php","line":153,"missingDoc":false,"filters":[],"uses":{"is_wp_error":[154],"get_post_type":[154]},"used_by":{"wp_update_nav_menu_item":[274],"wp_get_associated_nav_menu_items":[694]}},"wp_create_nav_menu":{"doc":"\/**\n * Create a Navigation Menu.\n *\n * @since 3.0.0\n *\n * @param string $menu_name Menu Name\n * @return mixed Menu object on success|WP_Error on failure\n *\/","file":"nav-menu.php","line":165,"missingDoc":false,"filters":[],"uses":{"wp_update_nav_menu_object":[166]},"used_by":[]},"wp_update_nav_menu_object":{"doc":"\/**\n * Save the properties of a menu or create a new menu with those properties.\n *\n * @since 3.0.0\n *\n * @param int $menu_id The ID of the menu or \"0\" to create a new menu.\n * @param array $menu_data The array of menu data.\n * @return int|error object The menu's ID or WP_Error object.\n *\/","file":"nav-menu.php","line":206,"missingDoc":false,"filters":["'wp_create_nav_menu'","'wp_update_nav_menu'"],"uses":{"wp_get_nav_menu_object":[209],"get_term_by":[219,230],"sprintf":[226,233],"__":[226,233],"esc_html":[226,233],"is_wp_error":[222,237,229,252],"wp_insert_term":[235],"wp_update_term":[250]},"used_by":{"wp_create_nav_menu":[166]}},"wp_delete_nav_menu":{"doc":"\/**\n * Delete a Navigation Menu.\n *\n * @since 3.0.0\n *\n * @param string $menu name|id|slug\n * @return mixed Menu object on success|WP_Error on failure\n *\/","file":"nav-menu.php","line":177,"missingDoc":false,"filters":["'wp_delete_nav_menu'"],"uses":{"wp_get_nav_menu_object":[178],"get_objects_in_term":[182],"wp_delete_post":[185],"wp_delete_term":[189],"is_wp_error":[191]},"used_by":[]},"get_objects_in_term":{"doc":"\/**\n * Retrieve object_ids of valid taxonomy and term.\n *\n * The strings of $taxonomies must exist before this function will continue. On\n * failure of finding a valid taxonomy, it will return an WP_Error class, kind\n * of like Exceptions in PHP 5, except you can't catch them. Even so, you can\n * still test for the WP_Error class and get the error message.\n *\n * The $terms aren't checked the same as $taxonomies, but still need to exist\n * for $object_ids to be returned.\n *\n * It is possible to change the order that object_ids is returned by either\n * using PHP sort family functions or using the database by using $args with\n * either ASC or DESC array. The value should be in the key named 'order'.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses wp_parse_args() Creates an array from string $args.\n *\n * @param int|array $term_ids Term id or array of term ids of terms that will be used\n * @param string|array $taxonomies String of taxonomy name or Array of string values of taxonomy names\n * @param array|string $args Change the order of the object_ids, either ASC or DESC\n * @return WP_Error|array If the taxonomy does not exist, then WP_Error will be returned. On success\n *\tthe array can be empty meaning that there are no $object_ids found or it will return the $object_ids found.\n *\/","file":"taxonomy.php","line":507,"missingDoc":false,"filters":[],"uses":{"is_array":[510,513],"__":[518],"taxonomy_exists":[517],"wp_parse_args":[522],"extract":[523],"strtolower":[525],"array_map":[527],"implode":[529,530],"get_col":[532]},"used_by":{"wp_delete_nav_menu":[182],"wp_get_nav_menu_items":[480]}},"wp_update_nav_menu_item":{"doc":"\/**\n * Save the properties of a menu item or create a new one.\n *\n * @since 3.0.0\n *\n * @param int $menu_id The ID of the menu. Required. If \"0\", makes the menu item a draft orphan.\n * @param int $menu_item_db_id The ID of the menu item. If \"0\", creates a new menu item.\n * @param array $menu_item_data The menu item's data.\n * @return int The menu item's database ID or WP_Error object on failure.\n *\/","file":"nav-menu.php","line":269,"missingDoc":false,"filters":["'wp_update_nav_menu_item'"],"uses":{"__":[275],"is_nav_menu_item":[274],"wp_get_nav_menu_object":[277],"is_wp_error":[279,361],"wp_parse_args":[299],"wp_get_nav_menu_items":[304],"array_pop":[305],"count":[306],"get_post_field":[309],"get_term_field":[321,322],"get_post":[325],"intval":[354],"is_object_in_term":[353],"wp_insert_post":[360],"update_post_meta":[372,373,374,375,376,380,381,382,385],"sanitize_key":[372,375,376],"strval":[373,374],"array_map":[378,379],"explode":[378,379],"implode":[379],"esc_url_raw":[382],"time":[385],"get_post_meta":[386],"delete_post_meta":[387],"wp_update_post":[393]},"used_by":{"_wp_auto_add_pages_to_menu":[781]}},"_sort_nav_menu_items":{"doc":"\/**\n * Sort menu items by the desired key.\n *\n * @since 3.0.0\n * @access private\n *\n * @param object $a The first object to compare\n * @param object $b The second object to compare\n * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b.\n *\/","file":"nav-menu.php","line":425,"missingDoc":false,"filters":[],"uses":{"strcmp":[442]},"used_by":[]},"_is_valid_nav_menu_item":{"doc":"\/**\n * Returns if a menu item is valid. Bug #13958\n *\n * @since 3.2.0\n * @access private\n *\n * @param object $menu_item The menu item to check\n * @return bool false if invalid, else true.\n *\/","file":"nav-menu.php","line":454,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_setup_nav_menu_item":{"doc":"\/**\n * Decorates a menu item object with the shared navigation menu item properties.\n *\n * Properties:\n * - db_id: \t\tThe DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).\n * - object_id:\t\tThe DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.\n * - type:\t\tThe family of objects originally represented, such as \"post_type\" or \"taxonomy.\"\n * - object:\t\tThe type of object originally represented, such as \"category,\" \"post\", or \"attachment.\"\n * - type_label:\tThe singular label used to describe this type of menu item.\n * - post_parent:\tThe DB ID of the original object's parent object, if any (0 otherwise).\n * - menu_item_parent: \tThe DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.\n * - url:\t\tThe URL to which this menu item points.\n * - title:\t\tThe title of this menu item.\n * - target: \t\tThe target attribute of the link element for this menu item.\n * - attr_title:\tThe title attribute of the link element for this menu item.\n * - classes:\t\tThe array of class attribute values for the link element of this menu item.\n * - xfn:\t\tThe XFN relationship expressed in the link of this menu item.\n * - description:\tThe description of this menu item.\n *\n * @since 3.0.0\n *\n * @param object $menu_item The menu item to modify.\n * @return object $menu_item The menu item with standard menu item properties.\n *\/","file":"nav-menu.php","line":570,"missingDoc":false,"filters":["'nav_menu_attr_title'","'nav_menu_description'","'nav_menu_attr_title'","'nav_menu_description'","'wp_setup_nav_menu_item'"],"uses":{"get_post_meta":[574,575,576,577,614,617,624,625],"get_post_type_object":[580,632],"get_permalink":[588,637],"get_post":[590],"get_taxonomy":[595,653],"get_term_link":[603,658],"is_wp_error":[604,607],"get_term_field":[606,661],"__":[612],"wp_trim_words":[622]},"used_by":[]},"wp_get_associated_nav_menu_items":{"doc":"\/**\n * Get the menu items associated with a particular object.\n *\n * @since 3.0.0\n *\n * @param int $object_id The ID of the original object.\n * @param string $object_type The type of object, such as \"taxonomy\" or \"post_type.\"\n * @return array The array of menu item IDs; empty array if none;\n *\/","file":"nav-menu.php","line":679,"missingDoc":false,"filters":[],"uses":{"query":[684],"get_post_meta":[695],"is_nav_menu_item":[694],"array_unique":[702]},"used_by":{"_wp_delete_post_menu_item":[717],"_wp_delete_tax_menu_item":[736]}},"_wp_delete_post_menu_item":{"doc":"\/**\n * Callback for handling a menu item when its original object is deleted.\n *\n * @since 3.0.0\n * @access private\n *\n * @param int $object_id The ID of the original object being trashed.\n *\n *\/","file":"nav-menu.php","line":714,"missingDoc":false,"filters":[],"uses":{"wp_get_associated_nav_menu_items":[717],"wp_delete_post":[720]},"used_by":[]},"_wp_delete_tax_menu_item":{"doc":"\/**\n * Callback for handling a menu item when its original object is deleted.\n *\n * @since 3.0.0\n * @access private\n *\n * @param int $object_id The ID of the original object being trashed.\n *\n *\/","file":"nav-menu.php","line":733,"missingDoc":false,"filters":[],"uses":{"wp_get_associated_nav_menu_items":[736],"wp_delete_post":[739]},"used_by":[]},"_wp_auto_add_pages_to_menu":{"doc":"\/**\n * Automatically add newly published page objects to menus with that as an option.\n *\n * @since 3.0.0\n * @access private\n *\n * @param string $new_status The new status of the post object.\n * @param string $old_status The old status of the post object.\n * @param object $post The post object being transitioned from one status to another.\n * @return void\n *\/","file":"nav-menu.php","line":754,"missingDoc":false,"filters":[],"uses":{"get_option":[759],"is_array":[760,763,775],"wp_get_nav_menu_items":[774],"wp_update_nav_menu_item":[781]},"used_by":[]},"wp_protect_special_option":{"doc":"\/**\n * Protect WordPress special option from being modified.\n *\n * Will die if $option is in protected list. Protected options are 'alloptions'\n * and 'notoptions' options.\n *\n * @since 2.2.0\n * @package WordPress\n * @subpackage Option\n *\n * @param string $option Option name.\n *\/","file":"option.php","line":106,"missingDoc":false,"filters":[],"uses":{"wp_die":[109],"sprintf":[109],"__":[109],"esc_html":[109],"in_array":[108]},"used_by":{"update_option":[222],"add_option":[303],"delete_option":[363]}},"form_option":{"doc":"\/**\n * Print option value after sanitizing for forms.\n *\n * @uses attr Sanitizes value.\n * @since 1.5.0\n * @package WordPress\n * @subpackage Option\n *\n * @param string $option Option name.\n *\/","file":"option.php","line":122,"missingDoc":false,"filters":[],"uses":{"esc_attr":[123],"get_option":[123]},"used_by":[]},"wp_user_settings":{"doc":"\/**\n * Saves and restores user interface settings stored in a cookie.\n *\n * Checks if the current user-settings cookie is updated and stores it. When no\n * cookie exists (different browser used), adds the last saved cookie restoring\n * the settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\/","file":"option.php","line":532,"missingDoc":false,"filters":[],"uses":{"is_admin":[534],"defined":[537],"wp_get_current_user":[540],"is_super_admin":[543],"in_array":[544],"get_current_blog_id":[544],"array_keys":[544],"get_blogs_of_user":[544],"get_user_option":[548,557],"preg_replace":[551,558],"update_user_option":[561,562],"time":[562,568,569,569],"strpos":[553],"setcookie":[568,569]},"used_by":[]},"update_user_option":{"doc":"\/**\n * Update user option with global blog capability.\n *\n * User options are just like user metadata except that they have support for\n * global blog options. If the 'global' parameter is false, which it is by default\n * it will prepend the WordPress table prefix to the option name.\n *\n * Deletes the user option if $newvalue is empty.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param int $user_id User ID\n * @param string $option_name User option name.\n * @param mixed $newvalue User option value.\n * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).\n * @return unknown\n *\/","file":"user.php","line":273,"missingDoc":false,"filters":[],"uses":{"delete_user_meta":[282],"is_null":[281],"is_scalar":[281],"update_user_meta":[284]},"used_by":{"wp_user_settings":[561,562],"wp_set_all_user_settings":[719,720],"delete_all_user_settings":[736]}},"get_all_user_settings":{"doc":"\/**\n * Retrieve all user interface settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @return array the last saved user settings or empty array.\n *\/","file":"option.php","line":664,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[667],"is_array":[670],"preg_replace":[675],"parse_str":[678,683],"strpos":[677],"get_user_option":[681],"is_string":[682]},"used_by":{"get_user_setting":[586],"set_user_setting":[610],"delete_user_setting":[639]}},"set_user_setting":{"doc":"\/**\n * Add or update user interface setting.\n *\n * Both $name and $value can contain only ASCII letters, numbers and underscores.\n * This function has to be used before any output has started as it calls setcookie().\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @param string $name The name of the setting.\n * @param string $value The value for the setting.\n * @return bool true if set successfully\/false if not.\n *\/","file":"option.php","line":605,"missingDoc":false,"filters":[],"uses":{"headers_sent":[607],"get_all_user_settings":[610],"preg_replace":[611],"wp_set_all_user_settings":[618]},"used_by":[]},"wp_set_all_user_settings":{"doc":"\/**\n * Private. Set all user interface settings.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @param unknown $all\n * @return bool\n *\/","file":"option.php","line":699,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[702],"is_super_admin":[705],"in_array":[706],"get_current_blog_id":[706],"array_keys":[706],"get_blogs_of_user":[706],"preg_replace":[713],"rtrim":[717],"update_user_option":[719,720],"time":[720]},"used_by":{"set_user_setting":[618],"delete_user_setting":[650]}},"delete_user_setting":{"doc":"\/**\n * Delete user interface settings.\n *\n * Deleting settings would reset them to the defaults.\n * This function has to be used before any output has started as it calls setcookie().\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\n * @param mixed $names The name or array of names of the setting to be deleted.\n * @return bool true if deleted successfully\/false if not.\n *\/","file":"option.php","line":634,"missingDoc":false,"filters":[],"uses":{"headers_sent":[636],"get_all_user_settings":[639],"wp_set_all_user_settings":[650]},"used_by":[]},"delete_all_user_settings":{"doc":"\/**\n * Delete the user settings of the current user.\n *\n * @package WordPress\n * @subpackage Option\n * @since 2.7.0\n *\/","file":"option.php","line":732,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[733],"update_user_option":[736],"setcookie":[737],"time":[737]},"used_by":[]},"delete_site_option":{"doc":"\/**\n * Removes site option by name.\n *\n * @see delete_option()\n * @package WordPress\n * @subpackage Option\n * @since 2.8.0\n *\n * @uses do_action() Calls 'pre_delete_site_option_$option' hook before option is deleted.\n * @uses do_action() Calls 'delete_site_option' and 'delete_site_option_$option'\n * \thooks on success.\n *\n * @param string $option Name of option to remove. Expected to not be SQL-escaped.\n * @return bool True, if succeed. False, if failure.\n *\/","file":"option.php","line":855,"missingDoc":false,"filters":["'pre_delete_site_option_' . $option","\"delete_site_option_{$option}\"","'delete_site_option'"],"uses":{"delete_option":[863],"get_row":[865],"prepare":[865],"is_null":[866],"wp_cache_delete":[869],"delete":[871],"is_multisite":[862]},"used_by":{"delete_site_transient":[953,955],"get_site_transient":[999,1000]}},"delete_site_transient":{"doc":"\/**\n * Delete a site transient.\n *\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses do_action() Calls 'delete_site_transient_$transient' hook before transient is deleted.\n * @uses do_action() Calls 'deleted_site_transient' hook on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return bool True if successful, false otherwise\n *\/","file":"option.php","line":944,"missingDoc":false,"filters":["'delete_site_transient_' . $transient","'deleted_site_transient'"],"uses":{"wp_cache_delete":[949],"delete_site_option":[953,955]},"used_by":{"wp_clean_themes_cache":[115]}},"get_site_transient":{"doc":"\/**\n * Get the value of a site transient.\n *\n * If the transient does not exist or does not have a value, then the return value\n * will be false.\n *\n * @see get_transient()\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_site_transient_$transient' hook before checking the transient.\n * \tAny value other than false will \"short-circuit\" the retrieval of the transient\n *\tand return the returned value.\n * @uses apply_filters() Calls 'site_transient_$option' hook, after checking the transient, with\n * \tthe transient value.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @return mixed Value of transient\n *\/","file":"option.php","line":982,"missingDoc":false,"filters":["'pre_site_transient_' . $transient","'site_transient_' . $transient"],"uses":{"wp_cache_get":[990],"get_site_option":[997,1005],"delete_site_option":[999,1000],"time":[998],"in_array":[995]},"used_by":{"get_theme_roots":[288,291],"search_theme_directories":[352,426],"wp_version_check":[30],"wp_update_plugins":[148],"wp_update_themes":[240],"wp_get_update_data":[337,343],"_maybe_update_core":[371],"_maybe_update_plugins":[392],"_maybe_update_themes":[408]}},"set_site_transient":{"doc":"\/**\n * Set\/update the value of a site transient.\n *\n * You do not need to serialize values, if the value needs to be serialize, then\n * it will be serialized before it is set.\n *\n * @see set_transient()\n * @since 2.9.0\n * @package WordPress\n * @subpackage Transient\n *\n * @uses apply_filters() Calls 'pre_set_site_transient_$transient' hook to allow overwriting the\n * \ttransient value to be stored.\n * @uses do_action() Calls 'set_site_transient_$transient' and 'setted_site_transient' hooks on success.\n *\n * @param string $transient Transient name. Expected to not be SQL-escaped.\n * @param mixed $value Transient value. Expected to not be SQL-escaped.\n * @param int $expiration Time until expiration in seconds, default 0\n * @return bool False if value was not set and true if value was set.\n *\/","file":"option.php","line":1031,"missingDoc":false,"filters":["'pre_set_site_transient_' . $transient","'set_site_transient_' . $transient","'setted_site_transient'"],"uses":{"wp_cache_set":[1037],"add_site_option":[1043,1044],"time":[1043,1047],"update_site_option":[1047,1048],"get_site_option":[1041]},"used_by":{"search_theme_directories":[427],"wp_version_check":[47,120],"wp_update_plugins":[195,217],"wp_update_themes":[302,323]}},"set_current_user":{"doc":"\/**\n * Changes the current user by ID or name.\n *\n * Set $id to null and specify a name if you do not know a user's ID.\n *\n * @since 2.0.1\n * @see wp_set_current_user() An alias of wp_set_current_user()\n * @deprecated 3.0.0\n * @deprecated Use wp_set_current_user()\n *\n * @param int|null $id User ID.\n * @param string $name Optional. The user's username\n * @return object returns wp_set_current_user()\n *\/","file":"pluggable-deprecated.php","line":33,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[34],"wp_set_current_user":[35]},"used_by":[]},"get_userdatabylogin":{"doc":"\/**\n * Retrieve user info by login name.\n *\n * @since 0.71\n * @deprecated 3.3.0\n * @deprecated Use get_user_by('login')\n *\n * @param string $user_login User's username\n * @return bool|object False on failure, User DB row object\n *\/","file":"pluggable-deprecated.php","line":50,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[51],"get_user_by":[52]},"used_by":[]},"get_user_by_email":{"doc":"\/**\n * Retrieve user info by email.\n *\n * @since 2.5\n * @deprecated 3.3.0\n * @deprecated Use get_user_by('email')\n *\n * @param string $email User's email address\n * @return bool|object False on failure, User DB row object\n *\/","file":"pluggable-deprecated.php","line":67,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[68],"get_user_by":[69]},"used_by":[]},"wp_setcookie":{"doc":"\/**\n * Sets a cookie for a user who just logged in. This function is deprecated.\n *\n * @since 1.5\n * @deprecated 2.5\n * @deprecated Use wp_set_auth_cookie()\n * @see wp_set_auth_cookie()\n *\n * @param string $username The user's username\n * @param string $password Optional. The user's password\n * @param bool $already_md5 Optional. Whether the password has already been through MD5\n * @param string $home Optional. Will be used instead of COOKIEPATH if set\n * @param string $siteurl Optional. Will be used instead of SITECOOKIEPATH if set\n * @param bool $remember Optional. Remember that the user is logged in\n *\/","file":"pluggable-deprecated.php","line":89,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[90],"get_user_by":[91],"wp_set_auth_cookie":[92]},"used_by":[]},"wp_set_auth_cookie":{"doc":"\/**\n * Sets the authentication cookies based User ID.\n *\n * The $remember parameter increases the time that the cookie will be kept. The\n * default the cookie is kept without remembering is two days. When $remember is\n * set, the cookies will be kept for 14 days or two weeks.\n *\n * @since 2.5\n *\n * @param int $user_id User ID\n * @param bool $remember Whether to remember the user\n *\/","file":"pluggable.php","line":652,"missingDoc":false,"filters":["'auth_cookie_expiration'","'auth_cookie_expiration'","'secure_auth_cookie'","'secure_logged_in_cookie'","'set_auth_cookie'","'set_logged_in_cookie'"],"uses":{"time":[654,656],"is_ssl":[661],"wp_generate_auth_cookie":[674,675],"setcookie":[680,681,682,684]},"used_by":{"wp_setcookie":[92],"wp_signon":[63],"wp_update_user":[1485]}},"wp_clearcookie":{"doc":"\/**\n * Clears the authentication cookie, logging the user out. This function is deprecated.\n *\n * @since 1.5\n * @deprecated 2.5\n * @deprecated Use wp_clear_auth_cookie()\n * @see wp_clear_auth_cookie()\n *\/","file":"pluggable-deprecated.php","line":107,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[108],"wp_clear_auth_cookie":[109]},"used_by":[]},"wp_clear_auth_cookie":{"doc":"\/**\n * Removes all of the cookies associated with authentication.\n *\n * @since 2.5\n *\/","file":"pluggable.php","line":694,"missingDoc":false,"filters":["'clear_auth_cookie'"],"uses":{"setcookie":[697,698,699,700,701,702,705,706,707,708,711,712,713,714],"time":[697,698,699,700,701,702,705,706,707,708,711,712,713,714]},"used_by":{"wp_clearcookie":[109],"wp_logout":[499],"wp_update_user":[1484]}},"wp_get_cookie_login":{"doc":"\/**\n * Gets the user cookie login. This function is deprecated.\n *\n * This function is deprecated and should no longer be extended as it won't be\n * used anywhere in WordPress. Also, plugins shouldn't use it either.\n *\n * @since 2.0.3\n * @deprecated 2.5\n * @deprecated No alternative\n *\n * @return bool Always returns false\n *\/","file":"pluggable-deprecated.php","line":128,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[129]},"used_by":[]},"wp_login":{"doc":"\/**\n * Checks a users login information and logs them in if it checks out. This function is deprecated.\n *\n * Use the global $error to get the reason why the login failed. If the username\n * is blank, no error will be set, so assume blank username on that case.\n *\n * Plugins extending this function should also provide the global $error and set\n * what the error is, so that those checking the global for why there was a\n * failure can utilize it later.\n *\n * @since 1.2.2\n * @deprecated Use wp_signon()\n * @global string $error Error when false is returned\n *\n * @param string $username User's username\n * @param string $password User's password\n * @param bool $deprecated Not used\n * @return bool False on login failure, true on successful check\n *\/","file":"pluggable-deprecated.php","line":156,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[157],"wp_authenticate":[160],"is_wp_error":[162],"get_error_message":[165]},"used_by":[]},"wp_atom_server::__call":{"doc":"","file":"pluggable-deprecated.php","line":184,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[185]},"used_by":[]},"wp_atom_server::__callStatic":{"doc":"","file":"pluggable-deprecated.php","line":188,"missingDoc":true,"filters":[],"uses":{"_deprecated_function":[189]},"used_by":[]},"setup_userdata":{"doc":"\/**\n * Set up global user vars.\n *\n * Used by wp_set_current_user() for back compat. Might be deprecated in the future.\n *\n * @since 2.0.4\n * @global string $userdata User description.\n * @global string $user_login The user username for logging in\n * @global int $user_level The level of the user\n * @global int $user_ID The ID of the user\n * @global string $user_email The email address of the user\n * @global string $user_url The url in the user's profile\n * @global string $user_identity The display name of the user\n *\n * @param int $for_user_id Optional. User ID to set up global data.\n *\/","file":"user.php","line":960,"missingDoc":false,"filters":[],"uses":{"get_current_user_id":[964],"get_userdata":[965]},"used_by":{"wp_set_current_user":[35]}},"get_currentuserinfo":{"doc":"\/**\n * Populate global variables with information about the currently logged in user.\n *\n * Will set the current user, if the current user is not set. The current user\n * will be set to the logged in person. If no user is logged in, then it will\n * set the current user to 0, which is invalid and won't have any permissions.\n *\n * @since 0.71\n * @uses $current_user Checks if the current user is set\n * @uses wp_validate_auth_cookie() Retrieves current logged in user.\n *\n * @return bool|null False on XMLRPC Request and invalid auth cookie. Null when current user set\n *\/","file":"pluggable.php","line":74,"missingDoc":false,"filters":[],"uses":{"wp_set_current_user":[85,91,96,102,107],"is_object":[82],"defined":[95],"is_blog_admin":[101],"is_network_admin":[101],"wp_validate_auth_cookie":[101,100]},"used_by":{"wp_get_current_user":[54]}},"wp_validate_auth_cookie":{"doc":"\/**\n * Validates authentication cookie.\n *\n * The checks include making sure that the authentication cookie is set and\n * pulling in the contents (if $cookie is not used).\n *\n * Makes sure the cookie is not expired. Verifies the hash in cookie is what is\n * should be and compares the two.\n *\n * @since 2.5\n *\n * @param string $cookie Optional. If used, will validate contents instead of cookie's\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return bool|int False if invalid cookie, User ID if valid.\n *\/","file":"pluggable.php","line":520,"missingDoc":false,"filters":["'auth_cookie_malformed'","'auth_cookie_expired'","'auth_cookie_bad_username'","'auth_cookie_bad_hash'","'auth_cookie_valid'"],"uses":{"wp_parse_auth_cookie":[521],"extract":[526],"defined":[531],"time":[535,556],"get_user_by":[540],"substr":[546],"wp_hash":[548],"hash_hmac":[549]},"used_by":{"get_currentuserinfo":[101,100],"auth_redirect":[765],"wp_authenticate_cookie":[123]}},"cache_users":{"doc":"\/**\n * Retrieve info for user lists to prevent multiple queries by get_userdata()\n *\n * @since 3.0.0\n *\n * @param array $user_ids User ID numbers list\n *\/","file":"pluggable.php","line":156,"missingDoc":false,"filters":[],"uses":{"_get_non_cached_ids":[159],"implode":[164],"get_results":[166],"update_user_caches":[170],"update_meta_cache":[173]},"used_by":{"WP_User_Query::query":[556]}},"wp_logout":{"doc":"\/**\n * Log the current user out.\n *\n * @since 2.5.0\n *\/","file":"pluggable.php","line":498,"missingDoc":false,"filters":["'wp_logout'"],"uses":{"wp_clear_auth_cookie":[499]},"used_by":[]},"wp_parse_auth_cookie":{"doc":"\/**\n * Parse a cookie into its components\n *\n * @since 2.7\n *\n * @param string $cookie\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return array Authentication cookie components\n *\/","file":"pluggable.php","line":602,"missingDoc":false,"filters":[],"uses":{"is_ssl":[615],"explode":[629],"count":[630],"compact":[635]},"used_by":{"wp_validate_auth_cookie":[521]}},"wp_hash":{"doc":"\/**\n * Get hash of given string.\n *\n * @since 2.0.3\n * @uses wp_salt() Get WordPress salt\n *\n * @param string $data Plain text to hash\n * @return string Hash of $data\n *\/","file":"pluggable.php","line":1394,"missingDoc":false,"filters":[],"uses":{"wp_salt":[1395],"hash_hmac":[1397]},"used_by":{"wp_validate_auth_cookie":[548],"wp_generate_auth_cookie":[583],"wp_verify_nonce":[1265,1268],"wp_create_nonce":[1292]}},"wp_generate_auth_cookie":{"doc":"\/**\n * Generate authentication cookie contents.\n *\n * @since 2.5\n * @uses apply_filters() Calls 'auth_cookie' hook on $cookie contents, User ID\n *\t\tand expiration of cookie.\n *\n * @param int $user_id User ID\n * @param int $expiration Cookie expiration in seconds\n * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in\n * @return string Authentication cookie contents\n *\/","file":"pluggable.php","line":578,"missingDoc":false,"filters":["'auth_cookie'"],"uses":{"get_userdata":[579],"substr":[581],"wp_hash":[583],"hash_hmac":[584]},"used_by":{"wp_set_auth_cookie":[674,675]}},"check_admin_referer":{"doc":"\/**\n * Makes sure that a user was referred from another admin page.\n *\n * To avoid security exploits.\n *\n * @since 1.2.0\n * @uses do_action() Calls 'check_admin_referer' on $action.\n *\n * @param string $action Action nonce\n * @param string $query_arg where to look for nonce in $_REQUEST (since 2.5)\n *\/","file":"pluggable.php","line":806,"missingDoc":false,"filters":["'check_admin_referer'"],"uses":{"_doing_it_wrong":[808],"__":[808],"strtolower":[810,811],"admin_url":[810],"wp_get_referer":[811],"wp_verify_nonce":[812],"wp_nonce_ays":[814],"strpos":[813]},"used_by":[]},"wp_verify_nonce":{"doc":"\/**\n * Verify that correct nonce was used with time limit.\n *\n * The user is given an amount of time to use the token, so therefore, since the\n * UID and $action remain the same, the independent variable is the time.\n *\n * @since 2.0.3\n *\n * @param string $nonce Nonce that was used in the form to verify\n * @param string|int $action Should give context to what is taking place and be the same when nonce was created.\n * @return bool Whether the nonce check passed or failed.\n *\/","file":"pluggable.php","line":1256,"missingDoc":false,"filters":["'nonce_user_logged_out'"],"uses":{"wp_get_current_user":[1257],"wp_nonce_tick":[1262],"substr":[1265,1268],"wp_hash":[1265,1268]},"used_by":{"check_admin_referer":[812],"check_ajax_referer":[837],"_show_post_preview":[5250]}},"wp_sanitize_redirect":{"doc":"\/**\n * Sanitizes a URL for use in a redirect.\n *\n * @since 2.3\n *\n * @return string redirect-sanitized URL\n **\/","file":"pluggable.php","line":889,"missingDoc":false,"filters":[],"uses":{"preg_replace":[890],"wp_kses_no_null":[891],"_deep_replace":[895]},"used_by":{"wp_redirect":[872],"wp_safe_redirect":[920]}},"wp_safe_redirect":{"doc":"\/**\n * Performs a safe (local) redirect, using wp_redirect().\n *\n * Checks whether the $location is using an allowed host, if it has an absolute\n * path. A plugin can therefore set or remove allowed host(s) to or from the\n * list.\n *\n * If the host is not allowed, then the redirect is to wp-admin on the siteurl\n * instead. This prevents malicious redirects which redirect to another host,\n * but only used in a few places.\n *\n * @since 2.3\n * @uses wp_validate_redirect() To validate the redirect is to an allowed host.\n *\n * @return void Does not return anything\n **\/","file":"pluggable.php","line":917,"missingDoc":false,"filters":[],"uses":{"wp_sanitize_redirect":[920],"wp_validate_redirect":[922],"admin_url":[922],"wp_redirect":[924]},"used_by":[]},"wp_validate_redirect":{"doc":"\/**\n * Validates a URL for use in a redirect.\n *\n * Checks whether the $location is using an allowed host, if it has an absolute\n * path. A plugin can therefore set or remove allowed host(s) to or from the\n * list.\n *\n * If the host is not allowed, then the redirect is to $default supplied\n *\n * @since 2.8.1\n * @uses apply_filters() Calls 'allowed_redirect_hosts' on an array containing\n *\t\tWordPress host string and $location host string.\n *\n * @param string $location The redirect to validate\n * @param string $default The value to return if $location is not allowed\n * @return string redirect-sanitized URL\n **\/","file":"pluggable.php","line":946,"missingDoc":false,"filters":["'allowed_redirect_hosts'"],"uses":{"substr":[948,952],"strpos":[952],"parse_url":[954,968],"home_url":[968],"in_array":[972],"strtolower":[972]},"used_by":{"wp_safe_redirect":[922]}},"wp_password_change_notification":{"doc":"\/**\n * Notify the blog admin of a user changing password, normally via email.\n *\n * @since 2.7\n *\n * @param object $user User Object\n *\/","file":"pluggable.php","line":1175,"missingDoc":false,"filters":[],"uses":{"sprintf":[1179,1183],"__":[1179,1183],"wp_specialchars_decode":[1182],"get_option":[1182,1183,1178],"wp_mail":[1183]},"used_by":[]},"wp_new_user_notification":{"doc":"\/**\n * Notify the blog admin of a new user, normally via email.\n *\n * @since 2.0\n *\n * @param int $user_id User ID\n * @param string $plaintext_pass Optional. The user's plaintext password\n *\/","file":"pluggable.php","line":1197,"missingDoc":false,"filters":[],"uses":{"get_userdata":[1198],"stripslashes":[1200,1201],"wp_specialchars_decode":[1205],"get_option":[1205,1211],"sprintf":[1207,1208,1209,1211,1216,1217,1220],"__":[1207,1208,1209,1211,1216,1217,1220],"wp_mail":[1211,1220],"wp_login_url":[1218]},"used_by":[]},"wp_nonce_tick":{"doc":"\/**\n * Get the time-dependent variable for nonce creation.\n *\n * A nonce has a lifespan of two ticks. Nonces in their second tick may be\n * updated, e.g. by autosave.\n *\n * @since 2.5\n *\n * @return int\n *\/","file":"pluggable.php","line":1236,"missingDoc":false,"filters":["'nonce_life'"],"uses":{"ceil":[1239],"time":[1239]},"used_by":{"wp_verify_nonce":[1262],"wp_create_nonce":[1290]}},"wp_salt":{"doc":"\/**\n * Get salt to add to hashes.\n *\n * Salts are created using secret keys. Secret keys are located in two places:\n * in the database and in the wp-config.php file. The secret key in the database\n * is randomly generated and will be appended to the secret keys in wp-config.php.\n *\n * The secret keys in wp-config.php should be updated to strong, random keys to maximize\n * security. Below is an example of how the secret key constants are defined.\n * Do not paste this example directly into wp-config.php. Instead, have a\n * {@link https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ secret key created} just\n * for you.\n *\n * <code>\n * define('AUTH_KEY', ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON');\n * define('SECURE_AUTH_KEY', 'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%\/U^O~');\n * define('LOGGED_IN_KEY', '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$\/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM');\n * define('NONCE_KEY', '%:R{[P|,s.KuMltH5}cI;\/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|');\n * define('AUTH_SALT', 'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');\n * define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H `}`L|9\/^4-3 STz},T(w}W<I`.JjPi)<Bmf1v,HpGe}T1:Xt7n');\n * define('LOGGED_IN_SALT', '+XSqHc;@Q*K_b|Z?NC[3H!!EONbh.n<+=uKR:>*c(u`g~EJBf#8u#R{mUEZrozmm');\n * define('NONCE_SALT', 'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT');\n * <\/code>\n *\n * Salting passwords helps against tools which has stored hashed values of\n * common dictionary strings. The added values makes it harder to crack.\n *\n * @since 2.5\n *\n * @link https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ Create secrets for wp-config.php\n *\n * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce)\n * @return string Salt value\n *\/","file":"pluggable.php","line":1331,"missingDoc":false,"filters":["'salt'","'salt'"],"uses":{"defined":[1341,1350,1352,1358],"constant":[1343,1359,1358,1358],"strtoupper":[1357],"get_site_option":[1361,1370],"wp_generate_password":[1363,1372],"update_site_option":[1364,1373],"hash_hmac":[1376],"in_array":[1355]},"used_by":{"wp_hash":[1395]}},"wp_hash_password":{"doc":"\/**\n * Create a hash (encrypt) of a plain text password.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @global object $wp_hasher PHPass object\n * @uses PasswordHash::HashPassword\n *\n * @param string $password Plain text user password to hash\n * @return string The hash string of the password\n *\/","file":"pluggable.php","line":1415,"missingDoc":false,"filters":[],"uses":{"HashPassword":[1424]},"used_by":{"wp_check_password":[1458],"wp_set_password":[1571],"wp_insert_user":[1300],"wp_update_user":[1471]}},"wp_check_password":{"doc":"\/**\n * Checks the plaintext password against the encrypted Password.\n *\n * Maintains compatibility between old version and the new cookie authentication\n * protocol using PHPass library. The $hash parameter is the encrypted password\n * and the function compares the plain text password when encrypted similarly\n * against the already encrypted password to see if they match.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @global object $wp_hasher PHPass object used for checking the password\n *\tagainst the $hash + $password\n * @uses PasswordHash::CheckPassword\n *\n * @param string $password Plaintext user's password\n * @param string $hash Hash of the user's password to check against.\n * @return bool False, if the $password does not match the hashed password\n *\/","file":"pluggable.php","line":1449,"missingDoc":false,"filters":["'check_password'","'check_password'"],"uses":{"md5":[1454],"wp_set_password":[1457],"wp_hash_password":[1458],"strlen":[1453],"CheckPassword":[1472]},"used_by":{"wp_authenticate_username_password":[109]}},"wp_set_password":{"doc":"\/**\n * Updates the user's password with a new encrypted one.\n *\n * For integration with other applications, this function can be overwritten to\n * instead use the other package password checking algorithm.\n *\n * @since 2.5\n * @uses $wpdb WordPress database object for queries\n * @uses wp_hash_password() Used to encrypt the user's password before passing to the database\n *\n * @param string $password The plaintext new user password\n * @param int $user_id User ID\n *\/","file":"pluggable.php","line":1568,"missingDoc":false,"filters":[],"uses":{"wp_hash_password":[1571],"update":[1572],"wp_cache_delete":[1574]},"used_by":{"wp_check_password":[1457]}},"wp_rand":{"doc":"\/**\n * Generates a random number\n *\n * @since 2.6.2\n *\n * @param int $min Lower limit for the generated number\n * @param int $max Upper limit for the generated number\n * @return int A random number between min and max\n *\/","file":"pluggable.php","line":1517,"missingDoc":false,"filters":[],"uses":{"get_transient":[1526],"defined":[1523,1531],"md5":[1527,1530],"uniqid":[1527],"microtime":[1527],"mt_rand":[1527],"sha1":[1528,1529],"set_transient":[1532],"strlen":[1522],"substr":[1536,1539],"abs":[1541,1550],"hexdec":[1541],"intval":[1550]},"used_by":{"wp_generate_password":[1499]}},"wp_text_diff":{"doc":"\/**\n * Displays a human readable HTML representation of the difference between two strings.\n *\n * The Diff is available for getting the changes between versions. The output is\n * HTML, so the primary use is for displaying the changes. If the two strings\n * are equivalent, then an empty string will be returned.\n *\n * The arguments supported and can be changed are listed below.\n *\n * 'title' : Default is an empty string. Titles the diff in a manner compatible\n *\t\twith the output.\n * 'title_left' : Default is an empty string. Change the HTML to the left of the\n *\t\ttitle.\n * 'title_right' : Default is an empty string. Change the HTML to the right of\n *\t\tthe title.\n *\n * @since 2.6\n * @see wp_parse_args() Used to change defaults to user defined settings.\n * @uses Text_Diff\n * @uses WP_Text_Diff_Renderer_Table\n *\n * @param string $left_string \"old\" (left) version of string\n * @param string $right_string \"new\" (right) version of string\n * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults.\n * @return string Empty string if strings are equivalent or HTML with differences.\n *\/","file":"pluggable.php","line":1704,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1706],"class_exists":[1708],"normalize_whitespace":[1711,1712],"explode":[1714,1715],"render":[1719]},"used_by":[]},"_wp_filter_build_unique_id":{"doc":"\/**\n * Build Unique ID for storage and retrieval.\n *\n * The old way to serialize the callback caused issues and this function is the\n * solution. It works by checking for objects and creating an a new property in\n * the class to keep track of the object and new objects of the same class that\n * need to be added.\n *\n * It also allows for the removal of actions and filters for objects after they\n * change class properties. It is possible to include the property $wp_filter_id\n * in your class and set it to \"null\" or a number to bypass the workaround.\n * However this will prevent you from adding new classes and any new classes\n * will overwrite the previous hook by the same class.\n *\n * Functions and static method callbacks are just returned as strings and\n * shouldn't have any speed penalty.\n *\n * @package WordPress\n * @subpackage Plugin\n * @access private\n * @since 2.2.3\n * @link http:\/\/trac.wordpress.org\/ticket\/3875\n *\n * @global array $wp_filter Storage for all of the filters and actions\n * @param string $tag Used in counting how many hooks were applied\n * @param callback $function Used for creating unique id\n * @param int|bool $priority Used in counting how many hooks were applied. If === false and $function is an object reference, we return the unique id only if it already has one, false otherwise.\n * @return string|bool Unique ID for usage as array key or false if $priority === false and $function is an object reference, and it does not already have a unique id.\n *\/","file":"plugin.php","line":753,"missingDoc":false,"filters":[],"uses":{"is_string":[757,785],"is_object":[760,767],"spl_object_hash":[770],"get_class":[772],"count":[776],"function_exists":[769]},"used_by":{"add_filter":[68],"has_filter":[96],"remove_filter":[261]}},"apply_filters":{"doc":"\/**\n * Call the functions added to a filter hook.\n *\n * The callback functions attached to filter hook $tag are invoked by calling\n * this function. This function can be used to create a new filter hook by\n * simply calling this function with the name of the new hook specified using\n * the $tag parameter.\n *\n * The function allows for additional arguments to be added and passed to hooks.\n * <code>\n * function example_hook($string, $arg1, $arg2)\n * {\n *\t\t\/\/Do stuff\n *\t\treturn $string;\n * }\n * $value = apply_filters('example_filter', 'filter me', 'arg1', 'arg2');\n * <\/code>\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 0.71\n * @global array $wp_filter Stores all of the filters\n * @global array $merged_filters Merges the filter hooks using this function.\n * @global array $wp_current_filter stores the list of current filters with the current one last\n *\n * @param string $tag The name of the filter hook.\n * @param mixed $value The value on which the filters hooked to <tt>$tag<\/tt> are applied on.\n * @param mixed $var,... Additional variables passed to the functions hooked to <tt>$tag<\/tt>.\n * @return mixed The filtered value after all hooked functions are applied to it.\n *\/","file":"plugin.php","line":137,"missingDoc":false,"filters":[],"uses":{"func_get_args":[145,167],"_wp_call_all_hook":[146],"array_pop":[151,178],"ksort":[160],"reset":[164],"next":[176],"call_user_func_array":[173],"array_slice":[173],"is_null":[171],"current":[170]},"used_by":[]},"_wp_call_all_hook":{"doc":"\/**\n * Calls the 'all' hook, which will process the functions hooked into it.\n *\n * The 'all' hook passes all of the arguments or parameters that were used for\n * the hook, which this function was called for.\n *\n * This function is used internally for apply_filters(), do_action(), and\n * do_action_ref_array() and is not meant to be used from outside those\n * functions. This function does not check for the existence of the all hook, so\n * it will fail unless the all hook exists prior to this function call.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.5\n * @access private\n *\n * @uses $wp_filter Used to process all of the functions in the 'all' hook\n *\n * @param array $args The collected parameters from the hook that was called.\n * @param string $hook Optional. The hook name that was used to call the 'all' hook.\n *\/","file":"plugin.php","line":712,"missingDoc":false,"filters":[],"uses":{"reset":[715],"next":[721],"call_user_func_array":[719],"is_null":[718],"current":[717]},"used_by":{"apply_filters":[146],"apply_filters_ref_array":[207],"do_action":[375],"do_action_ref_array":[464]}},"remove_all_filters":{"doc":"\/**\n * Remove all of the hooks from a filter.\n *\n * @since 2.7\n *\n * @param string $tag The filter to remove hooks from.\n * @param int $priority The priority number to remove.\n * @return bool True when finished.\n *\/","file":"plugin.php","line":284,"missingDoc":false,"filters":[],"uses":[],"used_by":{"remove_all_actions":[543]}},"do_action":{"doc":"\/**\n * Execute functions hooked on a specific action hook.\n *\n * This function invokes all functions attached to action hook $tag. It is\n * possible to create new action hooks by simply calling this function,\n * specifying the name of the new hook using the <tt>$tag<\/tt> parameter.\n *\n * You can pass extra arguments to the hooks, much like you can with\n * apply_filters().\n *\n * @see apply_filters() This function works similar with the exception that\n * nothing is returned and only the functions or methods are called.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 1.2\n * @global array $wp_filter Stores all of the filters\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action to be executed.\n * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action.\n * @return null Will return null if $tag does not exist in $wp_filter array\n *\/","file":"plugin.php","line":360,"missingDoc":false,"filters":[],"uses":{"func_get_args":[374],"_wp_call_all_hook":[375],"array_pop":[380,410],"is_array":[388],"count":[388],"is_object":[388],"func_num_args":[392],"func_get_arg":[393],"ksort":[397],"reset":[401],"next":[408],"call_user_func_array":[406],"array_slice":[406],"is_null":[405],"current":[404]},"used_by":[]},"do_action_ref_array":{"doc":"\/**\n * Execute functions hooked on a specific action hook, specifying arguments in an array.\n *\n * @see do_action() This function is identical, but the arguments passed to the\n * functions hooked to <tt>$tag<\/tt> are supplied using an array.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.1\n * @global array $wp_filter Stores all of the filters\n * @global array $wp_actions Increments the amount of times action was triggered.\n *\n * @param string $tag The name of the action to be executed.\n * @param array $args The arguments supplied to the functions hooked to <tt>$tag<\/tt>\n * @return null Will return null if $tag does not exist in $wp_filter array\n *\/","file":"plugin.php","line":449,"missingDoc":false,"filters":[],"uses":{"func_get_args":[463],"_wp_call_all_hook":[464],"array_pop":[469,491],"ksort":[478],"reset":[482],"next":[489],"call_user_func_array":[487],"array_slice":[487],"is_null":[486],"current":[485]},"used_by":[]},"remove_all_actions":{"doc":"\/**\n * Remove all of the hooks from an action.\n *\n * @since 2.7\n *\n * @param string $tag The action to remove hooks from.\n * @param int $priority The priority number to remove them from.\n * @return bool True when finished.\n *\/","file":"plugin.php","line":542,"missingDoc":false,"filters":[],"uses":{"remove_all_filters":[543]},"used_by":[]},"plugin_dir_path":{"doc":"\/**\n * Gets the filesystem directory path (with trailing slash) for the plugin __FILE__ passed in\n * @package WordPress\n * @subpackage Plugin\n * @since 2.8\n *\n * @param string $file The filename of the plugin (__FILE__)\n * @return string the filesystem path of the directory that contains the plugin\n *\/","file":"plugin.php","line":586,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[587],"dirname":[587]},"used_by":[]},"plugin_dir_url":{"doc":"\/**\n * Gets the URL directory path (with trailing slash) for the plugin __FILE__ passed in\n * @package WordPress\n * @subpackage Plugin\n * @since 2.8\n *\n * @param string $file The filename of the plugin (__FILE__)\n * @return string the URL path of the directory that contains the plugin\n *\/","file":"plugin.php","line":599,"missingDoc":false,"filters":[],"uses":{"trailingslashit":[600],"plugins_url":[600]},"used_by":[]},"register_activation_hook":{"doc":"\/**\n * Set the activation hook for a plugin.\n *\n * When a plugin is activated, the action 'activate_PLUGINNAME' hook is\n * activated. In the name of this hook, PLUGINNAME is replaced with the name of\n * the plugin, including the optional subdirectory. For example, when the plugin\n * is located in wp-content\/plugins\/sampleplugin\/sample.php, then the name of\n * this hook will become 'activate_sampleplugin\/sample.php'. When the plugin\n * consists of only one file and is (as by default) located at\n * wp-content\/plugins\/sample.php the name of this hook will be\n * 'activate_sample.php'.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.0\n *\n * @param string $file The filename of the plugin including the path.\n * @param callback $function the function hooked to the 'activate_PLUGIN' action.\n *\/","file":"plugin.php","line":622,"missingDoc":false,"filters":[],"uses":{"plugin_basename":[623],"add_action":[624]},"used_by":[]},"register_deactivation_hook":{"doc":"\/**\n * Set the deactivation hook for a plugin.\n *\n * When a plugin is deactivated, the action 'deactivate_PLUGINNAME' hook is\n * deactivated. In the name of this hook, PLUGINNAME is replaced with the name\n * of the plugin, including the optional subdirectory. For example, when the\n * plugin is located in wp-content\/plugins\/sampleplugin\/sample.php, then\n * the name of this hook will become 'activate_sampleplugin\/sample.php'.\n *\n * When the plugin consists of only one file and is (as by default) located at\n * wp-content\/plugins\/sample.php the name of this hook will be\n * 'activate_sample.php'.\n *\n * @package WordPress\n * @subpackage Plugin\n * @since 2.0\n *\n * @param string $file The filename of the plugin including the path.\n * @param callback $function the function hooked to the 'activate_PLUGIN' action.\n *\/","file":"plugin.php","line":647,"missingDoc":false,"filters":[],"uses":{"plugin_basename":[648],"add_action":[649]},"used_by":[]},"register_uninstall_hook":{"doc":"\/**\n * Set the uninstallation hook for a plugin.\n *\n * Registers the uninstall hook that will be called when the user clicks on the\n * uninstall link that calls for the plugin to uninstall itself. The link won't\n * be active unless the plugin hooks into the action.\n *\n * The plugin should not run arbitrary code outside of functions, when\n * registering the uninstall hook. In order to run using the hook, the plugin\n * will have to be included, which means that any code laying outside of a\n * function will be run during the uninstall process. The plugin should not\n * hinder the uninstall process.\n *\n * If the plugin can not be written without running code within the plugin, then\n * the plugin should create a file named 'uninstall.php' in the base plugin\n * folder. This file will be called, if it exists, during the uninstall process\n * bypassing the uninstall hook. The plugin, when using the 'uninstall.php'\n * should always check for the 'WP_UNINSTALL_PLUGIN' constant, before\n * executing.\n *\n * @since 2.7\n *\n * @param string $file\n * @param callback $callback The callback to run when the hook is called. Must be a static method or function.\n *\/","file":"plugin.php","line":677,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[679],"__":[679],"is_array":[678],"is_object":[678],"get_option":[686],"plugin_basename":[687],"update_option":[688]},"used_by":[]},"Translation_Entry::Translation_Entry":{"doc":"\/**\n * @param array $args associative array, support following keys:\n * \t- singular (string) -- the string to translate, if omitted and empty entry will be created\n * \t- plural (string) -- the plural form of the string, setting this will set {@link $is_plural} to true\n * \t- translations (array) -- translations of the string and possibly -- its plural forms\n * \t- context (string) -- a string differentiating two equal strings used in different contexts\n * \t- translator_comments (string) -- comments left by translators\n * \t- extracted_comments (string) -- comments left by developers\n * \t- references (array) -- places in the code this strings is used, in relative_to_root_path\/file.php:linenum form\n * \t- flags (array) -- flags like php-format\n *\/","file":"pomo\/entry.php","line":43,"missingDoc":false,"filters":[],"uses":{"is_array":[53,54,55]},"used_by":[]},"Translation_Entry::key":{"doc":"\/**\n * Generates a unique key for this entry\n *\n * @return string|bool the key or false if the entry is empty\n *\/","file":"pomo\/entry.php","line":63,"missingDoc":false,"filters":[],"uses":{"is_null":[64,66],"chr":[66]},"used_by":[]},"Translation_Entry::merge_with":{"doc":"","file":"pomo\/entry.php","line":69,"missingDoc":true,"filters":[],"uses":{"array_unique":[70,71],"array_merge":[70,71]},"used_by":[]},"MO::import_from_file":{"doc":"\/**\n * Fills up with the entries from MO file $filename\n *\n * @param string $filename MO file to load\n *\/","file":"pomo\/mo.php","line":23,"missingDoc":false,"filters":[],"uses":{"is_resource":[25],"import_from_reader":[27]},"used_by":[]},"MO::export_to_file":{"doc":"","file":"pomo\/mo.php","line":30,"missingDoc":true,"filters":[],"uses":{"fopen":[31],"export_to_file_handle":[33],"fclose":[34]},"used_by":[]},"MO::export":{"doc":"","file":"pomo\/mo.php","line":38,"missingDoc":true,"filters":[],"uses":{"fopen":[39],"export_to_file_handle":[41],"rewind":[42],"stream_get_contents":[43]},"used_by":[]},"MO::is_entry_good_for_export":{"doc":"","file":"pomo\/mo.php","line":46,"missingDoc":true,"filters":[],"uses":{"array_filter":[51]},"used_by":[]},"MO::export_to_file_handle":{"doc":"","file":"pomo\/mo.php","line":58,"missingDoc":true,"filters":[],"uses":{"array_filter":[59],"ksort":[60],"count":[63],"fwrite":[69,74,81,86,93,97,98],"pack":[69,74,81,86,93],"fseek":[71],"chr":[76,79,88,91],"export_original":[79,80],"strlen":[80,86,87,92],"export_headers":[85],"export_translations":[91,92]},"used_by":[]},"MO::export_original":{"doc":"","file":"pomo\/mo.php","line":102,"missingDoc":true,"filters":[],"uses":{"chr":[105,106],"is_null":[106]},"used_by":[]},"MO::export_translations":{"doc":"","file":"pomo\/mo.php","line":110,"missingDoc":true,"filters":[],"uses":{"implode":[112],"chr":[112]},"used_by":[]},"MO::export_headers":{"doc":"","file":"pomo\/mo.php","line":115,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MO::get_byteorder":{"doc":"","file":"pomo\/mo.php","line":123,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MO::import_from_reader":{"doc":"","file":"pomo\/mo.php","line":140,"missingDoc":true,"filters":[],"uses":{"readint32":[141],"setEndian":[145],"read":[149,172,181],"strlen":[150,173,182],"unpack":[154,198,199],"is_array":[155],"extract":[158],"seekto":[165,192],"str_split":[186,187],"read_all":[194],"close":[195],"substr":[206,207],"set_headers":[210],"make_headers":[210],"make_entry":[212],"key":[213]},"used_by":[]},"MO::make_entry":{"doc":"\/**\n * Build a Translation_Entry from original string and translation strings,\n * found in a MO file\n *\n * @static\n * @param string $original original string to translate from MO file. Might contain\n * \t0x04 as context separator or 0x00 as singular\/plural separator\n * @param string $translation translation string from MO file. Might contain\n * \t0x00 as a plural translations separator\n *\/","file":"pomo\/mo.php","line":229,"missingDoc":false,"filters":[],"uses":{"explode":[232,238,245],"chr":[232,238,245]},"used_by":[]},"MO::select_plural_form":{"doc":"","file":"pomo\/mo.php","line":249,"missingDoc":true,"filters":[],"uses":{"gettext_select_plural_form":[250]},"used_by":[]},"MO::get_plural_forms_count":{"doc":"","file":"pomo\/mo.php","line":253,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"PO::export_headers":{"doc":"\/**\n * Exports headers to a PO entry\n *\n * @return string msgid\/msgstr PO entry for this PO file headers, doesn't contain newline at the end\n *\/","file":"pomo\/po.php","line":29,"missingDoc":false,"filters":[],"uses":{"prepend_each_line":[36],"rtrim":[36,39]},"used_by":[]},"PO::export_entries":{"doc":"\/**\n * Exports all entries to PO format\n *\n * @return string sequence of mgsgid\/msgstr PO strings, doesn't containt newline at the end\n *\/","file":"pomo\/po.php","line":47,"missingDoc":false,"filters":[],"uses":{"implode":[49],"array_map":[49]},"used_by":[]},"PO::export":{"doc":"\/**\n * Exports the whole PO file as a string\n *\n * @param bool $include_headers whether to include the headers in the export\n * @return string ready for inclusion in PO file string for headers and all the enrtries\n *\/","file":"pomo\/po.php","line":58,"missingDoc":false,"filters":[],"uses":{"export_headers":[61],"export_entries":[64]},"used_by":[]},"PO::export_to_file":{"doc":"\/**\n * Same as {@link export}, but writes the result to a file\n *\n * @param string $filename where to write the PO string\n * @param bool $include_headers whether to include tje headers in the export\n * @return bool true on success, false on error\n *\/","file":"pomo\/po.php","line":75,"missingDoc":false,"filters":[],"uses":{"fopen":[76],"export":[78],"fwrite":[79],"fclose":[81]},"used_by":[]},"PO::set_comment_before_headers":{"doc":"\/**\n * Text to include as a comment before the start of the PO contents\n *\n * Doesn't need to include # in the beginning of lines, these are added automatically\n *\/","file":"pomo\/po.php","line":89,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"PO::poify":{"doc":"\/**\n * Formats a string in PO-style\n *\n * @static\n * @param string $string the string to format\n * @return string the poified string\n *\/","file":"pomo\/po.php","line":100,"missingDoc":false,"filters":[],"uses":{"str_replace":[111,120],"array_keys":[111],"array_values":[111],"implode":[113],"explode":[113],"strpos":[115],"substr_count":[116],"substr":[116],"strlen":[116]},"used_by":[]},"PO::unpoify":{"doc":"\/**\n * Gives back the original string from a PO-formatted string\n *\n * @static\n * @param string $string PO-formatted string\n * @return string enascaped string\n *\/","file":"pomo\/po.php","line":131,"missingDoc":false,"filters":[],"uses":{"array_map":[133,134],"explode":[133],"preg_match_all":[138]},"used_by":[]},"PO::prepend_each_line":{"doc":"\/**\n * Inserts $with in the beginning of every new line of $string and\n * returns the modified string\n *\n * @static\n * @param string $string prepend lines in this string\n * @param string $with prepend lines with this string\n *\/","file":"pomo\/po.php","line":163,"missingDoc":false,"filters":[],"uses":{"var_export":[164],"explode":[165],"count":[167],"substr":[167,170],"implode":[168],"array_map":[168],"create_function":[168]},"used_by":[]},"PO::comment_block":{"doc":"\/**\n * Prepare a text as a comment -- wraps the lines and prepends #\n * and a special character to each line\n *\n * @access private\n * @param string $text the comment text\n * @param string $char character to denote a special PO comment,\n * \tlike :, default is a space\n *\/","file":"pomo\/po.php","line":183,"missingDoc":false,"filters":[],"uses":{"wordwrap":[184]},"used_by":[]},"PO::export_entry":{"doc":"\/**\n * Builds a string from the entry for inclusion in PO file\n *\n * @static\n * @param object &$entry the entry to convert to po string\n * @return string|bool PO-style formatted string for the entry or\n * \tfalse if the entry is empty\n *\/","file":"pomo\/po.php","line":196,"missingDoc":false,"filters":[],"uses":{"is_null":[197,203],"implode":[201,202,215]},"used_by":[]},"PO::import_from_file":{"doc":"","file":"pomo\/po.php","line":218,"missingDoc":true,"filters":[],"uses":{"fopen":[219],"read_entry":[223],"set_headers":[226],"make_headers":[226],"add_entry":[228]},"used_by":[]},"PO::read_entry":{"doc":"","file":"pomo\/po.php","line":241,"missingDoc":true,"filters":[],"uses":{"create_function":[247,340],"feof":[252],"trim":[264],"add_comment_to_entry":[277],"preg_match":[278,289,300,307,313,320,265],"array_filter":[340]},"used_by":[]},"PO::read_line":{"doc":"","file":"pomo\/po.php","line":346,"missingDoc":true,"filters":[],"uses":{"fgets":[357],"substr":[358],"rtrim":[358]},"used_by":[]},"PO::add_comment_to_entry":{"doc":"","file":"pomo\/po.php","line":364,"missingDoc":true,"filters":[],"uses":{"substr":[365,366],"trim":[366,370,374],"array_merge":[368,372],"preg_split":[368,372]},"used_by":[]},"PO::trim_quotes":{"doc":"","file":"pomo\/po.php","line":378,"missingDoc":true,"filters":[],"uses":{"substr":[379,379,380,380]},"used_by":[]},"POMO_Reader::POMO_Reader":{"doc":"","file":"pomo\/streams.php","line":17,"missingDoc":true,"filters":[],"uses":{"ini_get":[18],"function_exists":[18]},"used_by":[]},"POMO_Reader::setEndian":{"doc":"\/**\n * Sets the endianness of the file.\n *\n * @param $endian string 'big' or 'little'\n *\/","file":"pomo\/streams.php","line":27,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::readint32":{"doc":"\/**\n * Reads a 32bit Integer from the Stream\n *\n * @return mixed The integer, corresponding to the next 32 bits from\n * \tthe stream of false if there are not enough bytes or on error\n *\/","file":"pomo\/streams.php","line":37,"missingDoc":false,"filters":[],"uses":{"read":[38],"strlen":[39],"unpack":[42],"array_shift":[43]},"used_by":[]},"POMO_Reader::readint32array":{"doc":"\/**\n * Reads an array of 32-bit Integers from the Stream\n *\n * @param integer count How many elements should be read\n * @return mixed Array of integers or false if there isn't\n * \tenough data or on error\n *\/","file":"pomo\/streams.php","line":53,"missingDoc":false,"filters":[],"uses":{"read":[54],"strlen":[55],"unpack":[58]},"used_by":[]},"POMO_Reader::substr":{"doc":"","file":"pomo\/streams.php","line":62,"missingDoc":true,"filters":[],"uses":{"mb_substr":[64],"substr":[66]},"used_by":[]},"POMO_Reader::strlen":{"doc":"","file":"pomo\/streams.php","line":70,"missingDoc":true,"filters":[],"uses":{"mb_strlen":[72],"strlen":[74]},"used_by":[]},"POMO_Reader::str_split":{"doc":"","file":"pomo\/streams.php","line":78,"missingDoc":true,"filters":[],"uses":{"strlen":[80],"substr":[83],"str_split":[86],"function_exists":[79]},"used_by":[]},"POMO_Reader::pos":{"doc":"","file":"pomo\/streams.php","line":91,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::is_resource":{"doc":"","file":"pomo\/streams.php","line":95,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_Reader::close":{"doc":"","file":"pomo\/streams.php","line":99,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_FileReader::POMO_FileReader":{"doc":"","file":"pomo\/streams.php","line":107,"missingDoc":true,"filters":[],"uses":{"fopen":[109]},"used_by":[]},"POMO_FileReader::read":{"doc":"","file":"pomo\/streams.php","line":112,"missingDoc":true,"filters":[],"uses":{"fread":[113]},"used_by":[]},"POMO_FileReader::seekto":{"doc":"","file":"pomo\/streams.php","line":116,"missingDoc":true,"filters":[],"uses":{"fseek":[117]},"used_by":[]},"POMO_FileReader::is_resource":{"doc":"","file":"pomo\/streams.php","line":124,"missingDoc":true,"filters":[],"uses":{"is_resource":[125]},"used_by":[]},"POMO_FileReader::feof":{"doc":"","file":"pomo\/streams.php","line":128,"missingDoc":true,"filters":[],"uses":{"feof":[129]},"used_by":[]},"POMO_FileReader::close":{"doc":"","file":"pomo\/streams.php","line":132,"missingDoc":true,"filters":[],"uses":{"fclose":[133]},"used_by":[]},"POMO_FileReader::read_all":{"doc":"","file":"pomo\/streams.php","line":136,"missingDoc":true,"filters":[],"uses":{"feof":[138],"read":[139]},"used_by":[]},"POMO_StringReader::POMO_StringReader":{"doc":"","file":"pomo\/streams.php","line":154,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"POMO_StringReader::read":{"doc":"","file":"pomo\/streams.php","line":161,"missingDoc":true,"filters":[],"uses":{"substr":[162],"strlen":[164,164]},"used_by":[]},"POMO_StringReader::seekto":{"doc":"","file":"pomo\/streams.php","line":168,"missingDoc":true,"filters":[],"uses":{"strlen":[170,170]},"used_by":[]},"POMO_StringReader::length":{"doc":"","file":"pomo\/streams.php","line":174,"missingDoc":true,"filters":[],"uses":{"strlen":[175]},"used_by":[]},"POMO_StringReader::read_all":{"doc":"","file":"pomo\/streams.php","line":178,"missingDoc":true,"filters":[],"uses":{"substr":[179],"strlen":[179]},"used_by":[]},"POMO_CachedFileReader::POMO_CachedFileReader":{"doc":"","file":"pomo\/streams.php","line":190,"missingDoc":true,"filters":[],"uses":{"file_get_contents":[192]},"used_by":[]},"POMO_CachedIntFileReader::POMO_CachedIntFileReader":{"doc":"","file":"pomo\/streams.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::add_entry":{"doc":"\/**\n * Add entry to the PO structure\n *\n * @param object &$entry\n * @return bool true on success, false if the entry doesn't have a key\n *\/","file":"pomo\/translations.php","line":23,"missingDoc":false,"filters":[],"uses":{"is_array":[24],"key":[27]},"used_by":[]},"Translations::add_entry_or_merge":{"doc":"","file":"pomo\/translations.php","line":33,"missingDoc":true,"filters":[],"uses":{"is_array":[34],"key":[37],"merge_with":[40]},"used_by":[]},"Translations::set_header":{"doc":"\/**\n * Sets $header PO header to $value\n *\n * If the header already exists, it will be overwritten\n *\n * TODO: this should be out of this class, it is gettext specific\n *\n * @param string $header header name, without trailing :\n * @param string $value header value, without trailing \\n\n *\/","file":"pomo\/translations.php","line":56,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Translations::set_headers":{"doc":"","file":"pomo\/translations.php","line":60,"missingDoc":true,"filters":[],"uses":{"set_header":[62]},"used_by":[]},"Translations::get_header":{"doc":"","file":"pomo\/translations.php","line":66,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::translate_entry":{"doc":"","file":"pomo\/translations.php","line":70,"missingDoc":true,"filters":[],"uses":{"key":[71]},"used_by":[]},"Translations::translate":{"doc":"","file":"pomo\/translations.php","line":75,"missingDoc":true,"filters":[],"uses":{"translate_entry":[77]},"used_by":[]},"Translations::select_plural_form":{"doc":"\/**\n * Given the number of items, returns the 0-based index of the plural form to use\n *\n * Here, in the base Translations class, the common logic for English is implemented:\n * \t0 if there is one element, 1 otherwise\n *\n * This function should be overrided by the sub-classes. For example MO\/PO can derive the logic\n * from their headers.\n *\n * @param integer $count number of items\n *\/","file":"pomo\/translations.php","line":92,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Translations::get_plural_forms_count":{"doc":"","file":"pomo\/translations.php","line":96,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Translations::translate_plural":{"doc":"","file":"pomo\/translations.php","line":100,"missingDoc":true,"filters":[],"uses":{"translate_entry":[102],"select_plural_form":[103],"get_plural_forms_count":[104],"is_array":[106]},"used_by":[]},"Translations::merge_with":{"doc":"\/**\n * Merge $other in the current object.\n *\n * @param Object &$other Another Translation object, whose translations will be merged in this one\n * @return void\n **\/","file":"pomo\/translations.php","line":119,"missingDoc":false,"filters":[],"uses":{"key":[121]},"used_by":[]},"Translations::merge_originals_with":{"doc":"","file":"pomo\/translations.php","line":125,"missingDoc":true,"filters":[],"uses":{"key":[128,130,127],"merge_with":[130]},"used_by":[]},"Gettext_Translations::gettext_select_plural_form":{"doc":"\/**\n * The gettext implementation of select_plural_form.\n *\n * It lives in this class, because there are more than one descendand, which will use it and\n * they can't share it effectively.\n *\n *\/","file":"pomo\/translations.php","line":143,"missingDoc":false,"filters":[],"uses":{"nplurals_and_expression_from_header":[145],"get_header":[145],"make_plural_form_function":[147],"is_null":[144],"call_user_func":[149]},"used_by":[]},"Gettext_Translations::nplurals_and_expression_from_header":{"doc":"","file":"pomo\/translations.php","line":152,"missingDoc":true,"filters":[],"uses":{"trim":[155],"parenthesize_plural_exression":[155],"preg_match":[153]},"used_by":[]},"Gettext_Translations::make_plural_form_function":{"doc":"\/**\n * Makes a function, which will return the right translation index, according to the\n * plural forms header\n *\/","file":"pomo\/translations.php","line":166,"missingDoc":false,"filters":[],"uses":{"str_replace":[167],"create_function":[171]},"used_by":[]},"Gettext_Translations::parenthesize_plural_exression":{"doc":"\/**\n * Adds parantheses to the inner parts of ternary operators in\n * plural expressions, because PHP evaluates ternary oerators from left to right\n *\n * @param string $expression the expression without parentheses\n * @return string the expression with parentheses added\n *\/","file":"pomo\/translations.php","line":181,"missingDoc":false,"filters":[],"uses":{"strlen":[185],"str_repeat":[196],"rtrim":[203]},"used_by":[]},"Gettext_Translations::make_headers":{"doc":"","file":"pomo\/translations.php","line":206,"missingDoc":true,"filters":[],"uses":{"str_replace":[209],"explode":[210,212],"trim":[214,214]},"used_by":[]},"Gettext_Translations::set_header":{"doc":"","file":"pomo\/translations.php","line":219,"missingDoc":true,"filters":[],"uses":{"nplurals_and_expression_from_header":[222],"get_header":[222],"make_plural_form_function":[224]},"used_by":[]},"NOOP_Translations::add_entry":{"doc":"","file":"pomo\/translations.php","line":238,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::set_header":{"doc":"","file":"pomo\/translations.php","line":242,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::set_headers":{"doc":"","file":"pomo\/translations.php","line":245,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::get_header":{"doc":"","file":"pomo\/translations.php","line":248,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate_entry":{"doc":"","file":"pomo\/translations.php","line":252,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate":{"doc":"","file":"pomo\/translations.php","line":256,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::select_plural_form":{"doc":"","file":"pomo\/translations.php","line":260,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::get_plural_forms_count":{"doc":"","file":"pomo\/translations.php","line":264,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::translate_plural":{"doc":"","file":"pomo\/translations.php","line":268,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"NOOP_Translations::merge_with":{"doc":"","file":"pomo\/translations.php","line":272,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"the_content":{"doc":"\/**\n * Display the post content.\n *\n * @since 0.71\n *\n * @param string $more_link_text Optional. Content for when there is more text.\n * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.\n *\/","file":"post-template.php","line":164,"missingDoc":false,"filters":["'the_content'"],"uses":{"get_the_content":[165],"str_replace":[167]},"used_by":[]},"_convert_urlencoded_to_entities":{"doc":"\/**\n * Preview fix for javascript bug with foreign languages\n *\n * @since 3.1.0\n * @access private\n * @param array $match Match array from preg_replace_callback\n * @return string\n *\/","file":"post-template.php","line":238,"missingDoc":false,"filters":[],"uses":{"base_convert":[239]},"used_by":[]},"the_excerpt":{"doc":"\/**\n * Display the post excerpt.\n *\n * @since 0.71\n * @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.\n *\/","file":"post-template.php","line":248,"missingDoc":false,"filters":["'the_excerpt'"],"uses":{"get_the_excerpt":[249]},"used_by":[]},"has_excerpt":{"doc":"\/**\n * Whether post has excerpt.\n *\n * @since 2.3.0\n *\n * @param int $id Optional. Post ID.\n * @return bool\n *\/","file":"post-template.php","line":281,"missingDoc":false,"filters":[],"uses":{"get_post":[282]},"used_by":[]},"post_class":{"doc":"\/**\n * Display the classes for the post div.\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @param int $post_id An optional post ID.\n *\/","file":"post-template.php","line":294,"missingDoc":false,"filters":[],"uses":{"join":[296],"get_post_class":[296]},"used_by":[]},"get_post_class":{"doc":"\/**\n * Retrieve the classes for the post div as an array.\n *\n * The class names are add are many. If the post is a sticky, then the 'sticky'\n * class name. The class 'hentry' is always added to each post. For each\n * category, the class will be added with 'category-' with category slug is\n * added. The tags are the same way as the categories with 'tag-' before the tag\n * slug. All classes are passed through the filter, 'post_class' with the list\n * of classes, followed by $class parameter value, with the post ID as the last\n * parameter.\n *\n * @since 2.7.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @param int $post_id An optional post ID.\n * @return array Array of classes.\n *\/","file":"post-template.php","line":316,"missingDoc":false,"filters":["'post_class'"],"uses":{"get_post":[317],"is_admin":[325],"get_post_format":[332],"sanitize_html_class":[335,356,365],"is_wp_error":[334],"post_type_supports":[331],"post_password_required":[341],"is_sticky":[345],"is_home":[345],"is_paged":[345],"get_the_category":[353],"is_object_in_taxonomy":[352,361],"get_the_tags":[362],"preg_split":[371],"is_array":[370],"array_merge":[372],"array_map":[375]},"used_by":{"post_class":[296]}},"body_class":{"doc":"\/**\n * Display the classes for the body element.\n *\n * @since 2.8.0\n *\n * @param string|array $class One or more classes to add to the class list.\n *\/","file":"post-template.php","line":387,"missingDoc":false,"filters":[],"uses":{"join":[389],"get_body_class":[389]},"used_by":{"__main":[40]}},"get_body_class":{"doc":"\/**\n * Retrieve the classes for the body element as an array.\n *\n * @since 2.8.0\n *\n * @param string|array $class One or more classes to add to the class list.\n * @return array Array of classes.\n *\/","file":"post-template.php","line":400,"missingDoc":false,"filters":["'body_class'"],"uses":{"is_rtl":[405],"is_front_page":[408],"is_home":[410],"is_archive":[412,453],"is_date":[414,537],"is_search":[416,541],"is_paged":[420],"is_attachment":[422,447],"is_404":[424],"get_queried_object_id":[428,489],"get_queried_object":[429,458,465,472,479],"sanitize_html_class":[433,441,456,461,468,475,481,482,504],"get_post_format":[438],"is_wp_error":[440],"post_type_supports":[437],"get_post_mime_type":[448],"str_replace":[451,504],"get_query_var":[456],"is_category":[464,533],"is_tag":[471,535],"is_tax":[478],"is_author":[457,539],"is_post_type_archive":[454,543],"is_page":[486,531],"get_post":[491],"get_var":[495],"prepare":[495],"get_page_template_slug":[504],"is_page_template":[502],"is_single":[427,529],"is_user_logged_in":[510],"is_admin_bar_showing":[513],"get_theme_mod":[518],"get_background_image":[518],"get":[521,524],"preg_split":[549],"is_array":[548],"array_merge":[550],"array_map":[556]},"used_by":{"body_class":[389]}},"is_date":{"doc":"\/**\n * Is the query for an existing date archive?\n *\n * @see WP_Query::is_date()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":321,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[325],"__":[325],"is_date":[329]},"used_by":{"get_body_class":[414,537],"is_date":[329],"__main":[39]}},"get_post_mime_type":{"doc":"\/**\n * Retrieve the mime type of an attachment based on the ID.\n *\n * This function can be used with any post type, but it makes more sense with\n * attachments.\n *\n * @since 2.0.0\n *\n * @param int $ID Optional. Post ID.\n * @return bool|string False on failure or returns the mime type\n *\/","file":"post.php","line":747,"missingDoc":false,"filters":[],"uses":{"get_post":[748],"is_object":[750]},"used_by":{"get_body_class":[448]}},"is_page_template":{"doc":"\/**\n * Whether currently in a page template.\n *\n * This template tag allows you to determine if you are in a page template.\n * You can optionally provide a template name and then the check will be\n * specific to that template.\n *\n * @since 2.5.0\n * @uses $wp_query\n *\n * @param string $template The specific template name if specific matching is required.\n * @return bool False on failure, true if success.\n *\/","file":"post-template.php","line":1246,"missingDoc":false,"filters":[],"uses":{"is_page":[1247],"get_page_template_slug":[1250],"get_queried_object_id":[1250]},"used_by":{"get_body_class":[502]}},"get_background_image":{"doc":"\/**\n * Retrieve background image for custom background.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"theme.php","line":1108,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[1109],"get_theme_support":[1109]},"used_by":{"get_body_class":[518],"background_image":[1118],"_custom_background_cb":[1149],"_delete_attachment_theme_mod":[1592]}},"_wp_link_page":{"doc":"\/**\n * Helper function for wp_link_pages().\n *\n * @since 3.1.0\n * @access private\n *\n * @param int $i Page number.\n * @return string Link.\n *\/","file":"post-template.php","line":694,"missingDoc":false,"filters":[],"uses":{"get_post":[696],"get_permalink":[699,702,704,706],"add_query_arg":[702],"get_option":[703,703,701],"trailingslashit":[704,706],"user_trailingslashit":[704,706],"in_array":[701],"esc_url":[709]},"used_by":{"wp_link_pages":[654,666,671]}},"post_custom":{"doc":"\/**\n * Retrieve post custom meta data field.\n *\n * @since 1.5.0\n *\n * @param string $key Meta data key name.\n * @return bool|string|array Array of values or single value, if only one element exists. False will be returned if key does not exist.\n *\/","file":"post-template.php","line":724,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[725],"count":[729]},"used_by":[]},"the_meta":{"doc":"\/**\n * Display list of post custom fields.\n *\n * @internal This will probably change at some point...\n * @since 1.2.0\n * @uses apply_filters() Calls 'the_meta_key' on list item HTML content, with key and value as separate parameters.\n *\/","file":"post-template.php","line":742,"missingDoc":false,"filters":["'the_meta_key'"],"uses":{"trim":[746],"is_protected_meta":[747],"array_map":[749],"get_post_custom_values":[749],"implode":[750],"get_post_custom_keys":[743]},"used_by":[]},"get_post_custom_values":{"doc":"\/**\n * Retrieve values for a custom post field.\n *\n * The parameters must not be considered optional. All of the post meta fields\n * will be retrieved and only the meta field key values returned.\n *\n * @since 1.2.0\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/get_post_custom_values\n *\n * @param string $key Meta field key.\n * @param int $post_id Post ID\n * @return array Meta field values.\n *\/","file":"post.php","line":1892,"missingDoc":false,"filters":[],"uses":{"get_post_custom":[1896]},"used_by":{"the_meta":[749]}},"get_pages":{"doc":"\/**\n * Retrieve a list of pages.\n *\n * The defaults that can be overridden are the following: 'child_of',\n * 'sort_order', 'sort_column', 'post_title', 'hierarchical', 'exclude',\n * 'include', 'meta_key', 'meta_value','authors', 'number', and 'offset'.\n *\n * @since 1.5.0\n * @uses $wpdb\n *\n * @param mixed $args Optional. Array or string of options that overrides defaults.\n * @return array List of pages matching defaults or $args\n *\/","file":"post.php","line":3621,"missingDoc":false,"filters":["'get_pages'","'get_pages'","'get_pages'"],"uses":{"wp_parse_args":[3636],"extract":[3637],"get_post_types":[3642],"in_array":[3643,3759,3787,3825],"explode":[3648,3757],"is_array":[3647,3655,3655,3663],"array_diff":[3649],"get_post_stati":[3649],"md5":[3653],"serialize":[3653],"compact":[3653],"array_keys":[3653],"array_map":[3657,3834],"wp_cache_get":[3654],"wp_parse_id_list":[3674,3689],"prepare":[3678,3680,3693,3695,3719,3721,3737,3739,3744,3747,3750],"preg_split":[3704],"get_user_by":[3710],"intval":[3709],"stripslashes":[3734,3735],"array_shift":[3747],"implode":[3749,3784],"count":[3746,3805,3823],"trim":[3758],"strpos":[3775],"strtoupper":[3786],"get_results":[3797],"sanitize_post":[3807],"update_post_cache":[3811],"get_page_children":[3814,3818],"wp_cache_set":[3831]},"used_by":{"wp_dropdown_pages":[781],"wp_list_pages":[838]}},"walk_page_dropdown_tree":{"doc":"\/**\n * Retrieve HTML dropdown (select) content for page list.\n *\n * @uses Walker_PageDropdown to create HTML dropdown content.\n * @since 2.1.0\n * @see Walker_PageDropdown::walk() for parameters and return description.\n *\/","file":"post-template.php","line":960,"missingDoc":false,"filters":[],"uses":{"func_get_args":[961],"call_user_func_array":[967]},"used_by":{"wp_dropdown_pages":[793]}},"walk_page_tree":{"doc":"\/**\n * Retrieve HTML list content for page list.\n *\n * @uses Walker_Page to create HTML list content.\n * @since 2.1.0\n * @see Walker_Page::walk() for parameters and return description.\n *\/","file":"post-template.php","line":943,"missingDoc":false,"filters":[],"uses":{"call_user_func_array":[950]},"used_by":{"wp_list_pages":[847]}},"wp_page_menu":{"doc":"\/**\n * Display or retrieve list of pages with optional home link.\n *\n * The arguments are listed below and part of the arguments are for {@link\n * wp_list_pages()} function. Check that function for more info on those\n * arguments.\n *\n * <ul>\n * <li><strong>sort_column<\/strong> - How to sort the list of pages. Defaults\n * to page title. Use column for posts table.<\/li>\n * <li><strong>menu_class<\/strong> - Class to use for the div ID which contains\n * the page list. Defaults to 'menu'.<\/li>\n * <li><strong>echo<\/strong> - Whether to echo list or return it. Defaults to\n * echo.<\/li>\n * <li><strong>link_before<\/strong> - Text before show_home argument text.<\/li>\n * <li><strong>link_after<\/strong> - Text after show_home argument text.<\/li>\n * <li><strong>show_home<\/strong> - If you set this argument, then it will\n * display the link to the home page. The show_home argument really just needs\n * to be set to the value of the text of the link.<\/li>\n * <\/ul>\n *\n * @since 2.7.0\n *\n * @param array|string $args\n * @return string html menu\n *\/","file":"post-template.php","line":887,"missingDoc":false,"filters":["'wp_page_menu_args'","'wp_page_menu'"],"uses":{"wp_parse_args":[889],"__":[899],"is_front_page":[903],"is_paged":[903],"home_url":[905],"esc_attr":[905,924],"get_option":[913,907],"str_replace":[919],"wp_list_pages":[919]},"used_by":[]},"Walker_Page::start_lvl":{"doc":"\/**\n * @see Walker::start_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n * @param array $args\n *\/","file":"post-template.php","line":1001,"missingDoc":false,"filters":[],"uses":{"str_repeat":[1002]},"used_by":[]},"Walker_Page::end_lvl":{"doc":"\/**\n * @see Walker::end_lvl()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param int $depth Depth of page. Used for padding.\n * @param array $args\n *\/","file":"post-template.php","line":1014,"missingDoc":false,"filters":[],"uses":{"str_repeat":[1015]},"used_by":[]},"Walker_Page::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object.\n * @param int $depth Depth of page. Used for padding.\n * @param int $current_page Page ID.\n * @param array $args\n *\/","file":"post-template.php","line":1029,"missingDoc":false,"filters":["'page_css_class'","'the_title'"],"uses":{"str_repeat":[1031],"extract":[1035],"get_post":[1038],"in_array":[1039],"get_option":[1045],"implode":[1049],"get_permalink":[1051],"mysql2date":[1059]},"used_by":[]},"Walker_Page::end_el":{"doc":"\/**\n * @see Walker::end_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object. Not used.\n * @param int $depth Depth of page. Not Used.\n * @param array $args\n *\/","file":"post-template.php","line":1072,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Walker_PageDropdown::start_el":{"doc":"\/**\n * @see Walker::start_el()\n * @since 2.1.0\n *\n * @param string $output Passed by reference. Used to append additional content.\n * @param object $page Page data object.\n * @param int $depth Depth of page in reference to parent pages. Used for padding.\n * @param array $args Uses 'selected' argument for selected page to set selected HTML attribute for option element.\n * @param int $id\n *\/","file":"post-template.php","line":1111,"missingDoc":false,"filters":["'list_pages'"],"uses":{"str_repeat":[1112],"esc_html":[1119]},"used_by":[]},"the_attachment_link":{"doc":"\/**\n * Display an attachment page link using an image or icon.\n *\n * @since 2.0.0\n *\n * @param int $id Optional. Post ID.\n * @param bool $fullsize Optional, default is false. Whether to use full size.\n * @param bool $deprecated Deprecated. Not used.\n * @param bool $permalink Optional, default is false. Whether to include permalink.\n *\/","file":"post-template.php","line":1138,"missingDoc":false,"filters":[],"uses":{"_deprecated_argument":[1140],"wp_get_attachment_link":[1143,1145]},"used_by":[]},"prepend_attachment":{"doc":"\/**\n * Wrap attachment in <<p>> element before content.\n *\n * @since 2.0.0\n * @uses apply_filters() Calls 'prepend_attachment' hook on HTML content.\n *\n * @param string $content\n * @return string\n *\/","file":"post-template.php","line":1195,"missingDoc":false,"filters":["'prepend_attachment'"],"uses":{"get_post":[1196],"wp_get_attachment_link":[1203]},"used_by":[]},"wp_post_revision_title":{"doc":"\/**\n * Retrieve formatted date timestamp of a revision (linked to that revisions's page).\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses date_i18n()\n *\n * @param int|object $revision Revision ID or revision object.\n * @param bool $link Optional, default is true. Link to revisions's page?\n * @return string i18n formatted datetimestamp or localized 'Current Revision'.\n *\/","file":"post-template.php","line":1296,"missingDoc":false,"filters":[],"uses":{"get_post":[1297],"in_array":[1300],"_x":[1304],"__":[1306,1308],"date_i18n":[1310],"strtotime":[1310],"current_user_can":[1311],"get_edit_post_link":[1311],"sprintf":[1315,1317],"wp_is_post_autosave":[1316],"wp_is_post_revision":[1314]},"used_by":{"wp_list_post_revisions":[1388]}},"wp_is_post_revision":{"doc":"\/**\n * Determines if the specified post is a revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int|object $post Post ID or post object.\n * @return bool|int False if not a revision, ID of revision's parent otherwise.\n *\/","file":"post.php","line":5030,"missingDoc":false,"filters":[],"uses":{"wp_get_post_revision":[5031]},"used_by":{"wp_post_revision_title":[1314],"add_post_meta":[1752],"delete_post_meta":[1776],"update_post_meta":[1819]}},"wp_list_post_revisions":{"doc":"\/**\n * Display list of a post's revisions.\n *\n * Can output either a UL with edit links or a TABLE with diff interface, and\n * restore action links.\n *\n * Second argument controls parameters:\n * (bool) parent : include the parent (the \"Current Revision\") in the list.\n * (string) format : 'list' or 'form-table'. 'list' outputs UL, 'form-table'\n * outputs TABLE with UI.\n * (int) right : what revision is currently being viewed - used in\n * form-table format.\n * (int) left : what revision is currently being diffed against right -\n * used in form-table format.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revisions()\n * @uses wp_post_revision_title()\n * @uses get_edit_post_link()\n * @uses get_the_author_meta()\n *\n * @todo split into two functions (list, form-table) ?\n *\n * @param int|object $post_id Post ID or post object.\n * @param string|array $args See description {@link wp_parse_args()}.\n * @return null\n *\/","file":"post-template.php","line":1352,"missingDoc":false,"filters":[],"uses":{"get_post":[1353],"extract":[1357],"wp_parse_args":[1357],"wp_get_post_autosave":[1361],"wp_get_post_revisions":[1368],"_x":[1374],"array_unshift":[1377],"current_user_can":[1381,1383],"wp_is_post_autosave":[1385],"wp_post_revision_title":[1388],"get_the_author_meta":[1389],"wp_nonce_url":[1401],"add_query_arg":[1401],"__":[1401],"sprintf":[1413],"esc_attr_e":[1424],"esc_attr":[1426],"_ex":[1440,1441,1442],"_e":[1443,1444]},"used_by":[]},"wp_get_post_autosave":{"doc":"\/**\n * Retrieve the autosaved data of the specified post.\n *\n * Returns a post object containing the information that was autosaved for the\n * specified post.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param int $post_id The post ID.\n * @return object|bool The autosaved data or false on failure or when no autosave exists.\n *\/","file":"post.php","line":4982,"missingDoc":false,"filters":[],"uses":{"get_post":[4984],"add_action":[4997],"query":[4998],"remove_action":[4999],"is_array":[5001],"is_object":[5001]},"used_by":{"wp_list_post_revisions":[1361],"_set_preview":[5231]}},"has_post_thumbnail":{"doc":"\/**\n * Check if post has an image attached.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @return bool Whether post has an image attached.\n *\/","file":"post-thumbnail-template.php","line":20,"missingDoc":false,"filters":[],"uses":{"get_post_thumbnail_id":[21]},"used_by":[]},"the_post_thumbnail":{"doc":"\/**\n * Display Post Thumbnail.\n *\n * @since 2.9.0\n *\n * @param string|array $size Optional. Image size. Defaults to 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, $crop_flag );.\n * @param string|array $attr Optional. Query string or array of attributes.\n *\/","file":"post-thumbnail-template.php","line":45,"missingDoc":false,"filters":[],"uses":{"get_the_post_thumbnail":[46]},"used_by":[]},"get_the_post_thumbnail":{"doc":"\/**\n * Retrieve Post Thumbnail.\n *\n * @since 2.9.0\n *\n * @param int $post_id Optional. Post ID.\n * @param string $size Optional. Image size. Defaults to 'post-thumbnail'.\n * @param string|array $attr Optional. Query string or array of attributes.\n *\/","file":"post-thumbnail-template.php","line":85,"missingDoc":false,"filters":["'post_thumbnail_size'","'begin_fetch_post_thumbnail_html'","'end_fetch_post_thumbnail_html'","'post_thumbnail_html'"],"uses":{"get_the_ID":[86],"get_post_thumbnail_id":[87],"update_post_thumbnail_cache":[92],"in_the_loop":[91],"wp_get_attachment_image":[93]},"used_by":{"the_post_thumbnail":[46]}},"update_post_thumbnail_cache":{"doc":"\/**\n * Update cache for thumbnails in the current loop\n *\n * @since 3.2\n *\n * @param object $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global.\n *\/","file":"post-thumbnail-template.php","line":56,"missingDoc":false,"filters":[],"uses":{"get_post_thumbnail_id":[65],"_prime_post_caches":[70]},"used_by":{"get_the_post_thumbnail":[92]}},"in_the_loop":{"doc":"\/**\n * Whether the caller is in the Loop.\n *\n * @since 2.0.0\n * @uses $wp_query\n *\n * @return bool True if caller is within loop, false if loop hasn't started or ended.\n *\/","file":"query.php","line":754,"missingDoc":false,"filters":[],"uses":[],"used_by":{"get_the_post_thumbnail":[91]}},"create_initial_post_types":{"doc":"\/**\n * Creates the initial post types when 'init' action is fired.\n *\n * @since 2.9.0\n *\/","file":"post.php","line":19,"missingDoc":false,"filters":[],"uses":{"register_post_type":[20,36,53,78,96],"_x":[22,38,55,56,57,110,117,124,131,138,145],"__":[58,59,80,81,98,99],"register_post_status":[109,116,123,130,137,144,152,158],"_n_noop":[113,120,127,134,141,148]},"used_by":[]},"register_post_type":{"doc":"\/**\n * Register a post type. Do not use before init.\n *\n * A function for creating or modifying a post type based on the\n * parameters given. The function will accept an array (second optional\n * parameter), along with a string for the post type name.\n *\n * Optional $args contents:\n *\n * - label - Name of the post type shown in the menu. Usually plural. If not set, labels['name'] will be used.\n * - labels - An array of labels for this post type.\n * * If not set, post labels are inherited for non-hierarchical types and page labels for hierarchical ones.\n * * You can see accepted values in {@link get_post_type_labels()}.\n * - description - A short descriptive summary of what the post type is. Defaults to blank.\n * - public - Whether a post type is intended for use publicly either via the admin interface or by front-end users.\n * * Defaults to false.\n * * While the default settings of exclude_from_search, publicly_queryable, show_ui, and show_in_nav_menus are\n * inherited from public, each does not rely on this relationship and controls a very specific intention.\n * - exclude_from_search - Whether to exclude posts with this post type from front end search results.\n * * If not set, the the opposite of public's current value is used.\n * - publicly_queryable - Whether queries can be performed on the front end for the post type as part of parse_request().\n * * ?post_type={post_type_key}\n * * ?{post_type_key}={single_post_slug}\n * * ?{post_type_query_var}={single_post_slug}\n * * If not set, the default is inherited from public.\n * - show_ui - Whether to generate a default UI for managing this post type in the admin.\n * * If not set, the default is inherited from public.\n * - show_in_nav_menus - Makes this post type available for selection in navigation menus.\n * * If not set, the default is inherited from public.\n * - show_in_menu - Where to show the post type in the admin menu.\n * * If true, the post type is shown in its own top level menu.\n * * If false, no menu is shown\n * * If a string of an existing top level menu (eg. 'tools.php' or 'edit.php?post_type=page'), the post type will\n * be placed as a sub menu of that.\n * * show_ui must be true.\n * * If not set, the default is inherited from show_ui\n * - show_in_admin_bar - Makes this post type available via the admin bar.\n * * If not set, the default is inherited from show_in_menu\n * - menu_position - The position in the menu order the post type should appear.\n * * show_in_menu must be true\n * * Defaults to null, which places it at the bottom of its area.\n * - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon.\n * - capability_type - The string to use to build the read, edit, and delete capabilities. Defaults to 'post'.\n * * May be passed as an array to allow for alternative plurals when using this argument as a base to construct the\n * capabilities, e.g. array('story', 'stories').\n * - capabilities - Array of capabilities for this post type.\n * * By default the capability_type is used as a base to construct capabilities.\n * * You can see accepted values in {@link get_post_type_capabilities()}.\n * - map_meta_cap - Whether to use the internal default meta capability handling. Defaults to false.\n * - hierarchical - Whether the post type is hierarchical (e.g. page). Defaults to false.\n * - supports - An alias for calling add_post_type_support() directly. Defaults to title and editor.\n * * See {@link add_post_type_support()} for documentation.\n * - register_meta_box_cb - Provide a callback function that will be called when setting up the\n * meta boxes for the edit form. Do remove_meta_box() and add_meta_box() calls in the callback.\n * - taxonomies - An array of taxonomy identifiers that will be registered for the post type.\n * * Default is no taxonomies.\n * * Taxonomies can be registered later with register_taxonomy() or register_taxonomy_for_object_type().\n * - has_archive - True to enable post type archives. Default is false.\n * * Will generate the proper rewrite rules if rewrite is enabled.\n * - rewrite - Triggers the handling of rewrites for this post type. Defaults to true, using $post_type as slug.\n * * To prevent rewrite, set to false.\n * * To specify rewrite rules, an array can be passed with any of these keys\n * * 'slug' => string Customize the permastruct slug. Defaults to $post_type key\n * * 'with_front' => bool Should the permastruct be prepended with WP_Rewrite::$front. Defaults to true.\n * * 'feeds' => bool Should a feed permastruct be built for this post type. Inherits default from has_archive.\n * * 'pages' => bool Should the permastruct provide for pagination. Defaults to true.\n * * 'ep_mask' => const Assign an endpoint mask.\n * * If not specified and permalink_epmask is set, inherits from permalink_epmask.\n * * If not specified and permalink_epmask is not set, defaults to EP_PERMALINK\n * - query_var - Sets the query_var key for this post type. Defaults to $post_type key\n * * If false, a post type cannot be loaded at ?{query_var}={post_slug}\n * * If specified as a string, the query ?{query_var_string}={post_slug} will be valid.\n * - can_export - Allows this post type to be exported. Defaults to true.\n * - delete_with_user - Whether to delete posts of this type when deleting a user.\n * * If true, posts of this type belonging to the user will be moved to trash when then user is deleted.\n * * If false, posts of this type belonging to the user will *not* be trashed or deleted.\n * * If not set (the default), posts are trashed if post_type_supports('author'). Otherwise posts are not trashed or deleted.\n * - _builtin - true if this post type is a native or \"built-in\" post_type. THIS IS FOR INTERNAL USE ONLY!\n * - _edit_link - URL segement to use for edit link of this post type. THIS IS FOR INTERNAL USE ONLY!\n *\n * @since 2.9.0\n * @uses $wp_post_types Inserts new post type object into the list\n *\n * @param string $post_type Post type key, must not exceed 20 characters\n * @param array|string $args See optional args description above.\n * @return object|WP_Error the registered post type object, or an error object\n *\/","file":"post.php","line":1213,"missingDoc":false,"filters":["'registered_post_type'"],"uses":{"is_array":[1216,1274,1294],"wp_parse_args":[1231],"sanitize_key":[1234],"__":[1238],"strlen":[1237],"in_array":[1265],"get_post_type_capabilities":[1271],"add_post_type_support":[1278,1282],"sanitize_title_with_dashes":[1289],"add_query_var":[1290],"add_rewrite_tag":[1312,1314],"substr":[1319],"add_rewrite_rule":[1323,1326,1327,1330],"trim":[1325],"implode":[1325],"add_permastruct":[1333],"is_admin":[1293],"get_option":[1293],"add_action":[1337,1344],"get_post_type_labels":[1339],"register_taxonomy_for_object_type":[1347]},"used_by":{"create_initial_post_types":[20,36,53,78,96]}},"register_post_status":{"doc":"\/**\n * Register a post status. Do not use before init.\n *\n * A simple function for creating or modifying a post status based on the\n * parameters given. The function will accept an array (second optional\n * parameter), along with a string for the post status name.\n *\n *\n * Optional $args contents:\n *\n * label - A descriptive name for the post status marked for translation. Defaults to $post_status.\n * public - Whether posts of this status should be shown in the front end of the site. Defaults to true.\n * exclude_from_search - Whether to exclude posts with this post status from search results. Defaults to false.\n * show_in_admin_all_list - Whether to include posts in the edit listing for their post type\n * show_in_admin_status_list - Show in the list of statuses with post counts at the top of the edit\n * listings, e.g. All (12) | Published (9) | My Custom Status (2) ...\n *\n * Arguments prefixed with an _underscore shouldn't be used by plugins and themes.\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses Inserts new post status object into the list\n *\n * @param string $post_status Name of the post status.\n * @param array|string $args See above description.\n *\/","file":"post.php","line":922,"missingDoc":false,"filters":[],"uses":{"is_array":[925],"wp_parse_args":[942],"sanitize_key":[945]},"used_by":{"create_initial_post_types":[109,116,123,130,137,144,152,158]}},"update_attached_file":{"doc":"\/**\n * Update attachment file path based on attachment ID.\n *\n * Used to update the file path of the attachment, which uses post meta name\n * '_wp_attached_file' to store the path of the attachment.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'update_attached_file' on file path and attachment ID.\n *\n * @param int $attachment_id Attachment ID\n * @param string $file File path for the attachment\n * @return bool False on failure, true on success.\n *\/","file":"post.php","line":208,"missingDoc":false,"filters":["'update_attached_file'"],"uses":{"get_post":[209],"update_post_meta":[214],"delete_post_meta":[216],"_wp_relative_upload_path":[213]},"used_by":{"wp_insert_attachment":[4042]}},"_wp_relative_upload_path":{"doc":"\/**\n * Return relative path to an uploaded file.\n *\n * The path is relative to the current upload dir.\n *\n * @since 2.9.0\n * @uses apply_filters() Calls '_wp_relative_upload_path' on file path.\n *\n * @param string $path Full path to the file\n * @return string relative path on success, unchanged path on failure.\n *\/","file":"post.php","line":230,"missingDoc":false,"filters":["'_wp_relative_upload_path'"],"uses":{"wp_upload_dir":[233],"str_replace":[235],"ltrim":[236],"strpos":[234]},"used_by":{"update_attached_file":[213]}},"sanitize_post":{"doc":"\/**\n * Sanitize every post field.\n *\n * If the context is 'raw', then the post object or array will get minimal santization of the int fields.\n *\n * @since 2.3.0\n * @uses sanitize_post_field() Used to sanitize the fields.\n *\n * @param object|WP_Post|array $post The Post Object or Array\n * @param string $context Optional, default is 'display'. How to sanitize post fields.\n * @return object|WP_Post|array The now sanitized Post Object or Array (will be the same type as $post)\n *\/","file":"post.php","line":1941,"missingDoc":false,"filters":[],"uses":{"sanitize_post_field":[1949,1958],"array_keys":[1948,1957],"get_object_vars":[1948],"is_object":[1942]},"used_by":{"get_post":[394],"WP_Post::get_instance":[585,588],"WP_Post::filter":[660],"wp_insert_post":[2713],"get_pages":[3807],"wp_insert_attachment":[3921],"_set_preview":[5236]}},"WP_Post::get_instance":{"doc":"","file":"post.php","line":570,"missingDoc":true,"filters":[],"uses":{"wp_cache_get":[577],"get_row":[580],"prepare":[580],"sanitize_post":[585,588],"wp_cache_add":[586]},"used_by":[]},"WP_Post::__construct":{"doc":"","file":"post.php","line":594,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[595]},"used_by":[]},"WP_Post::__isset":{"doc":"","file":"post.php","line":599,"missingDoc":true,"filters":[],"uses":{"metadata_exists":[612]},"used_by":[]},"WP_Post::__get":{"doc":"","file":"post.php","line":615,"missingDoc":true,"filters":[],"uses":{"get_post_meta":[617,645],"__isset":[616],"get_the_terms":[622,632],"is_object_in_taxonomy":[621,631],"wp_list_pluck":[627,637],"get_post_ancestors":[643],"sanitize_post_field":[648]},"used_by":[]},"get_post_ancestors":{"doc":"\/**\n * Retrieve ancestors of a post.\n *\n * @since 2.5.0\n *\n * @param int|object $post Post ID or post object\n * @return array Ancestor IDs or empty array if none are found.\n *\/","file":"post.php","line":683,"missingDoc":false,"filters":[],"uses":{"get_post":[687,696],"in_array":[698]},"used_by":{"WP_Post::__get":[643],"get_ancestors":[3240]}},"sanitize_post_field":{"doc":"\/**\n * Sanitize post field based on context.\n *\n * Possible context values are: 'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The\n * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'\n * when calling filters.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'edit_$field' and '{$field_no_prefix}_edit_pre' passing $value and\n * $post_id if $context == 'edit' and field name prefix == 'post_'.\n *\n * @uses apply_filters() Calls 'edit_post_$field' passing $value and $post_id if $context == 'db'.\n * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db' and field name prefix == 'post_'.\n * @uses apply_filters() Calls '{$field}_pre' passing $value if $context == 'db' and field name prefix != 'post_'.\n *\n * @uses apply_filters() Calls '$field' passing $value, $post_id and $context if $context == anything\n * other than 'raw', 'edit' and 'db' and field name prefix == 'post_'.\n * @uses apply_filters() Calls 'post_$field' passing $value if $context == anything other than 'raw',\n * 'edit' and 'db' and field name prefix != 'post_'.\n *\n * @param string $field The Post Object field name.\n * @param mixed $value The Post Object value.\n * @param int $post_id Post ID.\n * @param string $context How to sanitize post fields. Looks for 'raw', 'edit', 'db', 'display',\n * 'attribute' and 'js'.\n * @return mixed Sanitized value.\n *\/","file":"post.php","line":1991,"missingDoc":false,"filters":["\"edit_{$field}\"","\"{$field_no_prefix}_edit_pre\"","\"edit_post_{$field}\"","\"pre_{$field}\"","\"{$field_no_prefix}_save_pre\"","\"pre_post_{$field}\"","\"{$field}_pre\"","\"post_{$field}\""],"uses":{"in_array":[1993,1998,2023],"array_map":[1999],"str_replace":[2009],"strpos":[2007],"format_to_edit":[2025,2027],"user_can_richedit":[2025],"esc_attr":[2029,2048],"esc_js":[2050]},"used_by":{"WP_Post::__get":[648],"get_post_field":[733],"set_post_type":[1666],"sanitize_post":[1949,1958]}},"WP_Post::filter":{"doc":"","file":"post.php","line":653,"missingDoc":true,"filters":[],"uses":{"sanitize_post":[660]},"used_by":[]},"WP_Post::to_array":{"doc":"","file":"post.php","line":663,"missingDoc":true,"filters":[],"uses":{"get_object_vars":[664],"__get":[668],"__isset":[667]},"used_by":[]},"has_post_format":{"doc":"\/**\n * Check if a post has a particular format\n *\n * @since 3.1.0\n * @uses has_term()\n *\n * @param string $format The format to check for\n * @param object|id $post The post to check. If not supplied, defaults to the current post if used in the loop.\n * @return bool True if the post has the format, false otherwise.\n *\/","file":"post.php","line":791,"missingDoc":false,"filters":[],"uses":{"has_term":[792],"sanitize_key":[792]},"used_by":[]},"get_post_format_slugs":{"doc":"\/**\n * Retrieves an array of post format slugs.\n *\n * @since 3.1.0\n *\n * @return array The array of post format slugs.\n *\/","file":"post.php","line":5346,"missingDoc":false,"filters":[],"uses":{"array_keys":[5347],"get_post_format_strings":[5347],"array_combine":[5348]},"used_by":{"set_post_format":[812],"_post_format_request":[5441],"add_theme_support":[1262]}},"wp_set_post_terms":{"doc":"\/**\n * Set the terms for a post.\n *\n * @since 2.8.0\n * @uses wp_set_object_terms() Sets the tags for the post.\n *\n * @param int $post_id Post ID.\n * @param string $tags The tags to set for the post, separated by commas.\n * @param string $taxonomy Taxonomy name. Defaults to 'post_tag'.\n * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags.\n * @return mixed Array of affected term IDs. WP_Error or false on failure.\n *\/","file":"post.php","line":3193,"missingDoc":false,"filters":[],"uses":{"_x":[3203],"str_replace":[3205],"explode":[3206],"trim":[3206],"is_array":[3202],"array_unique":[3212],"array_map":[3212],"is_taxonomy_hierarchical":[3211],"wp_set_object_terms":[3215]},"used_by":{"set_post_format":[818],"wp_insert_post":[2916],"wp_set_post_tags":[3178],"wp_set_post_categories":[3244],"wp_insert_attachment":[4037]}},"get_post_status":{"doc":"\/**\n * Retrieve the post status based on the Post ID.\n *\n * If the post ID is of an attachment, then the parent post status will be given\n * instead.\n *\n * @since 2.0.0\n *\n * @param int $ID Post ID\n * @return string|bool Post status or false on failure.\n *\/","file":"post.php","line":832,"missingDoc":false,"filters":[],"uses":{"get_post":[833],"is_object":[835],"get_post_status":[848]},"used_by":{"get_post_status":[848],"wp_delete_post":[2311],"wp_set_post_categories":[3233],"WP_Query::get_posts":[2700]}},"get_post_stati":{"doc":"\/**\n * Get a list of all registered post status objects.\n *\n * @package WordPress\n * @subpackage Post\n * @since 3.0.0\n * @uses $wp_post_statuses\n * @see register_post_status\n * @see get_post_status_object\n *\n * @param array|string $args An array of key => value arguments to match against the post status objects.\n * @param string $output The type of output to return, either post status 'names' or 'objects'. 'names' is the default.\n * @param string $operator The logical operation to perform. 'or' means only one element\n * from the array needs to match; 'and' means all elements must match. The default is 'and'.\n * @return array A list of post status names or objects\n *\/","file":"post.php","line":1024,"missingDoc":false,"filters":[],"uses":{"wp_filter_object_list":[1029]},"used_by":{"wp_count_posts":[2145],"get_pages":[3649],"WP_Query::get_posts":[2446,2449,2490,2499,2506]}},"get_post_type_capabilities":{"doc":"\/**\n * Builds an object with all post type capabilities out of a post type object\n *\n * Post type capabilities use the 'capability_type' argument as a base, if the\n * capability is not set in the 'capabilities' argument array or if the\n * 'capabilities' argument is not supplied.\n *\n * The capability_type argument can optionally be registered as an array, with\n * the first value being singular and the second plural, e.g. array('story, 'stories')\n * Otherwise, an 's' will be added to the value for the plural form. After\n * registration, capability_type will always be a string of the singular value.\n *\n * By default, seven keys are accepted as part of the capabilities array:\n *\n * - edit_post, read_post, and delete_post are meta capabilities, which are then\n * generally mapped to corresponding primitive capabilities depending on the\n * context, which would be the post being edited\/read\/deleted and the user or\n * role being checked. Thus these capabilities would generally not be granted\n * directly to users or roles.\n *\n * - edit_posts - Controls whether objects of this post type can be edited.\n * - edit_others_posts - Controls whether objects of this type owned by other users\n * can be edited. If the post type does not support an author, then this will\n * behave like edit_posts.\n * - publish_posts - Controls publishing objects of this post type.\n * - read_private_posts - Controls whether private objects can be read.\n *\n * These four primitive capabilities are checked in core in various locations.\n * There are also seven other primitive capabilities which are not referenced\n * directly in core, except in map_meta_cap(), which takes the three aforementioned\n * meta capabilities and translates them into one or more primitive capabilities\n * that must then be checked against the user or role, depending on the context.\n *\n * - read - Controls whether objects of this post type can be read.\n * - delete_posts - Controls whether objects of this post type can be deleted.\n * - delete_private_posts - Controls whether private objects can be deleted.\n * - delete_published_posts - Controls whether published objects can be deleted.\n * - delete_others_posts - Controls whether objects owned by other users can be\n * can be deleted. If the post type does not support an author, then this will\n * behave like delete_posts.\n * - edit_private_posts - Controls whether private objects can be edited.\n * - edit_published_posts - Controls whether published objects can be edited.\n *\n * These additional capabilities are only used in map_meta_cap(). Thus, they are\n * only assigned by default if the post type is registered with the 'map_meta_cap'\n * argument set to true (default is false).\n *\n * @see map_meta_cap()\n * @since 3.0.0\n *\n * @param object $args Post type registration arguments\n * @return object object with all the capabilities as member variables\n *\/","file":"post.php","line":1408,"missingDoc":false,"filters":[],"uses":{"is_array":[1409],"array_merge":[1438,1441],"_post_type_meta_capabilities":[1449]},"used_by":{"register_post_type":[1271]}},"add_post_type_support":{"doc":"\/**\n * Register support of certain features for a post type.\n *\n * All features are directly associated with a functional area of the edit screen, such as the\n * editor or a meta box: 'title', 'editor', 'comments', 'revisions', 'trackbacks', 'author',\n * 'excerpt', 'page-attributes', 'thumbnail', and 'custom-fields'.\n *\n * Additionally, the 'revisions' feature dictates whether the post type will store revisions,\n * and the 'comments' feature dictates whether the comments count will show on the edit screen.\n *\n * @since 3.0.0\n * @param string $post_type The post type for which to add the feature\n * @param string|array $feature the feature being added, can be an array of feature strings or a single string\n *\/","file":"post.php","line":1578,"missingDoc":false,"filters":[],"uses":{"array_slice":[1586],"func_get_args":[1586],"func_num_args":[1583]},"used_by":{"register_post_type":[1278,1282]}},"add_rewrite_tag":{"doc":"\/**\n * Add a new rewrite tag (like %postname%).\n *\n * The $query parameter is optional. If it is omitted you must ensure that\n * you call this on, or before, the 'init' hook. This is because $query defaults\n * to \"$tag=\", and for this to work a new query var has to be added.\n *\n * @see WP_Rewrite::add_rewrite_tag()\n * @since 2.1.0\n *\n * @param string $tag Name of the new rewrite tag.\n * @param string $regex Regular expression to substitute the tag for in rewrite rules.\n * @param string $query String to append to the rewritten query. Must end in '='. Optional.\n *\/","file":"rewrite.php","line":38,"missingDoc":false,"filters":[],"uses":{"strlen":[40,40],"trim":[46],"add_query_var":[47],"add_rewrite_tag":[51]},"used_by":{"register_post_type":[1312,1314],"add_rewrite_tag":[51],"WP_Rewrite::page_rewrite_rules":[864],"register_taxonomy":[358]}},"add_rewrite_rule":{"doc":"\/**\n * Add a straight rewrite rule.\n *\n * @see WP_Rewrite::add_rule() for long description.\n * @since 2.1.0\n *\n * @param string $regex Regular Expression to match request against.\n * @param string $redirect Page to redirect to.\n * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'.\n *\/","file":"rewrite.php","line":19,"missingDoc":false,"filters":[],"uses":{"add_rule":[21]},"used_by":{"register_post_type":[1323,1326,1327,1330]}},"add_permastruct":{"doc":"\/**\n * Add permalink structure.\n *\n * @see WP_Rewrite::add_permastruct()\n * @since 3.0.0\n *\n * @param string $name Name for permalink structure.\n * @param string $struct Permalink structure.\n * @param array $args Optional configuration for building the rules from the permalink structure,\n * see {@link WP_Rewrite::add_permastruct()} for full details.\n *\/","file":"rewrite.php","line":65,"missingDoc":false,"filters":[],"uses":{"is_array":[69],"func_get_arg":[72],"func_num_args":[71],"add_permastruct":[74]},"used_by":{"register_post_type":[1333],"add_permastruct":[74],"register_taxonomy":[359]}},"get_post_type_labels":{"doc":"\/**\n * Builds an object with all post type labels out of a post type object\n *\n * Accepted keys of the label array in the post type object:\n * - name - general name for the post type, usually plural. The same and overridden by $post_type_object->label. Default is Posts\/Pages\n * - singular_name - name for one object of this post type. Default is Post\/Page\n * - add_new - Default is Add New for both hierarchical and non-hierarchical types. When internationalizing this string, please use a {@link http:\/\/codex.wordpress.org\/I18n_for_WordPress_Developers#Disambiguation_by_context gettext context} matching your post type. Example: <code>_x('Add New', 'product');<\/code>\n * - add_new_item - Default is Add New Post\/Add New Page\n * - edit_item - Default is Edit Post\/Edit Page\n * - new_item - Default is New Post\/New Page\n * - view_item - Default is View Post\/View Page\n * - search_items - Default is Search Posts\/Search Pages\n * - not_found - Default is No posts found\/No pages found\n * - not_found_in_trash - Default is No posts found in Trash\/No pages found in Trash\n * - parent_item_colon - This string isn't used on non-hierarchical types. In hierarchical ones the default is Parent Page:\n * - all_items - String for the submenu. Default is All Posts\/All Pages\n * - menu_name - Default is the same as <code>name<\/code>\n *\n * Above, the first default value is for non-hierarchical post types (like posts) and the second one is for hierarchical post types (like pages).\n *\n * @since 3.0.0\n * @param object $post_type_object\n * @return object object with all the labels as member variables\n *\/","file":"post.php","line":1494,"missingDoc":false,"filters":["\"post_type_labels_{$post_type}\""],"uses":{"_x":[1496,1496,1497,1497,1498,1498],"__":[1499,1499,1500,1500,1501,1501,1502,1502,1503,1503,1504,1504,1505,1505,1506,1507,1507],"_get_custom_object_labels":[1511]},"used_by":{"register_post_type":[1339]}},"register_taxonomy_for_object_type":{"doc":"\/**\n * Add an already registered taxonomy to an object type.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.0.0\n * @uses $wp_taxonomies Modifies taxonomy object\n *\n * @param string $taxonomy Name of taxonomy object\n * @param string $object_type Name of the object type\n * @return bool True if successful, false if not\n *\/","file":"taxonomy.php","line":460,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[466],"in_array":[469]},"used_by":{"register_post_type":[1347]}},"_get_custom_object_labels":{"doc":"\/**\n * Builds an object with custom-something object (post type, taxonomy) labels out of a custom-something object\n *\n * @access private\n * @since 3.0.0\n *\/","file":"post.php","line":1523,"missingDoc":false,"filters":[],"uses":{"array_merge":[1543]},"used_by":{"get_post_type_labels":[1511],"get_taxonomy_labels":[445]}},"_add_post_type_submenus":{"doc":"\/**\n * Adds submenus for post types.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":1553,"missingDoc":false,"filters":[],"uses":{"get_post_type_object":[1555],"add_submenu_page":[1559],"get_post_types":[1554]},"used_by":[]},"remove_post_type_support":{"doc":"\/**\n * Remove support for a feature from a post type.\n *\n * @since 3.0.0\n * @param string $post_type The post type for which to remove the feature\n * @param string $feature The feature being removed\n *\/","file":"post.php","line":1597,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"set_post_type":{"doc":"\/**\n * Updates the post type for the post ID.\n *\n * The page or post cache will be cleaned for the post ID.\n *\n * @since 2.5.0\n *\n * @uses $wpdb\n *\n * @param int $post_id Post ID to change post type. Not actually optional.\n * @param string $post_type Optional, default is post. Supported values are 'post' or 'page' to\n * name a few.\n * @return int Amount of rows changed. Should be 1 for success and 0 for failure.\n *\/","file":"post.php","line":1663,"missingDoc":false,"filters":[],"uses":{"sanitize_post_field":[1666],"update":[1667],"clean_post_cache":[1669]},"used_by":[]},"delete_post_meta_by_key":{"doc":"\/**\n * Delete everything from post meta matching meta key.\n *\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param string $post_meta_key Key to search for when deleting.\n * @return bool Whether the post meta key was deleted from the database\n *\/","file":"post.php","line":1834,"missingDoc":false,"filters":[],"uses":{"delete_metadata":[1835]},"used_by":[]},"wp_count_posts":{"doc":"\/**\n * Count number of posts of a post type and is user has permissions to view.\n *\n * This function provides an efficient method of finding the amount of post's\n * type a blog has. Another method is to count the amount of items in\n * get_posts(), but that method has a lot of overhead with doing so. Therefore,\n * when developing for 2.5+, use this function instead.\n *\n * The $perm parameter checks for 'readable' value and if the user can read\n * private posts, it will display that for the user that is signed in.\n *\n * @since 2.5.0\n * @link http:\/\/codex.wordpress.org\/Template_Tags\/wp_count_posts\n *\n * @param string $type Optional. Post type to retrieve count\n * @param string $perm Optional. 'readable' or empty.\n * @return object Number of posts for each status\n *\/","file":"post.php","line":2121,"missingDoc":false,"filters":[],"uses":{"wp_get_current_user":[2124],"get_post_type_object":[2130],"current_user_can":[2131],"is_user_logged_in":[2129],"wp_cache_get":[2138],"get_results":[2142],"prepare":[2142],"get_post_stati":[2145],"wp_cache_set":[2152]},"used_by":[]},"wp_count_attachments":{"doc":"\/**\n * Count number of attachments for the mime type(s).\n *\n * If you set the optional mime_type parameter, then an array will still be\n * returned, but will only have the item you are looking for. It does not give\n * you the number of attachments that are children of a post. You can get that\n * by counting the number of children that post has.\n *\n * @since 2.5.0\n *\n * @param string|array $mime_type Optional. Array or comma-separated list of MIME patterns.\n * @return array Number of posts for each mime type.\n *\/","file":"post.php","line":2170,"missingDoc":false,"filters":[],"uses":{"wp_post_mime_type_where":[2173],"get_results":[2174],"get_var":[2180]},"used_by":[]},"wp_post_mime_type_where":{"doc":"\/**\n * Convert MIME types into SQL.\n *\n * @since 2.5.0\n *\n * @param string|array $post_mime_types List of mime types or comma separated string of mime types.\n * @param string $table_alias Optional. Specify a table alias, if needed.\n * @return string The SQL AND clause for mime searching.\n *\/","file":"post.php","line":2249,"missingDoc":false,"filters":[],"uses":{"array_map":[2253],"explode":[2253],"is_string":[2252],"preg_replace":[2255,2258,2259,2266,2271],"strpos":[2256,2267,2276],"substr":[2258,2259],"str_replace":[2263],"in_array":[2273],"join":[2282]},"used_by":{"wp_count_attachments":[2173],"WP_Query::get_posts":[2332]}},"wp_match_mime_types":{"doc":"\/**\n * Check a MIME-Type against a list.\n *\n * If the wildcard_mime_types parameter is a string, it must be comma separated\n * list. If the real_mime_types is a string, it is also comma separated to\n * create the list.\n *\n * @since 2.5.0\n *\n * @param string|array $wildcard_mime_types e.g. audio\/mpeg or image (same as image\/*) or\n * flash (same as *flash*).\n * @param string|array $real_mime_types post_mime_type values\n * @return array array(wildcard=>array(real types))\n *\/","file":"post.php","line":2216,"missingDoc":false,"filters":[],"uses":{"array_map":[2219,2221],"explode":[2219,2221],"is_string":[2218,2220],"str_replace":[2224],"strpos":[2226],"asort":[2231],"preg_match":[2235],"array_search":[2235]},"used_by":{"wp_mime_type_icon":[4385]}},"wp_trash_post":{"doc":"\/**\n * Moves a post or page to the Trash\n *\n * If trash is disabled, the post or page is permanently deleted.\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_post' before trashing\n * @uses do_action() on 'trashed_post' after trashing\n * @uses wp_delete_post() if trash is disabled\n *\n * @param int $post_id Post ID.\n * @return mixed False on failure\n *\/","file":"post.php","line":2397,"missingDoc":false,"filters":["'wp_trash_post'","'trashed_post'"],"uses":{"wp_delete_post":[2399],"get_post":[2401],"add_post_meta":[2409,2410],"time":[2410],"wp_insert_post":[2413],"wp_trash_post_comments":[2415]},"used_by":{"wp_delete_post":[2312],"wp_delete_attachment":[4086]}},"wp_delete_object_term_relationships":{"doc":"\/**\n * Will unlink the object from the taxonomy or taxonomies.\n *\n * Will remove all relationships between the object and any terms in\n * a particular taxonomy or taxonomies. Does not remove the term or\n * taxonomy itself.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int $object_id The term Object Id that refers to the term\n * @param string|array $taxonomies List of Taxonomy Names or single Taxonomy name.\n *\/","file":"taxonomy.php","line":1720,"missingDoc":false,"filters":["'delete_term_relationships'","'deleted_term_relationships'"],"uses":{"is_array":[1725],"wp_get_object_terms":[1729],"implode":[1730],"query":[1732],"prepare":[1732],"wp_update_term_count":[1734]},"used_by":{"wp_delete_post":[2322],"wp_delete_attachment":[4106,4107]}},"wp_delete_post_revision":{"doc":"\/**\n * Deletes a revision.\n *\n * Deletes the row from the posts table corresponding to the specified revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_get_post_revision()\n * @uses wp_delete_post()\n *\n * @param int|object $revision_id Revision ID or revision object.\n * @return mixed Null or WP_Error if error, deleted post if success.\n *\/","file":"post.php","line":5185,"missingDoc":false,"filters":["'wp_delete_post_revision'"],"uses":{"wp_get_post_revision":[5186],"wp_delete_post":[5189],"is_wp_error":[5190]},"used_by":{"wp_delete_post":[2353],"wp_save_post_revision":[4963]}},"wp_trash_post_comments":{"doc":"\/**\n * Moves comments for a post to the trash\n *\n * @since 2.9.0\n * @uses do_action() on 'trash_post_comments' before trashing\n * @uses do_action() on 'trashed_post_comments' after trashing\n *\n * @param int $post Post ID or object.\n * @return mixed False on failure\n *\/","file":"post.php","line":2467,"missingDoc":false,"filters":["'trash_post_comments'","'trashed_post_comments'"],"uses":{"get_post":[2470],"get_results":[2478],"prepare":[2478],"add_post_meta":[2486],"update":[2489],"clean_comment_cache":[2491],"array_keys":[2491]},"used_by":{"wp_trash_post":[2415]}},"wp_untrash_post":{"doc":"\/**\n * Restores a post or page from the Trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_post' before undeletion\n * @uses do_action() on 'untrashed_post' after undeletion\n *\n * @param int $post_id Post ID.\n * @return mixed False on failure\n *\/","file":"post.php","line":2432,"missingDoc":false,"filters":["'untrash_post'","'untrashed_post'"],"uses":{"get_post":[2433],"get_post_meta":[2441],"delete_post_meta":[2445,2446],"wp_insert_post":[2448],"wp_untrash_post_comments":[2450]},"used_by":[]},"wp_untrash_post_comments":{"doc":"\/**\n * Restore comments for a post from the trash\n *\n * @since 2.9.0\n * @uses do_action() on 'untrash_post_comments' before trashing\n * @uses do_action() on 'untrashed_post_comments' after trashing\n *\n * @param int $post Post ID or object.\n * @return mixed False on failure\n *\/","file":"post.php","line":2508,"missingDoc":false,"filters":["'untrash_post_comments'","'untrashed_post_comments'"],"uses":{"get_post":[2511],"get_post_meta":[2517],"implode":[2533],"query":[2534],"clean_comment_cache":[2537],"array_keys":[2537],"delete_post_meta":[2539]},"used_by":{"wp_untrash_post":[2450]}},"wp_get_post_terms":{"doc":"\/**\n * Retrieve the terms for a post.\n *\n * There is only one default for this function, called 'fields' and by default\n * is set to 'all'. There are other defaults that can be overridden in\n * {@link wp_get_object_terms()}.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.8.0\n *\n * @uses wp_get_object_terms() Gets the tags for returning. Args can be found here\n *\n * @param int $post_id Optional. The Post ID\n * @param string $taxonomy The taxonomy for which to retrieve terms. Defaults to post_tag.\n * @param array $args Optional. Overwrite the defaults\n * @return array List of post tags.\n *\/","file":"post.php","line":2607,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[2611],"wp_get_object_terms":[2613]},"used_by":{"wp_get_post_tags":[2586]}},"wp_unique_post_slug":{"doc":"\/**\n * Computes a unique slug for the post, when given the desired slug and some post details.\n *\n * @since 2.8.0\n *\n * @global wpdb $wpdb\n * @global WP_Rewrite $wp_rewrite\n * @param string $slug the desired slug (post_name)\n * @param integer $post_ID\n * @param string $post_status no uniqueness checks are made if the post is still draft or pending\n * @param string $post_type\n * @param integer $post_parent\n * @return string unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)\n *\/","file":"post.php","line":3086,"missingDoc":false,"filters":["'wp_unique_post_slug_is_bad_attachment_slug'","'wp_unique_post_slug_is_bad_hierarchical_slug'","'wp_unique_post_slug_is_bad_flat_slug'","'wp_unique_post_slug'"],"uses":{"in_array":[3087,3104,3113,3121,3135],"is_array":[3095],"get_post_types":[3098],"get_var":[3102,3108,3119,3125,3133,3139],"prepare":[3102,3108,3119,3125,3133,3139],"substr":[3107,3124,3138],"strlen":[3107,3124,3138],"implode":[3118],"esc_sql":[3118],"preg_match":[3121]},"used_by":{"wp_insert_post":[2860],"wp_insert_attachment":[3958]}},"wp_set_post_tags":{"doc":"\/**\n * Set the tags for a post.\n *\n * @since 2.3.0\n * @uses wp_set_object_terms() Sets the tags for the post.\n *\n * @param int $post_id Post ID.\n * @param string $tags The tags to set for the post, separated by commas.\n * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags.\n * @return mixed Array of affected term IDs. WP_Error or false on failure.\n *\/","file":"post.php","line":3177,"missingDoc":false,"filters":[],"uses":{"wp_set_post_terms":[3178]},"used_by":{"wp_insert_post":[2907],"wp_add_post_tags":[3163],"wp_insert_attachment":[4028]}},"wp_transition_post_status":{"doc":"\/**\n * Transition the post status of a post.\n *\n * Calls hooks to transition post status.\n *\n * The first is 'transition_post_status' with new status, old status, and post data.\n *\n * The next action called is 'OLDSTATUS_to_NEWSTATUS' the 'NEWSTATUS' is the\n * $new_status parameter and the 'OLDSTATUS' is $old_status parameter; it has the\n * post data.\n *\n * The final action is named 'NEWSTATUS_POSTTYPE', 'NEWSTATUS' is from the $new_status\n * parameter and POSTTYPE is post_type post data.\n *\n * @since 2.3.0\n * @link http:\/\/codex.wordpress.org\/Post_Status_Transitions\n *\n * @uses do_action() Calls 'transition_post_status' on $new_status, $old_status and\n * $post if there is a status change.\n * @uses do_action() Calls '{$old_status}_to_{$new_status}' on $post if there is a status change.\n * @uses do_action() Calls '{$new_status}_{$post->post_type}' on post ID and $post.\n *\n * @param string $new_status Transition to this post status.\n * @param string $old_status Previous post status.\n * @param object $post Post data.\n *\/","file":"post.php","line":3273,"missingDoc":false,"filters":["'transition_post_status'","\"{$old_status}_to_{$new_status}\"","\"{$new_status}_{$post->post_type}\""],"uses":[],"used_by":{"wp_insert_post":[2942],"wp_publish_post":[3033]}},"wp_publish_post":{"doc":"\/**\n * Publish a post by transitioning the post status.\n *\n * @since 2.1.0\n * @uses $wpdb\n * @uses do_action() Calls 'edit_post', 'save_post', and 'wp_insert_post' on post_id and post data.\n *\n * @param mixed $post Post ID or object.\n *\/","file":"post.php","line":3018,"missingDoc":false,"filters":["'edit_post'","'save_post'","'wp_insert_post'"],"uses":{"get_post":[3021],"update":[3027],"clean_post_cache":[3029],"wp_transition_post_status":[3033]},"used_by":{"check_and_publish_future_post":[3069]}},"check_and_publish_future_post":{"doc":"\/**\n * Publish future post and make sure post ID has future post status.\n *\n * Invoked by cron 'publish_future_post' event. This safeguard prevents cron\n * from publishing drafts, etc.\n *\n * @since 2.5.0\n *\n * @param int $post_id Post ID.\n * @return null Nothing is returned. Which can mean that no action is required or post was published.\n *\/","file":"post.php","line":3051,"missingDoc":false,"filters":[],"uses":{"get_post":[3053],"strtotime":[3061],"wp_clear_scheduled_hook":[3064],"wp_schedule_single_event":[3065],"time":[3063],"wp_publish_post":[3069]},"used_by":[]},"wp_add_post_tags":{"doc":"\/**\n * Adds tags to a post.\n *\n * @uses wp_set_post_tags() Same first two parameters, but the last parameter is always set to true.\n *\n * @package WordPress\n * @subpackage Post\n * @since 2.3.0\n *\n * @param int $post_id Post ID\n * @param string $tags The tags to set for the post, separated by commas.\n * @return bool|null Will return false if $post_id is not an integer or is 0. Will return null otherwise\n *\/","file":"post.php","line":3162,"missingDoc":false,"filters":[],"uses":{"wp_set_post_tags":[3163]},"used_by":[]},"wp_set_object_terms":{"doc":"\/**\n * Create Term and Taxonomy Relationships.\n *\n * Relates an object (post, link etc) to a term and taxonomy type. Creates the\n * term and taxonomy relationship if it doesn't already exist. Creates a term if\n * it doesn't exist (using the slug).\n *\n * A relationship means that the term is grouped in or belongs to the taxonomy.\n * A term has no meaning until it is given context by defining which taxonomy it\n * exists under.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int $object_id The object to relate to.\n * @param array|int|string $terms The slug or id of the term, will replace all existing\n * related terms in this taxonomy.\n * @param array|string $taxonomy The context in which to relate the term to the object.\n * @param bool $append If false will delete difference of terms.\n * @return array|WP_Error Affected Term IDs\n *\/","file":"taxonomy.php","line":2170,"missingDoc":false,"filters":["'add_term_relationship'","'added_term_relationship'","'delete_term_relationships'","'deleted_term_relationships'","'set_object_terms'"],"uses":{"__":[2176,2238],"taxonomy_exists":[2175],"is_array":[2178],"wp_get_object_terms":[2182,2232],"strlen":[2191],"trim":[2191],"is_int":[2196],"wp_insert_term":[2198],"term_exists":[2194],"is_wp_error":[2200],"get_var":[2206],"prepare":[2206,2222,2235],"insert":[2209],"wp_update_term_count":[2215,2224],"array_diff":[2218],"implode":[2220],"query":[2222,2237],"get_taxonomy":[2228],"in_array":[2234],"join":[2237],"wp_cache_delete":[2241]},"used_by":{"wp_set_post_terms":[3215],"wp_delete_term":[1817]}},"trackback_url_list":{"doc":"\/**\n * Do trackbacks for a list of URLs.\n *\n * @since 1.0.0\n *\n * @param string $tb_list Comma separated list of URLs\n * @param int $post_id Post ID\n *\/","file":"post.php","line":3377,"missingDoc":false,"filters":[],"uses":{"get_post":[3380],"extract":[3383],"strip_tags":[3386],"substr":[3389],"strlen":[3388],"explode":[3392],"trim":[3394],"trackback":[3395],"stripslashes":[3395]},"used_by":[]},"get_all_page_ids":{"doc":"\/**\n * Get a list of page IDs.\n *\n * @since 2.0.0\n * @uses $wpdb\n *\n * @return array List of page IDs.\n *\/","file":"post.php","line":3412,"missingDoc":false,"filters":[],"uses":{"wp_cache_get":[3415],"get_col":[3417],"wp_cache_add":[3418],"is_array":[3416]},"used_by":[]},"get_page":{"doc":"\/**\n * Retrieves page data given a page ID or page object.\n *\n * Use get_post() instead of get_page().\n *\n * @since 1.5.1\n * @deprecated 3.5.0\n *\n * @param mixed $page Page object or page ID. Passed by reference.\n * @param string $output What to output. OBJECT, ARRAY_A, or ARRAY_N.\n * @param string $filter How the return value should be filtered.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3437,"missingDoc":false,"filters":[],"uses":{"get_post":[3438]},"used_by":[]},"get_page_by_title":{"doc":"\/**\n * Retrieve a page given its title.\n *\n * @since 2.1.0\n * @uses $wpdb\n *\n * @param string $page_title Page title\n * @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A. Default OBJECT.\n * @param string $post_type Optional. Post type. Default page.\n * @return WP_Post|null WP_Post on success or null on failure\n *\/","file":"post.php","line":3507,"missingDoc":false,"filters":[],"uses":{"get_var":[3509],"prepare":[3509],"get_post":[3511]},"used_by":[]},"get_page_children":{"doc":"\/**\n * Retrieve child pages from list of pages matching page ID.\n *\n * Matches against the pages parameter against the page ID. Also matches all\n * children for the same to retrieve all children of a page. Does not make any\n * SQL queries to get the children.\n *\n * @since 1.5.1\n *\n * @param int $page_id Page ID.\n * @param array $pages List of pages' objects.\n * @return array\n *\/","file":"post.php","line":3529,"missingDoc":false,"filters":[],"uses":{"array_merge":[3535],"get_page_children":[3534]},"used_by":{"get_page_children":[3534],"get_pages":[3814,3818]}},"get_page_hierarchy":{"doc":"\/**\n * Order the pages with children under parents in a flat list.\n *\n * It uses auxiliary structure to hold parent-children relationships and\n * runs in O(N) complexity\n *\n * @since 2.0.0\n *\n * @param array $pages Posts array.\n * @param int $page_id Parent page ID.\n * @return array A list arranged by hierarchy. Children immediately follow their parents.\n *\/","file":"post.php","line":3553,"missingDoc":false,"filters":[],"uses":{"intval":[3561],"_page_traverse_name":[3566]},"used_by":{"WP_Rewrite::page_uri_index":[825]}},"_page_traverse_name":{"doc":"\/**\n * function to traverse and return all the nested children post names of a root page.\n * $children contains parent-children relations\n *\n * @since 2.9.0\n *\/","file":"post.php","line":3577,"missingDoc":false,"filters":[],"uses":{"_page_traverse_name":[3581]},"used_by":{"get_page_hierarchy":[3566],"_page_traverse_name":[3581]}},"wp_check_for_changed_slugs":{"doc":"\/**\n * Checked for changed slugs for published post objects and save the old slug.\n *\n * The function is used when a post object of any type is updated,\n * by comparing the current and previous post objects.\n *\n * If the slug was changed and not already part of the old slugs then it will be\n * added to the post meta field ('_wp_old_slug') for storing old slugs for that\n * post.\n *\n * The most logically usage of this function is redirecting changed post objects, so\n * that those that linked to an changed post will be redirected to the new post.\n *\n * @since 2.1.0\n *\n * @param int $post_id Post ID.\n * @param object $post The Post Object\n * @param object $post_before The Previous Post Object\n * @return int Same as $post_id\n *\/","file":"post.php","line":4421,"missingDoc":false,"filters":[],"uses":{"is_post_type_hierarchical":[4427],"get_post_meta":[4430],"add_post_meta":[4434],"in_array":[4433,4437],"delete_post_meta":[4438]},"used_by":[]},"get_posts_by_author_sql":{"doc":"\/**\n * Retrieve the post SQL based on capability, author, and type.\n *\n * @see get_private_posts_cap_sql() for full description.\n *\n * @since 3.0.0\n * @param string $post_type Post type.\n * @param bool $full Optional. Returns a full WHERE statement instead of just an 'andalso' term.\n * @param int $post_author Optional. Query posts having a single author ID.\n * @param bool $public_only Optional. Only return public posts. Skips cap checks for $current_user. Default is false.\n * @return string SQL WHERE code that can be added to a query.\n *\/","file":"post.php","line":4472,"missingDoc":false,"filters":["'pub_priv_sql_capability'"],"uses":{"get_post_type_object":[4476],"prepare":[4486,4488],"is_user_logged_in":[4501],"current_user_can":[4498]},"used_by":{"get_private_posts_cap_sql":[4457],"count_user_posts":[155],"count_many_users_posts":[180],"WP_User_Query::prepare_query":[424]}},"get_lastpostdate":{"doc":"\/**\n * Retrieve the date that the last post was published.\n *\n * The server timezone is the default and is the difference between GMT and\n * server time. The 'blog' value is the date when the last post was posted. The\n * 'gmt' is when the last post was posted in GMT formatted date.\n *\n * @since 0.71\n *\n * @uses apply_filters() Calls 'get_lastpostdate' filter\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @return string The date of the last post.\n *\/","file":"post.php","line":4531,"missingDoc":false,"filters":["'get_lastpostdate'"],"uses":{"_get_last_post_time":[4532]},"used_by":{"get_lastpostmodified":[4551]}},"_get_last_post_time":{"doc":"\/**\n * Retrieve latest post date data based on timezone.\n *\n * @access private\n * @since 3.1.0\n *\n * @param string $timezone The location to get the time. Can be 'gmt', 'blog', or 'server'.\n * @param string $field Field to check. Can be 'date' or 'modified'.\n * @return string The date.\n *\/","file":"post.php","line":4568,"missingDoc":false,"filters":[],"uses":{"in_array":[4571],"strtolower":[4574],"wp_cache_get":[4578],"date":[4581],"get_post_types":[4583],"array_walk":[4584],"implode":[4585],"get_var":[4589,4592,4595],"wp_cache_set":[4600]},"used_by":{"get_lastpostdate":[4532],"get_lastpostmodified":[4549]}},"update_post_caches":{"doc":"\/**\n * Call major cache updating functions for list of Post objects.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 1.5.0\n *\n * @uses $wpdb\n * @uses update_post_cache()\n * @uses update_object_term_cache()\n * @uses update_postmeta_cache()\n *\n * @param array $posts Array of Post objects\n * @param string $post_type The post type of the posts in $posts. Default is 'post'.\n * @param bool $update_term_cache Whether to update the term cache. Default is true.\n * @param bool $update_meta_cache Whether to update the meta cache. Default is true.\n *\/","file":"post.php","line":4685,"missingDoc":false,"filters":[],"uses":{"update_post_cache":[4690],"array_unique":[4706],"is_array":[4700],"update_object_term_cache":[4712],"update_postmeta_cache":[4716]},"used_by":{"_prime_post_caches":[5559],"WP_Query::get_posts":[2782]}},"update_object_term_cache":{"doc":"\/**\n * Updates the cache for Term ID(s).\n *\n * Will only update the cache for terms not already cached.\n *\n * The $object_ids expects that the ids be separated by commas, if it is a\n * string.\n *\n * It should be noted that update_object_term_cache() is very time extensive. It\n * is advised that the function is not called very often or at least not for a\n * lot of terms that exist in a lot of taxonomies. The amount of time increases\n * for each term and it also increases for each taxonomy the term belongs to.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses wp_get_object_terms() Used to get terms from the database to update\n *\n * @param string|array $object_ids Single or list of term object ID(s)\n * @param array|string $object_type The taxonomy object type\n * @return null|bool Null value is given with empty $object_ids. False if\n *\/","file":"taxonomy.php","line":2678,"missingDoc":false,"filters":[],"uses":{"explode":[2683],"is_array":[2682],"array_map":[2685],"get_object_taxonomies":[2687],"wp_cache_get":[2692],"wp_get_object_terms":[2702],"wp_cache_add":[2720]},"used_by":{"update_post_caches":[4712]}},"update_postmeta_cache":{"doc":"\/**\n * Updates metadata cache for list of post IDs.\n *\n * Performs SQL query to retrieve the metadata for the post IDs and updates the\n * metadata cache for the posts. Therefore, the functions, which call this\n * function, do not need to perform SQL queries on their own.\n *\n * @package WordPress\n * @subpackage Cache\n * @since 2.1.0\n *\n * @uses $wpdb\n *\n * @param array $post_ids List of post IDs.\n * @return bool|array Returns false if there is nothing to update or an array of metadata.\n *\/","file":"post.php","line":4735,"missingDoc":false,"filters":[],"uses":{"update_meta_cache":[4736]},"used_by":{"update_post_caches":[4716]}},"clean_attachment_cache":{"doc":"\/**\n * Will clean the attachment in the cache.\n *\n * Cleaning means delete from the cache. Optionally will clean the term\n * object cache associated with the attachment ID.\n *\n * This function will not run if $_wp_suspend_cache_invalidation is not empty. See\n * wp_suspend_cache_invalidation().\n *\n * @package WordPress\n * @subpackage Cache\n * @since 3.0.0\n *\n * @uses do_action() Calls 'clean_attachment_cache' on $id.\n *\n * @param int $id The attachment ID in the cache to clean\n * @param bool $clean_terms optional. Whether to clean terms cache\n *\/","file":"post.php","line":4757,"missingDoc":false,"filters":["'clean_attachment_cache'"],"uses":{"wp_cache_delete":[4765,4766],"clean_object_term_cache":[4769]},"used_by":[]},"_transition_post_status":{"doc":"\/**\n * Hook for managing future post transitions to published.\n *\n * @since 2.3.0\n * @access private\n * @uses $wpdb\n * @uses do_action() Calls 'private_to_published' on post ID if this is a 'private_to_published' call.\n * @uses wp_clear_scheduled_hook() with 'publish_future_post' and post ID.\n *\n * @param string $new_status New post status\n * @param string $old_status Previous post status\n * @param object $post Object type containing the post information\n *\/","file":"post.php","line":4791,"missingDoc":false,"filters":["'private_to_published'"],"uses":{"update":[4797],"get_permalink":[4797],"get_the_guid":[4796],"wp_cache_delete":[4804,4805],"wp_clear_scheduled_hook":[4810]},"used_by":[]},"_future_post_hook":{"doc":"\/**\n * Hook used to schedule publication for a post marked for the future.\n *\n * The $post properties used and must exist are 'ID' and 'post_date_gmt'.\n *\n * @since 2.3.0\n * @access private\n *\n * @param int $deprecated Not used. Can be set to null. Never implemented.\n * Not marked as deprecated with _deprecated_argument() as it conflicts with\n * wp_transition_post_status() and the default filter for _future_post_hook().\n * @param object $post Object type containing the post information\n *\/","file":"post.php","line":4826,"missingDoc":false,"filters":[],"uses":{"wp_clear_scheduled_hook":[4827],"wp_schedule_single_event":[4828],"strtotime":[4828],"get_gmt_from_date":[4828]},"used_by":[]},"_publish_post_hook":{"doc":"\/**\n * Hook to schedule pings and enclosures when a post is published.\n *\n * @since 2.3.0\n * @access private\n * @uses $wpdb\n * @uses XMLRPC_REQUEST constant.\n * @uses do_action() Calls 'xmlprc_publish_post' on post ID if XMLRPC_REQUEST is defined.\n *\n * @param int $post_id The ID in the database table of the post being published\n *\/","file":"post.php","line":4842,"missingDoc":false,"filters":["'xmlrpc_publish_post'"],"uses":{"defined":[4845,4848],"add_post_meta":[4852,4853],"get_option":[4851],"wp_schedule_single_event":[4855],"time":[4855]},"used_by":[]},"_wp_post_revision_fields":{"doc":"\/**\n * Determines which fields of posts are to be saved in revisions.\n *\n * Does two things. If passed a post *array*, it will return a post array ready\n * to be inserted into the posts table as a post revision. Otherwise, returns\n * an array whose keys are the post fields to be saved for post revisions.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n * @access private\n * @uses apply_filters() Calls '_wp_post_revision_fields' on 'title', 'content' and 'excerpt' fields.\n *\n * @param array $post Optional a post array to be processed for insertion as a post revision.\n * @param bool $autosave optional Is the revision an autosave?\n * @return array Post array ready to be inserted as a post revision or array of fields that can be versioned.\n *\/","file":"post.php","line":4875,"missingDoc":false,"filters":["'_wp_post_revision_fields'"],"uses":{"__":[4881,4882,4883],"is_array":[4894],"array_intersect":[4898],"array_keys":[4898,4898]},"used_by":{"_wp_put_post_revision":[5078],"wp_restore_post_revision":[5147]}},"wp_save_post_revision":{"doc":"\/**\n * Saves an already existing post as a post revision.\n *\n * Typically used immediately prior to post updates.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses _wp_put_post_revision()\n *\n * @param int $post_id The ID of the post to save as a revision.\n * @return mixed Null or 0 if error, new revision ID, if success.\n *\/","file":"post.php","line":4925,"missingDoc":false,"filters":[],"uses":{"defined":[4927],"get_post":[4934],"post_type_supports":[4940],"_wp_put_post_revision":[4943],"is_numeric":[4946],"wp_get_post_revisions":[4950],"count":[4953],"array_slice":[4958],"strpos":[4961],"wp_delete_post_revision":[4963]},"used_by":[]},"_wp_put_post_revision":{"doc":"\/**\n * Inserts post data into the posts table as a post revision.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @uses wp_insert_post()\n *\n * @param int|object|array $post Post ID, post object OR post array.\n * @param bool $autosave Optional. Is the revision an autosave?\n * @return mixed Null or 0 if error, new revision ID if success.\n *\/","file":"post.php","line":5067,"missingDoc":false,"filters":["'_wp_put_post_revision'"],"uses":{"get_object_vars":[5069],"is_array":[5070],"get_post":[5071],"is_object":[5068],"__":[5076],"_wp_post_revision_fields":[5078],"add_magic_quotes":[5079],"wp_insert_post":[5081],"is_wp_error":[5082]},"used_by":{"wp_save_post_revision":[4943]}},"_wp_get_post_autosave_hack":{"doc":"\/**\n * Internally used to hack WP_Query into submission.\n *\n * @package WordPress\n * @subpackage Post_Revisions\n * @since 2.6.0\n *\n * @param object $query WP_Query object\n *\/","file":"post.php","line":5016,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_set_preview":{"doc":"","file":"post.php","line":5226,"missingDoc":true,"filters":[],"uses":{"is_object":[5228,5233],"wp_get_post_autosave":[5231],"sanitize_post":[5236]},"used_by":[]},"_show_post_preview":{"doc":"","file":"post.php","line":5245,"missingDoc":true,"filters":[],"uses":{"wp_die":[5251],"__":[5251],"wp_verify_nonce":[5250],"add_filter":[5253]},"used_by":[]},"wp_get_post_parent_id":{"doc":"\/**\n * Returns the post's parent's post_ID\n *\n * @since 3.1.0\n *\n * @param int $post_id\n *\n * @return int|bool false on error\n *\/","file":"post.php","line":5266,"missingDoc":false,"filters":[],"uses":{"get_post":[5267],"is_wp_error":[5268]},"used_by":[]},"wp_check_post_hierarchy_for_loops":{"doc":"\/**\n * Checks the given subset of the post hierarchy for hierarchy loops.\n * Prevents loops from forming and breaks those that it finds.\n *\n * Attached to the wp_insert_post_parent filter.\n *\n * @since 3.1.0\n * @uses wp_find_hierarchy_loop()\n *\n * @param int $post_parent ID of the parent for the post we're checking.\n * @param int $post_ID ID of the post we're checking.\n *\n * @return int The new post_parent for the post.\n *\/","file":"post.php","line":5287,"missingDoc":false,"filters":[],"uses":{"wp_find_hierarchy_loop":[5302],"wp_update_post":[5311],"array_keys":[5310]},"used_by":[]},"get_post_format_string":{"doc":"\/**\n * Returns a pretty, translated version of a post format slug\n *\n * @since 3.1.0\n *\n * @param string $slug A post format slug\n * @return string The translated post format name\n *\/","file":"post.php","line":5359,"missingDoc":false,"filters":[],"uses":{"get_post_format_strings":[5360]},"used_by":{"_post_format_get_term":[5478],"_post_format_get_terms":[5494,5499],"_post_format_wp_get_object_terms":[5517]}},"get_post_format_link":{"doc":"\/**\n * Returns a link to a post format index.\n *\n * @since 3.1.0\n *\n * @param string $format Post format\n * @return string Link\n *\/","file":"post.php","line":5411,"missingDoc":false,"filters":[],"uses":{"get_term_by":[5412],"is_wp_error":[5413],"get_term_link":[5415]},"used_by":[]},"wp_delete_auto_drafts":{"doc":"\/**\n * Deletes auto-drafts for new posts that are > 7 days old\n *\n * @since 3.4.0\n *\/","file":"post.php","line":5423,"missingDoc":false,"filters":[],"uses":{"get_col":[5427],"wp_delete_post":[5429]},"used_by":[]},"_post_format_request":{"doc":"\/**\n * Filters the request to allow for the format prefix.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5438,"missingDoc":false,"filters":[],"uses":{"get_post_format_slugs":[5441],"get_taxonomy":[5444],"is_admin":[5445]},"used_by":[]},"_post_format_link":{"doc":"\/**\n * Filters the post format term link to remove the format prefix.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5457,"missingDoc":false,"filters":[],"uses":{"str_replace":[5462,5462,5465],"remove_query_arg":[5464],"add_query_arg":[5465],"get_extra_permastruct":[5461]},"used_by":[]},"_post_format_get_term":{"doc":"\/**\n * Remove the post format prefix from the name property of the term object created by get_term().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5476,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5478],"str_replace":[5478]},"used_by":[]},"_post_format_get_terms":{"doc":"\/**\n * Remove the post format prefix from the name property of the term objects created by get_terms().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5490,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5494,5499],"str_replace":[5494,5499],"in_array":[5491]},"used_by":[]},"_post_format_wp_get_object_terms":{"doc":"\/**\n * Remove the post format prefix from the name property of the term objects created by wp_get_object_terms().\n *\n * @access private\n * @since 3.1.0\n *\/","file":"post.php","line":5514,"missingDoc":false,"filters":[],"uses":{"get_post_format_string":[5517],"str_replace":[5517]},"used_by":[]},"_update_term_count_on_transition_post_status":{"doc":"\/**\n * Update the custom taxonomies' term counts when a post's status is changed. For example, default posts term counts (for custom taxonomies) don't include private \/ draft posts.\n *\n * @access private\n * @param string $new_status\n * @param string $old_status\n * @param object $post\n * @since 3.3.0\n *\/","file":"post.php","line":5533,"missingDoc":false,"filters":[],"uses":{"wp_get_object_terms":[5536],"wp_update_term_count":[5537],"get_object_taxonomies":[5535]},"used_by":[]},"wp_update_term_count":{"doc":"\/**\n * Updates the amount of terms in taxonomy.\n *\n * If there is a taxonomy callback applied, then it will be called for updating\n * the count.\n *\n * The default action is to count what the amount of terms have the relationship\n * of term ID. Once that is done, then update the database.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param int|array $terms The term_taxonomy_id of the terms\n * @param string $taxonomy The context of the term.\n * @return bool If no terms will return false, and if successful will return true.\n *\/","file":"taxonomy.php","line":2479,"missingDoc":false,"filters":[],"uses":{"wp_update_term_count_now":[2484,2502],"array_keys":[2483],"is_array":[2492],"array_unique":[2498],"array_merge":[2498],"wp_defer_term_counting":[2495]},"used_by":{"_update_term_count_on_transition_post_status":[5537],"wp_delete_object_term_relationships":[1734],"wp_set_object_terms":[2215,2224],"wp_defer_term_counting":[2455]}},"wp_reset_query":{"doc":"\/**\n * Destroy the previous query and set up a new query.\n *\n * This should be used after {@link query_posts()} and before another {@link\n * query_posts()}. This will remove obscure bugs that occur when the previous\n * wp_query object is not destroyed properly before another is set up.\n *\n * @since 2.3.0\n * @uses $wp_query\n *\/","file":"query.php","line":104,"missingDoc":false,"filters":[],"uses":{"wp_reset_postdata":[106]},"used_by":[]},"is_comment_feed":{"doc":"\/**\n * Is the query for a comments feed?\n *\n * @see WP_Query::is_comments_feed()\n * @since 3.0.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":382,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[386],"__":[386],"is_comment_feed":[390]},"used_by":{"is_comment_feed":[390]}},"is_time":{"doc":"\/**\n * Is the query for a specific time?\n *\n * @see WP_Query::is_time()\n * @since 1.5.0\n * @uses $wp_query\n *\n * @return bool\n *\/","file":"query.php","line":644,"missingDoc":false,"filters":[],"uses":{"_doing_it_wrong":[648],"__":[648],"is_time":[652]},"used_by":{"is_time":[652]}},"is_main_query":{"doc":"\/**\n * Is the query the main query?\n *\n * @since 3.3.0\n *\n * @return bool\n *\/","file":"query.php","line":722,"missingDoc":false,"filters":[],"uses":{"is_main_query":[724]},"used_by":{"is_main_query":[724],"WP_Query::get_posts":[2185]}},"WP_Query::init_query_flags":{"doc":"\/**\n * Resets query flags to false.\n *\n * The query flags are what page info WordPress was able to figure out.\n *\n * @since 2.0.0\n * @access private\n *\/","file":"query.php","line":1288,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::init":{"doc":"\/**\n * Initiates object properties and sets default values.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":1324,"missingDoc":false,"filters":[],"uses":{"init_query_flags":[1343]},"used_by":[]},"WP_Query::parse_query_vars":{"doc":"\/**\n * Reparse the query vars.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":1352,"missingDoc":false,"filters":[],"uses":{"parse_query":[1353]},"used_by":[]},"WP_Query::fill_query_vars":{"doc":"\/**\n * Fills in the query variables, which do not exist within the parameter.\n *\n * @since 2.1.0\n * @access public\n *\n * @param array $array Defined query variables.\n * @return array Complete query variables with undefined ones filled in empty.\n *\/","file":"query.php","line":1365,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::parse_query":{"doc":"\/**\n * Parse a query string and set query type booleans.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string|array $query Optional query.\n *\/","file":"query.php","line":1427,"missingDoc":false,"filters":["'parse_query'"],"uses":{"init":[1429],"wp_parse_args":[1430,1612],"fill_query_vars":[1435],"absint":[1442,1443,1444,1445,1446,1447,1448,1449,1453,1454,1455,1456,1464],"preg_replace":[1450,1661],"trim":[1451,1452],"strlen":[1529,1527,1525],"parse_tax_query":[1541],"get_post_type_object":[1569],"is_array":[1568,1651,1658],"intval":[1584],"is_admin":[1594],"str_replace":[1598],"strpos":[1597],"get_option":[1619,1611,1611,1635,1635,1643,1643],"array_diff":[1616],"array_keys":[1616],"get_page_by_path":[1629],"array_map":[1652,1659],"sanitize_key":[1654],"set_404":[1671],"md5":[1673],"serialize":[1673]},"used_by":[]},"WP_Query::parse_tax_query":{"doc":"","file":"query.php","line":1687,"missingDoc":true,"filters":[],"uses":{"is_array":[1688],"wp_basename":[1713],"preg_split":[1719,1727,1737,1790,1796],"array_merge":[1721,1726,1747,1750],"strpos":[1718,1789],"urldecode":[1735],"addslashes_gpc":[1736],"intval":[1741],"abs":[1744],"get_term_children":[1747,1750],"implode":[1753],"array_map":[1757,1767,1777,1816,1824,1833,1842,1851],"array_unique":[1757,1767,1777,1816,1824,1833,1842,1851],"sanitize_term_field":[1792,1798,1802],"preg_match":[1795],"absint":[1808]},"used_by":[]},"get_term_children":{"doc":"\/**\n * Merge all term children into a single array of their IDs.\n *\n * This recursive function will merge all of the children of $term into the same\n * array of term IDs. Only useful for taxonomies which are hierarchical.\n *\n * Will return an empty array if $term does not exist in $taxonomy.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses $wpdb\n * @uses _get_term_hierarchy()\n * @uses get_term_children() Used to get the children of both $taxonomy and the parent $term\n *\n * @param string $term_id ID of Term to get children\n * @param string $taxonomy Taxonomy Name\n * @return array|WP_Error List of Term Objects. WP_Error returned if $taxonomy does not exist\n *\/","file":"taxonomy.php","line":1007,"missingDoc":false,"filters":[],"uses":{"__":[1009],"taxonomy_exists":[1008],"intval":[1011],"_get_term_hierarchy":[1013],"array_merge":[1022],"get_term_children":[1022]},"used_by":{"WP_Query::parse_tax_query":[1747,1750],"WP_Tax_Query::clean_query":[762],"get_term_children":[1022]}},"WP_Query::set_404":{"doc":"\/**\n * Sets the 404 property and saves whether query is feed.\n *\n * @since 2.0.0\n * @access public\n *\/","file":"query.php","line":1869,"missingDoc":false,"filters":[],"uses":{"init_query_flags":[1872]},"used_by":[]},"WP_Query::get":{"doc":"\/**\n * Retrieve query variable.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @return mixed\n *\/","file":"query.php","line":1887,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::set":{"doc":"\/**\n * Set query variable.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @param mixed $value Query variable value.\n *\/","file":"query.php","line":1903,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::get_posts":{"doc":"\/**\n * Retrieve the posts based on query variables.\n *\n * There are a few filters and actions that can be used to modify the post\n * database query.\n *\n * @since 1.5.0\n * @access public\n * @uses do_action_ref_array() Calls 'pre_get_posts' hook before retrieving posts.\n *\n * @return array List of posts.\n *\/","file":"query.php","line":1919,"missingDoc":false,"filters":["'pre_get_posts'","'posts_selection'","'split_the_query'","'posts_request_ids'"],"uses":{"parse_query":[1922],"fill_query_vars":[1930],"parse_query_vars":[1934],"md5":[1937],"serialize":[1937],"_deprecated_argument":[1958],"__":[1958],"get_option":[1990,2005,2015,2020,2017,2017,2131,2132,2175,2175,2559,2692,2731],"abs":[2010],"trim":[2024],"absint":[2025,2154,2158,2298,2306,2326,2529,2536],"preg_replace":[2050],"substr":[2051,2053,2055,2057,2059,2061],"strlen":[2052,2054,2056,2058,2060],"get_post_type_object":[2085,2113,2400,2413,2416,2419,2422],"strpos":[2089,2294,2314],"sanitize_title_for_query":[2105,2133,2145,2322],"get_page_by_path":[2117,2123],"wp_basename":[2133,2145],"get_post":[2136,2727],"is_object":[2137],"_wp_mysql_week":[2151],"intval":[2153],"implode":[2164,2167,2307,2389],"array_map":[2164,2167,2191,2679,2779],"prepare":[2172],"is_numeric":[2171],"stripslashes":[2184],"urldecode":[2186,2292,2354],"is_main_query":[2185],"preg_match_all":[2190],"esc_sql":[2196],"like_escape":[2196],"is_user_logged_in":[2203,2504,2704],"apply_filters_ref_array":[2209,2523,2524,2555,2556,2557,2558,2559,2585,2586,2587,2588,2589,2590,2591,2594,2604,2605,2606,2607,2608,2609,2610,2613,2630,2683,2686,2687,2688,2690,2692,2727,2772],"parse_tax_query":[2213],"get_sql":[2215,2515],"wp_list_pluck":[2225],"get_taxonomies_for_attachments":[2227],"get_object_taxonomies":[2227],"array_intersect":[2228],"get_post_types":[2226,2406],"in_array":[2235,2246,2360,2450,2445,2737],"wp_list_filter":[2242,2258,2270],"reset":[2260,2272,2784],"get_term_by":[2261,2273],"set":[2263,2264,2275],"addslashes_gpc":[2293,2355],"explode":[2297,2315,2358,2441],"preg_split":[2303],"count":[2317,2319,2316,2565,2635,2643,2695,2733,2777],"get_user_by":[2323],"wp_post_mime_type_where":[2332],"strtoupper":[2336,2336],"is_array":[2397,2409,2440,2732],"join":[2408,2410,2465,2469,2471,2475,2477,2572],"get_post_stati":[2446,2449,2490,2499,2506],"array_merge":[2460],"current_user_can":[2468,2474,2508,2710,2718,2726],"str_replace":[2482],"get_results":[2564,2642,2673,2694],"compact":[2594,2613],"get_col":[2634,2663],"set_found_posts":[2636,2644,2667,2674],"_prime_post_caches":[2668],"get_post_status":[2700],"get_post_status_object":[2701],"current_time":[2715],"array_splice":[2740,2742,2765],"array_search":[2746],"array_diff":[2753],"get_posts":[2757],"update_post_caches":[2782]},"used_by":[]},"WP_Query::set_found_posts":{"doc":"\/**\n * Set up the amount of found posts and the number of pages (if limit clause was used)\n * for the current query.\n *\n * @since 3.5.0\n * @access private\n *\/","file":"query.php","line":2800,"missingDoc":false,"filters":[],"uses":{"is_array":[2805],"get_var":[2809],"apply_filters_ref_array":[2809,2813],"count":[2811],"ceil":[2816]},"used_by":[]},"WP_Query::next_post":{"doc":"\/**\n * Set up the next post and iterate current post index.\n *\n * @since 1.5.0\n * @access public\n *\n * @return WP_Post Next post.\n *\/","file":"query.php","line":2827,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::the_post":{"doc":"\/**\n * Sets up the current post.\n *\n * Retrieves the next post, sets up the post, sets the 'in the loop'\n * property to true.\n *\n * @since 1.5.0\n * @access public\n * @uses $post\n * @uses do_action_ref_array() Calls 'loop_start' if loop has just started\n *\/","file":"query.php","line":2846,"missingDoc":false,"filters":["'loop_start'"],"uses":{"next_post":[2853],"setup_postdata":[2854]},"used_by":[]},"WP_Query::have_posts":{"doc":"\/**\n * Whether there are more posts available in the loop.\n *\n * Calls action 'loop_end', when the loop is complete.\n *\n * @since 1.5.0\n * @access public\n * @uses do_action_ref_array() Calls 'loop_end' if loop is ended\n *\n * @return bool True if posts are available, false if end of loop.\n *\/","file":"query.php","line":2868,"missingDoc":false,"filters":["'loop_end'"],"uses":{"rewind_posts":[2874]},"used_by":[]},"WP_Query::rewind_posts":{"doc":"\/**\n * Rewind the posts and reset post index.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"query.php","line":2887,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::next_comment":{"doc":"\/**\n * Iterate current comment index and return comment object.\n *\n * @since 2.2.0\n * @access public\n *\n * @return object Comment object.\n *\/","file":"query.php","line":2902,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::the_comment":{"doc":"\/**\n * Sets up the current comment.\n *\n * @since 2.2.0\n * @access public\n * @global object $comment Current comment.\n * @uses do_action() Calls 'comment_loop_start' hook when first comment is processed.\n *\/","file":"query.php","line":2917,"missingDoc":false,"filters":["'comment_loop_start'"],"uses":{"next_comment":[2920]},"used_by":[]},"WP_Query::have_comments":{"doc":"\/**\n * Whether there are more comments available.\n *\n * Automatically rewinds comments when finished.\n *\n * @since 2.2.0\n * @access public\n *\n * @return bool True, if more comments. False, if no more posts.\n *\/","file":"query.php","line":2937,"missingDoc":false,"filters":[],"uses":{"rewind_comments":[2941]},"used_by":[]},"WP_Query::rewind_comments":{"doc":"\/**\n * Rewind the comments, resets the comment index and comment to first.\n *\n * @since 2.2.0\n * @access public\n *\/","file":"query.php","line":2953,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::query":{"doc":"\/**\n * Sets up the WordPress query by parsing query string.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query URL query string.\n * @return array List of posts.\n *\/","file":"query.php","line":2969,"missingDoc":false,"filters":[],"uses":{"init":[2970],"wp_parse_args":[2971],"get_posts":[2972]},"used_by":[]},"WP_Query::get_queried_object":{"doc":"\/**\n * Retrieve queried object.\n *\n * If queried object is not set, then the queried object will be set from\n * the category, tag, taxonomy, posts page, single post, page, or author\n * query variable. After it is set up, it will be returned.\n *\n * @since 1.5.0\n * @access public\n *\n * @return object\n *\/","file":"query.php","line":2987,"missingDoc":false,"filters":[],"uses":{"wp_list_filter":[2995],"reset":[2997,3000,3002],"get_term":[3000],"get_term_by":[3002],"_make_cat_compat":[3009],"is_wp_error":[3004],"get_post_type_object":[3012],"get":[3012,3021],"get_option":[3014],"get_post":[3015],"is_null":[3017],"get_userdata":[3022]},"used_by":[]},"WP_Query::get_queried_object_id":{"doc":"\/**\n * Retrieve ID of the current queried object.\n *\n * @since 1.5.0\n * @access public\n *\n * @return int\n *\/","file":"query.php","line":3036,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3037]},"used_by":[]},"WP_Query::__construct":{"doc":"\/**\n * Constructor.\n *\n * Sets up the WordPress query, if parameter is not empty.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $query URL query string.\n * @return WP_Query\n *\/","file":"query.php","line":3057,"missingDoc":false,"filters":[],"uses":{"query":[3059]},"used_by":[]},"WP_Query::is_archive":{"doc":"\/**\n * Is the query for an existing archive page?\n *\n * Month, Year, Category, Author, Post Type archive...\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3072,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_post_type_archive":{"doc":"\/**\n * Is the query for an existing post type archive page?\n *\n * @since 3.1.0\n *\n * @param mixed $post_types Optional. Post type or array of posts types to check against.\n * @return bool\n *\/","file":"query.php","line":3084,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3088],"in_array":[3090]},"used_by":[]},"WP_Query::is_attachment":{"doc":"\/**\n * Is the query for an existing attachment page?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3100,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_author":{"doc":"\/**\n * Is the query for an existing author archive page?\n *\n * If the $author parameter is specified, this function will additionally\n * check if the query is for one of the authors specified.\n *\n * @since 3.1.0\n *\n * @param mixed $author Optional. User ID, nickname, nicename, or array of User IDs, nicknames, and nicenames\n * @return bool\n *\/","file":"query.php","line":3115,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3122],"in_array":[3128,3130,3126]},"used_by":[]},"WP_Query::is_category":{"doc":"\/**\n * Is the query for an existing category archive page?\n *\n * If the $category parameter is specified, this function will additionally\n * check if the query is for one of the categories specified.\n *\n * @since 3.1.0\n *\n * @param mixed $category Optional. Category ID, name, slug, or array of Category IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":3147,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3154],"in_array":[3160,3162,3158]},"used_by":[]},"WP_Query::is_tag":{"doc":"\/**\n * Is the query for an existing tag archive page?\n *\n * If the $tag parameter is specified, this function will additionally\n * check if the query is for one of the tags specified.\n *\n * @since 3.1.0\n *\n * @param mixed $slug Optional. Tag slug or array of slugs.\n * @return bool\n *\/","file":"query.php","line":3179,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3186],"in_array":[3190]},"used_by":[]},"WP_Query::is_tax":{"doc":"\/**\n * Is the query for an existing taxonomy archive page?\n *\n * If the $taxonomy parameter is specified, this function will additionally\n * check if the query is for that specific $taxonomy.\n *\n * If the $term parameter is specified in addition to the $taxonomy parameter,\n * this function will additionally check if the query is for one of the terms\n * specified.\n *\n * @since 3.1.0\n *\n * @param mixed $taxonomy Optional. Taxonomy slug or slugs.\n * @param mixed $term. Optional. Term ID, name, slug or array of Term IDs, names, and slugs.\n * @return bool\n *\/","file":"query.php","line":3212,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3221],"array_intersect":[3222,3234],"array_keys":[3222],"count":[3226,3234],"in_array":[3226]},"used_by":[]},"WP_Query::is_comments_popup":{"doc":"\/**\n * Whether the current URL is within the comments popup window.\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3247,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_date":{"doc":"\/**\n * Is the query for an existing date archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3258,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_day":{"doc":"\/**\n * Is the query for an existing day archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3269,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_feed":{"doc":"\/**\n * Is the query for a feed?\n *\n * @since 3.1.0\n *\n * @param string|array $feeds Optional feed types to check.\n * @return bool\n *\/","file":"query.php","line":3281,"missingDoc":false,"filters":[],"uses":{"get":[3284],"get_default_feed":[3286],"in_array":[3287]},"used_by":[]},"WP_Query::is_comment_feed":{"doc":"\/**\n * Is the query for a comments feed?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3297,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_front_page":{"doc":"\/**\n * Is the query for the front page of the site?\n *\n * This is for what is displayed at your site's main URL.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_on_front'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true when viewing that page.\n *\n * Otherwise the same as @see WP_Query::is_home()\n *\n * @since 3.1.0\n * @uses is_home()\n * @uses get_option()\n *\n * @return bool True, if front of site.\n *\/","file":"query.php","line":3319,"missingDoc":false,"filters":[],"uses":{"get_option":[3323,3323,3323,3321],"is_page":[3323],"is_home":[3321]},"used_by":[]},"WP_Query::is_home":{"doc":"\/**\n * Is the query for the blog homepage?\n *\n * This is the page which shows the time based blog content of your site.\n *\n * Depends on the site's \"Front page displays\" Reading Settings 'show_on_front' and 'page_for_posts'.\n *\n * If you set a static page for the front page of your site, this function will return\n * true only on the page you set as the \"Posts page\".\n *\n * @see WP_Query::is_front_page()\n *\n * @since 3.1.0\n *\n * @return bool True if blog view homepage.\n *\/","file":"query.php","line":3345,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_month":{"doc":"\/**\n * Is the query for an existing month archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3356,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_page":{"doc":"\/**\n * Is the query for an existing single page?\n *\n * If the $page parameter is specified, this function will additionally\n * check if the query is for one of the pages specified.\n *\n * @see WP_Query::is_single()\n * @see WP_Query::is_singular()\n *\n * @since 3.1.0\n *\n * @param mixed $page Page ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":3374,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3381],"in_array":[3387,3389,3385]},"used_by":[]},"WP_Query::is_paged":{"doc":"\/**\n * Is the query for paged result and not for the first page?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3402,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_preview":{"doc":"\/**\n * Is the query for a post or page preview?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3413,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_robots":{"doc":"\/**\n * Is the query for the robots file?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3424,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_search":{"doc":"\/**\n * Is the query for a search?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3435,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_single":{"doc":"\/**\n * Is the query for an existing single post?\n *\n * Works for any post type, except attachments and pages\n *\n * If the $post parameter is specified, this function will additionally\n * check if the query is for one of the Posts specified.\n *\n * @see WP_Query::is_page()\n * @see WP_Query::is_singular()\n *\n * @since 3.1.0\n *\n * @param mixed $post Post ID, title, slug, or array of such.\n * @return bool\n *\/","file":"query.php","line":3455,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3462],"in_array":[3468,3470,3466]},"used_by":[]},"WP_Query::is_singular":{"doc":"\/**\n * Is the query for an existing single post of any post type (post, attachment, page, ... )?\n *\n * If the $post_types parameter is specified, this function will additionally\n * check if the query is for one of the Posts Types specified.\n *\n * @see WP_Query::is_page()\n * @see WP_Query::is_single()\n *\n * @since 3.1.0\n *\n * @param mixed $post_types Optional. Post Type or array of Post Types\n * @return bool\n *\/","file":"query.php","line":3490,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[3494],"in_array":[3496]},"used_by":[]},"WP_Query::is_time":{"doc":"\/**\n * Is the query for a specific time?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3506,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_trackback":{"doc":"\/**\n * Is the query for a trackback endpoint call?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3517,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_year":{"doc":"\/**\n * Is the query for an existing year archive?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3528,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_404":{"doc":"\/**\n * Is the query a 404 (returns no results)?\n *\n * @since 3.1.0\n *\n * @return bool\n *\/","file":"query.php","line":3539,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Query::is_main_query":{"doc":"\/**\n * Is the query the main query?\n *\n * @since 3.3.0\n *\n * @return bool\n *\/","file":"query.php","line":3550,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wp_old_slug_redirect":{"doc":"\/**\n * Redirect old slugs to the correct permalink.\n *\n * Attempts to find the current slug from the past slugs.\n *\n * @since 2.1.0\n * @uses $wp_query\n * @uses $wpdb\n *\n * @return null If no link is found, null is returned.\n *\/","file":"query.php","line":3567,"missingDoc":false,"filters":[],"uses":{"get_query_var":[3574,3573],"count":[3581],"array_shift":[3583],"is_array":[3580],"is_post_type_hierarchical":[3587],"prepare":[3590,3595,3597,3599],"get_var":[3601],"get_permalink":[3606],"wp_redirect":[3611],"is_404":[3569]},"used_by":[]},"add_feed":{"doc":"\/**\n * Add a new feed type like \/atom1\/.\n *\n * @since 2.1.0\n *\n * @param string $feedname\n * @param callback $function Callback to run on feed display.\n * @return string Feed action name.\n *\/","file":"rewrite.php","line":86,"missingDoc":false,"filters":[],"uses":{"in_array":[88],"remove_action":[92],"add_action":[93]},"used_by":[]},"flush_rewrite_rules":{"doc":"\/**\n * Remove rewrite rules and then recreate rewrite rules.\n *\n * @see WP_Rewrite::flush_rules()\n * @since 3.0.0\n *\n * @param bool $hard Whether to update .htaccess (hard flush) or just update\n * \trewrite_rules transient (soft flush). Default is true (hard).\n *\/","file":"rewrite.php","line":106,"missingDoc":false,"filters":[],"uses":{"flush_rules":[108]},"used_by":[]},"add_rewrite_endpoint":{"doc":"\/**\n * Add an endpoint, like \/trackback\/.\n *\n * Adding an endpoint creates extra rewrite rules for each of the matching\n * places specified by the provided bitmask. For example:\n *\n * <code>\n * add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );\n * <\/code>\n *\n * will add a new rewrite rule ending with \"json(\/(.*))?\/?$\" for every permastruct\n * that describes a permalink (post) or page. This is rewritten to \"json=$match\"\n * where $match is the part of the URL matched by the endpoint regex (e.g. \"foo\" in\n * \"<permalink>\/json\/foo\/\").\n *\n * A new query var with the same name as the endpoint will also be created.\n *\n * When specifying $places ensure that you are using the EP_* constants (or a\n * combination of them using the bitwise OR operator) as their values are not\n * guaranteed to remain static (especially EP_ALL).\n *\n * Be sure to flush the rewrite rules - flush_rewrite_rules() - when your plugin gets\n * activated and deactivated.\n *\n * @since 2.1.0\n * @see WP_Rewrite::add_endpoint()\n * @global object $wp_rewrite\n *\n * @param string $name Name of the endpoint.\n * @param int $places Endpoint mask describing the places the endpoint should be added.\n *\/","file":"rewrite.php","line":247,"missingDoc":false,"filters":[],"uses":{"add_endpoint":[249]},"used_by":[]},"_wp_filter_taxonomy_base":{"doc":"\/**\n * Filter the URL base for taxonomies.\n *\n * To remove any manually prepended \/index.php\/.\n *\n * @access private\n * @since 2.6.0\n *\n * @param string $base The taxonomy base that we're going to filter\n * @return string\n *\/","file":"rewrite.php","line":263,"missingDoc":false,"filters":[],"uses":{"preg_replace":[265],"trim":[266]},"used_by":[]},"WP_Rewrite::using_permalinks":{"doc":"\/**\n * Whether permalinks are being used.\n *\n * This can be either rewrite module or permalink in the HTTP query string.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool True, if permalinks are enabled.\n *\/","file":"rewrite.php","line":740,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::using_index_permalinks":{"doc":"\/**\n * Whether permalinks are being used and rewrite module is not enabled.\n *\n * Means that permalink links are enabled and index.php is in the URL.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool\n *\/","file":"rewrite.php","line":754,"missingDoc":false,"filters":[],"uses":{"preg_match":[759]},"used_by":[]},"WP_Rewrite::using_mod_rewrite_permalinks":{"doc":"\/**\n * Whether permalinks are being used and rewrite module is enabled.\n *\n * Using permalinks and index.php is not in the URL.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool\n *\/","file":"rewrite.php","line":775,"missingDoc":false,"filters":[],"uses":{"using_permalinks":[776],"using_index_permalinks":[776]},"used_by":[]},"WP_Rewrite::preg_index":{"doc":"\/**\n * Index for matches for usage in preg_*() functions.\n *\n * The format of the string is, with empty matches property value, '$NUM'.\n * The 'NUM' will be replaced with the value in the $number parameter. With\n * the matches property not empty, the value of the returned string will\n * contain that value of the matches property. The format then will be\n * '$MATCHES[NUM]', with MATCHES as the value in the property and NUM the\n * value of the $number parameter.\n *\n * @since 1.5.0\n * @access public\n *\n * @param int $number Index number.\n * @return string\n *\/","file":"rewrite.php","line":798,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::page_uri_index":{"doc":"\/**\n * Retrieve all page and attachments for pages URIs.\n *\n * The attachments are for those that have pages as parents and will be\n * retrieved.\n *\n * @since 2.5.0\n * @access public\n *\n * @return array Array of page URIs as first element and attachment URIs as second element.\n *\/","file":"rewrite.php","line":821,"missingDoc":false,"filters":[],"uses":{"get_page_hierarchy":[825],"get_results":[825,840],"array_reverse":[832],"get_page_uri":[839,843],"prepare":[840]},"used_by":[]},"WP_Rewrite::page_rewrite_rules":{"doc":"\/**\n * Retrieve all of the rewrite rules for pages.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array\n *\/","file":"rewrite.php","line":862,"missingDoc":false,"filters":[],"uses":{"add_rewrite_tag":[864],"generate_rewrite_rules":[866],"get_page_permastruct":[866]},"used_by":[]},"WP_Rewrite::get_date_permastruct":{"doc":"\/**\n * Retrieve date permalink structure, with year, month, and day.\n *\n * The permalink structure for the date, if not set already depends on the\n * permalink structure. It can be one of three formats. The first is year,\n * month, day; the second is day, month, year; and the last format is month,\n * day, year. These are matched against the permalink structure for which\n * one is used. If none matches, then the default will be used, which is\n * year, month, day.\n *\n * Prevents post ID and date permalinks from overlapping. In the case of\n * post_id, the date permalink will be prepended with front permalink with\n * 'date\/' before the actual permalink to form the complete date permalink\n * structure.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on no permalink structure. Date permalink structure.\n *\/","file":"rewrite.php","line":889,"missingDoc":false,"filters":[],"uses":{"strpos":[905],"preg_match_all":[917]},"used_by":[]},"WP_Rewrite::get_year_permastruct":{"doc":"\/**\n * Retrieve the year permalink structure without month and day.\n *\n * Gets the date permalink structure and strips out the month and day\n * permalink structures.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year structure on success.\n *\/","file":"rewrite.php","line":943,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[944],"str_replace":[949,950],"preg_replace":[952]},"used_by":[]},"WP_Rewrite::get_month_permastruct":{"doc":"\/**\n * Retrieve the month permalink structure without day and with year.\n *\n * Gets the date permalink structure and strips out the day permalink\n * structures. Keeps the year permalink structure.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year\/Month structure on success.\n *\/","file":"rewrite.php","line":968,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[969],"str_replace":[974],"preg_replace":[976]},"used_by":[]},"WP_Rewrite::get_day_permastruct":{"doc":"\/**\n * Retrieve the day permalink structure with month and year.\n *\n * Keeps date permalink structure with all year, month, and day.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Year\/Month\/Day structure on success.\n *\/","file":"rewrite.php","line":991,"missingDoc":false,"filters":[],"uses":{"get_date_permastruct":[992]},"used_by":[]},"WP_Rewrite::get_category_permastruct":{"doc":"\/**\n * Retrieve the permalink structure for categories.\n *\n * If the category_base property has no value, then the category structure\n * will have the front property value, followed by 'category', and finally\n * '%category%'. If it does, then the root property will be used, along with\n * the category_base property value.\n *\n * @since 1.5.0\n * @access public\n *\n * @return bool|string False on failure. Category permalink structure.\n *\/","file":"rewrite.php","line":1008,"missingDoc":false,"filters":[],"uses":{"get_extra_permastruct":[1009]},"used_by":[]},"WP_Rewrite::get_tag_permastruct":{"doc":"\/**\n * Retrieve the permalink structure for tags.\n *\n * If the tag_base property has no value, then the tag structure will have\n * the front property value, followed by 'tag', and finally '%tag%'. If it\n * does, then the root property will be used, along with the tag_base\n * property value.\n *\n * @since 2.3.0\n * @access public\n *\n * @return bool|string False on failure. Tag permalink structure.\n *\/","file":"rewrite.php","line":1025,"missingDoc":false,"filters":[],"uses":{"get_extra_permastruct":[1026]},"used_by":[]},"WP_Rewrite::get_extra_permastruct":{"doc":"\/**\n * Retrieve extra permalink structure by name.\n *\n * @since 2.5.0\n * @access public\n *\n * @param string $name Permalink structure name.\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1038,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_author_permastruct":{"doc":"\/**\n * Retrieve the author permalink structure.\n *\n * The permalink structure is front property, author base, and finally\n * '\/%author%'. Will set the author_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1060,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_search_permastruct":{"doc":"\/**\n * Retrieve the search permalink structure.\n *\n * The permalink structure is root property, search base, and finally\n * '\/%search%'. Will set the search_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1086,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_page_permastruct":{"doc":"\/**\n * Retrieve the page permalink structure.\n *\n * The permalink structure is root property, and '%pagename%'. Will set the\n * page_structure property and then return it without attempting to set the\n * value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1112,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_feed_permastruct":{"doc":"\/**\n * Retrieve the feed permalink structure.\n *\n * The permalink structure is root property, feed base, and finally\n * '\/%feed%'. Will set the feed_structure property and then return it\n * without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1138,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::get_comment_feed_permastruct":{"doc":"\/**\n * Retrieve the comment feed permalink structure.\n *\n * The permalink structure is root property, comment base property, feed\n * base and finally '\/%feed%'. Will set the comment_feed_structure property\n * and then return it without attempting to set the value again.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string|bool False if not found. Permalink structure string.\n *\/","file":"rewrite.php","line":1164,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::add_rewrite_tag":{"doc":"\/**\n * Add or update existing rewrite tags (e.g. %postname%).\n *\n * If the tag already exists, replace the existing pattern and query for\n * that tag, otherwise add the new tag.\n *\n * @see WP_Rewrite::$rewritecode\n * @see WP_Rewrite::$rewritereplace\n * @see WP_Rewrite::$queryreplace\n * @since 1.5.0\n * @access public\n *\n * @param string $tag Name of the rewrite tag to add or update.\n * @param string $regex Regular expression to substitute the tag for in rewrite rules.\n * @param string $query String to append to the rewritten query. Must end in '='.\n *\/","file":"rewrite.php","line":1194,"missingDoc":false,"filters":[],"uses":{"array_search":[1195]},"used_by":[]},"WP_Rewrite::generate_rewrite_rules":{"doc":"\/**\n * Generate rewrite rules from a permalink structure.\n *\n * The main WP_Rewrite function for building the rewrite rule list. The\n * contents of the function is a mix of black magic and regular expressions,\n * so best just ignore the contents and move to the parameters.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure The permalink structure.\n * @param int $ep_mask Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE.\n * @param bool $paged Should archive pagination rules be added for the structure? Default is true.\n * @param bool $feed Should feed rewrite rules be added for the structure? Default is true.\n * @param bool $forcomments Should the feed rules be a query for a comments feed? Default is false.\n * @param bool $walk_dirs Should the 'directories' making up the structure be walked over and rewrite rules\n * built for each in turn? Default is true.\n * @param bool $endpoints Should endpoints be applied to the generated rewrite rules? Default is true.\n * @return array Rewrite rule list.\n *\/","file":"rewrite.php","line":1226,"missingDoc":false,"filters":[],"uses":{"trim":[1231,1284],"substr":[1255],"strpos":[1255,1388,1382,1383,1384,1385,1385,1385,1385,1385,1385,1395],"preg_match_all":[1257,1303],"count":[1259,1286],"str_replace":[1272,1279,1300,1411],"preg_index":[1272,1325,1329,1334,1339,1343,1369,1429,1431,1432,1438,1439,1452],"explode":[1285],"preg_replace":[1289],"ltrim":[1297],"is_array":[1306],"get_option":[1334,1331,1361],"array_merge":[1356,1360,1362,1462,1467,1471,1472,1476],"is_post_type_hierarchical":[1397],"get_post_types":[1394],"rtrim":[1409]},"used_by":[]},"WP_Rewrite::generate_rewrite_rule":{"doc":"\/**\n * Generate Rewrite rules with permalink structure and walking directory only.\n *\n * Shorten version of {@link WP_Rewrite::generate_rewrite_rules()} that\n * allows for shorter list of parameters. See the method for longer\n * description of what generating rewrite rules does.\n *\n * @uses WP_Rewrite::generate_rewrite_rules() See for long description and rest of parameters.\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure The permalink structure to generate rules.\n * @param bool $walk_dirs Optional, default is false. Whether to create list of directories to walk over.\n * @return array\n *\/","file":"rewrite.php","line":1496,"missingDoc":false,"filters":[],"uses":{"generate_rewrite_rules":[1497]},"used_by":[]},"WP_Rewrite::rewrite_rules":{"doc":"\/**\n * Construct rewrite matches and queries from permalink structure.\n *\n * Runs the action 'generate_rewrite_rules' with the parameter that is an\n * reference to the current WP_Rewrite instance to further manipulate the\n * permalink structures and rewrite rules. Runs the 'rewrite_rules_array'\n * filter on the full rewrite rule array.\n *\n * There are two ways to manipulate the rewrite rules, one by hooking into\n * the 'generate_rewrite_rules' action and gaining full control of the\n * object or just manipulating the rewrite rule array before it is passed\n * from the function.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array An associate array of matches and queries.\n *\/","file":"rewrite.php","line":1518,"missingDoc":false,"filters":["'post_rewrite_rules'","'date_rewrite_rules'","'root_rewrite_rules'","'comments_rewrite_rules'","'search_rewrite_rules'","'author_rewrite_rules'","'page_rewrite_rules'","$permastructname . '_rewrite_rules'","'tag_rewrite_rules'","'generate_rewrite_rules'","'rewrite_rules_array'"],"uses":{"parse_url":[1525],"home_url":[1525],"is_multisite":[1536],"is_main_site":[1536],"generate_rewrite_rules":[1543,1547,1551,1555,1560,1564,1575,1577,1579],"get_date_permastruct":[1547],"get_search_permastruct":[1559],"get_author_permastruct":[1564],"page_rewrite_rules":[1568],"count":[1574],"is_array":[1573],"array_merge":[1586,1591,1593]},"used_by":[]},"WP_Rewrite::wp_rewrite_rules":{"doc":"\/**\n * Retrieve the rewrite rules.\n *\n * The difference between this method and {@link\n * WP_Rewrite::rewrite_rules()} is that this method stores the rewrite rules\n * in the 'rewrite_rules' option and retrieves it. This prevents having to\n * process all of the permalinks to get the rewrite rules in the form of\n * caching.\n *\n * @since 1.5.0\n * @access public\n *\n * @return array Rewrite rules.\n *\/","file":"rewrite.php","line":1615,"missingDoc":false,"filters":[],"uses":{"get_option":[1616],"rewrite_rules":[1619],"update_option":[1620]},"used_by":[]},"WP_Rewrite::mod_rewrite_rules":{"doc":"\/**\n * Retrieve mod_rewrite formatted rewrite rules to write to .htaccess.\n *\n * Does not actually write to the .htaccess file, but creates the rules for\n * the process that will.\n *\n * Will add the non_wp_rules property rules to the .htaccess file before\n * the WordPress rewrite rules one.\n *\n * @since 1.5.0\n * @access public\n *\n * @return string\n *\/","file":"rewrite.php","line":1640,"missingDoc":false,"filters":["'mod_rewrite_rules'","'rewrite_rules'"],"uses":{"using_permalinks":[1641],"parse_url":[1644,1648],"site_url":[1644],"trailingslashit":[1646,1650],"home_url":[1648],"str_replace":[1662,1683],"rewrite_rules":[1675],"count":[1676],"strpos":[1691]},"used_by":[]},"WP_Rewrite::iis7_url_rewrite_rules":{"doc":"\/**\n * Retrieve IIS7 URL Rewrite formatted rewrite rules to write to web.config file.\n *\n * Does not actually write to the web.config file, but creates the rules for\n * the process that will.\n *\n * @since 2.8.0\n * @access public\n *\n * @return string\n *\/","file":"rewrite.php","line":1721,"missingDoc":false,"filters":["'iis7_url_rewrite_rules'"],"uses":{"using_permalinks":[1723]},"used_by":[]},"WP_Rewrite::add_rule":{"doc":"\/**\n * Add a straight rewrite rule.\n *\n * Any value in the $after parameter that isn't 'bottom' will be placed at\n * the top of the rules.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $regex Regular expression to match against request.\n * @param string $redirect URL regex redirects to when regex matches request.\n * @param string $after Optional, default is bottom. Location to place rule.\n *\/","file":"rewrite.php","line":1769,"missingDoc":false,"filters":[],"uses":{"strpos":[1771,1771],"strlen":[1771],"substr":[1772],"add_external_rule":[1774],"array_merge":[1777,1779]},"used_by":[]},"WP_Rewrite::add_external_rule":{"doc":"\/**\n * Add a rule that doesn't redirect to index.php.\n *\n * Can redirect to any place.\n *\n * @since 2.1.0\n * @access public\n *\n * @param string $regex Regular expression to match against request.\n * @param string $redirect URL regex redirects to when regex matches request.\n *\/","file":"rewrite.php","line":1795,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Rewrite::add_endpoint":{"doc":"\/**\n * Add an endpoint, like \/trackback\/.\n *\n * See {@link add_rewrite_endpoint()} for full documentation.\n *\n * @see add_rewrite_endpoint()\n * @since 2.1.0\n * @access public\n * @uses WP::add_query_var()\n *\n * @param string $name Name of the endpoint.\n * @param int $places Endpoint mask describing the places the endpoint should be added.\n *\/","file":"rewrite.php","line":1812,"missingDoc":false,"filters":[],"uses":{"add_query_var":[1815]},"used_by":[]},"WP_Rewrite::add_permastruct":{"doc":"\/**\n * Add a new permalink structure.\n *\n * A permalink structure (permastruct) is an abstract definition of a set of rewrite rules; it\n * is an easy way of expressing a set of regular expressions that rewrite to a set of query strings.\n * The new permastruct is added to the {@link WP_Rewrite::$extra_permastructs} array. When the\n * rewrite rules are built by {@link WP_Rewrite::rewrite_rules()} all of these extra permastructs\n * are passed to {@link WP_Rewrite::generate_rewrite_rules()} which transforms them into the\n * regular expressions that many love to hate.\n *\n * The $args parameter gives you control over how {@link WP_Rewrite::generate_rewrite_rules()}\n * works on the new permastruct.\n *\n * @since 2.5.0\n * @access public\n *\n * @param string $name Name for permalink structure.\n * @param string $struct Permalink structure (e.g. category\/%category%)\n * @param array $args Optional configuration for building the rules from the permalink structure:\n * - with_front (bool) - Should the structure be prepended with WP_Rewrite::$front? Default is true.\n * - ep_mask (int) - Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE.\n * - paged (bool) - Should archive pagination rules be added for the structure? Default is true.\n * - feed (bool) - Should feed rewrite rules be added for the structure? Default is true.\n * - forcomments (bool) - Should the feed rules be a query for a comments feed? Default is false.\n * - walk_dirs (bool) - Should the 'directories' making up the structure be walked over and rewrite\n * rules built for each in turn? Default is true.\n * - endpoints (bool) - Should endpoints be applied to the generated rewrite rules? Default is true.\n *\/","file":"rewrite.php","line":1846,"missingDoc":false,"filters":[],"uses":{"is_array":[1848],"func_get_arg":[1851],"func_num_args":[1850],"array_intersect_key":[1862],"wp_parse_args":[1863]},"used_by":[]},"WP_Rewrite::flush_rules":{"doc":"\/**\n * Remove rewrite rules and then recreate rewrite rules.\n *\n * Calls {@link WP_Rewrite::wp_rewrite_rules()} after removing the\n * 'rewrite_rules' option. If the function named 'save_mod_rewrite_rules'\n * exists, it will be called.\n *\n * @since 2.0.1\n * @access public\n * @param bool $hard Whether to update .htaccess (hard flush) or just update rewrite_rules option (soft flush). Default is true (hard).\n *\/","file":"rewrite.php","line":1885,"missingDoc":false,"filters":[],"uses":{"delete_option":[1886],"wp_rewrite_rules":[1887],"save_mod_rewrite_rules":[1889],"function_exists":[1888,1890],"iis7_save_url_rewrite_rules":[1891]},"used_by":[]},"WP_Rewrite::init":{"doc":"\/**\n * Sets up the object's properties.\n *\n * The 'use_verbose_page_rules' object property will be set to true if the\n * permalink structure begins with one of the following: '%postname%', '%category%',\n * '%tag%', or '%author%'.\n *\n * @since 1.5.0\n * @access public\n *\/","file":"rewrite.php","line":1904,"missingDoc":false,"filters":[],"uses":{"get_option":[1906],"substr":[1907,1917],"strpos":[1907],"using_index_permalinks":[1909],"preg_match":[1920]},"used_by":[]},"WP_Rewrite::set_permalink_structure":{"doc":"\/**\n * Set the main permalink structure for the blog.\n *\n * Will update the 'permalink_structure' option, if there is a difference\n * between the current permalink structure and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * Fires the 'permalink_structure_changed' action once the init call has\n * processed passing the old and new values\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $permalink_structure Permalink structure.\n *\/","file":"rewrite.php","line":1941,"missingDoc":false,"filters":["'permalink_structure_changed'"],"uses":{"update_option":[1944],"init":[1945]},"used_by":[]},"WP_Rewrite::set_category_base":{"doc":"\/**\n * Set the category base for the category permalink.\n *\n * Will update the 'category_base' option, if there is a difference between\n * the current category base and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * @since 1.5.0\n * @access public\n *\n * @param string $category_base Category permalink structure base.\n *\/","file":"rewrite.php","line":1962,"missingDoc":false,"filters":[],"uses":{"update_option":[1964],"init":[1965],"get_option":[1963]},"used_by":[]},"WP_Rewrite::set_tag_base":{"doc":"\/**\n * Set the tag base for the tag permalink.\n *\n * Will update the 'tag_base' option, if there is a difference between the\n * current tag base and the parameter value. Calls\n * {@link WP_Rewrite::init()} after the option is updated.\n *\n * @since 2.3.0\n * @access public\n *\n * @param string $tag_base Tag permalink structure base.\n *\/","file":"rewrite.php","line":1981,"missingDoc":false,"filters":[],"uses":{"update_option":[1983],"init":[1984],"get_option":[1982]},"used_by":[]},"WP_Rewrite::__construct":{"doc":"\/**\n * Constructor - Calls init(), which runs setup.\n *\n * @since 1.5.0\n * @access public\n *\n * @return WP_Rewrite\n *\/","file":"rewrite.php","line":1996,"missingDoc":false,"filters":[],"uses":{"init":[1997]},"used_by":[]},"MagpieRSS::MagpieRSS":{"doc":"","file":"rss.php","line":54,"missingDoc":true,"filters":[],"uses":{"trigger_error":[59,64],"function_exists":[58],"xml_parser_create":[61],"is_resource":[63],"xml_set_object":[71],"xml_set_element_handler":[72],"xml_set_character_data_handler":[75],"xml_parse":[77],"xml_get_error_code":[80],"xml_error_string":[82],"xml_get_current_line_number":[83],"xml_get_current_column_number":[84],"error":[87],"xml_parser_free":[91],"normalize":[93]},"used_by":[]},"MagpieRSS::feed_start_element":{"doc":"","file":"rss.php","line":96,"missingDoc":true,"filters":[],"uses":{"strtolower":[97],"array_change_key_case":[98],"split":[103],"strpos":[102],"in_array":[160],"join":[175],"array_map":[176],"array_keys":[177],"array_values":[178],"append_content":[180],"array_unshift":[182,203],"append":[199]},"used_by":[]},"MagpieRSS::feed_cdata":{"doc":"","file":"rss.php","line":207,"missingDoc":true,"filters":[],"uses":{"append_content":[211],"join":[214],"array_reverse":[214],"append":[215]},"used_by":[]},"MagpieRSS::feed_end_element":{"doc":"","file":"rss.php","line":219,"missingDoc":true,"filters":[],"uses":{"strtolower":[220],"in_array":[236],"append_content":[249,252],"array_shift":[255,258]},"used_by":[]},"MagpieRSS::concat":{"doc":"","file":"rss.php","line":264,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::append_content":{"doc":"","file":"rss.php","line":271,"missingDoc":true,"filters":[],"uses":{"concat":[273,276]},"used_by":[]},"MagpieRSS::append":{"doc":"","file":"rss.php","line":281,"missingDoc":true,"filters":[],"uses":{"concat":[288,292,296,300,306,310,314,318]},"used_by":[]},"MagpieRSS::normalize":{"doc":"","file":"rss.php","line":325,"missingDoc":true,"filters":[],"uses":{"count":[329,341],"is_rss":[339],"is_atom":[327]},"used_by":[]},"MagpieRSS::is_rss":{"doc":"","file":"rss.php","line":353,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::is_atom":{"doc":"","file":"rss.php","line":362,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::map_attrs":{"doc":"","file":"rss.php","line":371,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"MagpieRSS::error":{"doc":"","file":"rss.php","line":375,"missingDoc":true,"filters":[],"uses":{"trigger_error":[381],"error_log":[383]},"used_by":[]},"fetch_rss":{"doc":"\/**\n * Build Magpie object based on RSS from URL.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL to retrieve feed\n * @return bool|MagpieRSS false on failure or MagpieRSS object on success.\n *\/","file":"rss.php","line":400,"missingDoc":false,"filters":[],"uses":{"init":[402],"_fetch_remote_file":[412,468],"_response_to_rss":[414,481],"is_success":[413,480],"debug":[432,451,474,484,513],"check_cache":[442],"get":[447,461],"set":[477,487],"substr":[496]},"used_by":{"wp_rss":[877],"get_rss":[918]}},"_fetch_remote_file":{"doc":"\/**\n * Retrieve URL headers and content using WP HTTP Request API.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL to retrieve\n * @param array $headers Optional. Headers to send to the URL.\n * @return Snoopy style response\n *\/","file":"rss.php","line":538,"missingDoc":false,"filters":[],"uses":{"wp_remote_request":[539],"array_shift":[541],"is_wp_error":[540],"is_array":[554],"wp_remote_retrieve_headers":[553],"wp_remote_retrieve_response_code":[563,564],"wp_remote_retrieve_body":[566]},"used_by":{"fetch_rss":[412,468]}},"_response_to_rss":{"doc":"\/**\n * Retrieve\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param unknown_type $resp\n * @return unknown\n *\/","file":"rss.php","line":581,"missingDoc":false,"filters":[],"uses":{"explode":[591],"strpos":[590]},"used_by":{"fetch_rss":[414,481]}},"is_success":{"doc":"","file":"rss.php","line":683,"missingDoc":true,"filters":[],"uses":[],"used_by":{"fetch_rss":[413,480]}},"is_info":{"doc":"","file":"rss.php","line":679,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_redirect":{"doc":"","file":"rss.php","line":687,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_error":{"doc":"","file":"rss.php","line":691,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_client_error":{"doc":"","file":"rss.php","line":695,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"is_server_error":{"doc":"","file":"rss.php","line":699,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"RSSCache::RSSCache":{"doc":"","file":"rss.php","line":708,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"RSSCache::set":{"doc":"","file":"rss.php","line":725,"missingDoc":true,"filters":[],"uses":{"file_name":[726],"set_transient":[728]},"used_by":[]},"RSSCache::get":{"doc":"","file":"rss.php","line":739,"missingDoc":true,"filters":[],"uses":{"file_name":[741],"debug":[744],"get_transient":[743]},"used_by":[]},"RSSCache::check_cache":{"doc":"","file":"rss.php","line":760,"missingDoc":true,"filters":[],"uses":{"file_name":[762],"get_transient":[764]},"used_by":[]},"RSSCache::serialize":{"doc":"","file":"rss.php","line":776,"missingDoc":true,"filters":[],"uses":{"serialize":[777]},"used_by":[]},"RSSCache::unserialize":{"doc":"","file":"rss.php","line":783,"missingDoc":true,"filters":[],"uses":{"unserialize":[784]},"used_by":[]},"RSSCache::file_name":{"doc":"","file":"rss.php","line":793,"missingDoc":true,"filters":[],"uses":{"md5":[794]},"used_by":[]},"RSSCache::error":{"doc":"","file":"rss.php","line":801,"missingDoc":true,"filters":[],"uses":{"trigger_error":[808],"error_log":[811]},"used_by":[]},"RSSCache::debug":{"doc":"","file":"rss.php","line":814,"missingDoc":true,"filters":[],"uses":{"error":[816]},"used_by":[]},"parse_w3cdtf":{"doc":"","file":"rss.php","line":822,"missingDoc":true,"filters":[],"uses":{"gmmktime":[832],"preg_match":[827]},"used_by":[]},"wp_rss":{"doc":"\/**\n * Display all RSS items in a HTML ordered list.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL of feed to display. Will not auto sense feed URL.\n * @param int $num_items Optional. Number of items to display, default is all.\n *\/","file":"rss.php","line":876,"missingDoc":false,"filters":[],"uses":{"array_slice":[881],"printf":[885],"esc_url":[887],"esc_attr":[888],"strip_tags":[888],"esc_html":[889],"_e":[895],"fetch_rss":[877]},"used_by":[]},"get_rss":{"doc":"\/**\n * Display RSS items in HTML list items.\n *\n * You have to specify which HTML list you want, either ordered or unordered\n * before using the function. You also have to specify how many items you wish\n * to display. You can't display all of them like you can with wp_rss()\n * function.\n *\n * @since 1.5.0\n * @package External\n * @subpackage MagpieRSS\n *\n * @param string $url URL of feed to display. Will not auto sense feed URL.\n * @param int $num_items Optional. Number of items to display, default is all.\n * @return bool False on failure.\n *\/","file":"rss.php","line":917,"missingDoc":false,"filters":[],"uses":{"fetch_rss":[918],"array_slice":[920],"esc_html":[924]},"used_by":[]},"wp_default_scripts":{"doc":"\/**\n * Register all WordPress scripts.\n *\n * Localizes some of them.\n * args order: $scripts->add( 'handle', 'url', 'dependencies', 'query-string', 1 );\n * when last arg === 1 queues the script for the footer\n *\n * @since 2.6.0\n *\n * @param object $scripts WP_Scripts object.\n *\/","file":"script-loader.php","line":50,"missingDoc":false,"filters":[],"uses":{"wp_guess_url":[53],"site_url":[52],"defined":[56,60,253],"get_bloginfo":[57],"add":[62,69,74,76,92,94,96,98,104,109,111,114,115,116,117,118,119,120,121,122,125,128,129,130,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,171,174,175,176,177,178,179,180,181,182,184,196,198,232,233,234,235,236,239,241,244,248,249,250,251,255,257,260,263,265,267,268,270,272,283,285,287,289,298,300,302,309,311,313,314,315,316,329,330,340,341,342,345,352,354,360,362,370,372,374,397,399,405,407,409,412,414,422,427,433,435,436,444,446,448,450,455,464,471,472,473],"did_action":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"localize":[63,70,77,99,105,185,242,245,261,273,290,303,317,331,347,355,363,375,401,415,423,428,437,451,456,465],"get_current_user_id":[65],"time":[66],"__":[71,78,79,80,81,82,83,84,85,86,87,88,89,100,101,106,186,187,188,189,190,191,204,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,274,275,276,279,280,291,292,293,294,295,318,319,320,321,322,323,326,348,349,356,357,366,367,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,402,416,417,418,424,429,430,438,439,440,441,452,457,458,459,460,467,468],"esc_attr":[79,80,81,82,87,88,89,348],"includes_url":[192,193],"ini_get":[201,201],"_x":[278,306,394,419,466],"admin_url":[333],"add_data":[346,400],"is_admin":[344]},"used_by":[]},"wp_default_styles":{"doc":"\/**\n * Assign default styles to $styles object.\n *\n * Nothing is returned, because the $styles parameter is passed by reference.\n * Meaning that whatever object is passed will be updated without having to\n * reassign the variable that was passed back to the same value. This saves\n * memory.\n *\n * Adding default styles is not the only task, it also assigns the base_url\n * property, the default version, and text direction for the object.\n *\n * @since 2.6.0\n *\n * @param object $styles\n *\/","file":"script-loader.php","line":492,"missingDoc":false,"filters":[],"uses":{"wp_guess_url":[495],"site_url":[494],"defined":[498,503],"get_bloginfo":[499],"function_exists":[500],"is_rtl":[500],"add":[509,511,515,518,519,521,522,523,524,525,526,527,528,529,530,531,532,533,534],"add_data":[512,537,539],"in_array":[538]},"used_by":[]},"wp_prototype_before_jquery":{"doc":"\/**\n * Reorder JavaScript scripts array to place prototype before jQuery.\n *\n * @since 2.3.1\n *\n * @param array $js_array JavaScript scripts array\n * @return array Reordered array, if needed.\n *\/","file":"script-loader.php","line":551,"missingDoc":false,"filters":[],"uses":{"array_search":[552,555],"array_splice":[563]},"used_by":[]},"wp_just_in_time_script_localization":{"doc":"\/**\n * Load localized data on print rather than initialization.\n *\n * These localizations require information that may not be loaded even by init.\n *\n * @since 2.5.0\n *\/","file":"script-loader.php","line":575,"missingDoc":false,"filters":[],"uses":{"wp_localize_script":[577],"__":[579,580]},"used_by":[]},"wp_style_loader_src":{"doc":"\/**\n * Administration Screen CSS for changing the styles.\n *\n * If installing the 'wp-admin\/' directory will be replaced with '.\/'.\n *\n * The $_wp_admin_css_colors global manages the Administration Screens CSS\n * stylesheet that is loaded. The option that is set is 'admin_color' and is the\n * color and key for the array. The value for the color key is an object with\n * a 'url' parameter that has the URL path to the CSS file.\n *\n * The query from $src parameter will be appended to the URL that is given from\n * the $_wp_admin_css_colors array value URL.\n *\n * @since 2.6.0\n * @uses $_wp_admin_css_colors\n *\n * @param string $src Source URL.\n * @param string $handle Either 'colors' or 'colors-rtl'.\n * @return string URL path to CSS stylesheet for Administration Screens.\n *\/","file":"script-loader.php","line":605,"missingDoc":false,"filters":[],"uses":{"preg_replace":[607,621],"defined":[606,620],"get_user_option":[611],"parse_url":[617],"wp_parse_str":[624],"add_query_arg":[625]},"used_by":[]},"print_head_scripts":{"doc":"\/**\n * Prints the script queue in the HTML head on admin pages.\n *\n * Postpones the scripts that were queued for the footer.\n * print_footer_scripts() is called in the footer to print these scripts.\n *\n * @since 2.8\n * @see wp_print_scripts()\n *\/","file":"script-loader.php","line":643,"missingDoc":false,"filters":["'wp_print_scripts'","'print_head_scripts'"],"uses":{"did_action":[646],"is_a":[649],"script_concat_settings":[652],"do_head_items":[654],"_print_scripts":[657],"reset":[659]},"used_by":{"wp_print_head_scripts":[733]}},"_print_scripts":{"doc":"\/**\n * @internal use\n *\/","file":"script-loader.php","line":688,"missingDoc":false,"filters":[],"uses":{"defined":[692],"str_split":[705],"implode":[706],"esc_attr":[709],"trim":[695]},"used_by":{"print_head_scripts":[657],"print_footer_scripts":[679]}},"print_footer_scripts":{"doc":"\/**\n * Prints the scripts that were queued for the footer or too late for the HTML head.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":668,"missingDoc":false,"filters":["'print_footer_scripts'"],"uses":{"is_a":[671],"script_concat_settings":[674],"do_footer_items":[676],"_print_scripts":[679],"reset":[681]},"used_by":{"_wp_footer_scripts":[743]}},"wp_print_head_scripts":{"doc":"\/**\n * Prints the script queue in the HTML head on the front end.\n *\n * Postpones the scripts that were queued for the footer.\n * wp_print_footer_scripts() is called in the footer to print these scripts.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":724,"missingDoc":false,"filters":["'wp_print_scripts'"],"uses":{"did_action":[725],"is_a":[730],"print_head_scripts":[733]},"used_by":[]},"_wp_footer_scripts":{"doc":"\/**\n * Private, for use in *_footer_scripts hooks\n *\n * @since 3.3.0\n *\/","file":"script-loader.php","line":741,"missingDoc":false,"filters":[],"uses":{"print_late_styles":[742],"print_footer_scripts":[743]},"used_by":[]},"print_late_styles":{"doc":"\/**\n * Prints the styles that were queued too late for the HTML head.\n *\n * @since 3.3.0\n *\/","file":"script-loader.php","line":798,"missingDoc":false,"filters":["'print_late_styles'"],"uses":{"is_a":[801],"do_footer_items":[805],"_print_styles":[808],"reset":[810]},"used_by":{"_wp_footer_scripts":[742]}},"wp_print_footer_scripts":{"doc":"\/**\n * Hooks to print the scripts and styles in the footer.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":751,"missingDoc":false,"filters":["'wp_print_footer_scripts'"],"uses":[],"used_by":[]},"wp_enqueue_scripts":{"doc":"\/**\n * Wrapper for do_action('wp_enqueue_scripts')\n *\n * Allows plugins to queue scripts for the front end using wp_enqueue_script().\n * Runs first in wp_head() where all is_home(), is_page(), etc. functions are available.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":763,"missingDoc":false,"filters":["'wp_enqueue_scripts'"],"uses":[],"used_by":[]},"print_admin_styles":{"doc":"\/**\n * Prints the styles queue in the HTML head on admin pages.\n *\n * @since 2.8\n *\/","file":"script-loader.php","line":772,"missingDoc":false,"filters":["'print_admin_styles'"],"uses":{"is_a":[775],"script_concat_settings":[778],"defined":[781],"do_items":[784],"_print_styles":[787],"reset":[789]},"used_by":[]},"_print_styles":{"doc":"\/**\n * @internal use\n *\/","file":"script-loader.php","line":817,"missingDoc":false,"filters":[],"uses":{"defined":[821],"trim":[827],"esc_attr":[828]},"used_by":{"print_admin_styles":[787],"print_late_styles":[808]}},"remove_shortcode":{"doc":"\/**\n * Removes hook for shortcode.\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @param string $tag shortcode tag to remove hook for.\n *\/","file":"shortcodes.php","line":108,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"get_shortcode_regex":{"doc":"\/**\n * Retrieve the shortcode regular expression for searching.\n *\n * The regular expression combines the shortcode tags in the regular expression\n * in a regex class.\n *\n * The regular expression contains 6 different sub matches to help with parsing.\n *\n * 1 - An extra [ to allow for escaping shortcodes with double [[]]\n * 2 - The shortcode name\n * 3 - The shortcode argument list\n * 4 - The self closing \/\n * 5 - The content of a shortcode when it wraps some content.\n * 6 - An extra ] to allow for escaping shortcodes with double [[]]\n *\n * @since 2.5\n * @uses $shortcode_tags\n *\n * @return string The shortcode search regular expression\n *\/","file":"shortcodes.php","line":174,"missingDoc":false,"filters":[],"uses":{"array_keys":[176],"join":[177],"array_map":[177]},"used_by":{"do_shortcode":[150],"strip_shortcodes":[321]}},"do_shortcode_tag":{"doc":"\/**\n * Regular Expression callable for do_shortcode() for calling shortcode hook.\n * @see get_shortcode_regex for details of the match array contents.\n *\n * @since 2.5\n * @access private\n * @uses $shortcode_tags\n *\n * @param array $m Regular expression match array\n * @return mixed False on failure.\n *\/","file":"shortcodes.php","line":223,"missingDoc":false,"filters":[],"uses":{"substr":[228],"shortcode_parse_atts":[232],"call_user_func":[236,239]},"used_by":[]},"strip_shortcode_tag":{"doc":"","file":"shortcodes.php","line":326,"missingDoc":true,"filters":[],"uses":{"substr":[329]},"used_by":[]},"SimplePie_Author::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * @param string $name\n * @param string $link\n * @param string $email\n *\/","file":"SimplePie\/Author.php","line":88,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Author.php","line":100,"missingDoc":false,"filters":[],"uses":{"md5":[103],"serialize":[103]},"used_by":[]},"SimplePie_Author::get_name":{"doc":"\/**\n * Author's name\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::get_link":{"doc":"\/**\n * Author's link\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Author::get_email":{"doc":"\/**\n * Author's email address\n *\n * @return string|null\n *\/","file":"SimplePie\/Author.php","line":145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache_DB::prepare_simplepie_object_for_cache":{"doc":"\/**\n * Helper for database conversion\n *\n * Converts a given {@see SimplePie} object into data to be stored\n *\n * @param SimplePie $data\n * @return array First item is the serialized data for storage, second item is the unique ID for this item\n *\/","file":"SimplePie\/Cache\/DB.php","line":61,"missingDoc":false,"filters":[],"uses":{"get_items":[63],"get_id":[70,78],"count":[73,73],"serialize":[135]},"used_by":[]},"SimplePie_Cache_File::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/File.php","line":89,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache_File::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/File.php","line":103,"missingDoc":false,"filters":[],"uses":{"serialize":[112],"file_put_contents":[113],"file_exists":[105,105],"is_writeable":[105,105]},"used_by":[]},"SimplePie_Cache_File::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/File.php","line":123,"missingDoc":false,"filters":[],"uses":{"unserialize":[127],"file_get_contents":[127],"file_exists":[125],"is_readable":[125]},"used_by":[]},"SimplePie_Cache_File::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/File.php","line":137,"missingDoc":false,"filters":[],"uses":{"filemtime":[141],"file_exists":[139]},"used_by":[]},"SimplePie_Cache_File::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/File.php","line":151,"missingDoc":false,"filters":[],"uses":{"touch":[155],"file_exists":[153]},"used_by":[]},"SimplePie_Cache_File::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/File.php","line":165,"missingDoc":false,"filters":[],"uses":{"unlink":[169],"file_exists":[167]},"used_by":[]},"SimplePie_Cache_Memcache::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":88,"missingDoc":false,"filters":[],"uses":{"array_merge":[101],"md5":[102],"addServer":[105]},"used_by":[]},"SimplePie_Cache_Memcache::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":114,"missingDoc":false,"filters":[],"uses":{"set":[120],"serialize":[120]},"used_by":[]},"SimplePie_Cache_Memcache::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":128,"missingDoc":false,"filters":[],"uses":{"get":[130],"unserialize":[134]},"used_by":[]},"SimplePie_Cache_Memcache::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":144,"missingDoc":false,"filters":[],"uses":{"get":[146],"time":[151]},"used_by":[]},"SimplePie_Cache_Memcache::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":162,"missingDoc":false,"filters":[],"uses":{"get":[164],"set":[168]},"used_by":[]},"SimplePie_Cache_Memcache::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/Memcache.php","line":179,"missingDoc":false,"filters":[],"uses":{"delete":[181]},"used_by":[]},"SimplePie_Cache_MySQL::__construct":{"doc":"\/**\n * Create a new cache object\n *\n * @param string $location Location string (from SimplePie::$cache_location)\n * @param string $name Unique ID for the cache\n * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":87,"missingDoc":false,"filters":[],"uses":{"array_merge_recursive":[99],"substr":[102],"query":[116],"fetchColumn":[123],"exec":[130,139],"in_array":[128,137]},"used_by":[]},"SimplePie_Cache_MySQL::save":{"doc":"\/**\n * Save data to the cache\n *\n * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property\n * @return bool Successfulness\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":153,"missingDoc":false,"filters":[],"uses":{"prepare":[166,176,182,195,214,234,255,261,272],"bindValue":[167,177,185,186,187,196,197,198,199,215,235,236,237,238,256,262,263,264,273,274,275],"count":[172,197],"time":[186,199,231,263,275],"execute":[188,200,239,217,168,265,276,257],"fetchColumn":[170,220],"array_keys":[206],"quote":[211],"implode":[214],"array_diff":[225],"get_date":[229],"serialize":[237,262,274],"rowCount":[259]},"used_by":[]},"SimplePie_Cache_MySQL::load":{"doc":"\/**\n * Retrieve the data saved to the cache\n *\n * @return array Data for SimplePie::$data\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":291,"missingDoc":false,"filters":[],"uses":{"prepare":[298,344],"bindValue":[299,345],"unserialize":[302,350],"fetchColumn":[348],"execute":[346,300],"fetch":[300]},"used_by":[]},"SimplePie_Cache_MySQL::mtime":{"doc":"\/**\n * Retrieve the last modified time for the cache\n *\n * @return int Timestamp\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":369,"missingDoc":false,"filters":[],"uses":{"prepare":[376],"bindValue":[377],"execute":[378],"fetchColumn":[378]},"used_by":[]},"SimplePie_Cache_MySQL::touch":{"doc":"\/**\n * Set the last modified time to the current time\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":393,"missingDoc":false,"filters":[],"uses":{"prepare":[400],"bindValue":[401,402],"time":[401],"execute":[403],"rowCount":[403]},"used_by":[]},"SimplePie_Cache_MySQL::unlink":{"doc":"\/**\n * Remove the cache\n *\n * @return bool Success status\n *\/","file":"SimplePie\/Cache\/MySQL.php","line":418,"missingDoc":false,"filters":[],"uses":{"prepare":[425,427],"bindValue":[426,428],"execute":[429,429]},"used_by":[]},"SimplePie_Cache::__construct":{"doc":"\/**\n * Don't call the constructor. Please.\n *\/","file":"SimplePie\/Cache.php","line":72,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache::get_handler":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @param string $location URL location (scheme is used to determine handler)\n * @param string $filename Unique identifier for cache object\n * @param string $extension 'spi' or 'spc'\n * @return SimplePie_Cache_Base Type of object depends on scheme of `$location`\n *\/","file":"SimplePie\/Cache.php","line":82,"missingDoc":false,"filters":[],"uses":{"explode":[84]},"used_by":[]},"SimplePie_Cache::create":{"doc":"\/**\n * Create a new SimplePie_Cache object\n *\n * @deprecated Use {@see get_handler} instead\n *\/","file":"SimplePie\/Cache.php","line":100,"missingDoc":false,"filters":[],"uses":{"trigger_error":[102]},"used_by":[]},"SimplePie_Cache::register":{"doc":"\/**\n * Register a handler\n *\n * @param string $type DSN type to register for\n * @param string $class Name of handler class. Must implement SimplePie_Cache_Base\n *\/","file":"SimplePie\/Cache.php","line":112,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Cache::parse_URL":{"doc":"\/**\n * Parse a URL into an array\n *\n * @param string $url\n * @return array\n *\/","file":"SimplePie\/Cache.php","line":123,"missingDoc":false,"filters":[],"uses":{"parse_url":[125],"parse_str":[129]},"used_by":[]},"SimplePie_Caption::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Caption.php","line":104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Caption.php","line":118,"missingDoc":false,"filters":[],"uses":{"md5":[121],"serialize":[121]},"used_by":[]},"SimplePie_Caption::get_endtime":{"doc":"\/**\n * Get the end time\n *\n * @return string|null Time in the format 'hh:mm:ss.SSS'\n *\/","file":"SimplePie\/Caption.php","line":129,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_language":{"doc":"\/**\n * Get the language\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc3066\n * @return string|null Language code as per RFC 3066\n *\/","file":"SimplePie\/Caption.php","line":147,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_starttime":{"doc":"\/**\n * Get the start time\n *\n * @return string|null Time in the format 'hh:mm:ss.SSS'\n *\/","file":"SimplePie\/Caption.php","line":164,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_text":{"doc":"\/**\n * Get the text of the caption\n *\n * @return string|null\n *\/","file":"SimplePie\/Caption.php","line":181,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Caption::get_type":{"doc":"\/**\n * Get the content type (not MIME type)\n *\n * @return string|null Either 'text' or 'html'\n *\/","file":"SimplePie\/Caption.php","line":198,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * @param string $term\n * @param string $scheme\n * @param string $label\n *\/","file":"SimplePie\/Category.php","line":88,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Category.php","line":100,"missingDoc":false,"filters":[],"uses":{"md5":[103],"serialize":[103]},"used_by":[]},"SimplePie_Category::get_term":{"doc":"\/**\n * Get the category identifier\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":111,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::get_scheme":{"doc":"\/**\n * Get the categorization scheme identifier\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":128,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Category::get_label":{"doc":"\/**\n * Get the human readable label\n *\n * @return string|null\n *\/","file":"SimplePie\/Category.php","line":145,"missingDoc":false,"filters":[],"uses":{"get_term":[153]},"used_by":[]},"SimplePie_Content_Type_Sniffer::__construct":{"doc":"\/**\n * Create an instance of the class with the input file\n *\n * @param SimplePie_Content_Type_Sniffer $file Input file\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":74,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Content_Type_Sniffer::get_type":{"doc":"\/**\n * Get the Content-Type of the specified file\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":84,"missingDoc":false,"filters":[],"uses":{"text_or_binary":[94],"substr":[99,112,118],"strpos":[97],"trim":[105],"strtolower":[105],"unknown":[110,140],"image":[120],"feed_or_html":[131]},"used_by":[]},"SimplePie_Content_Type_Sniffer::text_or_binary":{"doc":"\/**\n * Sniff text or binary\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":149,"missingDoc":false,"filters":[],"uses":{"preg_match":[158],"substr":[151,152,153,154]},"used_by":[]},"SimplePie_Content_Type_Sniffer::unknown":{"doc":"\/**\n * Sniff unknown\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":173,"missingDoc":false,"filters":[],"uses":{"strspn":[175],"substr":[182,186,190,191,195,199,203,207,176,177,178],"text_or_binary":[213],"strtolower":[176,177,178]},"used_by":[]},"SimplePie_Content_Type_Sniffer::image":{"doc":"\/**\n * Sniff images\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":222,"missingDoc":false,"filters":[],"uses":{"substr":[229,233,237,241,224,225]},"used_by":[]},"SimplePie_Content_Type_Sniffer::feed_or_html":{"doc":"\/**\n * Sniff HTML\n *\n * @return string Actual Content-Type\n *\/","file":"SimplePie\/Content\/Type\/Sniffer.php","line":256,"missingDoc":false,"filters":[],"uses":{"strlen":[258],"strspn":[259,269],"strpos":[283,294,305],"substr":[292,303,314,315,319,280]},"used_by":[]},"SimplePie_Copyright::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Copyright.php","line":79,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Copyright::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Copyright.php","line":90,"missingDoc":false,"filters":[],"uses":{"md5":[93],"serialize":[93]},"used_by":[]},"SimplePie_Copyright::get_url":{"doc":"\/**\n * Get the copyright URL\n *\n * @return string|null URL to copyright information\n *\/","file":"SimplePie\/Copyright.php","line":101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Copyright::get_attribution":{"doc":"\/**\n * Get the attribution text\n *\n * @return string|null\n *\/","file":"SimplePie\/Copyright.php","line":118,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Credit.php","line":87,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Credit.php","line":99,"missingDoc":false,"filters":[],"uses":{"md5":[102],"serialize":[102]},"used_by":[]},"SimplePie_Credit::get_role":{"doc":"\/**\n * Get the role of the person receiving credit\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::get_scheme":{"doc":"\/**\n * Get the organizational scheme\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Credit::get_name":{"doc":"\/**\n * Get the credited person\/entity's name\n *\n * @return string|null\n *\/","file":"SimplePie\/Credit.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @access public\n * @param string $data Input data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":86,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::parse":{"doc":"\/**\n * Parse the input data\n *\n * @access public\n * @return string Output data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":97,"missingDoc":false,"filters":[],"uses":{"strpos":[99],"consume":[101],"entity":[102]},"used_by":[]},"SimplePie_Decode_HTML_Entities::consume":{"doc":"\/**\n * Consume the next byte\n *\n * @access private\n * @return mixed The next byte, or false, if there is no more data\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":114,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Decode_HTML_Entities::consume_range":{"doc":"\/**\n * Consume a range of characters\n *\n * @access private\n * @param string $chars Characters to consume\n * @return mixed A series of characters that match the range, or false\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":134,"missingDoc":false,"filters":[],"uses":{"substr":[138],"strspn":[136]},"used_by":[]},"SimplePie_Decode_HTML_Entities::unconsume":{"doc":"\/**\n * Unconsume one byte\n *\n * @access private\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":154,"missingDoc":false,"filters":[],"uses":{"substr":[156]},"used_by":[]},"SimplePie_Decode_HTML_Entities::entity":{"doc":"\/**\n * Decode an entity\n *\n * @access private\n *\/","file":"SimplePie\/Decode\/HTML\/Entities.php","line":165,"missingDoc":false,"filters":[],"uses":{"consume":[167,181,218,599],"unconsume":[192,220],"hexdec":[202],"intval":[206],"in_array":[218],"strlen":[223,225,610,610,611,611],"substr_replace":[224,610],"consume_range":[196],"substr":[601]},"used_by":[]},"SimplePie_Enclosure::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\n * @uses idna_convert If available, this will convert an IDN\n *\/","file":"SimplePie\/Enclosure.php","line":227,"missingDoc":false,"filters":[],"uses":{"encode":[259],"class_exists":[255],"get_handler":[261]},"used_by":[]},"SimplePie_Enclosure::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Enclosure.php","line":269,"missingDoc":false,"filters":[],"uses":{"md5":[272],"serialize":[272]},"used_by":[]},"SimplePie_Enclosure::get_bitrate":{"doc":"\/**\n * Get the bitrate\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":280,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_caption":{"doc":"\/**\n * Get a single caption\n *\n * @param int $key\n * @return SimplePie_Caption|null\n *\/","file":"SimplePie\/Enclosure.php","line":298,"missingDoc":false,"filters":[],"uses":{"get_captions":[300]},"used_by":[]},"SimplePie_Enclosure::get_captions":{"doc":"\/**\n * Get all captions\n *\n * @return array|null Array of {@see SimplePie_Caption} objects\n *\/","file":"SimplePie\/Enclosure.php","line":316,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_category":{"doc":"\/**\n * Get a single category\n *\n * @param int $key\n * @return SimplePie_Category|null\n *\/","file":"SimplePie\/Enclosure.php","line":334,"missingDoc":false,"filters":[],"uses":{"get_categories":[336]},"used_by":[]},"SimplePie_Enclosure::get_categories":{"doc":"\/**\n * Get all categories\n *\n * @return array|null Array of {@see SimplePie_Category} objects\n *\/","file":"SimplePie\/Enclosure.php","line":352,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_channels":{"doc":"\/**\n * Get the number of audio channels\n *\n * @return int|null\n *\/","file":"SimplePie\/Enclosure.php","line":369,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_copyright":{"doc":"\/**\n * Get the copyright information\n *\n * @return SimplePie_Copyright|null\n *\/","file":"SimplePie\/Enclosure.php","line":386,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_credit":{"doc":"\/**\n * Get a single credit\n *\n * @param int $key\n * @return SimplePie_Credit|null\n *\/","file":"SimplePie\/Enclosure.php","line":404,"missingDoc":false,"filters":[],"uses":{"get_credits":[406]},"used_by":[]},"SimplePie_Enclosure::get_credits":{"doc":"\/**\n * Get all credits\n *\n * @return array|null Array of {@see SimplePie_Credit} objects\n *\/","file":"SimplePie\/Enclosure.php","line":422,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_description":{"doc":"\/**\n * Get the description of the enclosure\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":439,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_duration":{"doc":"\/**\n * Get the duration of the enclosure\n *\n * @param string $convert Convert seconds into hh:mm:ss\n * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)\n *\/","file":"SimplePie\/Enclosure.php","line":457,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_expression":{"doc":"\/**\n * Get the expression\n *\n * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'\n *\/","file":"SimplePie\/Enclosure.php","line":482,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_extension":{"doc":"\/**\n * Get the file extension\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":499,"missingDoc":false,"filters":[],"uses":{"pathinfo":[506]},"used_by":[]},"SimplePie_Enclosure::get_framerate":{"doc":"\/**\n * Get the framerate (in frames-per-second)\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":517,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_handler":{"doc":"\/**\n * Get the preferred handler\n *\n * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'\n *\/","file":"SimplePie\/Enclosure.php","line":534,"missingDoc":false,"filters":[],"uses":{"get_real_type":[536]},"used_by":[]},"SimplePie_Enclosure::get_hash":{"doc":"\/**\n * Get a single hash\n *\n * @link http:\/\/www.rssboard.org\/media-rss#media-hash\n * @param int $key\n * @return string|null Hash as per `media:hash`, prefixed with \"$algo:\"\n *\/","file":"SimplePie\/Enclosure.php","line":546,"missingDoc":false,"filters":[],"uses":{"get_hashes":[548]},"used_by":[]},"SimplePie_Enclosure::get_hashes":{"doc":"\/**\n * Get all credits\n *\n * @return array|null Array of strings, see {@see get_hash()}\n *\/","file":"SimplePie\/Enclosure.php","line":564,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_height":{"doc":"\/**\n * Get the height\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":581,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_language":{"doc":"\/**\n * Get the language\n *\n * @link http:\/\/tools.ietf.org\/html\/rfc3066\n * @return string|null Language code as per RFC 3066\n *\/","file":"SimplePie\/Enclosure.php","line":599,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_keyword":{"doc":"\/**\n * Get a single keyword\n *\n * @param int $key\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":617,"missingDoc":false,"filters":[],"uses":{"get_keywords":[619]},"used_by":[]},"SimplePie_Enclosure::get_keywords":{"doc":"\/**\n * Get all keywords\n *\n * @return array|null Array of strings\n *\/","file":"SimplePie\/Enclosure.php","line":635,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_length":{"doc":"\/**\n * Get length\n *\n * @return float Length in bytes\n *\/","file":"SimplePie\/Enclosure.php","line":652,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_link":{"doc":"\/**\n * Get the URL\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":669,"missingDoc":false,"filters":[],"uses":{"urldecode":[673]},"used_by":[]},"SimplePie_Enclosure::get_medium":{"doc":"\/**\n * Get the medium\n *\n * @link http:\/\/www.rssboard.org\/media-rss#media-content\n * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'\n *\/","file":"SimplePie\/Enclosure.php","line":687,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_player":{"doc":"\/**\n * Get the player URL\n *\n * Typically the same as {@see get_permalink()}\n * @return string|null Player URL\n *\/","file":"SimplePie\/Enclosure.php","line":705,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_rating":{"doc":"\/**\n * Get a single rating\n *\n * @param int $key\n * @return SimplePie_Rating|null\n *\/","file":"SimplePie\/Enclosure.php","line":723,"missingDoc":false,"filters":[],"uses":{"get_ratings":[725]},"used_by":[]},"SimplePie_Enclosure::get_ratings":{"doc":"\/**\n * Get all ratings\n *\n * @return array|null Array of {@see SimplePie_Rating} objects\n *\/","file":"SimplePie\/Enclosure.php","line":741,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_restriction":{"doc":"\/**\n * Get a single restriction\n *\n * @param int $key\n * @return SimplePie_Restriction|null\n *\/","file":"SimplePie\/Enclosure.php","line":759,"missingDoc":false,"filters":[],"uses":{"get_restrictions":[761]},"used_by":[]},"SimplePie_Enclosure::get_restrictions":{"doc":"\/**\n * Get all restrictions\n *\n * @return array|null Array of {@see SimplePie_Restriction} objects\n *\/","file":"SimplePie\/Enclosure.php","line":777,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_sampling_rate":{"doc":"\/**\n * Get the sampling rate (in kHz)\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":794,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_size":{"doc":"\/**\n * Get the file size (in MiB)\n *\n * @return float|null File size in mebibytes (1048 bytes)\n *\/","file":"SimplePie\/Enclosure.php","line":811,"missingDoc":false,"filters":[],"uses":{"get_length":[813],"round":[816]},"used_by":[]},"SimplePie_Enclosure::get_thumbnail":{"doc":"\/**\n * Get a single thumbnail\n *\n * @param int $key\n * @return string|null Thumbnail URL\n *\/","file":"SimplePie\/Enclosure.php","line":830,"missingDoc":false,"filters":[],"uses":{"get_thumbnails":[832]},"used_by":[]},"SimplePie_Enclosure::get_thumbnails":{"doc":"\/**\n * Get all thumbnails\n *\n * @return array|null Array of thumbnail URLs\n *\/","file":"SimplePie\/Enclosure.php","line":848,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_title":{"doc":"\/**\n * Get the title\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":865,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_type":{"doc":"\/**\n * Get mimetype of the enclosure\n *\n * @see get_real_type()\n * @return string|null MIME type\n *\/","file":"SimplePie\/Enclosure.php","line":883,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::get_width":{"doc":"\/**\n * Get the width\n *\n * @return string|null\n *\/","file":"SimplePie\/Enclosure.php","line":900,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Enclosure::native_embed":{"doc":"\/**\n * Embed the enclosure using `<embed>`\n *\n * @deprecated Use the second parameter to {@see embed} instead\n *\n * @param array|string $options See first paramter to {@see embed}\n * @return string HTML string to output\n *\/","file":"SimplePie\/Enclosure.php","line":920,"missingDoc":false,"filters":[],"uses":{"embed":[922]},"used_by":[]},"SimplePie_Enclosure::embed":{"doc":"\/**\n * Embed the enclosure using Javascript\n *\n * `$options` is an array or comma-separated key:value string, with the\n * following properties:\n *\n * - `alt` (string): Alternate content for when an end-user does not have\n * the appropriate handler installed or when a file type is\n * unsupported. Can be any text or HTML. Defaults to blank.\n * - `altclass` (string): If a file type is unsupported, the end-user will\n * see the alt text (above) linked directly to the content. That link\n * will have this value as its class name. Defaults to blank.\n * - `audio` (string): This is an image that should be used as a\n * placeholder for audio files before they're loaded (QuickTime-only).\n * Can be any relative or absolute URL. Defaults to blank.\n * - `bgcolor` (string): The background color for the media, if not\n * already transparent. Defaults to `#ffffff`.\n * - `height` (integer): The height of the embedded media. Accepts any\n * numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,\n * and it is recommended that you use this default.\n * - `loop` (boolean): Do you want the media to loop when its done?\n * Defaults to `false`.\n * - `mediaplayer` (string): The location of the included\n * `mediaplayer.swf` file. This allows for the playback of Flash Video\n * (`.flv`) files, and is the default handler for non-Odeo MP3's.\n * Defaults to blank.\n * - `video` (string): This is an image that should be used as a\n * placeholder for video files before they're loaded (QuickTime-only).\n * Can be any relative or absolute URL. Defaults to blank.\n * - `width` (integer): The width of the embedded media. Accepts any\n * numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,\n * and it is recommended that you use this default.\n * - `widescreen` (boolean): Is the enclosure widescreen or standard?\n * This applies only to video enclosures, and will automatically resize\n * the content appropriately. Defaults to `false`, implying 4:3 mode.\n *\n * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`\n * will default to 480x360 video resolution. Widescreen (16:9) mode with\n * `width` and `height` set to `auto` will default to 480x270 video resolution.\n *\n * @todo If the dimensions for media:content are defined, use them when width\/height are set to 'auto'.\n * @param array|string $options Comma-separated key:value list, or array\n * @param bool $native Use `<embed>`\n * @return string HTML string to output\n *\/","file":"SimplePie\/Enclosure.php","line":970,"missingDoc":false,"filters":[],"uses":{"get_handler":[983],"get_real_type":[984],"extract":[989],"explode":[993,996,1047],"trim":[999,1000],"is_array":[987],"round":[1061,1065,1095,1099],"intval":[1061,1065,1095,1099],"get_link":[1129,1133,1144,1148,1161,1165,1170,1180,1184,1189],"rawurlencode":[1144,1148],"get_extension":[1144,1148]},"used_by":[]},"SimplePie_Enclosure::get_real_type":{"doc":"\/**\n * Get the real media type\n *\n * Often, feeds lie to us, necessitating a bit of deeper inspection. This\n * converts types to their canonical representations based on the file\n * extension\n *\n * @see get_type()\n * @param bool $find_handler Internal use only, use {@see get_handler()} instead\n * @return string MIME type\n *\/","file":"SimplePie\/Enclosure.php","line":1205,"missingDoc":false,"filters":[],"uses":{"strtolower":[1216,1226],"get_type":[1214],"get_extension":[1226],"in_array":[1224,1353,1357,1361,1365,1349],"array_merge":[1224]},"used_by":[]},"SimplePie_File::__construct":{"doc":"","file":"SimplePie\/File.php","line":68,"missingDoc":true,"filters":[],"uses":{"encode":[74],"class_exists":[70],"ini_get":[82,110,110],"is_array":[85],"curl_init":[92],"curl_setopt":[100,102,103,104,105,106,107,108,109,112,113,119],"version_compare":[98,110],"curl_exec":[116,120],"curl_errno":[117,117,124,122],"curl_error":[124],"curl_getinfo":[129],"curl_close":[130],"explode":[131],"array_pop":[132],"__construct":[143,225],"in_array":[139,221],"parse":[134,235,216],"parse_url":[151],"strtolower":[153,230],"fsockopen":[162],"stream_set_timeout":[170],"extension_loaded":[189],"base64_encode":[196],"fwrite":[203],"stream_get_meta_data":[205,211],"fread":[210],"trim":[230],"function_exists":[255,89],"gzdecode":[255],"gzuncompress":[251],"gzinflate":[247],"fclose":[278],"file_get_contents":[285],"preg_match":[78]},"used_by":[]},"SimplePie_gzdecode::__set":{"doc":"\/**\n * Don't allow anything to be set\n *\n * @param string $name\n * @param mixed $value\n *\/","file":"SimplePie\/gzdecode.php","line":181,"missingDoc":false,"filters":[],"uses":{"trigger_error":[183]},"used_by":[]},"SimplePie_gzdecode::__construct":{"doc":"\/**\n * Set the compressed string and related properties\n *\n * @param string $data\n *\/","file":"SimplePie\/gzdecode.php","line":191,"missingDoc":false,"filters":[],"uses":{"strlen":[194]},"used_by":[]},"SimplePie_gzdecode::parse":{"doc":"\/**\n * Decode the GZIP stream\n *\n * @return bool Successfulness\n *\/","file":"SimplePie\/gzdecode.php","line":202,"missingDoc":false,"filters":[],"uses":{"substr":[207,225,254,262,282,302,319,322,338,348,356],"ord":[213,235,238],"strrev":[229],"current":[227,231,254,319,348,356],"unpack":[227,231,254,319,348,356],"strcspn":[275,295],"crc32":[322],"gzinflate":[338],"sprintf":[358,358],"strlen":[358]},"used_by":[]},"SimplePie_HTTP_Parser::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @param string $data Input data\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":136,"missingDoc":false,"filters":[],"uses":{"strlen":[139]},"used_by":[]},"SimplePie_HTTP_Parser::parse":{"doc":"\/**\n * Parse the input data\n *\n * @return bool true on success, false on failure\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":147,"missingDoc":false,"filters":[],"uses":{"has_data":[149]},"used_by":[]},"SimplePie_HTTP_Parser::has_data":{"doc":"\/**\n * Check whether there is data beyond the pointer\n *\n * @return bool true if there is further data, false if not\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":175,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::is_linear_whitespace":{"doc":"\/**\n * See if the next character is LWS\n *\n * @return bool true if the next character is LWS, false if not\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":185,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::http_version":{"doc":"\/**\n * Parse the HTTP version\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":197,"missingDoc":false,"filters":[],"uses":{"strspn":[201,207],"substr":[202,199],"substr_count":[204],"strpos":[199],"strtoupper":[199]},"used_by":[]},"SimplePie_HTTP_Parser::status":{"doc":"\/**\n * Parse the status code\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":224,"missingDoc":false,"filters":[],"uses":{"substr":[228],"strspn":[226]},"used_by":[]},"SimplePie_HTTP_Parser::reason":{"doc":"\/**\n * Parse the reason phrase\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":241,"missingDoc":false,"filters":[],"uses":{"strcspn":[243],"trim":[244],"substr":[244]},"used_by":[]},"SimplePie_HTTP_Parser::new_line":{"doc":"\/**\n * Deal with a new line, shifting data around as needed\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":252,"missingDoc":false,"filters":[],"uses":{"trim":[254],"strtolower":[257],"substr":[270]},"used_by":[]},"SimplePie_HTTP_Parser::name":{"doc":"\/**\n * Parse a header name\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":289,"missingDoc":false,"filters":[],"uses":{"strcspn":[291],"substr":[301]},"used_by":[]},"SimplePie_HTTP_Parser::linear_whitespace":{"doc":"\/**\n * Parse LWS, replacing consecutive LWS characters with a single space\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":315,"missingDoc":false,"filters":[],"uses":{"has_data":[328],"is_linear_whitespace":[328],"substr":[319],"strspn":[327]},"used_by":[]},"SimplePie_HTTP_Parser::value":{"doc":"\/**\n * See what state to move to while within non-quoted header values\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":335,"missingDoc":false,"filters":[],"uses":{"linear_whitespace":[339],"strtolower":[348],"is_linear_whitespace":[337]},"used_by":[]},"SimplePie_HTTP_Parser::value_char":{"doc":"\/**\n * Parse a header value while outside quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":374,"missingDoc":false,"filters":[],"uses":{"strcspn":[376],"substr":[377]},"used_by":[]},"SimplePie_HTTP_Parser::quote":{"doc":"\/**\n * See what state to move to while within quoted header values\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":385,"missingDoc":false,"filters":[],"uses":{"linear_whitespace":[389],"is_linear_whitespace":[387]},"used_by":[]},"SimplePie_HTTP_Parser::quote_char":{"doc":"\/**\n * Parse a header value while within quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":420,"missingDoc":false,"filters":[],"uses":{"strcspn":[422],"substr":[423]},"used_by":[]},"SimplePie_HTTP_Parser::quote_escaped":{"doc":"\/**\n * Parse an escaped character within quotes\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":431,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_HTTP_Parser::body":{"doc":"\/**\n * Parse the body\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":441,"missingDoc":false,"filters":[],"uses":{"substr":[443]},"used_by":[]},"SimplePie_HTTP_Parser::chunked":{"doc":"\/**\n * Parsed a \"Transfer-Encoding: chunked\" body\n *\/","file":"SimplePie\/HTTP\/Parser.php","line":458,"missingDoc":false,"filters":[],"uses":{"preg_match":[460,471],"trim":[460,479,492],"hexdec":[479],"strlen":[488],"substr":[489,490]},"used_by":[]},"SimplePie_IRI::__toString":{"doc":"\/**\n * Return the entire IRI when you try and read the object as a string\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":138,"missingDoc":false,"filters":[],"uses":{"get_iri":[140]},"used_by":[]},"SimplePie_IRI::__set":{"doc":"\/**\n * Overload __set() to provide access via properties\n *\n * @param string $name Property name\n * @param mixed $value Property value\n *\/","file":"SimplePie\/IRI.php","line":149,"missingDoc":false,"filters":[],"uses":{"call_user_func":[153,164],"substr":[164],"method_exists":[151]},"used_by":[]},"SimplePie_IRI::__get":{"doc":"\/**\n * Overload __get() to provide access via properties\n *\n * @param string $name Property name\n * @return mixed\n *\/","file":"SimplePie\/IRI.php","line":174,"missingDoc":false,"filters":[],"uses":{"get_object_vars":[178],"array_key_exists":[189,194,200],"substr":[200],"trigger_error":[207],"get_class":[207]},"used_by":[]},"SimplePie_IRI::__isset":{"doc":"\/**\n * Overload __isset() to provide access via properties\n *\n * @param string $name Property name\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":227,"missingDoc":false,"filters":[],"uses":{"method_exists":[229]},"used_by":[]},"SimplePie_IRI::__unset":{"doc":"\/**\n * Overload __unset() to provide access via properties\n *\n * @param string $name Property name\n *\/","file":"SimplePie\/IRI.php","line":244,"missingDoc":false,"filters":[],"uses":{"call_user_func":[248],"method_exists":[246]},"used_by":[]},"SimplePie_IRI::__construct":{"doc":"\/**\n * Create a new IRI object, from a specified string\n *\n * @param string $iri\n *\/","file":"SimplePie\/IRI.php","line":257,"missingDoc":false,"filters":[],"uses":{"set_iri":[259]},"used_by":[]},"SimplePie_IRI::absolutize":{"doc":"\/**\n * Create a new IRI object by resolving a relative IRI\n *\n * Returns false if $base is not absolute, otherwise an IRI.\n *\n * @param IRI|string $base (Absolute) Base IRI\n * @param IRI|string $relative Relative IRI\n * @return IRI|false\n *\/","file":"SimplePie\/IRI.php","line":271,"missingDoc":false,"filters":[],"uses":{"strrpos":[317],"substr":[319],"remove_dot_segments":[325],"get_iri":[293],"scheme_normalization":[348],"is_valid":[291,277]},"used_by":[]},"SimplePie_IRI::parse_iri":{"doc":"\/**\n * Parse an IRI into scheme\/authority\/path\/query\/fragment segments\n *\n * @param string $iri\n * @return array\n *\/","file":"SimplePie\/IRI.php","line":364,"missingDoc":false,"filters":[],"uses":{"trim":[366],"preg_match":[367]},"used_by":[]},"SimplePie_IRI::remove_dot_segments":{"doc":"\/**\n * Remove dot segments from a path\n *\n * @param string $input\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":404,"missingDoc":false,"filters":[],"uses":{"strpos":[407,407,414,419,428,444,410],"substr":[412,416,421,430,446],"substr_replace":[431,436,447],"strrpos":[431,436]},"used_by":[]},"SimplePie_IRI::replace_invalid_with_pct_encoding":{"doc":"\/**\n * Replace invalid character with percent encoding\n *\n * @param string $string Input string\n * @param string $extra_chars Valid characters not in iunreserved or\n * iprivate (this is ASCII-only)\n * @param bool $iprivate Allow iprivate\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":467,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[470],"preg_replace":[473],"strlen":[481],"strspn":[482],"ord":[484,528,583],"substr_replace":[583],"sprintf":[583]},"used_by":[]},"SimplePie_IRI::remove_iunreserved_percent_encoded":{"doc":"\/**\n * Callback function for preg_replace_callback.\n *\n * Removes sequences of percent encoded bytes that represent UTF-8\n * encoded characters in iunreserved\n *\n * @param array $match PCRE match\n * @return string Replacement\n *\/","file":"SimplePie\/IRI.php","line":603,"missingDoc":false,"filters":[],"uses":{"explode":[607],"count":[616],"hexdec":[618,716],"strtoupper":[709,728],"chr":[716]},"used_by":[]},"SimplePie_IRI::scheme_normalization":{"doc":"","file":"SimplePie\/IRI.php","line":735,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_IRI::is_valid":{"doc":"\/**\n * Check if the object represents a valid IRI. This needs to be done on each\n * call as some things change depending on another part of the IRI.\n *\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":769,"missingDoc":false,"filters":[],"uses":{"substr":[776],"strpos":[781,782,782,782]},"used_by":[]},"SimplePie_IRI::set_iri":{"doc":"\/**\n * Set the entire IRI. Returns true on success, false on failure (if there\n * are any invalid characters).\n *\n * @param string $iri\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":800,"missingDoc":false,"filters":[],"uses":{"parse_iri":[826],"set_scheme":[832],"set_authority":[833],"set_path":[834],"set_query":[835],"set_fragment":[836]},"used_by":[]},"SimplePie_IRI::set_scheme":{"doc":"\/**\n * Set the scheme. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $scheme\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":857,"missingDoc":false,"filters":[],"uses":{"preg_match":[863],"strtolower":[870]},"used_by":[]},"SimplePie_IRI::set_authority":{"doc":"\/**\n * Set the authority. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $authority\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":882,"missingDoc":false,"filters":[],"uses":{"substr":[909,910,918,922],"strrpos":[907],"strpos":[916,916],"set_userinfo":[929],"set_host":[930],"set_port":[931]},"used_by":[]},"SimplePie_IRI::set_userinfo":{"doc":"\/**\n * Set the iuserinfo.\n *\n * @param string $iuserinfo\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":948,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[956],"scheme_normalization":[957]},"used_by":[]},"SimplePie_IRI::set_host":{"doc":"\/**\n * Set the ihost. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $ihost\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":970,"missingDoc":false,"filters":[],"uses":{"substr":[977,977,981,979],"replace_invalid_with_pct_encoding":[991],"strlen":[997],"strcspn":[998],"strtolower":[1006],"scheme_normalization":[1014]},"used_by":[]},"SimplePie_IRI::set_port":{"doc":"\/**\n * Set the port. Returns true on success, false on failure (if there are\n * any invalid characters).\n *\n * @param string $port\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1026,"missingDoc":false,"filters":[],"uses":{"strspn":[1033],"strlen":[1033],"scheme_normalization":[1036]},"used_by":[]},"SimplePie_IRI::set_path":{"doc":"\/**\n * Set the ipath.\n *\n * @param string $ipath\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1052,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1068],"remove_dot_segments":[1069],"scheme_normalization":[1075]},"used_by":[]},"SimplePie_IRI::set_query":{"doc":"\/**\n * Set the iquery.\n *\n * @param string $iquery\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1085,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1093],"scheme_normalization":[1094]},"used_by":[]},"SimplePie_IRI::set_fragment":{"doc":"\/**\n * Set the ifragment.\n *\n * @param string $ifragment\n * @return bool\n *\/","file":"SimplePie\/IRI.php","line":1105,"missingDoc":false,"filters":[],"uses":{"replace_invalid_with_pct_encoding":[1113],"scheme_normalization":[1114]},"used_by":[]},"SimplePie_IRI::to_uri":{"doc":"\/**\n * Convert an IRI to a URI (or parts thereof)\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1124,"missingDoc":false,"filters":[],"uses":{"implode":[1129],"range":[1129],"strlen":[1133],"strcspn":[1134],"substr_replace":[1136],"sprintf":[1136],"ord":[1136]},"used_by":[]},"SimplePie_IRI::get_iri":{"doc":"\/**\n * Get the complete IRI\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1149,"missingDoc":false,"filters":[],"uses":{"is_valid":[1151],"get_iauthority":[1161]},"used_by":[]},"SimplePie_IRI::get_uri":{"doc":"\/**\n * Get the complete URI\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1190,"missingDoc":false,"filters":[],"uses":{"to_uri":[1192],"get_iri":[1192]},"used_by":[]},"SimplePie_IRI::get_iauthority":{"doc":"\/**\n * Get the complete iauthority\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1200,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_IRI::get_authority":{"doc":"\/**\n * Get the complete authority\n *\n * @return string\n *\/","file":"SimplePie\/IRI.php","line":1230,"missingDoc":false,"filters":[],"uses":{"get_iauthority":[1232],"to_uri":[1234],"is_string":[1233]},"used_by":[]},"SimplePie_Item::__construct":{"doc":"\/**\n * Create a new item object\n *\n * This is usually used by {@see SimplePie::get_items} and\n * {@see SimplePie::get_item}. Avoid creating this manually.\n *\n * @param SimplePie $feed Parent feed\n * @param array $data Raw data\n *\/","file":"SimplePie\/Item.php","line":91,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::set_registry":{"doc":"\/**\n * Set the registry handler\n *\n * This is usually used by {@see SimplePie_Registry::create}\n *\n * @since 1.3\n * @param SimplePie_Registry $registry\n *\/","file":"SimplePie\/Item.php","line":105,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::__toString":{"doc":"\/**\n * Get a string representation of the item\n *\n * @return string\n *\/","file":"SimplePie\/Item.php","line":115,"missingDoc":false,"filters":[],"uses":{"md5":[117],"serialize":[117]},"used_by":[]},"SimplePie_Item::__destruct":{"doc":"\/**\n * Remove items that link back to this before destroying this object\n *\/","file":"SimplePie\/Item.php","line":123,"missingDoc":false,"filters":[],"uses":{"version_compare":[125],"gc_enabled":[125],"ini_get":[125]},"used_by":[]},"SimplePie_Item::get_item_tags":{"doc":"\/**\n * Get data for an item-level element\n *\n * This method allows you to get access to ANY element\/attribute that is a\n * sub-element of the item\/entry tag.\n *\n * See {@see SimplePie::get_feed_tags()} for a description of the return value\n *\n * @since 1.0\n * @see http:\/\/simplepie.org\/wiki\/faq\/supported_xml_namespaces\n * @param string $namespace The URL of the XML namespace of the elements you're trying to access\n * @param string $tag Tag name\n * @return array\n *\/","file":"SimplePie\/Item.php","line":145,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::get_base":{"doc":"\/**\n * Get the base URL value from the parent feed\n *\n * Uses `<xml:base>`\n *\n * @param array $element\n * @return string\n *\/","file":"SimplePie\/Item.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_base":[167]},"used_by":[]},"SimplePie_Item::sanitize":{"doc":"\/**\n * Sanitize feed data\n *\n * @access private\n * @see SimplePie::sanitize()\n * @param string $data Data to sanitize\n * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants\n * @param string $base Base URL to resolve URLs against\n * @return string Sanitized data\n *\/","file":"SimplePie\/Item.php","line":180,"missingDoc":false,"filters":[],"uses":{"sanitize":[182]},"used_by":[]},"SimplePie_Item::get_feed":{"doc":"\/**\n * Get the parent feed\n *\n * Note: this may not work as you think for multifeeds!\n *\n * @link http:\/\/simplepie.org\/faq\/typical_multifeed_gotchas#missing_data_from_feed\n * @since 1.0\n * @return SimplePie\n *\/","file":"SimplePie\/Item.php","line":194,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Item::get_id":{"doc":"\/**\n * Get the unique identifier for the item\n *\n * This is usually used when writing code to check for new items in a feed.\n *\n * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute\n * for RDF. If none of these are supplied (or `$hash` is true), creates an\n * MD5 hash based on the permalink and title. If either of those are not\n * supplied, creates a hash based on the full feed data.\n *\n * @since Beta 2\n * @param boolean $hash Should we force using a hash instead of the supplied ID?\n * @return string\n *\/","file":"SimplePie\/Item.php","line":213,"missingDoc":false,"filters":[],"uses":{"sanitize":[219,223,227,231,235,239],"get_item_tags":[221,225,229,233,217],"get_permalink":[241,252,250],"get_title":[245,252,250],"md5":[252,256],"serialize":[256]},"used_by":[]},"SimplePie_Item::get_title":{"doc":"\/**\n * Get the title of the item\n *\n * Uses `<atom:title>`, `<title>` or `<dc:title>`\n *\n * @since Beta 2 (previously called `get_item_title` since 0.8)\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":268,"missingDoc":false,"filters":[],"uses":{"sanitize":[274,278,282,286,290,294,298],"call":[274,278],"get_base":[274,278,282,286,290],"get_item_tags":[276,280,284,288,292,296,272]},"used_by":[]},"SimplePie_Item::get_description":{"doc":"\/**\n * Get the content for the item\n *\n * Prefers summaries over full content , but will return full content if a\n * summary does not exist.\n *\n * To prefer full content instead, use {@see get_content}\n *\n * Uses `<atom:summary>`, `<description>`, `<dc:description>` or\n * `<itunes:subtitle>`\n *\n * @since 0.8\n * @param boolean $description_only Should we avoid falling back to the content?\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":323,"missingDoc":false,"filters":[],"uses":{"sanitize":[327,331,335,339,343,347,351,355,359],"call":[327,331],"get_base":[327,331,335,339,351],"get_item_tags":[329,333,337,341,345,349,353,357,325],"get_content":[364]},"used_by":[]},"SimplePie_Item::get_content":{"doc":"\/**\n * Get the content for the item\n *\n * Prefers full content over summaries, but will return a summary if full\n * content does not exist.\n *\n * To prefer summaries instead, use {@see get_description}\n *\n * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)\n *\n * @since 1.0\n * @param boolean $content_only Should we avoid falling back to the description?\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":386,"missingDoc":false,"filters":[],"uses":{"sanitize":[390,394,398],"call":[390,394],"get_base":[390,394,398],"get_item_tags":[392,396,388],"get_description":[402]},"used_by":[]},"SimplePie_Item::get_category":{"doc":"\/**\n * Get a category for the item\n *\n * @since Beta 3 (previously called `get_categories()` since Beta 2)\n * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Category|null\n *\/","file":"SimplePie\/Item.php","line":417,"missingDoc":false,"filters":[],"uses":{"get_categories":[419]},"used_by":[]},"SimplePie_Item::get_categories":{"doc":"\/**\n * Get all categories for the item\n *\n * Uses `<atom:category>`, `<category>` or `<dc:subject>`\n *\n * @since Beta 3\n * @return array|null List of {@see SimplePie_Category} objects\n *\/","file":"SimplePie\/Item.php","line":438,"missingDoc":false,"filters":[],"uses":{"sanitize":[449,453,457,465,468,478,482],"create":[459,474,478,482],"get_item_tags":[442,461,476,480],"array_unique":[487]},"used_by":[]},"SimplePie_Item::get_author":{"doc":"\/**\n * Get an author for the item\n *\n * @since Beta 2\n * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"SimplePie\/Item.php","line":502,"missingDoc":false,"filters":[],"uses":{"get_authors":[504]},"used_by":[]},"SimplePie_Item::get_contributor":{"doc":"\/**\n * Get a contributor for the item\n *\n * @since 1.1\n * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Author|null\n *\/","file":"SimplePie\/Item.php","line":522,"missingDoc":false,"filters":[],"uses":{"get_contributors":[524]},"used_by":[]},"SimplePie_Item::get_contributors":{"doc":"\/**\n * Get all contributors for the item\n *\n * Uses `<atom:contributor>`\n *\n * @since 1.1\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"SimplePie\/Item.php","line":543,"missingDoc":false,"filters":[],"uses":{"sanitize":[553,557,561,575,579,583],"get_base":[557,579],"create":[565,587],"get_item_tags":[546,568],"array_unique":[593]},"used_by":[]},"SimplePie_Item::get_authors":{"doc":"\/**\n * Get all authors for the item\n *\n * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`\n *\n * @since Beta 2\n * @return array|null List of {@see SimplePie_Author} objects\n *\/","file":"SimplePie\/Item.php","line":609,"missingDoc":false,"filters":[],"uses":{"sanitize":[619,623,627,641,645,649,658,662,666,670],"get_base":[623,645],"create":[631,653,658,662,666,670],"get_item_tags":[612,634,656,660,664,668],"array_unique":[675],"get_source":[677],"get_authors":[677,681]},"used_by":[]},"SimplePie_Item::get_copyright":{"doc":"\/**\n * Get the copyright info for the item\n *\n * Uses `<atom:rights>` or `<dc:rights>`\n *\n * @since 1.1\n * @return string\n *\/","file":"SimplePie\/Item.php","line":699,"missingDoc":false,"filters":[],"uses":{"sanitize":[703,707,711],"call":[703],"get_base":[703],"get_item_tags":[705,709,701]},"used_by":[]},"SimplePie_Item::get_date":{"doc":"\/**\n * Get the posting date\/time for the item\n *\n * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,\n * `<atom:modified>`, `<pubDate>` or `<dc:date>`\n *\n * Note: obeys PHP's timezone setting. To get a UTC date\/time, use\n * {@see get_gmdate}\n *\n * @since Beta 2 (previously called `get_item_date` since 0.8)\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":733,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[741,745,749,753,757,761,765,737],"call":[772],"parse":[773],"sanitize":[786],"date":[792]},"used_by":[]},"SimplePie_Item::get_updated_date":{"doc":"\/**\n * Get the update date\/time for the item\n *\n * Uses `<atom:updated>`\n *\n * Note: obeys PHP's timezone setting. To get a UTC date\/time, use\n * {@see get_gmdate}\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":812,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[816],"call":[823],"parse":[824],"sanitize":[837],"date":[843]},"used_by":[]},"SimplePie_Item::get_local_date":{"doc":"\/**\n * Get the localized posting date\/time for the item\n *\n * Returns the date formatted in the localized language. To display in\n * languages other than the server's default, you need to change the locale\n * with {@link http:\/\/php.net\/setlocale setlocale()}. The available\n * localizations depend on which ones are installed on your web server.\n *\n * @since 1.0\n *\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/strftime} (empty for the raw data)\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":865,"missingDoc":false,"filters":[],"uses":{"sanitize":[869],"get_date":[869,871],"strftime":[873]},"used_by":[]},"SimplePie_Item::get_gmdate":{"doc":"\/**\n * Get the posting date\/time for the item (UTC time)\n *\n * @see get_date\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date}\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":888,"missingDoc":false,"filters":[],"uses":{"get_date":[890],"gmdate":[896]},"used_by":[]},"SimplePie_Item::get_updated_gmdate":{"doc":"\/**\n * Get the update date\/time for the item (UTC time)\n *\n * @see get_updated_date\n * @param string $date_format Supports any PHP date format from {@see http:\/\/php.net\/date}\n * @return int|string|null\n *\/","file":"SimplePie\/Item.php","line":906,"missingDoc":false,"filters":[],"uses":{"get_updated_date":[908],"gmdate":[914]},"used_by":[]},"SimplePie_Item::get_permalink":{"doc":"\/**\n * Get the permalink for the item\n *\n * Returns the first link available with a relationship of \"alternate\".\n * Identical to {@see get_link()} with key 0\n *\n * @see get_link\n * @since 0.8\n * @return string|null Permalink URL\n *\/","file":"SimplePie\/Item.php","line":927,"missingDoc":false,"filters":[],"uses":{"get_link":[929,937],"get_enclosure":[930]},"used_by":[]},"SimplePie_Item::get_link":{"doc":"\/**\n * Get a single link for the item\n *\n * @since Beta 3\n * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1\n * @param string $rel The relationship of the link to return\n * @return string|null Link URL\n *\/","file":"SimplePie\/Item.php","line":953,"missingDoc":false,"filters":[],"uses":{"get_links":[955]},"used_by":[]},"SimplePie_Item::get_links":{"doc":"\/**\n * Get all links for the item\n *\n * Uses `<atom:link>`, `<link>` or `<guid>`\n *\n * @since Beta 2\n * @param string $rel The relationship of links to return\n * @return array|null Links found for the item (strings)\n *\/","file":"SimplePie\/Item.php","line":975,"missingDoc":false,"filters":[],"uses":{"sanitize":[985,994,999,1003,1007,1013],"get_base":[985,994,999,1003,1007,1013],"get_item_tags":[980,989,997,1001,1005,1009],"strtolower":[1011],"trim":[1011],"array_keys":[1017],"array_merge":[1024],"substr":[1032,1034],"call":[1020],"array_unique":[1036]},"used_by":[]},"SimplePie_Item::get_enclosure":{"doc":"\/**\n * Get an enclosure from the item\n *\n * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.\n *\n * @since Beta 2\n * @todo Add ability to prefer one type of content over another (in a media group).\n * @param int $key The enclosure that you want to return. Remember that arrays begin with 0, not 1\n * @return SimplePie_Enclosure|null\n *\/","file":"SimplePie\/Item.php","line":1059,"missingDoc":false,"filters":[],"uses":{"get_enclosures":[1061]},"used_by":[]},"SimplePie_Item::get_enclosures":{"doc":"\/**\n * Get all available enclosures (podcasts, etc.)\n *\n * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.\n *\n * At this point, we're pretty much assuming that all enclosures for an item\n * are the same content. Anything else is too complicated to\n * properly support.\n *\n * @since Beta 2\n * @todo Add support for end-user defined sorting of enclosures by type\/handler (so we can prefer the faster-loading FLV over MP4).\n * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).\n * @return array|null List of SimplePie_Enclosure items\n *\/","file":"SimplePie\/Item.php","line":1086,"missingDoc":false,"filters":[],"uses":{"get_feed":[1108],"sanitize":[1122,1126,1130,1134,1138,1154,1158,1162,1166,1170,1188,1192,1200,1211,1215,1223,1234,1244,1262,1266,1276,1280,1295,1299,1307,1321,1325,1333,1348,1355,1367,1396,1400,1417,1421,1440,1452,1464,1476,1494,1501,1514,1522,1535,1548,1556,1569,1589,1593,1597,1625,1629,1633,1668,1678,1688,1695,1775,1779,1783,1791,1795,1799,1803,1811,1815,1819,1823,1825,1841,1845,1849,1853,1857,1877,1881,1885,1889,1893,1917,1921,1929,1943,1947,1955,1980,1984,1994,1998,2017,2021,2029,2047,2051,2059,2076,2080,2096,2100,2121,2125,2148,2164,2184,2188,2204,2212,2229,2237,2261,2265,2269,2287,2291,2295,2314,2325,2340,2344,2397,2401,2405,2413,2417,2421,2425,2433,2437,2441,2445,2449,2465,2469,2473,2477,2481,2505,2509,2517,2546,2550,2569,2573,2581,2598,2614,2618,2641,2661,2677,2685,2709,2713,2717,2736,2751,2783,2786,2818,2821,2853,2856],"create":[1140,1172,1202,1225,1236,1246,1268,1282,1309,1335,1524,1537,1558,1571,1599,1613,1635,1649,1859,1895,1931,1957,1986,2000,2031,2061,2214,2239,2271,2297,2351,2483,2519,2552,2583,2687,2719,2758,2794,2829,2864,2871],"get_channel_tags":[1143,1204,1227,1270,1312,1351,1409,1460,1472,1497,1540,1561,1616,1638,1672,1691],"get_item_tags":[1111,1181,1256,1286,1344,1360,1388,1448,1436,1490,1527,1506,1602,1580,1662,1684,1733,2763,2798,2833],"array_values":[1177,1252,1340,1432,1486,1576,1654,1863,1899,1962,1966,1970,2035,2065,2110,2135,2157,2173,2218,2243,2275,2301,2318,2329,2487,2524,2528,2532,2587,2628,2650,2691,2723,2740,2874],"array_unique":[1177,1252,1340,1432,1486,1576,1654,1863,1899,1962,1966,1970,2035,2065,2110,2135,2157,2173,2218,2243,2275,2301,2318,2329,2487,2524,2528,2532,2587,2628,2650,2691,2723,2740,2874],"is_array":[1175,1250,1338,1430,1484,1574,1652,1861,1897,1964,1968,1960,1960,2033,2063,2108,2133,2155,2171,2216,2241,2273,2299,2316,2327,2485,2526,2530,2522,2522,2585,2626,2648,2689,2721,2738],"explode":[1367,1440,1452,1464,1476,2148,2164,2641],"array_pop":[1370,1374,1379],"sizeof":[1368,1372,1377,2868],"trim":[1443,1455,1467,1479,2151,2167,2644],"strtolower":[1609,1645],"ceil":[1807,2429,2790,2825,2860],"array_merge":[1962,2524],"get_base":[2783,2818,2853]},"used_by":[]},"SimplePie_Item::get_latitude":{"doc":"\/**\n * Get the latitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:lat>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":2898,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[2904,2900],"preg_match":[2904],"trim":[2904]},"used_by":[]},"SimplePie_Item::get_longitude":{"doc":"\/**\n * Get the longitude coordinates for the item\n *\n * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications\n *\n * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`\n *\n * @since 1.0\n * @link http:\/\/www.w3.org\/2003\/01\/geo\/ W3C WGS84 Basic Geo\n * @link http:\/\/www.georss.org\/ GeoRSS\n * @return string|null\n *\/","file":"SimplePie\/Item.php","line":2926,"missingDoc":false,"filters":[],"uses":{"get_item_tags":[2932,2936,2928],"preg_match":[2936],"trim":[2936]},"used_by":[]},"SimplePie_Item::get_source":{"doc":"\/**\n * Get the `<atom:source>` for the item\n *\n * @since 1.1\n * @return SimplePie_Source|null\n *\/","file":"SimplePie\/Item.php","line":2952,"missingDoc":false,"filters":[],"uses":{"create":[2956],"get_item_tags":[2954]},"used_by":[]},"SimplePie_Locator::__construct":{"doc":"","file":"SimplePie\/Locator.php","line":68,"missingDoc":true,"filters":[],"uses":{"set_error_handler":[79],"loadHTML":[80],"restore_error_handler":[81],"class_exists":[75]},"used_by":[]},"SimplePie_Locator::set_registry":{"doc":"","file":"SimplePie\/Locator.php","line":89,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Locator::find":{"doc":"","file":"SimplePie\/Locator.php","line":94,"missingDoc":true,"filters":[],"uses":{"is_feed":[96],"create":[103],"get_type":[104],"get_base":[112],"autodiscovery":[115],"extension":[122,132],"body":[127,137],"get_links":[120]},"used_by":[]},"SimplePie_Locator::is_feed":{"doc":"","file":"SimplePie\/Locator.php","line":145,"missingDoc":true,"filters":[],"uses":{"create":[149],"get_type":[150],"in_array":[151]},"used_by":[]},"SimplePie_Locator::get_base":{"doc":"","file":"SimplePie\/Locator.php","line":170,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[178],"call":[183],"trim":[183],"getAttribute":[183],"method_exists":[189],"getLineNo":[189],"hasAttribute":[181]},"used_by":[]},"SimplePie_Locator::autodiscovery":{"doc":"","file":"SimplePie\/Locator.php","line":195,"missingDoc":true,"filters":[],"uses":{"array_merge":[199,200,201],"search_elements_by_tag":[199,200,201],"array_values":[205]},"used_by":[]},"SimplePie_Locator::search_elements_by_tag":{"doc":"","file":"SimplePie\/Locator.php","line":213,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[220],"array_unique":[229],"call":[229,234,238,245],"strtolower":[229,245],"getAttribute":[229,234,238,245],"method_exists":[230],"getLineNo":[230],"trim":[234,238],"create":[251],"is_feed":[252],"in_array":[245,245,245,245,245],"hasAttribute":[245,227,227]},"used_by":[]},"SimplePie_Locator::get_links":{"doc":"","file":"SimplePie\/Locator.php","line":264,"missingDoc":true,"filters":[],"uses":{"getElementsByTagName":[271],"trim":[276,282,286],"getAttribute":[276,282,286],"call":[277,282,286,293],"method_exists":[280],"getLineNo":[280],"preg_match":[278],"hasAttribute":[274],"array_unique":[306,307]},"used_by":[]},"SimplePie_Locator::extension":{"doc":"","file":"SimplePie\/Locator.php","line":315,"missingDoc":true,"filters":[],"uses":{"create":[330],"is_feed":[331],"in_array":[323],"strtolower":[323],"strrchr":[323]},"used_by":[]},"SimplePie_Locator::body":{"doc":"","file":"SimplePie\/Locator.php","line":344,"missingDoc":true,"filters":[],"uses":{"create":[358],"is_feed":[359],"preg_match":[352]},"used_by":[]},"SimplePie_Misc::time_hms":{"doc":"","file":"SimplePie\/Misc.php","line":52,"missingDoc":true,"filters":[],"uses":{"floor":[56,63]},"used_by":[]},"SimplePie_Misc::absolutize_url":{"doc":"","file":"SimplePie\/Misc.php","line":80,"missingDoc":true,"filters":[],"uses":{"get_uri":[87]},"used_by":[]},"SimplePie_Misc::get_element":{"doc":"\/**\n * Get a HTML\/XML element from a HTML string\n *\n * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!)\n * @param string $realname Element name (including namespace prefix if applicable)\n * @param string $string HTML document\n * @return array\n *\/","file":"SimplePie\/Misc.php","line":98,"missingDoc":false,"filters":[],"uses":{"preg_quote":[101],"count":[104,121,123],"strlen":[109],"strtolower":[127],"end":[127],"preg_match_all":[119,102]},"used_by":[]},"SimplePie_Misc::element_implode":{"doc":"","file":"SimplePie\/Misc.php","line":135,"missingDoc":true,"filters":[],"uses":{"strtolower":[140],"htmlspecialchars":[141]},"used_by":[]},"SimplePie_Misc::error":{"doc":"","file":"SimplePie\/Misc.php","line":154,"missingDoc":true,"filters":[],"uses":{"function_exists":[175],"ini_get":[180,156],"is_writable":[181],"error_log":[188]},"used_by":[]},"SimplePie_Misc::fix_protocol":{"doc":"","file":"SimplePie\/Misc.php","line":195,"missingDoc":true,"filters":[],"uses":{"file_exists":[204],"strtolower":[213,217],"substr_replace":[215,219]},"used_by":[]},"SimplePie_Misc::parse_url":{"doc":"","file":"SimplePie\/Misc.php","line":227,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Misc::compress_parse_url":{"doc":"","file":"SimplePie\/Misc.php","line":239,"missingDoc":true,"filters":[],"uses":{"get_uri":[247]},"used_by":[]},"SimplePie_Misc::normalize_url":{"doc":"","file":"SimplePie\/Misc.php","line":250,"missingDoc":true,"filters":[],"uses":{"get_uri":[253]},"used_by":[]},"SimplePie_Misc::percent_encoding_normalization":{"doc":"","file":"SimplePie\/Misc.php","line":256,"missingDoc":true,"filters":[],"uses":{"hexdec":[258],"chr":[261],"strtoupper":[265]},"used_by":[]},"SimplePie_Misc::windows_1252_to_utf8":{"doc":"\/**\n * Converts a Windows-1252 encoded string to a UTF-8 encoded string\n *\n * @static\n * @param string $string Windows-1252 encoded string\n * @return string UTF-8 encoded string\n *\/","file":"SimplePie\/Misc.php","line":276,"missingDoc":false,"filters":[],"uses":{"strtr":[280]},"used_by":[]},"SimplePie_Misc::change_encoding":{"doc":"\/**\n * Change a string from one encoding to another\n *\n * @param string $data Raw data in $input encoding\n * @param string $input Encoding of $data\n * @param string $output Encoding you want\n * @return string|boolean False if we can't convert it\n *\/","file":"SimplePie\/Misc.php","line":291,"missingDoc":false,"filters":[],"uses":{"chr":[304],"substr":[307],"strcspn":[307],"function_exists":[316,321]},"used_by":[]},"SimplePie_Misc::change_encoding_mbstring":{"doc":"","file":"SimplePie\/Misc.php","line":332,"missingDoc":true,"filters":[],"uses":{"mb_convert_encoding":[352,362],"in_array":[356],"mb_list_encodings":[356]},"used_by":[]},"SimplePie_Misc::change_encoding_iconv":{"doc":"","file":"SimplePie\/Misc.php","line":370,"missingDoc":true,"filters":[],"uses":{"iconv":[372]},"used_by":[]},"SimplePie_Misc::encoding":{"doc":"\/**\n * Normalize an encoding name\n *\n * This is automatically generated by create.php\n *\n * To generate it, run `php create.php` on the command line, and copy the\n * output to replace this function.\n *\n * @param string $charset Character set to standardise\n * @return string Standardised name\n *\/","file":"SimplePie\/Misc.php","line":386,"missingDoc":false,"filters":[],"uses":{"strtolower":[389],"preg_replace":[389]},"used_by":[]},"SimplePie_Misc::get_curl_version":{"doc":"","file":"SimplePie\/Misc.php","line":1699,"missingDoc":true,"filters":[],"uses":{"substr":[1705,1707,1709,1711],"strcspn":[1707,1711],"is_array":[1701],"curl_version":[1701]},"used_by":[]},"SimplePie_Misc::strip_comments":{"doc":"\/**\n * Strip HTML comments\n *\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Misc.php","line":1726,"missingDoc":false,"filters":[],"uses":{"strpos":[1729,1732],"substr":[1731],"substr_replace":[1734]},"used_by":[]},"SimplePie_Misc::parse_date":{"doc":"","file":"SimplePie\/Misc.php","line":1744,"missingDoc":true,"filters":[],"uses":{"parse":[1747]},"used_by":[]},"SimplePie_Misc::entities_decode":{"doc":"\/**\n * Decode HTML entities\n *\n * @deprecated Use DOMDocument instead\n * @param string $data Input data\n * @return string Output data\n *\/","file":"SimplePie\/Misc.php","line":1757,"missingDoc":false,"filters":[],"uses":{"parse":[1760]},"used_by":[]},"SimplePie_Misc::uncomment_rfc822":{"doc":"\/**\n * Remove RFC822 comments\n *\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Misc.php","line":1769,"missingDoc":false,"filters":[],"uses":{"strlen":[1773],"strpos":[1778],"substr":[1780,1818],"strcspn":[1787]},"used_by":[]},"SimplePie_Misc::parse_mime":{"doc":"","file":"SimplePie\/Misc.php","line":1823,"missingDoc":true,"filters":[],"uses":{"trim":[1827,1831],"substr":[1831],"strpos":[1825]},"used_by":[]},"SimplePie_Misc::atom_03_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1835,"missingDoc":true,"filters":[],"uses":{"strtolower":[1837,1847],"trim":[1837,1847]},"used_by":[]},"SimplePie_Misc::atom_10_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1871,"missingDoc":true,"filters":[],"uses":{"strtolower":[1875],"trim":[1875]},"used_by":[]},"SimplePie_Misc::atom_10_content_construct_type":{"doc":"","file":"SimplePie\/Misc.php","line":1893,"missingDoc":true,"filters":[],"uses":{"strtolower":[1897],"trim":[1897],"in_array":[1909],"substr":[1909,1909]},"used_by":[]},"SimplePie_Misc::is_isegment_nz_nc":{"doc":"","file":"SimplePie\/Misc.php","line":1924,"missingDoc":true,"filters":[],"uses":{"preg_match":[1926]},"used_by":[]},"SimplePie_Misc::space_seperated_tokens":{"doc":"","file":"SimplePie\/Misc.php","line":1929,"missingDoc":true,"filters":[],"uses":{"strlen":[1932],"strspn":[1934,1942],"strcspn":[1939],"substr":[1940]},"used_by":[]},"SimplePie_Misc::codepoint_to_utf8":{"doc":"\/**\n * Converts a unicode codepoint to a UTF-8 character\n *\n * @static\n * @param int $codepoint Unicode codepoint\n * @return string UTF-8 character\n *\/","file":"SimplePie\/Misc.php","line":1955,"missingDoc":false,"filters":[],"uses":{"chr":[1964,1968,1968,1972,1972,1972,1976,1976,1976,1976]},"used_by":[]},"SimplePie_Misc::parse_str":{"doc":"\/**\n * Similar to parse_str()\n *\n * Returns an associative array of name\/value pairs, where the value is an\n * array of values that have used the same name\n *\n * @static\n * @param string $str The input string.\n * @return array\n *\/","file":"SimplePie\/Misc.php","line":1995,"missingDoc":false,"filters":[],"uses":{"explode":[1998,2004],"urldecode":[2005,2005,2009],"strpos":[2002]},"used_by":[]},"SimplePie_Misc::xml_encoding":{"doc":"\/**\n * Detect XML encoding, as per XML 1.0 Appendix F.1\n *\n * @todo Add support for EBCDIC\n * @param string $data XML data\n * @param SimplePie_Registry $registry Class registry\n * @return array Possible encodings\n *\/","file":"SimplePie\/Misc.php","line":2024,"missingDoc":false,"filters":[],"uses":{"substr":[2032,2037,2042,2047,2052,2056,2065,2069,2078,2082,2091,2095,2104,2108,2027],"create":[2056,2069,2082,2095,2108],"parse":[2057,2070,2083,2096,2109],"strpos":[2054,2067,2080,2093,2106]},"used_by":[]},"SimplePie_Misc::output_javascript":{"doc":"","file":"SimplePie\/Misc.php","line":2124,"missingDoc":true,"filters":[],"uses":{"ob_start":[2128],"function_exists":[2126],"header":[2130,2131,2132],"gmdate":[2132],"time":[2132]},"used_by":[]},"SimplePie_Misc::get_build":{"doc":"\/**\n * Get the SimplePie build timestamp\n *\n * Uses the git index if it exists, otherwise uses the modification time\n * of the newest file.\n *\/","file":"SimplePie\/Misc.php","line":2163,"missingDoc":false,"filters":[],"uses":{"dirname":[2165,2165,2182,2184],"filemtime":[2168,2175,2184,2188],"file_exists":[2170,2182,2166],"glob":[2173]},"used_by":[]},"SimplePie_Misc::debug":{"doc":"\/**\n * Format debugging information\n *\/","file":"SimplePie\/Misc.php","line":2195,"missingDoc":false,"filters":[],"uses":{"error":[2201,2199],"curl_version":[2220],"mb_get_info":[2224],"extension_loaded":[2211]},"used_by":[]},"SimplePie_Misc::silence_errors":{"doc":"","file":"SimplePie\/Misc.php","line":2242,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Net_IPv6::uncompress":{"doc":"\/**\n * Uncompresses an IPv6 address\n *\n * RFC 4291 allows you to compress concecutive zero pieces in an address to\n * '::'. This method expects a valid IPv6 address and expands the '::' to\n * the required number of zero pieces.\n *\n * Example: FF01::101 -> FF01:0:0:0:0:0:0:101\n * ::1 -> 0:0:0:0:0:0:0:1\n *\n * @author Alexander Merz <alexander.merz@web.de>\n * @author elfrink at introweb dot nl\n * @author Josh Peck <jmp at joshpeck dot org>\n * @copyright 2003-2005 The PHP Group\n * @license http:\/\/www.opensource.org\/licenses\/bsd-license.php\n * @param string $ip An IPv6 address\n * @return string The uncompressed IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":79,"missingDoc":false,"filters":[],"uses":{"explode":[85],"substr_count":[92,100,83],"strpos":[102],"str_repeat":[114,120,126],"str_replace":[115,121,127]},"used_by":[]},"SimplePie_Net_IPv6::compress":{"doc":"\/**\n * Compresses an IPv6 address\n *\n * RFC 4291 allows you to compress concecutive zero pieces in an address to\n * '::'. This method expects a valid IPv6 address and compresses consecutive\n * zero pieces to '::'.\n *\n * Example: FF01:0:0:0:0:0:0:101 -> FF01::101\n * 0:0:0:0:0:0:0:1 -> ::1\n *\n * @see uncompress()\n * @param string $ip An IPv6 address\n * @return string The compressed IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":147,"missingDoc":false,"filters":[],"uses":{"preg_replace":[154],"strlen":[165,163],"substr_replace":[170],"preg_match_all":[157],"implode":[175]},"used_by":[]},"SimplePie_Net_IPv6::split_v6_v4":{"doc":"\/**\n * Splits an IPv6 address into the IPv6 and IPv4 representation parts\n *\n * RFC 4291 allows you to represent the last two parts of an IPv6 address\n * using the standard IPv4 representation\n *\n * Example: 0:0:0:0:0:0:13.1.68.3\n * 0:0:0:0:0:FFFF:129.144.52.38\n *\n * @param string $ip An IPv6 address\n * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part\n *\/","file":"SimplePie\/Net\/IPv6.php","line":195,"missingDoc":false,"filters":[],"uses":{"strrpos":[199],"substr":[200,201],"strpos":[197]},"used_by":[]},"SimplePie_Net_IPv6::check_ipv6":{"doc":"\/**\n * Checks an IPv6 address\n *\n * Checks if the given IP is a valid IPv6 address\n *\n * @param string $ip An IPv6 address\n * @return bool true if $ip is a valid IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":218,"missingDoc":false,"filters":[],"uses":{"explode":[222,223],"strlen":[233],"ltrim":[237],"hexdec":[242],"dechex":[243],"strtolower":[243],"count":[246,224,224,224,224]},"used_by":[]},"SimplePie_Net_IPv6::checkIPv6":{"doc":"\/**\n * Checks if the given IP is a valid IPv6 address\n *\n * @codeCoverageIgnore\n * @deprecated Use {@see SimplePie_Net_IPv6::check_ipv6()} instead\n * @see check_ipv6\n * @param string $ip An IPv6 address\n * @return bool true if $ip is a valid IPv6 address\n *\/","file":"SimplePie\/Net\/IPv6.php","line":272,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parse_Date::__construct":{"doc":"\/**\n * Create new SimplePie_Parse_Date object, and set self::day_pcre,\n * self::month_pcre, and self::built_in\n *\n * @access private\n *\/","file":"SimplePie\/Parse\/Date.php","line":542,"missingDoc":false,"filters":[],"uses":{"implode":[544,545],"array_keys":[544,545],"get_class_methods":[550],"get_class":[556,548,561],"strtolower":[554],"substr":[554]},"used_by":[]},"SimplePie_Parse_Date::get":{"doc":"\/**\n * Get the object\n *\n * @access public\n *\/","file":"SimplePie\/Parse\/Date.php","line":572,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parse_Date::parse":{"doc":"\/**\n * Parse a date\n *\n * @final\n * @access public\n * @param string $date Date to parse\n * @return int Timestamp corresponding to date string, or false on failure\n *\/","file":"SimplePie\/Parse\/Date.php","line":590,"missingDoc":false,"filters":[],"uses":{"call_user_func":[594,602]},"used_by":[]},"SimplePie_Parse_Date::add_callback":{"doc":"\/**\n * Add a callback method to parse a date\n *\n * @final\n * @access public\n * @param callback $callback\n *\/","file":"SimplePie\/Parse\/Date.php","line":618,"missingDoc":false,"filters":[],"uses":{"trigger_error":[626],"is_callable":[620]},"used_by":[]},"SimplePie_Parse_Date::date_w3cdtf":{"doc":"\/**\n * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as\n * well as allowing any of upper or lower case \"T\", horizontal tabs, or\n * spaces to be used as the time seperator (including more than one))\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":638,"missingDoc":false,"filters":[],"uses":{"count":[667,672],"round":[693],"pow":[693],"strlen":[693],"gmmktime":[695],"preg_match":[649]},"used_by":[]},"SimplePie_Parse_Date::remove_rfc2822_comments":{"doc":"\/**\n * Remove RFC822 comments\n *\n * @access protected\n * @param string $data Data to strip comments from\n * @return string Comment stripped string\n *\/","file":"SimplePie\/Parse\/Date.php","line":710,"missingDoc":false,"filters":[],"uses":{"strlen":[714],"strpos":[719],"substr":[721,759],"strcspn":[728]},"used_by":[]},"SimplePie_Parse_Date::date_rfc2822":{"doc":"\/**\n * Parse RFC2822's date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":770,"missingDoc":false,"filters":[],"uses":{"strtolower":[806],"strtoupper":[819,821],"gmmktime":[849],"preg_match":[788],"remove_rfc2822_comments":[788]},"used_by":[]},"SimplePie_Parse_Date::date_rfc850":{"doc":"\/**\n * Parse RFC850's date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":863,"missingDoc":false,"filters":[],"uses":{"strtolower":[891],"strtoupper":[896,894],"gmmktime":[914],"preg_match":[876]},"used_by":[]},"SimplePie_Parse_Date::date_asctime":{"doc":"\/**\n * Parse C99's asctime()'s date format\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":928,"missingDoc":false,"filters":[],"uses":{"strtolower":[955],"gmmktime":[956],"preg_match":[942]},"used_by":[]},"SimplePie_Parse_Date::date_strtotime":{"doc":"\/**\n * Parse dates using strtotime()\n *\n * @access protected\n * @return int Timestamp\n *\/","file":"SimplePie\/Parse\/Date.php","line":970,"missingDoc":false,"filters":[],"uses":{"strtotime":[972]},"used_by":[]},"SimplePie_Parser::set_registry":{"doc":"","file":"SimplePie\/Parser.php","line":73,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::parse":{"doc":"","file":"SimplePie\/Parser.php","line":78,"missingDoc":true,"filters":[],"uses":{"strtoupper":[81],"substr":[94,97,99,102,104,107,109,112,114,92,119,122,117,117],"create":[119],"parse":[120],"strspn":[117],"strpos":[117],"xml_parser_create":[137],"xml_parse_into_struct":[138],"xml_parser_free":[139,163],"xml_parser_create_ns":[146],"xml_parser_set_option":[147,148],"xml_set_object":[149],"xml_set_character_data_handler":[150],"xml_set_element_handler":[151],"xml_get_error_code":[156],"xml_error_string":[157],"xml_parse":[154],"xml_get_current_line_number":[160],"xml_get_current_column_number":[161],"xml_get_current_byte_index":[162],"libxml_clear_errors":[168],"xml":[170],"read":[171],"constant":[176,187,216,218],"tag_close":[185,213],"moveToNextAttribute":[198],"tag_open":[210],"cdata":[219],"libxml_get_last_error":[223]},"used_by":[]},"SimplePie_Parser::get_error_code":{"doc":"","file":"SimplePie\/Parser.php","line":238,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_error_string":{"doc":"","file":"SimplePie\/Parser.php","line":243,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_line":{"doc":"","file":"SimplePie\/Parser.php","line":248,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_column":{"doc":"","file":"SimplePie\/Parser.php","line":253,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_current_byte":{"doc":"","file":"SimplePie\/Parser.php","line":258,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::get_data":{"doc":"","file":"SimplePie\/Parser.php","line":263,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Parser::tag_open":{"doc":"","file":"SimplePie\/Parser.php","line":268,"missingDoc":true,"filters":[],"uses":{"split_ns":[270,275],"call":[281],"end":[281,290,291,300,308,306,322,322,323,323,323,324,324,325,325,326,326,327,327,328,328],"htmlspecialchars":[313],"in_array":[324,325,326,327,328]},"used_by":[]},"SimplePie_Parser::cdata":{"doc":"","file":"SimplePie\/Parser.php","line":335,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[339]},"used_by":[]},"SimplePie_Parser::tag_close":{"doc":"","file":"SimplePie\/Parser.php","line":347,"missingDoc":true,"filters":[],"uses":{"end":[354,352,352],"in_array":[352],"count":[359],"array_pop":[360,363,364,365,366,367]},"used_by":[]},"SimplePie_Parser::split_ns":{"doc":"","file":"SimplePie\/Parser.php","line":370,"missingDoc":true,"filters":[],"uses":{"strlen":[380],"substr":[382,383],"strtolower":[384],"strpos":[375]},"used_by":[]},"SimplePie_Rating::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Rating.php","line":79,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Rating::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Rating.php","line":90,"missingDoc":false,"filters":[],"uses":{"md5":[93],"serialize":[93]},"used_by":[]},"SimplePie_Rating::get_scheme":{"doc":"\/**\n * Get the organizational scheme for the rating\n *\n * @return string|null\n *\/","file":"SimplePie\/Rating.php","line":101,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Rating::get_value":{"doc":"\/**\n * Get the value of the rating\n *\n * @return string|null\n *\/","file":"SimplePie\/Rating.php","line":118,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::__construct":{"doc":"\/**\n * Constructor\n *\n * No-op\n *\/","file":"SimplePie\/Registry.php","line":104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::register":{"doc":"\/**\n * Register a class\n *\n * @param string $type See {@see $default} for names\n * @param string $class Class name, must subclass the corresponding default\n * @param bool $legacy Whether to enable legacy support for this class\n * @return bool Successfulness\n *\/","file":"SimplePie\/Registry.php","line":114,"missingDoc":false,"filters":[],"uses":{"is_subclass_of":[116]},"used_by":[]},"SimplePie_Registry::get_class":{"doc":"\/**\n * Get the class registered for a type\n *\n * Where possible, use {@see create()} or {@see call()} instead\n *\n * @param string $type\n * @return string|null\n *\/","file":"SimplePie\/Registry.php","line":139,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Registry::create":{"doc":"\/**\n * Create a new instance of a given type\n *\n * @param string $type\n * @param array $parameters Parameters to pass to the constructor\n * @return object Instance of class\n *\/","file":"SimplePie\/Registry.php","line":160,"missingDoc":false,"filters":[],"uses":{"get_class":[162,171,171],"array_splice":[172],"in_array":[164],"newInstanceArgs":[184],"method_exists":[177,187],"set_registry":[189]},"used_by":[]},"SimplePie_Registry::call":{"doc":"\/**\n * Call a static method for a type\n *\n * @param string $type\n * @param string $method\n * @param array $parameters\n * @return mixed\n *\/","file":"SimplePie\/Registry.php","line":202,"missingDoc":false,"filters":[],"uses":{"get_class":[204],"call_user_func_array":[215,222],"in_array":[206]},"used_by":[]},"SimplePie_Restriction::__construct":{"doc":"\/**\n * Constructor, used to input the data\n *\n * For documentation on all the parameters, see the corresponding\n * properties and their accessors\n *\/","file":"SimplePie\/Restriction.php","line":87,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::__toString":{"doc":"\/**\n * String-ified version\n *\n * @return string\n *\/","file":"SimplePie\/Restriction.php","line":99,"missingDoc":false,"filters":[],"uses":{"md5":[102],"serialize":[102]},"used_by":[]},"SimplePie_Restriction::get_relationship":{"doc":"\/**\n * Get the relationship\n *\n * @return string|null Either 'allow' or 'deny'\n *\/","file":"SimplePie\/Restriction.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::get_type":{"doc":"\/**\n * Get the type\n *\n * @return string|null\n *\/","file":"SimplePie\/Restriction.php","line":127,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Restriction::get_value":{"doc":"\/**\n * Get the list of restricted things\n *\n * @return string|null\n *\/","file":"SimplePie\/Restriction.php","line":144,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::__construct":{"doc":"","file":"SimplePie\/Sanitize.php","line":75,"missingDoc":true,"filters":[],"uses":{"set_url_replacements":[78]},"used_by":[]},"SimplePie_Sanitize::remove_div":{"doc":"","file":"SimplePie\/Sanitize.php","line":81,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_image_handler":{"doc":"","file":"SimplePie\/Sanitize.php","line":86,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_registry":{"doc":"","file":"SimplePie\/Sanitize.php","line":98,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::pass_cache_data":{"doc":"","file":"SimplePie\/Sanitize.php","line":103,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::pass_file_data":{"doc":"","file":"SimplePie\/Sanitize.php","line":121,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::strip_htmltags":{"doc":"","file":"SimplePie\/Sanitize.php","line":139,"missingDoc":true,"filters":[],"uses":{"explode":[149],"is_array":[143]},"used_by":[]},"SimplePie_Sanitize::encode_instead_of_strip":{"doc":"","file":"SimplePie\/Sanitize.php","line":158,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::strip_attributes":{"doc":"","file":"SimplePie\/Sanitize.php","line":163,"missingDoc":true,"filters":[],"uses":{"explode":[173],"is_array":[167]},"used_by":[]},"SimplePie_Sanitize::strip_comments":{"doc":"","file":"SimplePie\/Sanitize.php","line":182,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_output_encoding":{"doc":"","file":"SimplePie\/Sanitize.php","line":187,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::set_url_replacements":{"doc":"\/**\n * Set element\/attribute key\/value pairs of HTML attributes\n * containing URLs that need to be resolved relative to the feed\n *\n * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,\n * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,\n * |q|@cite\n *\n * @since 1.0\n * @param array|null $element_attribute Element\/attribute key\/value pairs, null for default\n *\/","file":"SimplePie\/Sanitize.php","line":203,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::sanitize":{"doc":"","file":"SimplePie\/Sanitize.php","line":225,"missingDoc":true,"filters":[],"uses":{"trim":[227,349],"preg_match":[232],"base64_decode":[244],"call":[252,310,364,378],"class_exists":[250],"preprocess":[257],"set_error_handler":[259],"loadHTML":[260],"restore_error_handler":[261],"query":[267],"removeChild":[271,341],"strip_tag":[282],"strip_attr":[290],"replace_urls":[298],"getElementsByTagName":[304,345],"call_user_func":[309],"getAttribute":[309],"setAttribute":[314,325],"create":[318],"trigger_error":[329],"save":[323],"load":[312],"hasAttribute":[307],"item":[345,345],"replaceChild":[346],"saveHTML":[349],"preg_replace":[353,354,358],"htmlspecialchars":[373]},"used_by":[]},"SimplePie_Sanitize::preprocess":{"doc":"","file":"SimplePie\/Sanitize.php","line":384,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Sanitize::replace_urls":{"doc":"","file":"SimplePie\/Sanitize.php","line":407,"missingDoc":true,"filters":[],"uses":{"is_array":[409,414],"getElementsByTagName":[416],"call":[423],"getAttribute":[423],"setAttribute":[426],"hasAttribute":[421],"in_array":[414]},"used_by":[]},"SimplePie_Sanitize::do_strip_htmltags":{"doc":"","file":"SimplePie\/Sanitize.php","line":434,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[440,441,446],"in_array":[438,449],"strtolower":[438,449]},"used_by":[]},"SimplePie_Sanitize::strip_tag":{"doc":"","file":"SimplePie\/Sanitize.php","line":459,"missingDoc":true,"filters":[],"uses":{"query":[462],"createDocumentFragment":[467,531],"implode":[495],"hasAttributes":[473],"appendChild":[498,505,510,536],"in_array":[470,508,518],"item":[504,535],"replaceChild":[513,539],"removeChild":[522]},"used_by":[]},"SimplePie_Sanitize::strip_attr":{"doc":"","file":"SimplePie\/Sanitize.php","line":544,"missingDoc":true,"filters":[],"uses":{"query":[547],"removeAttribute":[551]},"used_by":[]},"SimplePie_Source::__construct":{"doc":"","file":"SimplePie\/Source.php","line":61,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::set_registry":{"doc":"","file":"SimplePie\/Source.php","line":67,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::__toString":{"doc":"","file":"SimplePie\/Source.php","line":72,"missingDoc":true,"filters":[],"uses":{"md5":[74],"serialize":[74]},"used_by":[]},"SimplePie_Source::get_source_tags":{"doc":"","file":"SimplePie\/Source.php","line":77,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::get_base":{"doc":"","file":"SimplePie\/Source.php","line":89,"missingDoc":true,"filters":[],"uses":{"get_base":[91]},"used_by":[]},"SimplePie_Source::sanitize":{"doc":"","file":"SimplePie\/Source.php","line":94,"missingDoc":true,"filters":[],"uses":{"sanitize":[96]},"used_by":[]},"SimplePie_Source::get_item":{"doc":"","file":"SimplePie\/Source.php","line":99,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"SimplePie_Source::get_title":{"doc":"","file":"SimplePie\/Source.php","line":104,"missingDoc":true,"filters":[],"uses":{"sanitize":[108,112,116,120,124,128,132],"call":[108,112],"get_base":[108,112,116,120,124],"get_source_tags":[110,114,118,122,126,130,106]},"used_by":[]},"SimplePie_Source::get_category":{"doc":"","file":"SimplePie\/Source.php","line":140,"missingDoc":true,"filters":[],"uses":{"get_categories":[142]},"used_by":[]},"SimplePie_Source::get_categories":{"doc":"","file":"SimplePie\/Source.php","line":153,"missingDoc":true,"filters":[],"uses":{"sanitize":[164,168,172,180,183,193,197],"create":[174,189,193,197],"get_source_tags":[157,176,191,195],"array_unique":[202]},"used_by":[]},"SimplePie_Source::get_author":{"doc":"","file":"SimplePie\/Source.php","line":210,"missingDoc":true,"filters":[],"uses":{"get_authors":[212]},"used_by":[]},"SimplePie_Source::get_authors":{"doc":"","file":"SimplePie\/Source.php","line":223,"missingDoc":true,"filters":[],"uses":{"sanitize":[233,237,241,255,259,263,272,276,280],"get_base":[237,259],"create":[245,267,272,276,280],"get_source_tags":[226,248,270,274,278],"array_unique":[285]},"used_by":[]},"SimplePie_Source::get_contributor":{"doc":"","file":"SimplePie\/Source.php","line":293,"missingDoc":true,"filters":[],"uses":{"get_contributors":[295]},"used_by":[]},"SimplePie_Source::get_contributors":{"doc":"","file":"SimplePie\/Source.php","line":306,"missingDoc":true,"filters":[],"uses":{"sanitize":[316,320,324,338,342,346],"get_base":[320,342],"create":[328,350],"get_source_tags":[309,331],"array_unique":[356]},"used_by":[]},"SimplePie_Source::get_link":{"doc":"","file":"SimplePie\/Source.php","line":364,"missingDoc":true,"filters":[],"uses":{"get_links":[366]},"used_by":[]},"SimplePie_Source::get_permalink":{"doc":"\/**\n * Added for parity between the parent-level and the item\/entry-level.\n *\/","file":"SimplePie\/Source.php","line":380,"missingDoc":false,"filters":[],"uses":{"get_link":[382]},"used_by":[]},"SimplePie_Source::get_links":{"doc":"","file":"SimplePie\/Source.php","line":385,"missingDoc":true,"filters":[],"uses":{"sanitize":[397,408,415,419,423],"get_base":[397,408,415,419,423],"get_source_tags":[390,401,413,417,421],"array_keys":[426],"array_merge":[433],"substr":[441,443],"call":[429],"array_unique":[445]},"used_by":[]},"SimplePie_Source::get_description":{"doc":"","file":"SimplePie\/Source.php","line":459,"missingDoc":true,"filters":[],"uses":{"sanitize":[463,467,471,475,479,483,487,491,495],"call":[463,467],"get_base":[463,467,471,475,479,491,495],"get_source_tags":[465,469,473,477,481,485,489,493,461]},"used_by":[]},"SimplePie_Source::get_copyright":{"doc":"","file":"SimplePie\/Source.php","line":503,"missingDoc":true,"filters":[],"uses":{"sanitize":[507,511,515,519,523],"call":[507,511],"get_base":[507,511],"get_source_tags":[509,513,517,521,505]},"used_by":[]},"SimplePie_Source::get_language":{"doc":"","file":"SimplePie\/Source.php","line":531,"missingDoc":true,"filters":[],"uses":{"sanitize":[535,539,543,547],"get_source_tags":[537,541,533]},"used_by":[]},"SimplePie_Source::get_latitude":{"doc":"","file":"SimplePie\/Source.php","line":555,"missingDoc":true,"filters":[],"uses":{"get_source_tags":[561,557],"preg_match":[561],"trim":[561]},"used_by":[]},"SimplePie_Source::get_longitude":{"doc":"","file":"SimplePie\/Source.php","line":571,"missingDoc":true,"filters":[],"uses":{"get_source_tags":[577,581,573],"preg_match":[581],"trim":[581]},"used_by":[]},"SimplePie_Source::get_image_url":{"doc":"","file":"SimplePie\/Source.php","line":591,"missingDoc":true,"filters":[],"uses":{"sanitize":[595,599,603],"get_source_tags":[597,601,593],"get_base":[599,603]},"used_by":[]},"SimplePie_XML_Declaration_Parser::__construct":{"doc":"\/**\n * Create an instance of the class with the input data\n *\n * @access public\n * @param string $data Input data\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":116,"missingDoc":false,"filters":[],"uses":{"strlen":[119]},"used_by":[]},"SimplePie_XML_Declaration_Parser::parse":{"doc":"\/**\n * Parse the input data\n *\n * @access public\n * @return bool true on success, false on failure\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":128,"missingDoc":false,"filters":[],"uses":{"has_data":[130]},"used_by":[]},"SimplePie_XML_Declaration_Parser::has_data":{"doc":"\/**\n * Check whether there is data beyond the pointer\n *\n * @access private\n * @return bool true if there is further data, false if not\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":155,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"SimplePie_XML_Declaration_Parser::skip_whitespace":{"doc":"\/**\n * Advance past any whitespace\n *\n * @return int Number of whitespace characters passed\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":165,"missingDoc":false,"filters":[],"uses":{"strspn":[167]},"used_by":[]},"SimplePie_XML_Declaration_Parser::get_value":{"doc":"\/**\n * Read value\n *\/","file":"SimplePie\/XML\/Declaration\/Parser.php","line":175,"missingDoc":false,"filters":[],"uses":{"substr":[177,184],"strcspn":[181],"has_data":[182]},"used_by":[]},"SimplePie_XML_Declaration_Parser::before_version_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":192,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[194]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":204,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[209],"substr":[206]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":218,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[223],"substr":[220]},"used_by":[]},"SimplePie_XML_Declaration_Parser::version_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":232,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[236],"has_data":[237],"get_value":[234]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":252,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[257],"substr":[254]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":266,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[271],"substr":[268]},"used_by":[]},"SimplePie_XML_Declaration_Parser::encoding_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":280,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[284],"has_data":[285],"get_value":[282]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_name":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":300,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[305],"substr":[302]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_equals":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":314,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[319],"substr":[316]},"used_by":[]},"SimplePie_XML_Declaration_Parser::standalone_value":{"doc":"","file":"SimplePie\/XML\/Declaration\/Parser.php","line":328,"missingDoc":true,"filters":[],"uses":{"skip_whitespace":[347],"has_data":[348],"get_value":[330]},"used_by":[]},"create_initial_taxonomies":{"doc":"\/**\n * Creates the initial taxonomies.\n *\n * This function fires twice: in wp-settings.php before plugins are loaded (for\n * backwards compatibility reasons), and again on the 'init' action. We must avoid\n * registering rewrite rules before the 'init' action.\n *\/","file":"taxonomy.php","line":21,"missingDoc":false,"filters":["'post_format_rewrite_base'"],"uses":{"get_option":[31,31,32,36,36,37],"using_index_permalinks":[32,37],"did_action":[24],"register_taxonomy":[44,54,64,78,107],"__":[68,69,81,82,83,85,86,87,88,89],"_x":[111,112],"current_theme_supports":[118]},"used_by":[]},"register_taxonomy":{"doc":"\/**\n * Create or modify a taxonomy object. Do not use before init.\n *\n * A simple function for creating or modifying a taxonomy object based on the\n * parameters given. The function will accept an array (third optional\n * parameter), along with strings for the taxonomy name and another string for\n * the object type.\n *\n * Nothing is returned, so expect error maybe or use taxonomy_exists() to check\n * whether taxonomy exists.\n *\n * Optional $args contents:\n *\n * label - Name of the taxonomy shown in the menu. Usually plural. If not set, labels['name'] will be used.\n *\n * hierarchical - has some defined purpose at other parts of the API and is a\n * boolean value.\n *\n * update_count_callback - works much like a hook, in that it will be called when the count is updated.\n * \tDefaults to _update_post_term_count() for taxonomies attached to post types, which then confirms\n * \tthat the objects are published before counting them.\n * \tDefaults to _update_generic_term_count() for taxonomies attached to other object types, such as links.\n *\n * rewrite - false to prevent rewrite, or array('slug'=>$slug) to customize\n * permastruct; default will use $taxonomy as slug.\n *\n * query_var - false to prevent queries, or string to customize query var\n * (?$query_var=$term); default will use $taxonomy as query var.\n *\n * public - If the taxonomy should be publicly queryable; \/\/@TODO not implemented.\n * defaults to true.\n *\n * show_ui - If the WordPress UI admin tags UI should apply to this taxonomy;\n * defaults to public.\n *\n * show_in_nav_menus - true makes this taxonomy available for selection in navigation menus.\n * Defaults to public.\n *\n * show_tagcloud - false to prevent the taxonomy being listed in the Tag Cloud Widget;\n * defaults to show_ui which defaults to public.\n *\n * labels - An array of labels for this taxonomy. You can see accepted values in {@link get_taxonomy_labels()}. By default tag labels are used for non-hierarchical types and category labels for hierarchical ones.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wp_taxonomies Inserts new taxonomy object into the list\n * @uses $wp Adds query vars\n *\n * @param string $taxonomy Name of taxonomy object\n * @param array|string $object_type Name of the object type for the taxonomy object.\n * @param array|string $args See above description for the two keys values.\n * @return null|WP_Error WP_Error if errors, otherwise null.\n *\/","file":"taxonomy.php","line":314,"missingDoc":false,"filters":["'registered_taxonomy'"],"uses":{"is_array":[317],"wp_parse_args":[332,346],"__":[335],"strlen":[334],"sanitize_title_with_dashes":[341,347],"add_query_var":[342],"add_rewrite_tag":[358],"add_permastruct":[359],"is_admin":[345],"get_option":[345],"is_null":[362,369],"array_merge":[378],"array_unique":[382],"get_taxonomy_labels":[384],"add_filter":[390]},"used_by":{"create_initial_taxonomies":[44,54,64,78,107]}},"get_taxonomy_labels":{"doc":"\/**\n * Builds an object with all taxonomy labels out of a taxonomy object\n *\n * Accepted keys of the label array in the taxonomy object:\n * - name - general name for the taxonomy, usually plural. The same as and overridden by $tax->label. Default is Tags\/Categories\n * - singular_name - name for one object of this taxonomy. Default is Tag\/Category\n * - search_items - Default is Search Tags\/Search Categories\n * - popular_items - This string isn't used on hierarchical taxonomies. Default is Popular Tags\n * - all_items - Default is All Tags\/All Categories\n * - parent_item - This string isn't used on non-hierarchical taxonomies. In hierarchical ones the default is Parent Category\n * - parent_item_colon - The same as <code>parent_item<\/code>, but with colon <code>:<\/code> in the end\n * - edit_item - Default is Edit Tag\/Edit Category\n * - view_item - Default is View Tag\/View Category\n * - update_item - Default is Update Tag\/Update Category\n * - add_new_item - Default is Add New Tag\/Add New Category\n * - new_item_name - Default is New Tag Name\/New Category Name\n * - separate_items_with_commas - This string isn't used on hierarchical taxonomies. Default is \"Separate tags with commas\", used in the meta box.\n * - add_or_remove_items - This string isn't used on hierarchical taxonomies. Default is \"Add or remove tags\", used in the meta box when JavaScript is disabled.\n * - choose_from_most_used - This string isn't used on hierarchical taxonomies. Default is \"Choose from the most used tags\", used in the meta box.\n *\n * Above, the first default value is for non-hierarchical taxonomies (like tags) and the second one is for hierarchical taxonomies (like categories).\n *\n * @since 3.0.0\n * @param object $tax Taxonomy object\n * @return object object with all the labels as member variables\n *\/","file":"taxonomy.php","line":422,"missingDoc":false,"filters":[],"uses":{"_x":[427,427,428,428],"__":[429,429,430,431,431,432,433,434,434,435,435,436,436,437,437,438,438,439,440,441],"_get_custom_object_labels":[445]},"used_by":{"register_taxonomy":[384]}},"get_tax_sql":{"doc":"\/**\n * Given a taxonomy query, generates SQL to be appended to a main query.\n *\n * @since 3.1.0\n *\n * @see WP_Tax_Query\n *\n * @param array $tax_query A compact tax query\n * @param string $primary_table\n * @param string $primary_id_column\n * @return array\n *\/","file":"taxonomy.php","line":552,"missingDoc":false,"filters":[],"uses":{"get_sql":[554]},"used_by":[]},"WP_Tax_Query::__construct":{"doc":"\/**\n * Constructor.\n *\n * Parses a compact tax query and sets defaults.\n *\n * @since 3.1.0\n * @access public\n *\n * @param array $tax_query A compact tax query:\n * array(\n * 'relation' => 'OR',\n * array(\n * 'taxonomy' => 'tax1',\n * 'terms' => array( 'term1', 'term2' ),\n * 'field' => 'slug',\n * ),\n * array(\n * 'taxonomy' => 'tax2',\n * 'terms' => array( 'term-a', 'term-b' ),\n * 'field' => 'slug',\n * ),\n * )\n *\/","file":"taxonomy.php","line":624,"missingDoc":false,"filters":[],"uses":{"strtoupper":[625],"is_array":[640],"array_merge":[643]},"used_by":[]},"WP_Tax_Query::get_sql":{"doc":"\/**\n * Generates SQL clauses to be appended to a main query.\n *\n * @since 3.1.0\n * @access public\n *\n * @param string $primary_table\n * @param string $primary_id_column\n * @return array\n *\/","file":"taxonomy.php","line":661,"missingDoc":false,"filters":[],"uses":{"count":[667,715],"clean_query":[670],"is_wp_error":[672],"extract":[675],"implode":[689,703,717,731],"compact":[735]},"used_by":[]},"WP_Tax_Query::clean_query":{"doc":"\/**\n * Validates a single query.\n *\n * @since 3.2.0\n * @access private\n *\n * @param array &$query The single query\n *\/","file":"taxonomy.php","line":746,"missingDoc":false,"filters":[],"uses":{"taxonomy_exists":[747],"array_unique":[752],"transform_query":[755,768],"is_wp_error":[757],"array_merge":[762],"get_term_children":[762],"is_taxonomy_hierarchical":[754]},"used_by":[]},"WP_Tax_Query::transform_query":{"doc":"\/**\n * Transforms a single query, from one field to another.\n *\n * @since 3.2.0\n *\n * @param array &$query The single query\n * @param string $resulting_field The resulting field\n *\/","file":"taxonomy.php","line":779,"missingDoc":false,"filters":[],"uses":{"esc_sql":[788],"implode":[793,803,811],"array_map":[793,803,811],"get_col":[794,804,812],"count":[820,820]},"used_by":[]},"get_term_to_edit":{"doc":"\/**\n * Sanitizes Term for editing.\n *\n * Return value is sanitize_term() and usage is for sanitizing the term for\n * editing. Function is for contextual and simplicity.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses sanitize_term() Passes the return value on success\n *\n * @param int|object $id Term ID or Object\n * @param string $taxonomy Taxonomy Name\n * @return mixed|null|WP_Error Will return empty string if $term is not an object.\n *\/","file":"taxonomy.php","line":1078,"missingDoc":false,"filters":[],"uses":{"get_term":[1079],"is_wp_error":[1081],"is_object":[1084],"sanitize_term":[1087]},"used_by":[]},"update_term_cache":{"doc":"\/**\n * Updates Terms to Taxonomy in cache.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @param array $terms List of Term objects to change\n * @param string $taxonomy Optional. Update Term to this taxonomy in cache\n *\/","file":"taxonomy.php","line":2735,"missingDoc":false,"filters":[],"uses":{"wp_cache_add":[2741]},"used_by":{"get_terms":[1403],"wp_get_object_terms":[1975]}},"_get_term_children":{"doc":"\/**\n * Get the subset of $terms that are descendants of $term_id.\n *\n * If $terms is an array of objects, then _get_term_children returns an array of objects.\n * If $terms is an array of IDs, then _get_term_children returns an array of IDs.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n *\n * @param int $term_id The ancestor term: all returned terms should be descendants of $term_id.\n * @param array $terms The set of terms---either an array of term objects or term IDs---from which those that are descendants of $term_id will be chosen.\n * @param string $taxonomy The taxonomy which determines the hierarchy of the terms.\n * @return array The subset of $terms that are descendants of $term_id.\n *\/","file":"taxonomy.php","line":2797,"missingDoc":false,"filters":[],"uses":{"_get_term_hierarchy":[2803],"get_term":[2811],"is_wp_error":[2812],"is_object":[2810],"array_merge":[2830],"_get_term_children":[2829]},"used_by":{"get_terms":[1415,1426],"_get_term_children":[2829]}},"_pad_term_counts":{"doc":"\/**\n * Add count of children to parent count.\n *\n * Recalculates term counts by including items from child terms. Assumes all\n * relevant children are already in the $terms argument.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term IDs\n * @param string $taxonomy Term Context\n * @return null Will break from function if conditions are not met.\n *\/","file":"taxonomy.php","line":2853,"missingDoc":false,"filters":[],"uses":{"is_taxonomy_hierarchical":[2857],"_get_term_hierarchy":[2860],"get_taxonomy":[2873],"esc_sql":[2874],"get_results":[2875],"implode":[2875,2875],"array_keys":[2875],"count":[2896]},"used_by":{"get_terms":[1420]}},"wp_count_terms":{"doc":"\/**\n * Count how many terms are in Taxonomy.\n *\n * Default $args is 'hide_empty' which can be 'hide_empty=true' or array('hide_empty' => true).\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n *\n * @uses get_terms()\n * @uses wp_parse_args() Turns strings into arrays and merges defaults into an array.\n *\n * @param string $taxonomy Taxonomy name\n * @param array|string $args Overwrite defaults. See get_terms()\n * @return int|WP_Error How many terms are in $taxonomy. WP_Error if $taxonomy does not exist.\n *\/","file":"taxonomy.php","line":1690,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[1692],"get_terms":[1702]},"used_by":[]},"wp_delete_category":{"doc":"\/**\n * Deletes one existing category.\n *\n * @since 2.0.0\n * @uses wp_delete_term()\n *\n * @param int $cat_ID\n * @return mixed Returns true if completes delete action; false if term doesn't exist;\n * \tZero on attempted deletion of default Category; WP_Error object is also a possibility.\n *\/","file":"taxonomy.php","line":1854,"missingDoc":false,"filters":[],"uses":{"wp_delete_term":[1855]},"used_by":[]},"wp_unique_term_slug":{"doc":"\/**\n * Will make slug unique, if it isn't already.\n *\n * The $slug has to be unique global to every taxonomy, meaning that one\n * taxonomy term can't have a matching slug with another taxonomy term. Each\n * slug has to be globally unique for every taxonomy.\n *\n * The way this works is that if the taxonomy that the term belongs to is\n * hierarchical and has a parent, it will append that parent to the $slug.\n *\n * If that still doesn't return an unique slug, then it try to append a number\n * until it finds a number that is truly unique.\n *\n * The only purpose for $term is for appending a parent, if one exists.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param string $slug The string that will be tried for a unique slug\n * @param object $term The term object that the $slug will belong too\n * @return string Will return a true unique slug.\n *\/","file":"taxonomy.php","line":2271,"missingDoc":false,"filters":[],"uses":{"term_exists":[2274,2286],"get_term":[2282],"is_wp_error":[2283],"is_taxonomy_hierarchical":[2279],"prepare":[2297,2299,2306],"get_var":[2306,2301]},"used_by":{"wp_insert_term":[2095,2102,2112],"wp_update_term":[2410]}},"wp_defer_term_counting":{"doc":"\/**\n * Enable or disable term counting.\n *\n * @since 2.5.0\n *\n * @param bool $defer Optional. Enable if true, disable if false.\n * @return bool Whether term counting is enabled or disabled.\n *\/","file":"taxonomy.php","line":2448,"missingDoc":false,"filters":[],"uses":{"wp_update_term_count":[2455],"is_bool":[2451]},"used_by":{"wp_update_term_count":[2495]}},"wp_update_term_count_now":{"doc":"\/**\n * Perform term count update immediately.\n *\n * @since 2.5.0\n *\n * @param array $terms The term_taxonomy_id of terms to update.\n * @param string $taxonomy The context of the term.\n * @return bool Always true when complete.\n *\/","file":"taxonomy.php","line":2514,"missingDoc":false,"filters":[],"uses":{"array_map":[2517],"get_taxonomy":[2519],"call_user_func":[2521],"explode":[2526],"strpos":[2525],"_update_post_term_count":[2531],"_update_generic_term_count":[2534],"array_filter":[2529],"clean_term_cache":[2538]},"used_by":{"wp_update_term_count":[2484,2502]}},"_update_post_term_count":{"doc":"\/**\n * Will update term count based on object types of the current taxonomy.\n *\n * Private function for the default callback for post_tag and category\n * taxonomies.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @access private\n * @since 2.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term taxonomy IDs\n * @param object $taxonomy Current taxonomy object of terms\n *\/","file":"taxonomy.php","line":2918,"missingDoc":false,"filters":["'edit_term_taxonomy'","'edited_term_taxonomy'"],"uses":{"explode":[2924],"array_unique":[2926],"array_search":[2928],"esc_sql":[2934],"array_filter":[2934],"get_var":[2941,2944],"prepare":[2941,2944],"implode":[2944],"update":[2947],"compact":[2947]},"used_by":{"wp_update_term_count_now":[2531]}},"_update_generic_term_count":{"doc":"\/**\n * Will update term count based on number of objects.\n *\n * Default callback for the link_category taxonomy.\n *\n * @package WordPress\n * @subpackage Taxonomy\n * @since 3.3.0\n * @uses $wpdb\n *\n * @param array $terms List of Term taxonomy IDs\n * @param object $taxonomy Current taxonomy object of terms\n *\/","file":"taxonomy.php","line":2965,"missingDoc":false,"filters":["'edit_term_taxonomy'","'edited_term_taxonomy'"],"uses":{"get_var":[2969],"prepare":[2969],"update":[2972],"compact":[2972]},"used_by":{"wp_update_term_count_now":[2534]}},"get_ancestors":{"doc":"\/**\n * Get an array of ancestor IDs for a given object.\n *\n * @param int $object_id The ID of the object\n * @param string $object_type The type of object for which we'll be retrieving ancestors.\n * @return array of ancestors from lowest to highest in the hierarchy.\n *\/","file":"taxonomy.php","line":3224,"missingDoc":false,"filters":["'get_ancestors'","'get_ancestors'"],"uses":{"get_term":[3234,3237],"is_wp_error":[3235],"in_array":[3235],"post_type_exists":[3239],"get_post_ancestors":[3240],"is_taxonomy_hierarchical":[3233]},"used_by":{"get_term_link":[3025]}},"the_taxonomies":{"doc":"\/**\n * Display the taxonomies of a post with available options.\n *\n * This function can be used within the loop to display the taxonomies for a\n * post without specifying the Post ID. You can also use it outside the Loop to\n * display the taxonomies for a specific post.\n *\n * The available defaults are:\n * 'post' : default is 0. The post ID to get taxonomies of.\n * 'before' : default is empty string. Display before taxonomies list.\n * 'sep' : default is empty string. Separate every taxonomy with value in this.\n * 'after' : default is empty string. Display this after the taxonomies list.\n * 'template' : The template to use for displaying the taxonomy terms.\n *\n * @since 2.5.0\n * @uses get_the_taxonomies()\n *\n * @param array $args Override the defaults.\n *\/","file":"taxonomy.php","line":3066,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[3075],"extract":[3076],"join":[3078],"get_the_taxonomies":[3078]},"used_by":[]},"get_the_taxonomies":{"doc":"\/**\n * Retrieve all taxonomies associated with a post.\n *\n * This function can be used within the loop. It will also return an array of\n * the taxonomies with links to the taxonomy and name.\n *\n * @since 2.5.0\n *\n * @param int $post Optional. Post ID or will use Global Post ID (in loop).\n * @param array $args Override the defaults.\n * @return array\n *\/","file":"taxonomy.php","line":3093,"missingDoc":false,"filters":[],"uses":{"get_post":[3094],"wp_parse_args":[3096],"extract":[3099],"get_taxonomy":[3107],"get_object_term_cache":[3115],"wp_get_object_terms":[3117],"esc_attr":[3122],"get_term_link":[3122],"wp_sprintf":[3125],"get_object_taxonomies":[3106]},"used_by":{"the_taxonomies":[3078]}},"get_post_taxonomies":{"doc":"\/**\n * Retrieve all taxonomies of a post with just the names.\n *\n * @since 2.5.0\n * @uses get_object_taxonomies()\n *\n * @param int $post Optional. Post ID\n * @return array\n *\/","file":"taxonomy.php","line":3139,"missingDoc":false,"filters":[],"uses":{"get_post":[3140],"get_object_taxonomies":[3142]},"used_by":[]},"wp_get_term_taxonomy_parent_id":{"doc":"\/**\n * Returns the term's parent's term_ID\n *\n * @since 3.1.0\n *\n * @param int $term_id\n * @param string $taxonomy\n *\n * @return int|bool false on error\n *\/","file":"taxonomy.php","line":3256,"missingDoc":false,"filters":[],"uses":{"get_term":[3257],"is_wp_error":[3258]},"used_by":[]},"wp_check_term_hierarchy_for_loops":{"doc":"\/**\n * Checks the given subset of the term hierarchy for hierarchy loops.\n * Prevents loops from forming and breaks those that it finds.\n *\n * Attached to the wp_update_term_parent filter.\n *\n * @since 3.1.0\n * @uses wp_find_hierarchy_loop()\n *\n * @param int $parent term_id of the parent for the term we're checking.\n * @param int $term_id The term we're checking.\n * @param string $taxonomy The taxonomy of the term we're checking.\n *\n * @return int The new parent for the term.\n *\/","file":"taxonomy.php","line":3278,"missingDoc":false,"filters":[],"uses":{"wp_find_hierarchy_loop":[3289],"wp_update_term":[3298],"array_keys":[3297]},"used_by":[]},"get_search_template":{"doc":"\/**\n * Retrieve path of search template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":277,"missingDoc":false,"filters":[],"uses":{"get_query_template":[278]},"used_by":{"__main":[28]}},"get_taxonomy_template":{"doc":"\/**\n * Retrieve path of taxonomy template in current or parent template.\n *\n * Retrieves the taxonomy and term, if term is available. The template is\n * prepended with 'taxonomy-' and followed by both the taxonomy string and\n * the taxonomy string followed by a dash and then followed by the term.\n *\n * The taxonomy and term template is checked and used first, if it exists.\n * Second, just the taxonomy template is checked, and then finally, taxonomy.php\n * template is used. If none of the files exist, then it will fall back on to\n * index.php.\n *\n * @since 2.5.0\n * @uses apply_filters() Calls 'taxonomy_template' filter on found path.\n *\n * @return string\n *\/","file":"template.php","line":165,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[166],"get_query_template":[177]},"used_by":{"__main":[29]}},"get_front_page_template":{"doc":"\/**\n * Retrieve path of front-page template in current or parent template.\n *\n * Looks for 'front-page.php'.\n *\n * @since 3.0.0\n * @uses apply_filters() Calls 'front_page_template' on file path of template.\n *\n * @return string\n *\/","file":"template.php","line":219,"missingDoc":false,"filters":[],"uses":{"get_query_template":[222]},"used_by":{"__main":[30]}},"get_home_template":{"doc":"\/**\n * Retrieve path of home template in current or parent template.\n *\n * This is the template used for the page containing the blog posts\n *\n * Attempts to locate 'home.php' first before falling back to 'index.php'.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'home_template' on file path of home template.\n *\n * @return string\n *\/","file":"template.php","line":203,"missingDoc":false,"filters":[],"uses":{"get_query_template":[206]},"used_by":{"__main":[31]}},"get_attachment_template":{"doc":"\/**\n * Retrieve path of attachment template in current or parent template.\n *\n * The attachment path first checks if the first part of the mime type exists.\n * The second check is for the second part of the mime type. The last check is\n * for both types separated by an underscore. If neither are found then the file\n * 'attachment.php' is checked and returned.\n *\n * Some examples for the 'text\/plain' mime type are 'text.php', 'plain.php', and\n * finally 'text_plain.php'.\n *\n * @since 2.0.0\n *\n * @return string\n *\/","file":"template.php","line":315,"missingDoc":false,"filters":[],"uses":{"explode":[319],"get_query_template":[324,326,322,331]},"used_by":{"__main":[32]}},"get_single_template":{"doc":"\/**\n * Retrieve path of single template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":288,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[289],"get_query_template":[297]},"used_by":{"__main":[34]}},"get_page_template":{"doc":"\/**\n * Retrieve path of page template in current or parent template.\n *\n * Will first look for the specifically assigned page template\n * The will search for 'page-{slug}.php' followed by 'page-id.php'\n * and finally 'page.php'\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":236,"missingDoc":false,"filters":[],"uses":{"get_queried_object_id":[237],"get_page_template_slug":[238],"get_query_var":[239],"get_queried_object":[243],"validate_file":[248],"get_query_template":[256]},"used_by":{"__main":[35]}},"get_category_template":{"doc":"\/**\n * Retrieve path of category template in current or parent template.\n *\n * Works by first retrieving the current slug for example 'category-default.php' and then\n * trying category ID, for example 'category-1.php' and will finally fallback to category.php\n * template, if those files don't exist.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'category_template' on file path of category template.\n *\n * @return string\n *\/","file":"template.php","line":108,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[109],"get_query_template":[119]},"used_by":{"__main":[36]}},"get_tag_template":{"doc":"\/**\n * Retrieve path of tag template in current or parent template.\n *\n * Works by first retrieving the current tag name, for example 'tag-wordpress.php' and then\n * trying tag ID, for example 'tag-1.php' and will finally fallback to tag.php\n * template, if those files don't exist.\n *\n * @since 2.3.0\n * @uses apply_filters() Calls 'tag_template' on file path of tag template.\n *\n * @return string\n *\/","file":"template.php","line":134,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[135],"get_query_template":[145]},"used_by":{"__main":[37]}},"get_author_template":{"doc":"\/**\n * Retrieve path of author template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":82,"missingDoc":false,"filters":[],"uses":{"get_queried_object":[83],"get_query_template":[93]},"used_by":{"__main":[38]}},"get_date_template":{"doc":"\/**\n * Retrieve path of date template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":187,"missingDoc":false,"filters":[],"uses":{"get_query_template":[188]},"used_by":{"__main":[39]}},"get_archive_template":{"doc":"\/**\n * Retrieve path of archive template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":61,"missingDoc":false,"filters":[],"uses":{"array_filter":[62],"get_query_var":[62],"reset":[67],"count":[66],"get_query_template":[72]},"used_by":{"__main":[40]}},"get_comments_popup_template":{"doc":"\/**\n * Retrieve path of comment popup template in current or parent template.\n *\n * Checks for comment popup template in current template, if it exists or in the\n * parent template.\n *\n * @since 1.5.0\n * @uses apply_filters() Calls 'comments_popup_template' filter on path.\n *\n * @return string\n *\/","file":"template.php","line":345,"missingDoc":false,"filters":[],"uses":{"get_query_template":[346]},"used_by":{"__main":[41]}},"get_paged_template":{"doc":"\/**\n * Retrieve path of paged template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":266,"missingDoc":false,"filters":[],"uses":{"get_query_template":[267]},"used_by":{"__main":[42]}},"get_index_template":{"doc":"\/**\n * Retrieve path of index template in current or parent template.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"template.php","line":39,"missingDoc":false,"filters":[],"uses":{"get_query_template":[40]},"used_by":{"__main":[44]}},"get_404_template":{"doc":"\/**\n * Retrieve path of 404 template in current or parent template.\n *\n * @since 1.5.0\n *\n * @return string\n *\/","file":"template.php","line":50,"missingDoc":false,"filters":[],"uses":{"get_query_template":[51]},"used_by":{"__main":[27]}},"get_query_template":{"doc":"\/**\n * Retrieve path to a template\n *\n * Used to quickly retrieve the path of a template without including the file\n * extension. It will also check the parent theme, if the file exists, with\n * the use of {@link locate_template()}. Allows for more generic template location\n * without the use of the other get_*_template() functions.\n *\n * @since 1.5.0\n *\n * @param string $type Filename without extension.\n * @param array $templates An optional list of template candidates\n * @return string Full path to file.\n *\/","file":"template.php","line":23,"missingDoc":false,"filters":["\"{$type}_template\""],"uses":{"preg_replace":[24],"locate_template":[29]},"used_by":{"get_index_template":[40],"get_404_template":[51],"get_archive_template":[72],"get_author_template":[93],"get_category_template":[119],"get_tag_template":[145],"get_taxonomy_template":[177],"get_date_template":[188],"get_home_template":[206],"get_front_page_template":[222],"get_page_template":[256],"get_paged_template":[267],"get_search_template":[278],"get_single_template":[297],"get_attachment_template":[324,326,322,331],"get_comments_popup_template":[346]}},"Text_Diff_Engine_native::diff":{"doc":"","file":"Text\/Diff\/Engine\/native.php","line":31,"missingDoc":true,"filters":[],"uses":{"array_walk":[33,34],"count":[36,37,86,86],"_compareseq":[86],"_shiftBoundaries":[89,90],"assert":[96,97]},"used_by":[]},"Text_Diff_Engine_native::_diag":{"doc":"\/**\n * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,\n * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized\n * segments.\n *\n * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an array of\n * NCHUNKS+1 (X, Y) indexes giving the diving points between sub\n * sequences. The first sub-sequence is contained in (X0, X1), (Y0, Y1),\n * the second in (X1, X2), (Y1, Y2) and so on. Note that (X0, Y0) ==\n * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).\n *\n * This function assumes that the first lines of the specified portions of\n * the two files do not match, and likewise that the last lines do not\n * match. The caller must trim matching lines from the beginning and end\n * of the portions it is going to specify.\n *\/","file":"Text\/Diff\/Engine\/native.php","line":149,"missingDoc":false,"filters":[],"uses":{"reset":[192],"each":[193,201],"_lcsPos":[195,210],"assert":[196,203,211]},"used_by":[]},"Text_Diff_Engine_native::_lcsPos":{"doc":"","file":"Text\/Diff\/Engine\/native.php","line":230,"missingDoc":true,"filters":[],"uses":{"assert":[249]},"used_by":[]},"Text_Diff_Engine_native::_compareseq":{"doc":"\/**\n * Finds LCS of two sequences.\n *\n * The results are recorded in the vectors $this->{x,y}changed[], by\n * storing a 1 in the element for each line that is an insertion or\n * deletion (ie. is not in the LCS).\n *\n * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.\n *\n * Note that XLIM, YLIM are exclusive bounds. All line numbers are\n * origin-0 and discarded lines are not counted.\n *\/","file":"Text\/Diff\/Engine\/native.php","line":269,"missingDoc":false,"filters":[],"uses":{"min":[291],"_diag":[293],"reset":[307],"next":[309],"_compareseq":[310]},"used_by":[]},"Text_Diff_Engine_native::_shiftBoundaries":{"doc":"\/**\n * Adjusts inserts\/deletes of identical lines to join changes as much as\n * possible.\n *\n * We do something when a run of changed lines include a line at one end\n * and has an excluded, identical line at the other. We are free to\n * choose which identical line is included. `compareseq' usually chooses\n * the one at the beginning, but usually it is cleaner to consider the\n * following identical line to be the \"change\".\n *\n * This is extracted verbatim from analyze.c (GNU diffutils-2.7).\n *\/","file":"Text\/Diff\/Engine\/native.php","line":328,"missingDoc":false,"filters":[],"uses":{"assert":[333,354,386,390,411,427,431],"count":[334,335]},"used_by":[]},"Text_Diff_Engine_shell::diff":{"doc":"\/**\n * Returns the array of differences.\n *\n * @param array $from_lines lines of text from old file\n * @param array $to_lines lines of text from new file\n *\n * @return array all changes made (array with Text_Diff_Op_* objects)\n *\/","file":"Text\/Diff\/Engine\/shell.php","line":34,"missingDoc":false,"filters":[],"uses":{"array_walk":[36,37],"tempnam":[42,43],"fopen":[44,47],"fwrite":[45,48],"implode":[45,48],"fclose":[46,49],"shell_exec":[50],"unlink":[51,52],"is_null":[54],"preg_match_all":[67],"assert":[86],"array_push":[87,96,104,112,122],"_getLines":[89,90,98,106,107,114,124,126],"count":[125,127]},"used_by":[]},"Text_Diff_Engine_shell::_getLines":{"doc":"\/**\n * Get lines from either the old or new text\n *\n * @access private\n *\n * @param array &$text_lines Either $from_lines or $to_lines\n * @param int &$line_no Current line number\n * @param int $end Optional end line, when we want to chop more\n * than one line.\n *\n * @return array The chopped lines\n *\/","file":"Text\/Diff\/Engine\/shell.php","line":145,"missingDoc":false,"filters":[],"uses":{"array_push":[151],"array_shift":[151,155]},"used_by":[]},"Text_Diff_Engine_string::diff":{"doc":"\/**\n * Parses a unified or context diff.\n *\n * First param contains the whole diff and the second can be used to force\n * a specific diff type. If the second parameter is 'autodetect', the\n * diff will be examined to find out which type of diff this is.\n *\n * @param string $diff The diff content.\n * @param string $mode The diff mode of the content in $diff. One of\n * 'context', 'unified', or 'autodetect'.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":38,"missingDoc":false,"filters":[],"uses":{"strpos":[44,42,58,59,71,72],"substr":[49],"strlen":[49],"explode":[70],"array_shift":[73,74],"parseContextDiff":[78],"parseUnifiedDiff":[80]},"used_by":[]},"Text_Diff_Engine_string::parseUnifiedDiff":{"doc":"\/**\n * Parses an array containing the unified diff.\n *\n * @param array $diff Array of lines.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":91,"missingDoc":false,"filters":[],"uses":{"count":[94,123],"substr":[97,101,100,109,108,118,117,120,121]},"used_by":[]},"Text_Diff_Engine_string::parseContextDiff":{"doc":"\/**\n * Parses an array containing the context diff.\n *\n * @param array $diff Array of lines.\n *\n * @return array List of all diff operations.\n *\/","file":"Text\/Diff\/Engine\/string.php","line":146,"missingDoc":false,"filters":[],"uses":{"count":[150,191],"substr":[155,158,161,164,173,179,182,186,189,197,205,201,203,202,212,211,219,218,227,231,230,238,237],"strcmp":[172]},"used_by":[]},"Text_Diff_Engine_xdiff::diff":{"doc":"\/**\n *\/","file":"Text\/Diff\/Engine\/xdiff.php","line":20,"missingDoc":false,"filters":[],"uses":{"array_walk":[22,23],"implode":[26,27],"xdiff_string_diff":[30],"count":[30],"explode":[31],"strlen":[43],"substr":[48,52,56]},"used_by":[]},"Text_Diff_Renderer_inline::_blockHeader":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":93,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer_inline::_startBlock":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":98,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer_inline::_lines":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":103,"missingDoc":true,"filters":[],"uses":{"array_walk":[106],"implode":[110,112]},"used_by":[]},"Text_Diff_Renderer_inline::_added":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":116,"missingDoc":true,"filters":[],"uses":{"array_walk":[118],"count":[120],"_lines":[121]},"used_by":[]},"Text_Diff_Renderer_inline::_deleted":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":124,"missingDoc":true,"filters":[],"uses":{"array_walk":[126],"count":[128],"_lines":[129]},"used_by":[]},"Text_Diff_Renderer_inline::_changed":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":132,"missingDoc":true,"filters":[],"uses":{"_deleted":[136,150],"_added":[137,150],"substr":[144,145,146,147,148],"implode":[153,154],"preg_split":[161,162],"_splitOnWords":[168,169],"array_merge":[174],"getParams":[174],"str_replace":[178],"render":[178]},"used_by":[]},"Text_Diff_Renderer_inline::_splitOnWords":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":181,"missingDoc":true,"filters":[],"uses":{"str_replace":[184,194],"strlen":[187],"strspn":[192],"substr":[192,193,194],"strcspn":[193]},"used_by":[]},"Text_Diff_Renderer_inline::_encode":{"doc":"","file":"Text\/Diff\/Renderer\/inline.php","line":201,"missingDoc":true,"filters":[],"uses":{"htmlspecialchars":[203]},"used_by":[]},"Text_Diff_Renderer::Text_Diff_Renderer":{"doc":"\/**\n * Constructor.\n *\/","file":"Text\/Diff\/Renderer.php","line":36,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::getParams":{"doc":"\/**\n * Get any renderer parameters.\n *\n * @return array All parameters of this renderer object.\n *\/","file":"Text\/Diff\/Renderer.php","line":51,"missingDoc":false,"filters":[],"uses":{"substr":[56],"get_object_vars":[54]},"used_by":[]},"Text_Diff_Renderer::render":{"doc":"\/**\n * Renders a diff.\n *\n * @param Text_Diff $diff A Text_Diff object.\n *\n * @return string The formatted output.\n *\/","file":"Text\/Diff\/Renderer.php","line":70,"missingDoc":false,"filters":[],"uses":{"_startDiff":[79],"getDiff":[81],"count":[91,92,116,117,118,128,131],"array_slice":[100,116],"_block":[104,136],"is_array":[88,114,135],"is_a":[86],"_endDiff":[141]},"used_by":[]},"Text_Diff_Renderer::_block":{"doc":"","file":"Text\/Diff\/Renderer.php","line":144,"missingDoc":true,"filters":[],"uses":{"_startBlock":[146],"_blockHeader":[146],"strtolower":[149],"get_class":[149],"_context":[151],"_added":[155],"_deleted":[159],"_changed":[163],"_endBlock":[168]},"used_by":[]},"Text_Diff_Renderer::_startDiff":{"doc":"","file":"Text\/Diff\/Renderer.php","line":171,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_endDiff":{"doc":"","file":"Text\/Diff\/Renderer.php","line":176,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_blockHeader":{"doc":"","file":"Text\/Diff\/Renderer.php","line":181,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_startBlock":{"doc":"","file":"Text\/Diff\/Renderer.php","line":200,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_endBlock":{"doc":"","file":"Text\/Diff\/Renderer.php","line":205,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Renderer::_lines":{"doc":"","file":"Text\/Diff\/Renderer.php","line":210,"missingDoc":true,"filters":[],"uses":{"implode":[212]},"used_by":[]},"Text_Diff_Renderer::_context":{"doc":"","file":"Text\/Diff\/Renderer.php","line":215,"missingDoc":true,"filters":[],"uses":{"_lines":[217]},"used_by":[]},"Text_Diff_Renderer::_added":{"doc":"","file":"Text\/Diff\/Renderer.php","line":220,"missingDoc":true,"filters":[],"uses":{"_lines":[222]},"used_by":[]},"Text_Diff_Renderer::_deleted":{"doc":"","file":"Text\/Diff\/Renderer.php","line":225,"missingDoc":true,"filters":[],"uses":{"_lines":[227]},"used_by":[]},"Text_Diff_Renderer::_changed":{"doc":"","file":"Text\/Diff\/Renderer.php","line":230,"missingDoc":true,"filters":[],"uses":{"_deleted":[232],"_added":[232]},"used_by":[]},"Text_Diff::Text_Diff":{"doc":"\/**\n * Computes diffs between sequences of strings.\n *\n * @param string $engine Name of the diffing engine to use. 'auto'\n * will automatically select the best.\n * @param array $params Parameters to pass to the diffing engine.\n * Normally an array of two arrays, each\n * containing the lines from a file.\n *\/","file":"Text\/Diff.php","line":36,"missingDoc":false,"filters":[],"uses":{"is_string":[39],"extension_loaded":[45],"basename":[47],"dirname":[51],"call_user_func_array":[55]},"used_by":[]},"Text_Diff::getDiff":{"doc":"\/**\n * Returns the array of differences.\n *\/","file":"Text\/Diff.php","line":61,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"Text_Diff::countAddedLines":{"doc":"\/**\n * returns the number of new (added) lines in a given diff.\n *\n * @since Text_Diff 1.1.0\n *\n * @return integer The number of new lines\n *\/","file":"Text\/Diff.php","line":73,"missingDoc":false,"filters":[],"uses":{"nfinal":[79],"is_a":[77,78]},"used_by":[]},"Text_Diff::countDeletedLines":{"doc":"\/**\n * Returns the number of deleted (removed) lines in a given diff.\n *\n * @since Text_Diff 1.1.0\n *\n * @return integer The number of deleted lines\n *\/","file":"Text\/Diff.php","line":92,"missingDoc":false,"filters":[],"uses":{"norig":[98],"is_a":[96,97]},"used_by":[]},"Text_Diff::reverse":{"doc":"\/**\n * Computes a reversed diff.\n *\n * Example:\n * <code>\n * $diff = new Text_Diff($lines1, $lines2);\n * $rev = $diff->reverse();\n * <\/code>\n *\n * @return Text_Diff A Diff object representing the inverse of the\n * original diff. Note that we purposely don't return a\n * reference here, since this essentially is a clone()\n * method.\n *\/","file":"Text\/Diff.php","line":118,"missingDoc":false,"filters":[],"uses":{"version_compare":[120],"zend_version":[120],"reverse":[127]},"used_by":[]},"Text_Diff::isEmpty":{"doc":"\/**\n * Checks for an empty diff.\n *\n * @return boolean True if two sequences were identical.\n *\/","file":"Text\/Diff.php","line":137,"missingDoc":false,"filters":[],"uses":{"is_a":[140]},"used_by":[]},"Text_Diff::lcs":{"doc":"\/**\n * Computes the length of the Longest Common Subsequence (LCS).\n *\n * This is mostly for diagnostic purposes.\n *\n * @return integer The length of the LCS.\n *\/","file":"Text\/Diff.php","line":154,"missingDoc":false,"filters":[],"uses":{"count":[159],"is_a":[158]},"used_by":[]},"Text_Diff::getOriginal":{"doc":"\/**\n * Gets the original set of lines.\n *\n * This reconstructs the $from_lines parameter passed to the constructor.\n *\n * @return array The original sequence of strings.\n *\/","file":"Text\/Diff.php","line":172,"missingDoc":false,"filters":[],"uses":{"array_splice":[177],"count":[177]},"used_by":[]},"Text_Diff::getFinal":{"doc":"\/**\n * Gets the final set of lines.\n *\n * This reconstructs the $to_lines parameter passed to the constructor.\n *\n * @return array The sequence of strings.\n *\/","file":"Text\/Diff.php","line":190,"missingDoc":false,"filters":[],"uses":{"array_splice":[195],"count":[195]},"used_by":[]},"Text_Diff::trimNewlines":{"doc":"\/**\n * Removes trailing newlines from a line of text. This is meant to be used\n * with array_walk().\n *\n * @param string $line The line to trim.\n * @param integer $key The index of the line in the array. Not used.\n *\/","file":"Text\/Diff.php","line":208,"missingDoc":false,"filters":[],"uses":{"str_replace":[210]},"used_by":[]},"Text_Diff::_getTempDir":{"doc":"\/**\n * Determines the location of the system temporary directory.\n *\n * @static\n *\n * @access protected\n *\n * @return string A directory name which can be used for temp files.\n * Returns false if one could not be found.\n *\/","file":"Text\/Diff.php","line":223,"missingDoc":false,"filters":[],"uses":{"ini_get":[229],"getenv":[233],"strlen":[232,238,247],"count":[238],"array_shift":[239],"is_dir":[240]},"used_by":[]},"Text_Diff::_check":{"doc":"\/**\n * Checks a diff for validity.\n *\n * This is here only for debugging purposes.\n *\/","file":"Text\/Diff.php","line":255,"missingDoc":false,"filters":[],"uses":{"trigger_error":[258,261,266,269,275],"serialize":[257,257,260,260,265,265,268,268],"getOriginal":[257,265],"getFinal":[260,268],"reverse":[264],"get_class":[274,277]},"used_by":[]},"Text_MappedDiff::Text_MappedDiff":{"doc":"\/**\n * Computes a diff between sequences of strings.\n *\n * This can be used to compute things like case-insensitve diffs, or diffs\n * which ignore changes in white-space.\n *\n * @param array $from_lines An array of strings.\n * @param array $to_lines An array of strings.\n * @param array $mapped_from_lines This array should have the same size\n * number of elements as $from_lines. The\n * elements in $mapped_from_lines and\n * $mapped_to_lines are what is actually\n * compared when computing the diff.\n * @param array $mapped_to_lines This array should have the same number\n * of elements as $to_lines.\n *\/","file":"Text\/Diff.php","line":307,"missingDoc":false,"filters":[],"uses":{"assert":[310,311],"count":[310,310,311,311,316,319,320,325,326],"array_slice":[319,325],"is_array":[318,324]},"used_by":[]},"Text_Diff_Op::reverse":{"doc":"","file":"Text\/Diff.php","line":344,"missingDoc":true,"filters":[],"uses":{"trigger_error":[346]},"used_by":[]},"Text_Diff_Op::norig":{"doc":"","file":"Text\/Diff.php","line":349,"missingDoc":true,"filters":[],"uses":{"count":[351]},"used_by":[]},"Text_Diff_Op::nfinal":{"doc":"","file":"Text\/Diff.php","line":354,"missingDoc":true,"filters":[],"uses":{"count":[356]},"used_by":[]},"Text_Diff_Op_copy::Text_Diff_Op_copy":{"doc":"","file":"Text\/Diff.php","line":369,"missingDoc":true,"filters":[],"uses":{"is_array":[371]},"used_by":[]},"Text_Diff_Op_copy::reverse":{"doc":"","file":"Text\/Diff.php","line":378,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_delete::Text_Diff_Op_delete":{"doc":"","file":"Text\/Diff.php","line":394,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_delete::reverse":{"doc":"","file":"Text\/Diff.php","line":400,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_add::Text_Diff_Op_add":{"doc":"","file":"Text\/Diff.php","line":416,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_add::reverse":{"doc":"","file":"Text\/Diff.php","line":422,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_change::Text_Diff_Op_change":{"doc":"","file":"Text\/Diff.php","line":438,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"Text_Diff_Op_change::reverse":{"doc":"","file":"Text\/Diff.php","line":444,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"dynamic_sidebar":{"doc":"\/**\n * Display dynamic sidebar.\n *\n * By default it displays the default sidebar or 'sidebar-1'. The 'sidebar-1' is\n * not named by the theme, the actual name is '1', but 'sidebar-' is added to\n * the registered sidebars for the name. If you named your sidebar 'after-post',\n * then the parameter $index will still be 'after-post', but the lookup will be\n * for 'sidebar-after-post'.\n *\n * It is confusing for the $index parameter, but just know that it should just\n * work. When you register the sidebar in the theme, you will use the same name\n * for this function or \"Pay no heed to the man behind the curtain.\" Just accept\n * it as an oddity of WordPress sidebar register and display.\n *\n * @since 2.2.0\n *\n * @param int|string $index Optional, default is 1. Name or ID of dynamic sidebar.\n * @return bool True, if widget sidebar was found and called. False if not found or not called.\n *\/","file":"widgets.php","line":852,"missingDoc":false,"filters":["'dynamic_sidebar_params'","'dynamic_sidebar'"],"uses":{"sanitize_title":[858,860],"is_int":[855],"wp_get_sidebars_widgets":[867],"array_key_exists":[871],"is_array":[871],"array_merge":[881,882],"is_object":[891],"get_class":[892],"is_string":[889],"ltrim":[894],"sprintf":[895],"call_user_func_array":[904],"is_callable":[903]},"used_by":{"__main":[15]}},"wp_clean_themes_cache":{"doc":"\/**\n * Clears the cache held by get_theme_roots() and WP_Theme.\n *\n * @since 3.5.0\n *\/","file":"theme.php","line":114,"missingDoc":false,"filters":[],"uses":{"delete_site_transient":[115],"search_theme_directories":[116],"cache_delete":[118],"wp_get_themes":[117]},"used_by":[]},"get_locale_stylesheet_uri":{"doc":"\/**\n * Retrieve localized stylesheet URI.\n *\n * The stylesheet directory for the localized stylesheet files are located, by\n * default, in the base theme directory. The name of the locale file will be the\n * locale followed by '.css'. If that does not exist, then the text direction\n * stylesheet will be checked for existence, for example 'ltr.css'.\n *\n * The theme may change the location of the stylesheet directory by either using\n * the 'stylesheet_directory_uri' filter or the 'locale_stylesheet_uri' filter.\n * If you want to change the location of the stylesheet files for the entire\n * WordPress workflow, then change the former. If you just have the locale in a\n * separate folder, then change the latter.\n *\n * @since 2.1.0\n * @uses apply_filters() Calls 'locale_stylesheet_uri' filter on stylesheet URI path and stylesheet directory URI.\n *\n * @return string\n *\/","file":"theme.php","line":217,"missingDoc":false,"filters":["'locale_stylesheet_uri'"],"uses":{"get_stylesheet_directory_uri":[219],"get_stylesheet_directory":[220],"get_locale":[221],"file_exists":[224,222]},"used_by":{"locale_stylesheet":[538]}},"get_theme_roots":{"doc":"\/**\n * Retrieve theme roots.\n *\n * @since 2.9.0\n *\n * @return array|string An array of theme roots keyed by template\/stylesheet or a single theme root if all themes have the same root.\n *\/","file":"theme.php","line":282,"missingDoc":false,"filters":[],"uses":{"count":[285],"get_site_transient":[288,291],"search_theme_directories":[290]},"used_by":{"get_raw_theme_root":[524]}},"register_theme_directory":{"doc":"\/**\n * Register a directory that contains themes.\n *\n * @since 2.9.0\n *\n * @param string $directory Either the full filesystem path to a theme folder or a folder within WP_CONTENT_DIR\n * @return bool\n *\/","file":"theme.php","line":304,"missingDoc":false,"filters":[],"uses":{"file_exists":[311,307]},"used_by":[]},"locale_stylesheet":{"doc":"\/**\n * Display localized stylesheet link element.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":537,"missingDoc":false,"filters":[],"uses":{"get_locale_stylesheet_uri":[538]},"used_by":[]},"preview_theme":{"doc":"\/**\n * Start preview theme output buffer.\n *\n * Will only preform task if the user has permissions and template and preview\n * query variables exist.\n *\n * @since 2.6.0\n *\/","file":"theme.php","line":552,"missingDoc":false,"filters":[],"uses":{"current_user_can":[556],"show_admin_bar":[561],"preg_replace":[563,571],"validate_file":[565,572],"add_filter":[568,574,578],"get_option":[578],"ob_start":[580]},"used_by":[]},"_preview_theme_template_filter":{"doc":"\/**\n * Private function to modify the current template when previewing a theme\n *\n * @since 2.9.0\n * @access private\n *\n * @return string\n *\/","file":"theme.php","line":592,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_preview_theme_stylesheet_filter":{"doc":"\/**\n * Private function to modify the current stylesheet when previewing a theme\n *\n * @since 2.9.0\n * @access private\n *\n * @return string\n *\/","file":"theme.php","line":604,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"preview_theme_ob_filter":{"doc":"\/**\n * Callback function for ob_start() to capture all links in the theme.\n *\n * @since 2.6.0\n * @access private\n *\n * @param string $content\n * @return string\n *\/","file":"theme.php","line":617,"missingDoc":false,"filters":[],"uses":{"preg_replace_callback":[618]},"used_by":[]},"preview_theme_ob_filter_callback":{"doc":"\/**\n * Manipulates preview theme links in order to control and maintain location.\n *\n * Callback function for preg_replace_callback() to accept and filter matches.\n *\n * @since 2.6.0\n * @access private\n *\n * @param array $matches\n * @return string\n *\/","file":"theme.php","line":632,"missingDoc":false,"filters":[],"uses":{"preg_replace":[634],"strpos":[633,636,638,638,640,642,647],"home_url":[638],"add_query_arg":[646],"esc_attr":[649]},"used_by":[]},"get_theme_mods":{"doc":"\/**\n * Retrieve all theme modifications.\n *\n * @since 3.1.0\n *\n * @return array Theme modifications.\n *\/","file":"theme.php","line":746,"missingDoc":false,"filters":[],"uses":{"get_option":[747,749,752,748],"get":[751],"wp_get_theme":[751],"update_option":[754],"delete_option":[755],"is_admin":[753]},"used_by":{"get_theme_mod":[777],"set_theme_mod":[797],"remove_theme_mod":[817]}},"remove_theme_mods":{"doc":"\/**\n * Remove theme modifications option for current theme.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":836,"missingDoc":false,"filters":[],"uses":{"delete_option":[837,843],"get_option":[837,840],"get":[842],"wp_get_theme":[842]},"used_by":{"remove_theme_mod":[825]}},"get_header_textcolor":{"doc":"\/**\n * Retrieve text color for custom header.\n *\n * @since 2.1.0\n *\n * @return string\n *\/","file":"theme.php","line":853,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[854],"get_theme_support":[854]},"used_by":{"header_textcolor":[863]}},"header_textcolor":{"doc":"\/**\n * Display text color for custom header.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":862,"missingDoc":false,"filters":[],"uses":{"get_header_textcolor":[863]},"used_by":[]},"display_header_text":{"doc":"\/**\n * Whether to display the header text.\n *\n * @since 3.4.0\n *\n * @return bool\n *\/","file":"theme.php","line":873,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[874],"get_theme_mod":[877],"get_theme_support":[877]},"used_by":[]},"get_header_image":{"doc":"\/**\n * Retrieve header image for custom header.\n *\n * @since 2.1.0\n *\n * @return string\n *\/","file":"theme.php","line":888,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[889],"get_theme_support":[889],"get_random_header_image":[895],"is_random_header_image":[894],"esc_url_raw":[897],"set_url_scheme":[897]},"used_by":{"header_image":[989],"_delete_attachment_theme_mod":[1591]}},"get_random_header_image":{"doc":"\/**\n * Get random header image url from registered images in theme.\n *\n * @since 3.2.0\n *\n * @return string Path to header image\n *\/","file":"theme.php","line":948,"missingDoc":false,"filters":[],"uses":{"_get_random_header_data":[949]},"used_by":{"get_header_image":[895],"is_random_header_image":[971,976]}},"is_random_header_image":{"doc":"\/**\n * Check if random header image is in use.\n *\n * Always true if user expressly chooses the option in Appearance > Header.\n * Also true if theme has multiple header images registered, no specific header image\n * is chosen, and theme turns on random headers with add_theme_support().\n *\n * @since 3.2.0\n *\n * @param string $type The random pool to use. any|default|uploaded\n * @return boolean\n *\/","file":"theme.php","line":967,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[968],"get_theme_support":[968],"get_random_header_image":[971,976]},"used_by":{"get_header_image":[894],"get_custom_header":[1033]}},"_get_random_header_data":{"doc":"\/**\n * Get random header image data from registered images in theme.\n *\n * @since 3.4.0\n *\n * @access private\n *\n * @return string Path to header image\n *\/","file":"theme.php","line":910,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[915],"get_uploaded_header_images":[919],"current_theme_supports":[924],"array_rand":[932],"sprintf":[934,935],"get_template_directory_uri":[934,935],"get_stylesheet_directory_uri":[934,935]},"used_by":{"get_random_header_image":[949],"get_custom_header":[1034]}},"header_image":{"doc":"\/**\n * Display header image path.\n *\n * @since 2.1.0\n *\/","file":"theme.php","line":988,"missingDoc":false,"filters":[],"uses":{"get_header_image":[989]},"used_by":[]},"get_custom_header":{"doc":"\/**\n * Get the header image data.\n *\n * @since 3.4.0\n *\n * @return object\n *\/","file":"theme.php","line":1030,"missingDoc":false,"filters":[],"uses":{"_get_random_header_data":[1034],"get_theme_mod":[1036],"get_template_directory_uri":[1038],"get_stylesheet_directory_uri":[1038],"vsprintf":[1040,1043,1047],"get_theme_support":[1040,1058,1059],"current_theme_supports":[1037],"is_random_header_image":[1033],"wp_parse_args":[1061]},"used_by":[]},"register_default_headers":{"doc":"\/**\n * Register a selection of default headers to be displayed by the custom header admin UI.\n *\n * @since 3.0.0\n *\n * @param array $headers Array of headers keyed by a string id. The ids point to arrays containing 'url', 'thumbnail_url', and 'description' keys.\n *\/","file":"theme.php","line":1071,"missingDoc":false,"filters":[],"uses":{"array_merge":[1074]},"used_by":[]},"unregister_default_headers":{"doc":"\/**\n * Unregister default headers.\n *\n * This function must be called after register_default_headers() has already added the\n * header you want to remove.\n *\n * @see register_default_headers()\n * @since 3.0.0\n *\n * @param string|array $header The header string id (key of array) to remove, or an array thereof.\n * @return True on success, false on failure.\n *\/","file":"theme.php","line":1089,"missingDoc":false,"filters":[],"uses":{"array_map":[1092],"is_array":[1091]},"used_by":[]},"background_image":{"doc":"\/**\n * Display background image path.\n *\n * @since 3.0.0\n *\/","file":"theme.php","line":1117,"missingDoc":false,"filters":[],"uses":{"get_background_image":[1118]},"used_by":[]},"get_background_color":{"doc":"\/**\n * Retrieve value for custom background color.\n *\n * @since 3.0.0\n *\n * @return string\n *\/","file":"theme.php","line":1128,"missingDoc":false,"filters":[],"uses":{"get_theme_mod":[1129],"get_theme_support":[1129]},"used_by":{"background_color":[1138]}},"background_color":{"doc":"\/**\n * Display background color value.\n *\n * @since 3.0.0\n *\/","file":"theme.php","line":1137,"missingDoc":false,"filters":[],"uses":{"get_background_color":[1138]},"used_by":[]},"_custom_background_cb":{"doc":"\/**\n * Default custom background callback.\n *\n * @since 3.0.0\n * @access protected\n *\/","file":"theme.php","line":1147,"missingDoc":false,"filters":[],"uses":{"set_url_scheme":[1149],"get_background_image":[1149],"get_theme_mod":[1153,1163,1168,1173],"in_array":[1164,1169,1174],"trim":[1182]},"used_by":[]},"add_editor_style":{"doc":"\/**\n * Add callback for custom TinyMCE editor stylesheets.\n *\n * The parameter $stylesheet is the name of the stylesheet, relative to\n * the theme root. It also accepts an array of stylesheets.\n * It is optional and defaults to 'editor-style.css'.\n *\n * This function automatically adds another stylesheet with -rtl prefix, e.g. editor-style-rtl.css.\n * If that file doesn't exist, it is removed before adding the stylesheet(s) to TinyMCE.\n * If an array of stylesheets is passed to add_editor_style(),\n * RTL is only added for the first stylesheet.\n *\n * Since version 3.4 the TinyMCE body has .rtl CSS class.\n * It is a better option to use that class and add any RTL styles to the main stylesheet.\n *\n * @since 3.0.0\n *\n * @param mixed $stylesheet Optional. Stylesheet name or array thereof, relative to theme root.\n * \tDefaults to 'editor-style.css'\n *\/","file":"theme.php","line":1207,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1209],"is_admin":[1211],"str_replace":[1218],"is_rtl":[1217],"array_merge":[1222]},"used_by":[]},"remove_editor_styles":{"doc":"\/**\n * Removes all visual editor stylesheets.\n *\n * @since 3.1.0\n *\n * @return bool True on success, false if there were no stylesheets to remove.\n *\/","file":"theme.php","line":1232,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1233],"_remove_theme_support":[1235],"is_admin":[1236]},"used_by":[]},"_remove_theme_support":{"doc":"\/**\n * Do not use. Removes theme support internally, ignorant of the blacklist.\n *\n * @access private\n * @since 3.1.0\n *\/","file":"theme.php","line":1476,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1483],"did_action":[1492,1502],"get_theme_support":[1494,1504],"remove_action":[1496,1497,1505,1506]},"used_by":{"remove_editor_styles":[1235],"remove_theme_support":[1467]}},"_custom_header_background_just_in_time":{"doc":"\/**\n * Registers the internal custom header and background routines.\n *\n * @since 3.4.0\n * @access private\n *\/","file":"theme.php","line":1390,"missingDoc":false,"filters":[],"uses":{"add_theme_support":[1395,1409],"get_theme_support":[1397,1411],"add_action":[1399,1412],"is_admin":[1401,1414],"current_theme_supports":[1393,1407]},"used_by":[]},"require_if_theme_supports":{"doc":"\/**\n * Checks a theme's support for a given feature before loading the functions which implement it.\n *\n * @since 2.9.0\n * @param string $feature the feature being checked\n * @param string $include the file containing the functions that implement the feature\n *\/","file":"theme.php","line":1574,"missingDoc":false,"filters":[],"uses":{"current_theme_supports":[1575]},"used_by":[]},"_delete_attachment_theme_mod":{"doc":"\/**\n * Checks an attachment being deleted to see if it's a header or background image.\n *\n * If true it removes the theme modification which would be pointing at the deleted\n * attachment\n *\n * @access private\n * @since 3.0.0\n * @param int $id the attachment id\n *\/","file":"theme.php","line":1589,"missingDoc":false,"filters":[],"uses":{"wp_get_attachment_url":[1590],"get_header_image":[1591],"get_background_image":[1592],"remove_theme_mod":[1595,1598]},"used_by":[]},"check_theme_switched":{"doc":"\/**\n * Checks if a theme has been changed and runs 'after_switch_theme' hook on the next WP load\n *\n * @since 3.3.0\n *\/","file":"theme.php","line":1608,"missingDoc":false,"filters":["'after_switch_theme'","'after_switch_theme'"],"uses":{"wp_get_theme":[1610],"get":[1613],"exists":[1612],"update_option":[1617],"get_option":[1609]},"used_by":[]},"_wp_customize_include":{"doc":"\/**\n * Includes and instantiates the WP_Customize_Manager class.\n *\n * Fires when ?wp_customize=on or on wp-admin\/customize.php.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1628,"missingDoc":false,"filters":[],"uses":{"is_admin":[1630],"basename":[1630]},"used_by":[]},"_wp_customize_loader_settings":{"doc":"\/**\n * Adds settings for the customize-loader script.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1645,"missingDoc":false,"filters":[],"uses":{"parse_url":[1648,1649],"admin_url":[1648,1658],"home_url":[1649],"strtolower":[1650,1650],"wp_is_mobile":[1653,1654],"preg_match":[1654],"esc_url":[1658],"json_encode":[1663],"get_data":[1665],"add_data":[1669]},"used_by":[]},"wp_customize_support_script":{"doc":"\/**\n * Prints a script to check whether or not the customizer is supported,\n * and apply either the no-customize-support or customize-support class\n * to the body.\n *\n * This function MUST be called inside the body tag.\n *\n * Ideally, call this function immediately after the body tag is opened.\n * This prevents a flash of unstyled content.\n *\n * It is also recommended that you add the \"no-customize-support\" class\n * to the body tag by default.\n *\n * @since 3.4.0\n *\/","file":"theme.php","line":1703,"missingDoc":false,"filters":[],"uses":{"parse_url":[1704,1705],"admin_url":[1704],"home_url":[1705],"strtolower":[1706,1706]},"used_by":[]},"wp_version_check":{"doc":"\/**\n * Check WordPress version against the newest version.\n *\n * The WordPress version, PHP version, and Locale is sent. Checks against the\n * WordPress server at api.wordpress.org server. Will only check if WordPress\n * isn't installing.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_version Used to check against the newest WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":22,"missingDoc":false,"filters":["'core_version_check_locale'"],"uses":{"defined":[23,81],"phpversion":[28],"get_site_transient":[30],"is_object":[31],"time":[39,46,118],"get_locale":[43],"set_site_transient":[47,120],"preg_replace":[50],"db_version":[50],"method_exists":[49],"get_user_count":[55],"get_blog_count":[56],"network_site_url":[57],"count_users":[60],"home_url":[64,82,85],"is_multisite":[54],"http_build_query":[78],"wp_remote_get":[89],"is_wp_error":[91],"wp_remote_retrieve_response_code":[91],"trim":[94],"wp_remote_retrieve_body":[94],"maybe_unserialize":[95],"is_array":[97],"array_intersect_key":[105,112],"array_map":[105],"array_fill_keys":[106,112],"esc_url":[108],"esc_html":[110]},"used_by":{"_maybe_update_core":[379]}},"count_users":{"doc":"\/**\n * Count number of users who have each of the user roles.\n *\n * Assumes there are neither duplicated nor orphaned capabilities meta_values.\n * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query()\n * Using $strategy = 'time' this is CPU-intensive and should handle around 10^7 users.\n * Using $strategy = 'memory' this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257.\n *\n * @since 3.0.0\n * @param string $strategy 'time' or 'memory'\n * @return array Includes a grand total and an array of counts indexed by role strings.\n *\/","file":"user.php","line":874,"missingDoc":false,"filters":[],"uses":{"get_current_blog_id":[878],"get_blog_prefix":[879],"get_names":[888],"like_escape":[893],"implode":[895],"get_row":[898],"get_col":[918],"maybe_unserialize":[921],"is_array":[922],"count":[933]},"used_by":{"wp_version_check":[60]}},"wp_update_plugins":{"doc":"\/**\n * Check plugin versions against the latest versions hosted on WordPress.org.\n *\n * The WordPress version, PHP version, and Locale is sent along with a list of\n * all plugins installed. Checks against the WordPress server at\n * api.wordpress.org. Will only check if WordPress isn't installing.\n *\n * @package WordPress\n * @since 2.3.0\n * @uses $wp_version Used to notify the WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":136,"missingDoc":false,"filters":[],"uses":{"defined":[139,200],"function_exists":[143],"get_plugins":[146],"get_option":[147],"get_site_transient":[148],"is_object":[149],"time":[153,168,194],"current_filter":[156],"strval":[175,175],"is_array":[179,212],"set_site_transient":[195,217],"compact":[197],"serialize":[201],"get_bloginfo":[202],"wp_remote_post":[205],"is_wp_error":[207],"wp_remote_retrieve_response_code":[207],"maybe_unserialize":[210],"wp_remote_retrieve_body":[210]},"used_by":{"_maybe_update_plugins":[395]}},"wp_update_themes":{"doc":"\/**\n * Check theme versions against the latest versions hosted on WordPress.org.\n *\n * A list of all themes installed in sent to WP. Checks against the\n * WordPress server at api.wordpress.org. Will only check if WordPress isn't\n * installing.\n *\n * @package WordPress\n * @since 2.7.0\n * @uses $wp_version Used to notify the WordPress version.\n *\n * @return mixed Returns null if update is unsupported. Returns false if check is too soon.\n *\/","file":"update.php","line":233,"missingDoc":false,"filters":[],"uses":{"defined":[236,305],"wp_get_themes":[239],"get_site_transient":[240],"is_object":[241],"get_option":[248],"get_stylesheet":[251,253,260],"get":[251,254,255,256,257,258],"get_template":[259],"current_filter":[265],"time":[277,301,316],"strval":[282,282],"is_array":[286,320],"set_site_transient":[302,323],"serialize":[306],"get_bloginfo":[307],"wp_remote_post":[310],"is_wp_error":[312],"wp_remote_retrieve_response_code":[312],"maybe_unserialize":[319],"wp_remote_retrieve_body":[319]},"used_by":{"_maybe_update_themes":[412]}},"_maybe_update_core":{"doc":"","file":"update.php","line":368,"missingDoc":true,"filters":[],"uses":{"get_site_transient":[371],"time":[374],"wp_version_check":[379]},"used_by":[]},"_maybe_update_plugins":{"doc":"\/**\n * Check the last time plugins were run before checking plugin versions.\n *\n * This might have been backported to WordPress 2.6.1 for performance reasons.\n * This is used for the wp-admin to check only so often instead of every page\n * load.\n *\n * @since 2.7.0\n * @access private\n *\/","file":"update.php","line":391,"missingDoc":false,"filters":[],"uses":{"get_site_transient":[392],"time":[393],"wp_update_plugins":[395]},"used_by":[]},"_maybe_update_themes":{"doc":"\/**\n * Check themes versions only after a duration of time.\n *\n * This is for performance reasons to make sure that on the theme version\n * checker is not run on every page load.\n *\n * @since 2.7.0\n * @access private\n *\/","file":"update.php","line":407,"missingDoc":false,"filters":[],"uses":{"get_site_transient":[408],"time":[409],"wp_update_themes":[412]},"used_by":[]},"wp_schedule_update_checks":{"doc":"\/**\n * Schedule core, theme, and plugin update checks.\n *\n * @since 3.1.0\n *\/","file":"update.php","line":420,"missingDoc":false,"filters":[],"uses":{"wp_schedule_event":[422,425,428],"time":[422,425,428],"wp_next_scheduled":[421,424,427],"defined":[421,424,427]},"used_by":[]},"wp_signon":{"doc":"\/**\n * Authenticate user with remember capability.\n *\n * The credentials is an array that has 'user_login', 'user_password', and\n * 'remember' indices. If the credentials is not given, then the log in form\n * will be assumed and used if set.\n *\n * The various authentication cookies will be set by this function and will be\n * set for a longer period depending on if the 'remember' credential is set to\n * true.\n *\n * @since 2.5.0\n *\n * @param array $credentials Optional. User info in order to sign on.\n * @param bool $secure_cookie Optional. Whether to use secure cookie.\n * @return object Either WP_Error on failure, or WP_User on success.\n *\/","file":"user.php","line":25,"missingDoc":false,"filters":["'wp_authenticate'","'secure_signon_cookie'","'wp_login'"],"uses":{"is_ssl":[44],"add_filter":[51],"wp_authenticate":[53],"get_error_codes":[56],"is_wp_error":[55],"wp_set_auth_cookie":[63]},"used_by":[]},"wp_authenticate_username_password":{"doc":"","file":"user.php","line":72,"missingDoc":true,"filters":["'wp_authenticate_user'"],"uses":{"is_a":[73],"add":[79,82],"__":[79,82,90,95,101,110],"get_user_by":[87],"sprintf":[90,110],"wp_lostpassword_url":[90,111],"get_blog_details":[99],"is_object":[100],"is_super_admin":[98],"is_multisite":[92],"is_wp_error":[106],"wp_check_password":[109]},"used_by":[]},"wp_authenticate_cookie":{"doc":"\/**\n * Authenticate the user using the WordPress auth cookie.\n *\/","file":"user.php","line":119,"missingDoc":false,"filters":[],"uses":{"is_a":[120],"wp_validate_auth_cookie":[123],"__":[135]},"used_by":[]},"count_many_users_posts":{"doc":"\/**\n * Number of posts written by a list of users.\n *\n * @since 3.0.0\n *\n * @param array $users Array of user IDs.\n * @param string $post_type Optional. Post type to check. Defaults to post.\n * @param bool $public_only Optional. Only return counts for public posts. Defaults to false.\n * @return array Amount of posts each user has written.\n *\/","file":"user.php","line":172,"missingDoc":false,"filters":[],"uses":{"is_array":[176],"implode":[179],"array_map":[179],"get_posts_by_author_sql":[180],"get_results":[182]},"used_by":[]},"WP_User_Query::__construct":{"doc":"\/**\n * PHP5 constructor\n *\n * @since 3.1.0\n *\n * @param string|array $args The query variables\n * @return WP_User_Query\n *\/","file":"user.php","line":359,"missingDoc":false,"filters":[],"uses":{"wp_parse_args":[361],"prepare_query":[380],"query":[381]},"used_by":[]},"WP_User_Query::prepare_query":{"doc":"\/**\n * Prepare the query variables\n *\n * @since 3.1.0\n * @access private\n *\/","file":"user.php","line":391,"missingDoc":false,"filters":["'pre_user_query'"],"uses":{"array_unique":[397],"esc_sql":[401],"implode":[402,522,525],"is_array":[396],"in_array":[418,416],"get_posts_by_author_sql":[424],"strtoupper":[439],"prepare":[449,451],"trim":[454,467,495],"ltrim":[456],"rtrim":[457],"array_intersect":[471],"is_numeric":[475],"preg_match":[477],"wp_is_large_network":[477],"strpos":[473],"get_search_sql":[483],"absint":[486],"get_blog_prefix":[489,499],"is_multisite":[497],"parse_query_vars":[510],"get_sql":[513],"wp_parse_id_list":[522,525]},"used_by":[]},"WP_User_Query::query":{"doc":"\/**\n * Execute the query, with the current variables\n *\n * @since 3.1.0\n * @access private\n *\/","file":"user.php","line":538,"missingDoc":false,"filters":["'found_users_query'"],"uses":{"get_results":[544],"get_col":[546],"is_array":[543],"get_var":[550],"cache_users":[556]},"used_by":[]},"WP_User_Query::get":{"doc":"\/**\n * Retrieve query variable.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @return mixed\n *\/","file":"user.php","line":579,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::set":{"doc":"\/**\n * Set query variable.\n *\n * @since 3.5.0\n * @access public\n *\n * @param string $query_var Query variable key.\n * @param mixed $value Query variable value.\n *\/","file":"user.php","line":595,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::get_search_sql":{"doc":"","file":"user.php","line":611,"missingDoc":true,"filters":[],"uses":{"esc_sql":[612],"like_escape":[621],"implode":[624]},"used_by":[]},"WP_User_Query::get_results":{"doc":"\/**\n * Return the list of users\n *\n * @since 3.1.0\n * @access public\n *\n * @return array\n *\/","file":"user.php","line":635,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_User_Query::get_total":{"doc":"\/**\n * Return the total number of users for the current query\n *\n * @since 3.1.0\n * @access public\n *\n * @return array\n *\/","file":"user.php","line":647,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"add_user_meta":{"doc":"\/**\n * Add meta data field to a user.\n *\n * Post meta data is called \"Custom Fields\" on the Administration Screens.\n *\n * @since 3.0.0\n * @uses add_metadata()\n * @link http:\/\/codex.wordpress.org\/Function_Reference\/add_user_meta\n *\n * @param int $user_id Post ID.\n * @param string $meta_key Metadata name.\n * @param mixed $meta_value Metadata value.\n * @param bool $unique Optional, default is false. Whether the same key should not be added.\n * @return bool False for failure. True for success.\n *\/","file":"user.php","line":799,"missingDoc":false,"filters":[],"uses":{"add_metadata":[800]},"used_by":[]},"wp_dropdown_users":{"doc":"\/**\n * Create dropdown HTML content of users.\n *\n * The content can either be displayed, which it is by default or retrieved by\n * setting the 'echo' argument. The 'include' and 'exclude' arguments do not\n * need to be used; all users will be displayed in that case. Only one can be\n * used, either 'include' or 'exclude', but not both.\n *\n * The available arguments are as follows:\n * <ol>\n * <li>show_option_all - Text to show all and whether HTML option exists.<\/li>\n * <li>show_option_none - Text for show none and whether HTML option exists.<\/li>\n * <li>hide_if_only_one_author - Don't create the dropdown if there is only one user.<\/li>\n * <li>orderby - SQL order by clause for what order the users appear. Default is 'display_name'.<\/li>\n * <li>order - Default is 'ASC'. Can also be 'DESC'.<\/li>\n * <li>include - User IDs to include.<\/li>\n * <li>exclude - User IDs to exclude.<\/li>\n * <li>multi - Default is 'false'. Whether to skip the ID attribute on the 'select' element. A 'true' value is overridden when id argument is set.<\/li>\n * <li>show - Default is 'display_name'. User table column to display. If the selected item is empty then the user_login will be displayed in parentheses<\/li>\n * <li>echo - Default is '1'. Whether to display or retrieve content.<\/li>\n * <li>selected - Which User ID is selected.<\/li>\n * <li>include_selected - Always include the selected user ID in the dropdown. Default is false.<\/li>\n * <li>name - Default is 'user'. Name attribute of select element.<\/li>\n * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.<\/li>\n * <li>class - Class attribute of select element.<\/li>\n * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.<\/li>\n * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.<\/li>\n * <\/ol>\n *\n * @since 2.3.0\n * @uses $wpdb WordPress database object for queries\n *\n * @param string|array $args Optional. Override defaults.\n * @return string|null Null on display. String of HTML content on retrieve.\n *\/","file":"user.php","line":1019,"missingDoc":false,"filters":["'wp_dropdown_users'"],"uses":{"is_author":[1029],"get_query_var":[1029],"wp_parse_args":[1031],"extract":[1032],"wp_array_slice_assoc":[1034],"get_users":[1036],"esc_attr":[1040,1044],"selected":[1052,1059,1068],"esc_html":[1063,1070],"get_userdata":[1067],"count":[1039]},"used_by":[]},"validate_username":{"doc":"\/**\n * Checks whether an username is valid.\n *\n * @since 2.0.1\n * @uses apply_filters() Calls 'validate_username' hook on $valid check and $username as parameters\n *\n * @param string $username Username.\n * @return bool Whether username given is valid\n *\/","file":"user.php","line":1230,"missingDoc":false,"filters":["'validate_username'"],"uses":{"sanitize_user":[1231]},"used_by":[]},"wp_insert_user":{"doc":"\/**\n * Insert an user into the database.\n *\n * Can update a current user or insert a new user based on whether the user's ID\n * is present.\n *\n * Can be used to update the user's info (see below), set the user's role, and\n * set the user's preference on whether they want the rich editor on.\n *\n * Most of the $userdata array fields have filters associated with the values.\n * The exceptions are 'rich_editing', 'role', 'jabber', 'aim', 'yim',\n * 'user_registered', and 'ID'. The filters have the prefix 'pre_user_' followed\n * by the field name. An example using 'description' would have the filter\n * called, 'pre_user_description' that can be hooked into.\n *\n * The $userdata array can contain the following fields:\n * 'ID' - An integer that will be used for updating an existing user.\n * 'user_pass' - A string that contains the plain text password for the user.\n * 'user_login' - A string that contains the user's username for logging in.\n * 'user_nicename' - A string that contains a URL-friendly name for the user.\n *\t\tThe default is the user's username.\n * 'user_url' - A string containing the user's URL for the user's web site.\n * 'user_email' - A string containing the user's email address.\n * 'display_name' - A string that will be shown on the site. Defaults to user's\n *\t\tusername. It is likely that you will want to change this, for appearance.\n * 'nickname' - The user's nickname, defaults to the user's username.\n * 'first_name' - The user's first name.\n * 'last_name' - The user's last name.\n * 'description' - A string containing content about the user.\n * 'rich_editing' - A string for whether to enable the rich editor. False\n *\t\tif not empty.\n * 'user_registered' - The date the user registered. Format is 'Y-m-d H:i:s'.\n * 'role' - A string used to set the user's role.\n * 'jabber' - User's Jabber account.\n * 'aim' - User's AOL IM account.\n * 'yim' - User's Yahoo IM account.\n *\n * @since 2.0.0\n * @uses $wpdb WordPress database layer.\n * @uses apply_filters() Calls filters for most of the $userdata fields with the prefix 'pre_user'. See note above.\n * @uses do_action() Calls 'profile_update' hook when updating giving the user's ID\n * @uses do_action() Calls 'user_register' hook when creating a new user giving the user's ID\n *\n * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.\n * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not be created.\n *\/","file":"user.php","line":1282,"missingDoc":false,"filters":["'pre_user_login'","'pre_user_nicename'","'pre_user_url'","'pre_user_email'","'pre_user_nickname'","'pre_user_first_name'","'pre_user_last_name'","'pre_user_display_name'","'pre_user_description'","'profile_update'","'user_register'"],"uses":{"get_object_vars":[1286],"is_a":[1287,1285],"to_array":[1288],"extract":[1290],"wp_hash_password":[1300],"sanitize_user":[1303],"trim":[1307],"__":[1310,1313,1328],"username_exists":[1312],"sanitize_title":[1316],"defined":[1327],"email_exists":[1327],"sprintf":[1347],"_x":[1347],"preg_replace":[1369],"gmdate":[1375],"get_var":[1380,1386],"prepare":[1380,1386],"compact":[1392,1396,1399],"stripslashes_deep":[1393],"update":[1396],"insert":[1399],"update_user_meta":[1407],"_get_additional_user_keys":[1405],"set_role":[1411,1413],"get_option":[1413],"wp_cache_delete":[1415,1416]},"used_by":{"wp_update_user":[1478],"wp_create_user":[1512]}},"_get_additional_user_keys":{"doc":"\/**\n * Return a list of meta keys that wp_insert_user() is supposed to set.\n *\n * @since 3.3.0\n * @access private\n *\n * @param object $user WP_User instance.\n * @return array\n *\/","file":"user.php","line":1524,"missingDoc":false,"filters":[],"uses":{"array_merge":[1526],"array_keys":[1526],"_wp_get_user_contactmethods":[1526]},"used_by":{"wp_insert_user":[1405],"wp_update_user":[1461]}},"_wp_get_user_contactmethods":{"doc":"\/**\n * Set up the default contact methods.\n *\n * @since 2.9.0\n * @access private\n *\n * @param object $user User data object (optional).\n * @return array $user_contactmethods Array of contact methods and their labels.\n *\/","file":"user.php","line":1538,"missingDoc":false,"filters":["'user_contactmethods'"],"uses":{"__":[1540,1541,1542]},"used_by":{"_get_additional_user_keys":[1526]}},"WP_Widget::widget":{"doc":"\/** Echo the widget content.\n *\n * Subclasses should over-ride this function to generate their widget code.\n *\n * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.\n * @param array $instance The settings for the particular instance of the widget\n *\/","file":"widgets.php","line":44,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::update":{"doc":"\/** Update a particular instance.\n *\n * This function should check that $new_instance is set correctly.\n * The newly calculated value of $instance should be returned.\n * If \"false\" is returned, the instance won't be saved\/updated.\n *\n * @param array $new_instance New settings for this instance as input by the user via form()\n * @param array $old_instance Old settings for this instance\n * @return array Settings to save or bool false to cancel saving\n *\/","file":"widgets.php","line":58,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::form":{"doc":"\/** Echo the settings update form\n *\n * @param array $instance Current settings\n *\/","file":"widgets.php","line":66,"missingDoc":false,"filters":[],"uses":{"__":[67]},"used_by":[]},"WP_Widget::WP_Widget":{"doc":"\/**\n * PHP4 constructor\n *\/","file":"widgets.php","line":76,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::__construct":{"doc":"\/**\n * PHP5 constructor\n *\n * @param string $id_base Optional Base ID for the widget, lower case,\n * if left empty a portion of the widget's class name will be used. Has to be unique.\n * @param string $name Name for the widget displayed on the configuration page.\n * @param array $widget_options Optional Passed to wp_register_sidebar_widget()\n *\t - description: shown on the configuration page\n *\t - classname\n * @param array $control_options Optional Passed to wp_register_widget_control()\n *\t - width: required if more than 250px\n *\t - height: currently not used but may be needed in the future\n *\/","file":"widgets.php","line":93,"missingDoc":false,"filters":[],"uses":{"preg_replace":[94],"strtolower":[94,94],"get_class":[94],"wp_parse_args":[97,98]},"used_by":[]},"WP_Widget::get_field_name":{"doc":"\/**\n * Constructs name attributes for use in form() fields\n *\n * This function should be used in form() methods to create name attributes for fields to be saved by update()\n *\n * @param string $field_name Field name\n * @return string Name attribute for $field_name\n *\/","file":"widgets.php","line":109,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::get_field_id":{"doc":"\/**\n * Constructs id attributes for use in form() fields\n *\n * This function should be used in form() methods to create id attributes for fields to be saved by update()\n *\n * @param string $field_name Field name\n * @return string ID attribute for $field_name\n *\/","file":"widgets.php","line":121,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_register":{"doc":"","file":"widgets.php","line":127,"missingDoc":true,"filters":[],"uses":{"get_settings":[128],"_set":[134,144],"_register_one":[135,145],"is_numeric":[133],"array_keys":[132],"is_array":[131]},"used_by":[]},"WP_Widget::_set":{"doc":"","file":"widgets.php","line":149,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_display_callback":{"doc":"","file":"widgets.php","line":154,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_update_callback":{"doc":"","file":"widgets.php","line":158,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::_get_form_callback":{"doc":"","file":"widgets.php","line":162,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget::display_callback":{"doc":"\/** Generate the actual widget content.\n *\tJust finds the instance and calls widget().\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":169,"missingDoc":false,"filters":["'widget_display_callback'"],"uses":{"is_numeric":[170],"wp_parse_args":[173],"_set":[174],"get_settings":[175],"widget":[182],"array_key_exists":[177]},"used_by":[]},"WP_Widget::update_callback":{"doc":"\/** Deal with changed settings.\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":188,"missingDoc":false,"filters":["'widget_update_callback'"],"uses":{"is_numeric":[191],"wp_parse_args":[194],"get_settings":[195],"wp_get_sidebars_widgets":[201],"is_array":[217],"stripslashes_deep":[227],"_set":[228],"update":[232],"save_settings":[243]},"used_by":[]},"wp_get_sidebars_widgets":{"doc":"\/**\n * Retrieve full list of sidebars and their widgets.\n *\n * Will upgrade sidebar widget list, if needed. Will also save updated list, if\n * needed.\n *\n * @since 2.2.0\n * @access private\n *\n * @param bool $deprecated Not used (deprecated).\n * @return array Upgraded list of widgets to version 3 array format when called from the admin.\n *\/","file":"widgets.php","line":1007,"missingDoc":false,"filters":["'sidebars_widgets'"],"uses":{"_deprecated_argument":[1009],"get_option":[1017,1021],"is_admin":[1015],"is_array":[1024]},"used_by":{"WP_Widget::update_callback":[201],"dynamic_sidebar":[867],"is_active_widget":[936],"is_active_sidebar":[986],"_wp_sidebars_changed":[1168]}},"WP_Widget::form_callback":{"doc":"\/** Generate the control form.\n *\tDo NOT over-ride this function. *\/","file":"widgets.php","line":249,"missingDoc":false,"filters":["'widget_form_callback'","'in_widget_form'"],"uses":{"is_numeric":[250],"wp_parse_args":[253],"get_settings":[254],"_set":[258,261],"form":[270]},"used_by":[]},"WP_Widget::_register_one":{"doc":"\/** Helper function: Registers a single instance. *\/","file":"widgets.php","line":279,"missingDoc":false,"filters":[],"uses":{"wp_register_sidebar_widget":[280],"_get_display_callback":[280],"_register_widget_update_callback":[281],"_get_update_callback":[281],"_register_widget_form_callback":[282],"_get_form_callback":[282]},"used_by":[]},"wp_register_sidebar_widget":{"doc":"\/**\n * Register widget for use in sidebars.\n *\n * The default widget option is 'classname' that can be override.\n *\n * The function can also be used to unregister widgets when $output_callback\n * parameter is an empty string.\n *\n * @since 2.2.0\n *\n * @uses $wp_registered_widgets Uses stored registered widgets.\n * @uses $wp_register_widget_defaults Retrieves widget defaults.\n *\n * @param int|string $id Widget ID.\n * @param string $name Widget display title.\n * @param callback $output_callback Run when widget is called.\n * @param array|string $options Optional. Widget Options.\n * @param mixed $params,... Widget parameters to add to widget.\n * @return null Will return if $output_callback is empty after removing widget.\n *\/","file":"widgets.php","line":615,"missingDoc":false,"filters":["'wp_register_sidebar_widget'"],"uses":{"strtolower":[618],"_get_widget_id_base":[625],"in_array":[626],"is_callable":[626,646],"wp_parse_args":[637],"array_slice":[642],"func_get_args":[642],"array_merge":[644],"did_action":[646]},"used_by":{"WP_Widget::_register_one":[280],"wp_unregister_sidebar_widget":[705]}},"_register_widget_update_callback":{"doc":"","file":"widgets.php","line":774,"missingDoc":true,"filters":[],"uses":{"array_slice":[785],"func_get_args":[785],"array_merge":[788]},"used_by":{"WP_Widget::_register_one":[281]}},"_register_widget_form_callback":{"doc":"","file":"widgets.php","line":792,"missingDoc":true,"filters":[],"uses":{"strtolower":[795],"did_action":[802],"wp_parse_args":[806],"array_slice":[814],"func_get_args":[814],"array_merge":[816]},"used_by":{"WP_Widget::_register_one":[282]}},"WP_Widget::save_settings":{"doc":"","file":"widgets.php","line":285,"missingDoc":true,"filters":[],"uses":{"update_option":[287]},"used_by":[]},"WP_Widget::get_settings":{"doc":"","file":"widgets.php","line":290,"missingDoc":true,"filters":[],"uses":{"get_option":[291,294],"is_array":[296],"wp_convert_widget_settings":[301],"array_key_exists":[299]},"used_by":[]},"wp_convert_widget_settings":{"doc":"\/**\n * Convert the widget settings from single to multi-widget format.\n *\n * @since 2.8.0\n *\n * @return array\n *\/","file":"widgets.php","line":1071,"missingDoc":false,"filters":[],"uses":{"is_numeric":[1080],"array_keys":[1077],"get_option":[1092,1095],"is_admin":[1091,1111,1116],"is_array":[1100],"update_option":[1112,1117]},"used_by":{"WP_Widget::get_settings":[301]}},"WP_Widget_Factory::WP_Widget_Factory":{"doc":"","file":"widgets.php","line":319,"missingDoc":true,"filters":[],"uses":{"add_action":[320]},"used_by":[]},"WP_Widget_Factory::register":{"doc":"","file":"widgets.php","line":323,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget_Factory::unregister":{"doc":"","file":"widgets.php","line":327,"missingDoc":true,"filters":[],"uses":[],"used_by":[]},"WP_Widget_Factory::_register_widgets":{"doc":"","file":"widgets.php","line":332,"missingDoc":true,"filters":[],"uses":{"array_keys":[334,335],"array_map":[336],"in_array":[340],"_register":[345]},"used_by":[]},"unregister_widget":{"doc":"\/**\n * Unregister a widget\n *\n * Unregisters a WP_Widget widget. Useful for unregistering default widgets.\n * Run within a function hooked to the widgets_init action.\n *\n * @since 2.8.0\n *\n * @see WP_Widget\n * @see WP_Widget_Factory\n * @uses WP_Widget_Factory\n *\n * @param string $widget_class The name of a class that extends WP_Widget\n *\/","file":"widgets.php","line":448,"missingDoc":false,"filters":[],"uses":{"unregister":[451]},"used_by":[]},"register_sidebars":{"doc":"\/**\n * Creates multiple sidebars.\n *\n * If you wanted to quickly create multiple sidebars for a theme or internally.\n * This function will allow you to do so. If you don't pass the 'name' and\/or\n * 'id' in $args, then they will be built for you.\n *\n * The default for the name is \"Sidebar #\", with '#' being replaced with the\n * number the sidebar is currently when greater than one. If first sidebar, the\n * name will be just \"Sidebar\". The default for id is \"sidebar-\" followed by the\n * number the sidebar creation is currently at. If the id is provided, and multiple\n * sidebars are being defined, the id will have \"-2\" appended, and so on.\n *\n * @since 2.2.0\n *\n * @see register_sidebar() The second parameter is documented by register_sidebar() and is the same here.\n * @uses parse_str() Converts a string to an array to be used in the rest of the function.\n * @uses register_sidebar() Sends single sidebar information [name, id] to this\n *\tfunction to handle building the sidebar.\n *\n * @param int $number Number of sidebars to create.\n * @param string|array $args Builds Sidebar based off of 'name' and 'id' values.\n *\/","file":"widgets.php","line":477,"missingDoc":false,"filters":[],"uses":{"parse_str":[482],"is_string":[481],"sprintf":[488,488],"__":[488,490],"count":[500],"register_sidebar":[505]},"used_by":[]},"register_sidebar":{"doc":"\/**\n * Builds the definition for a single sidebar and returns the ID.\n *\n * Accepts either a string or an array and then parses that against a set\n * of default arguments for the new sidebar. WordPress will automatically\n * generate a sidebar ID and name based on the current number of registered\n * sidebars if those arguments are not included.\n *\n * When allowing for automatic generation of the name and ID parameters, keep\n * in mind that the incrementor for your sidebar can change over time depending\n * on what other plugins and themes are installed.\n *\n * If theme support for 'widgets' has not yet been added when this function is\n * called, it will be automatically enabled through the use of add_theme_support()\n *\n * Arguments passed as a string should be separated by '&':\n *\n * e.g. 'name=Sidebar&id=my_prefix_sidebar'\n *\n * The same arguments passed as an array:\n *\n * array(\n * 'name' => 'Sidebar',\n * 'id' => 'my_prefix_sidebar',\n * )\n *\n * Arguments:\n * name - The name or title of the sidebar displayed in the admin dashboard.\n * id - The unique identifier by which the sidebar will be called.\n * before_widget - HTML content that will be prepended to each widget's HTML output\n * when assigned to this sidebar.\n * after_widget - HTML content that will be appended to each widget's HTML output\n * when assigned to this sidebar.\n * before_title - HTML content that will be prepended to the sidebar title when displayed.\n * after_title - HTML content that will be appended to the sidebar title when displayed.\n *\n * @since 2.2.0\n * @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.\n * @uses add_theme_support() to ensure widget support has been added.\n *\n * @param string|array $args Arguments for the sidebar being registered.\n * @return string Sidebar ID added to $wp_registered_sidebars global.\n *\/","file":"widgets.php","line":552,"missingDoc":false,"filters":["'register_sidebar'"],"uses":{"count":[555],"sprintf":[558],"__":[558],"wp_parse_args":[568],"add_theme_support":[572]},"used_by":{"register_sidebars":[505]}},"unregister_sidebar":{"doc":"\/**\n * Removes a sidebar from the list.\n *\n * @since 2.2.0\n *\n * @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.\n *\n * @param string $name The ID of the sidebar when it was added.\n *\/","file":"widgets.php","line":588,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"_get_widget_id_base":{"doc":"\/**\n * Private\n *\/","file":"widgets.php","line":1154,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1155]},"used_by":{"wp_register_sidebar_widget":[625],"wp_register_widget_control":[731],"is_active_widget":[945]}},"wp_widget_description":{"doc":"\/**\n * Retrieve description for widget.\n *\n * When registering widgets, the options can also include 'description' that\n * describes the widget for display on the widget administration panel or\n * in the theme.\n *\n * @since 2.5.0\n *\n * @param int|string $id Widget ID.\n * @return string Widget description, if available. Null on failure to retrieve description.\n *\/","file":"widgets.php","line":664,"missingDoc":false,"filters":[],"uses":{"is_scalar":[665],"esc_html":[671]},"used_by":[]},"wp_sidebar_description":{"doc":"\/**\n * Retrieve description for a sidebar.\n *\n * When registering sidebars a 'description' parameter can be included that\n * describes the sidebar for display on the widget administration panel.\n *\n * @since 2.9.0\n *\n * @param int|string $id sidebar ID.\n * @return string Sidebar description, if available. Null on failure to retrieve description.\n *\/","file":"widgets.php","line":685,"missingDoc":false,"filters":[],"uses":{"is_scalar":[686],"esc_html":[692]},"used_by":[]},"wp_register_widget_control":{"doc":"\/**\n * Registers widget control callback for customizing options.\n *\n * The options contains the 'height', 'width', and 'id_base' keys. The 'height'\n * option is never used. The 'width' option is the width of the fully expanded\n * control form, but try hard to use the default width. The 'id_base' is for\n * multi-widgets (widgets which allow multiple instances such as the text\n * widget), an id_base must be provided. The widget id will end up looking like\n * {$id_base}-{$unique_number}.\n *\n * @since 2.2.0\n *\n * @param int|string $id Sidebar ID.\n * @param string $name Sidebar display name.\n * @param callback $control_callback Run when sidebar is displayed.\n * @param array|string $options Optional. Widget options. See above long description.\n * @param mixed $params,... Optional. Additional parameters to add to widget.\n *\/","file":"widgets.php","line":727,"missingDoc":false,"filters":[],"uses":{"strtolower":[730],"_get_widget_id_base":[731],"in_array":[739],"is_callable":[739],"did_action":[746],"wp_parse_args":[750],"array_slice":[758],"func_get_args":[758],"array_merge":[760]},"used_by":{"wp_unregister_widget_control":[830]}},"is_dynamic_sidebar":{"doc":"\/**\n * Whether the dynamic sidebar is enabled and used by theme.\n *\n * @since 2.2.0\n *\n * @return bool True, if using widgets. False, if not using widgets.\n *\/","file":"widgets.php","line":963,"missingDoc":false,"filters":[],"uses":{"get_option":[965],"array_key_exists":[969],"count":[967]},"used_by":[]},"is_active_sidebar":{"doc":"\/**\n * Whether a sidebar is in use.\n *\n * @since 2.8\n *\n * @param mixed $index Sidebar name, id or number to check.\n * @return bool true if the sidebar is in use, false otherwise.\n *\/","file":"widgets.php","line":984,"missingDoc":false,"filters":[],"uses":{"is_int":[985],"sanitize_title":[985],"wp_get_sidebars_widgets":[986]},"used_by":[]},"wp_set_sidebars_widgets":{"doc":"\/**\n * Set the sidebar widget option to update sidebars.\n *\n * @since 2.2.0\n * @access private\n *\n * @param array $sidebars_widgets Sidebar widgets and their settings.\n *\/","file":"widgets.php","line":1039,"missingDoc":false,"filters":[],"uses":{"update_option":[1042]},"used_by":{"retrieve_widgets":[1267]}},"wp_get_widget_defaults":{"doc":"\/**\n * Retrieve default registered sidebars list.\n *\n * @since 2.2.0\n * @access private\n *\n * @return array\n *\/","file":"widgets.php","line":1053,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"the_widget":{"doc":"\/**\n * Output an arbitrary widget as a template tag\n *\n * @since 2.8\n *\n * @param string $widget the widget's PHP class name (see default-widgets.php)\n * @param array $instance the widget's instance settings\n * @param array $args the widget's sidebar args\n * @return void\n **\/","file":"widgets.php","line":1132,"missingDoc":false,"filters":["'the_widget'"],"uses":{"is_a":[1136],"sprintf":[1139],"wp_parse_args":[1142,1143],"_set":[1147],"widget":[1148]},"used_by":[]},"_wp_sidebars_changed":{"doc":"\/**\n * Handle sidebars config after theme change\n *\n * @access private\n * @since 3.3.0\n *\/","file":"widgets.php","line":1164,"missingDoc":false,"filters":[],"uses":{"wp_get_sidebars_widgets":[1168],"is_array":[1167],"retrieve_widgets":[1170]},"used_by":[]},"retrieve_widgets":{"doc":"","file":"widgets.php","line":1174,"missingDoc":true,"filters":[],"uses":{"array_keys":[1177,1201],"get_theme_mod":[1180],"remove_theme_mod":[1184],"substr":[1187],"in_array":[1190,1255],"sort":[1202,1203],"array_shift":[1216],"is_array":[1227,1181,1236],"array_merge":[1246,1266],"preg_replace":[1258],"wp_set_sidebars_widgets":[1267]},"used_by":{"_wp_sidebars_changed":[1170]}},"wpdb::__construct":{"doc":"\/**\n * Connects to the database server and selects a database\n *\n * PHP5 style constructor for compatibility with PHP5. Does\n * the actual setting up of the class properties and connection\n * to the database.\n *\n * @link http:\/\/core.trac.wordpress.org\/ticket\/3354\n * @since 2.0.8\n *\n * @param string $dbuser MySQL database user\n * @param string $dbpassword MySQL database password\n * @param string $dbname MySQL database name\n * @param string $dbhost MySQL database host\n *\/","file":"wp-db.php","line":536,"missingDoc":false,"filters":[],"uses":{"register_shutdown_function":[537],"show_errors":[540],"init_charset":[542],"db_connect":[549]},"used_by":[]},"wpdb::__destruct":{"doc":"\/**\n * PHP5 style destructor and will run when database object is destroyed.\n *\n * @see wpdb::__construct()\n * @since 2.0.8\n * @return bool true\n *\/","file":"wp-db.php","line":559,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__get":{"doc":"\/**\n * PHP5 style magic getter, used to lazy-load expensive data.\n *\n * @since 3.5.0\n *\n * @param string $name The private member to get, and optionally process\n * @return mixed The private member\n *\/","file":"wp-db.php","line":571,"missingDoc":false,"filters":[],"uses":{"load_col_info":[573]},"used_by":[]},"wpdb::__set":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to set\n * @param mixed $value The value to set\n *\/","file":"wp-db.php","line":586,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__isset":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to check\n *\n * @return bool If the member is set or not\n *\/","file":"wp-db.php","line":599,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::__unset":{"doc":"\/**\n * Magic function, for backwards compatibility\n *\n * @since 3.5.0\n *\n * @param string $name The private member to unset\n *\/","file":"wp-db.php","line":610,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::init_charset":{"doc":"\/**\n * Set $this->charset and $this->collate\n *\n * @since 3.1.0\n *\/","file":"wp-db.php","line":619,"missingDoc":false,"filters":[],"uses":{"defined":[622,626,630],"function_exists":[620],"is_multisite":[620]},"used_by":[]},"wpdb::set_charset":{"doc":"\/**\n * Sets the connection's character set.\n *\n * @since 3.1.0\n *\n * @param resource $dbh The resource given by mysql_connect\n * @param string $charset The character set (optional)\n * @param string $collate The collation (optional)\n *\/","file":"wp-db.php","line":643,"missingDoc":false,"filters":[],"uses":{"mysql_set_charset":[650],"prepare":[653,655],"mysql_query":[656],"function_exists":[649],"has_cap":[649,648]},"used_by":[]},"wpdb::set_prefix":{"doc":"\/**\n * Sets the table prefix for the WordPress tables.\n *\n * @since 2.5.0\n *\n * @param string $prefix Alphanumeric name for the new prefix.\n * @param bool $set_table_names Optional. Whether the table names, e.g. wpdb::$posts, should be updated or not.\n * @return string|WP_Error Old prefix or WP_Error on error\n *\/","file":"wp-db.php","line":670,"missingDoc":false,"filters":[],"uses":{"preg_match":[672],"is_multisite":[675,686],"tables":[683,691,694],"get_blog_prefix":[689]},"used_by":[]},"wpdb::set_blog_id":{"doc":"\/**\n * Sets blog id.\n *\n * @since 3.0.0\n * @access public\n * @param int $blog_id\n * @param int $site_id Optional.\n * @return string previous blog id\n *\/","file":"wp-db.php","line":709,"missingDoc":false,"filters":[],"uses":{"get_blog_prefix":[716],"tables":[718,721]},"used_by":[]},"wpdb::get_blog_prefix":{"doc":"\/**\n * Gets blog prefix.\n *\n * @uses is_multisite()\n * @since 3.0.0\n * @param int $blog_id Optional.\n * @return string Blog prefix.\n *\/","file":"wp-db.php","line":735,"missingDoc":false,"filters":[],"uses":{"defined":[740],"is_multisite":[736]},"used_by":[]},"wpdb::tables":{"doc":"\/**\n * Returns an array of WordPress tables.\n *\n * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to\n * override the WordPress users and usermeta tables that would otherwise\n * be determined by the prefix.\n *\n * The scope argument can take one of the following:\n *\n * 'all' - returns 'all' and 'global' tables. No old tables are returned.\n * 'blog' - returns the blog-level tables for the queried blog.\n * 'global' - returns the global tables for the installation, returning multisite tables only if running multisite.\n * 'ms_global' - returns the multisite global tables, regardless if current installation is multisite.\n * 'old' - returns tables which are deprecated.\n *\n * @since 3.0.0\n * @uses wpdb::$tables\n * @uses wpdb::$old_tables\n * @uses wpdb::$global_tables\n * @uses wpdb::$ms_global_tables\n * @uses is_multisite()\n *\n * @param string $scope Optional. Can be all, global, ms_global, blog, or old tables. Defaults to all.\n * @param bool $prefix Optional. Whether to include table prefixes. Default true. If blog\n * \tprefix is requested, then the custom users and usermeta tables will be mapped.\n * @param int $blog_id Optional. The blog_id to prefix. Defaults to wpdb::$blogid. Used only when prefix is requested.\n * @return array Table names. When a prefix is requested, the key is the unprefixed table name.\n *\/","file":"wp-db.php","line":777,"missingDoc":false,"filters":[],"uses":{"array_merge":[780,782,790,808],"is_multisite":[781,789],"get_blog_prefix":[806],"in_array":[810],"defined":[817,820]},"used_by":[]},"wpdb::select":{"doc":"\/**\n * Selects a database using the current database connection.\n *\n * The database name will be changed based on the current database\n * connection. On failure, the execution will bail and display an DB error.\n *\n * @since 0.71\n *\n * @param string $db MySQL database name\n * @param resource $dbh Optional link identifier.\n * @return null Always null.\n *\/","file":"wp-db.php","line":839,"missingDoc":false,"filters":[],"uses":{"is_null":[840],"wp_load_translations_early":[845],"bail":[846],"sprintf":[846],"__":[846],"htmlspecialchars":[853,853],"mysql_select_db":[843]},"used_by":[]},"wpdb::_weak_escape":{"doc":"\/**\n * Weak escape, using addslashes()\n *\n * @see addslashes()\n * @since 2.8.0\n * @access private\n *\n * @param string $string\n * @return string\n *\/","file":"wp-db.php","line":868,"missingDoc":false,"filters":[],"uses":{"addslashes":[869]},"used_by":[]},"wpdb::_real_escape":{"doc":"\/**\n * Real escape, using mysql_real_escape_string() or addslashes()\n *\n * @see mysql_real_escape_string()\n * @see addslashes()\n * @since 2.8.0\n * @access private\n *\n * @param string $string to escape\n * @return string escaped\n *\/","file":"wp-db.php","line":883,"missingDoc":false,"filters":[],"uses":{"mysql_real_escape_string":[885],"addslashes":[887]},"used_by":[]},"wpdb::_escape":{"doc":"\/**\n * Escape data. Works on arrays.\n *\n * @uses wpdb::_escape()\n * @uses wpdb::_real_escape()\n * @since 2.8.0\n * @access private\n *\n * @param string|array $data\n * @return string|array escaped\n *\/","file":"wp-db.php","line":901,"missingDoc":false,"filters":[],"uses":{"_escape":[905],"_real_escape":[907,910],"is_array":[904,902]},"used_by":[]},"wpdb::escape":{"doc":"\/**\n * Escapes content for insertion into the database using addslashes(), for security.\n *\n * Works on arrays.\n *\n * @since 0.71\n * @param string|array $data to escape\n * @return string|array escaped as query safe string\n *\/","file":"wp-db.php","line":925,"missingDoc":false,"filters":[],"uses":{"escape":[929],"_weak_escape":[931,934],"is_array":[928,926]},"used_by":[]},"wpdb::escape_by_ref":{"doc":"\/**\n * Escapes content by reference for insertion into the database, for security\n *\n * @uses wpdb::_real_escape()\n * @since 2.3.0\n * @param string $string to escape\n * @return void\n *\/","file":"wp-db.php","line":948,"missingDoc":false,"filters":[],"uses":{"_real_escape":[950],"is_float":[949]},"used_by":[]},"wpdb::prepare":{"doc":"\/**\n * Prepares a SQL query for safe execution. Uses sprintf()-like syntax.\n *\n * The following directives can be used in the query format string:\n * %d (integer)\n * %f (float)\n * %s (string)\n * %% (literal percentage sign - no argument needed)\n *\n * All of %d, %f, and %s are to be left unquoted in the query string and they need an argument passed for them.\n * Literals (%) as parts of the query must be properly written as %%.\n *\n * This function only supports a small subset of the sprintf syntax; it only supports %d (integer), %f (float), and %s (string).\n * Does not support sign, padding, alignment, width or precision specifiers.\n * Does not support argument numbering\/swapping.\n *\n * May be called like {@link http:\/\/php.net\/sprintf sprintf()} or like {@link http:\/\/php.net\/vsprintf vsprintf()}.\n *\n * Both %d and %s should be left unquoted in the query string.\n *\n * <code>\n * wpdb::prepare( \"SELECT * FROM `table` WHERE `column` = %s AND `field` = %d\", 'foo', 1337 )\n * wpdb::prepare( \"SELECT DATE_FORMAT(`field`, '%%c') FROM `table` WHERE `column` = %s\", 'foo' );\n * <\/code>\n *\n * @link http:\/\/php.net\/sprintf Description of syntax.\n * @since 2.3.0\n *\n * @param string $query Query statement with sprintf()-like placeholders\n * @param array|mixed $args The array of variables to substitute into the query's placeholders if being called like\n * \t{@link http:\/\/php.net\/vsprintf vsprintf()}, or the first variable to substitute into the query's placeholders if\n * \tbeing called like {@link http:\/\/php.net\/sprintf sprintf()}.\n * @param mixed $args,... further variables to substitute into the query's placeholders if being called like\n * \t{@link http:\/\/php.net\/sprintf sprintf()}.\n * @return null|false|string Sanitized query string, null if there is no query, false if there is an error and string\n * \tif there was something to prepare\n *\/","file":"wp-db.php","line":990,"missingDoc":false,"filters":[],"uses":{"is_null":[991],"func_get_args":[994],"array_shift":[995],"is_array":[997],"str_replace":[999,1000],"preg_replace":[1001,1002],"array_walk":[1003],"vsprintf":[1004]},"used_by":[]},"wpdb::print_error":{"doc":"\/**\n * Print SQL\/DB error.\n *\n * @since 0.71\n * @global array $EZSQL_ERROR Stores error information of query and error string\n *\n * @param string $str The error to display\n * @return bool False if the showing of errors is disabled.\n *\/","file":"wp-db.php","line":1016,"missingDoc":false,"filters":[],"uses":{"mysql_error":[1020],"wp_load_translations_early":[1026],"sprintf":[1029,1031],"__":[1029,1031],"get_caller":[1028],"error_log":[1033,1043],"defined":[1042,1044],"wp_die":[1045],"htmlspecialchars":[1047,1048],"is_multisite":[1040]},"used_by":[]},"wpdb::show_errors":{"doc":"\/**\n * Enables showing of database errors.\n *\n * This function should be used only to enable showing of errors.\n * wpdb::hide_errors() should be used instead for hiding of errors. However,\n * this function can be used to enable and disable showing of database\n * errors.\n *\n * @since 0.71\n * @see wpdb::hide_errors()\n *\n * @param bool $show Whether to show or hide errors\n * @return bool Old value for showing errors.\n *\/","file":"wp-db.php","line":1071,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::hide_errors":{"doc":"\/**\n * Disables showing of database errors.\n *\n * By default database errors are not shown.\n *\n * @since 0.71\n * @see wpdb::show_errors()\n *\n * @return bool Whether showing of errors was active\n *\/","file":"wp-db.php","line":1087,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::suppress_errors":{"doc":"\/**\n * Whether to suppress database errors.\n *\n * By default database errors are suppressed, with a simple\n * call to this function they can be enabled.\n *\n * @since 2.5.0\n * @see wpdb::hide_errors()\n * @param bool $suppress Optional. New value. Defaults to true.\n * @return bool Old value\n *\/","file":"wp-db.php","line":1104,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::flush":{"doc":"\/**\n * Kill cached query results.\n *\n * @since 0.71\n * @return void\n *\/","file":"wp-db.php","line":1116,"missingDoc":false,"filters":[],"uses":{"mysql_free_result":[1122],"is_resource":[1121]},"used_by":[]},"wpdb::db_connect":{"doc":"\/**\n * Connect to and select database\n *\n * @since 3.0.0\n *\/","file":"wp-db.php","line":1130,"missingDoc":false,"filters":[],"uses":{"defined":[1134,1135],"mysql_connect":[1138,1140],"wp_load_translations_early":[1144],"bail":[1145],"sprintf":[1145],"__":[1145],"htmlspecialchars":[1154],"set_charset":[1159],"select":[1163]},"used_by":[]},"wpdb::query":{"doc":"\/**\n * Perform a MySQL database query, using current database connection.\n *\n * More information can be found on the codex page.\n *\n * @since 0.71\n *\n * @param string $query Database query\n * @return int|false Number of rows affected\/selected or false on error\n *\/","file":"wp-db.php","line":1176,"missingDoc":false,"filters":["'query'"],"uses":{"flush":[1184],"timer_start":[1193],"defined":[1192,1198],"mysql_query":[1195],"timer_stop":[1199],"get_caller":[1199],"print_error":[1203],"mysql_error":[1202],"preg_match":[1209,1212,1207],"mysql_affected_rows":[1210],"mysql_insert_id":[1213],"mysql_fetch_object":[1219]},"used_by":[]},"wpdb::insert":{"doc":"\/**\n * Insert a row into a table.\n *\n * <code>\n * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 'bar' ) )\n * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) )\n * <\/code>\n *\n * @since 2.5.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows inserted, or false on error.\n *\/","file":"wp-db.php","line":1252,"missingDoc":false,"filters":[],"uses":{"_insert_replace_helper":[1253]},"used_by":[]},"wpdb::replace":{"doc":"\/**\n * Replace a row into a table.\n *\n * <code>\n * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 'bar' ) )\n * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) )\n * <\/code>\n *\n * @since 3.0.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows affected, or false on error.\n *\/","file":"wp-db.php","line":1275,"missingDoc":false,"filters":[],"uses":{"_insert_replace_helper":[1276]},"used_by":[]},"wpdb::_insert_replace_helper":{"doc":"\/**\n * Helper function for insert and replace.\n *\n * Runs an insert or replace query based on $type argument.\n *\n * @access private\n * @since 3.0.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT.\n * @return int|false The number of rows affected, or false on error.\n *\/","file":"wp-db.php","line":1297,"missingDoc":false,"filters":[],"uses":{"in_array":[1298],"strtoupper":[1298],"array_keys":[1301],"array_shift":[1305],"implode":[1312,1312],"query":[1313],"prepare":[1313]},"used_by":[]},"wpdb::update":{"doc":"\/**\n * Update a row in the table\n *\n * <code>\n * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 'bar' ), array( 'ID' => 1 ) )\n * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) )\n * <\/code>\n *\n * @since 2.5.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $data Data to update (in column => value pairs). Both $data columns and $data values should be \"raw\" (neither should be SQL escaped).\n * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be \"raw\".\n * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data.\n * \tA format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings.\n * @return int|false The number of rows updated, or false on error.\n *\/","file":"wp-db.php","line":1337,"missingDoc":false,"filters":[],"uses":{"is_array":[1338,1338],"array_shift":[1345,1356],"array_keys":[1343,1354],"implode":[1364,1364],"query":[1365],"prepare":[1365],"array_merge":[1365],"array_values":[1365,1365]},"used_by":[]},"wpdb::delete":{"doc":"\/**\n * Delete a row in the table\n *\n * <code>\n * wpdb::delete( 'table', array( 'ID' => 1 ) )\n * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) )\n * <\/code>\n *\n * @since 3.4.0\n * @see wpdb::prepare()\n * @see wpdb::$field_types\n * @see wp_set_wpdb_vars()\n *\n * @param string $table table name\n * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be \"raw\".\n * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types.\n * @return int|false The number of rows updated, or false on error.\n *\/","file":"wp-db.php","line":1386,"missingDoc":false,"filters":[],"uses":{"is_array":[1387],"array_shift":[1396],"array_keys":[1394],"implode":[1406],"query":[1407],"prepare":[1407]},"used_by":[]},"wpdb::get_var":{"doc":"\/**\n * Retrieve one variable from the database.\n *\n * Executes a SQL query and returns the value from the SQL result.\n * If the SQL result contains more than one column and\/or more than one row, this function returns the value in the column and row specified.\n * If $query is null, this function returns the value in the specified column and row from the previous SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query.\n * @param int $x Optional. Column of value to return. Indexed from 0.\n * @param int $y Optional. Row of value to return. Indexed from 0.\n * @return string|null Database query result (as string), or null on failure\n *\/","file":"wp-db.php","line":1425,"missingDoc":false,"filters":[],"uses":{"query":[1428],"array_values":[1432],"get_object_vars":[1432]},"used_by":[]},"wpdb::get_row":{"doc":"\/**\n * Retrieve one row from the database.\n *\n * Executes a SQL query and returns the row from the SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query SQL query.\n * @param string $output Optional. one of ARRAY_A | ARRAY_N | OBJECT constants. Return an associative array (column => value, ...),\n * \ta numerically indexed array (0 => value, ...) or an object ( ->column = value ), respectively.\n * @param int $y Optional. Row to return. Indexed from 0.\n * @return mixed Database query result in format specified by $output or null on failure\n *\/","file":"wp-db.php","line":1452,"missingDoc":false,"filters":[],"uses":{"query":[1455],"get_object_vars":[1465,1467],"array_values":[1467],"print_error":[1469]},"used_by":[]},"wpdb::get_col":{"doc":"\/**\n * Retrieve one column from the database.\n *\n * Executes a SQL query and returns the column from the SQL result.\n * If the SQL result contains more than one column, this function returns the column specified.\n * If $query is null, this function returns the specified column from the previous SQL result.\n *\n * @since 0.71\n *\n * @param string|null $query Optional. SQL query. Defaults to previous query.\n * @param int $x Optional. Column to return. Indexed from 0.\n * @return array Database query result. Array indexed from 0 by SQL result row number.\n *\/","file":"wp-db.php","line":1486,"missingDoc":false,"filters":[],"uses":{"query":[1488],"count":[1492],"get_var":[1493]},"used_by":[]},"wpdb::get_results":{"doc":"\/**\n * Retrieve an entire SQL result set from the database (i.e., many rows)\n *\n * Executes a SQL query and returns the entire SQL result.\n *\n * @since 0.71\n *\n * @param string $query SQL query.\n * @param string $output Optional. Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants. With one of the first three, return an array of rows indexed from 0 by SQL result row number.\n * \tEach row is an associative array (column => value, ...), a numerically indexed array (0 => value, ...), or an object. ( ->column = value ), respectively.\n * \tWith OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded.\n * @return mixed Database query results\n *\/","file":"wp-db.php","line":1511,"missingDoc":false,"filters":[],"uses":{"query":[1515],"get_object_vars":[1527,1539,1542],"array_shift":[1528],"array_values":[1539]},"used_by":[]},"wpdb::load_col_info":{"doc":"\/**\n * Load the column metadata from the last query.\n *\n * @since 3.5.0\n *\n * @access protected\n *\/","file":"wp-db.php","line":1558,"missingDoc":false,"filters":[],"uses":{"mysql_num_fields":[1562],"mysql_fetch_field":[1563]},"used_by":[]},"wpdb::get_col_info":{"doc":"\/**\n * Retrieve column metadata from the last query.\n *\n * @since 0.71\n *\n * @param string $info_type Optional. Type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill\n * @param int $col_offset Optional. 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type\n * @return mixed Column Results\n *\/","file":"wp-db.php","line":1576,"missingDoc":false,"filters":[],"uses":{"load_col_info":[1577]},"used_by":[]},"wpdb::timer_start":{"doc":"\/**\n * Starts the timer, for debugging purposes.\n *\n * @since 1.5.0\n *\n * @return true\n *\/","file":"wp-db.php","line":1601,"missingDoc":false,"filters":[],"uses":{"microtime":[1602]},"used_by":[]},"wpdb::timer_stop":{"doc":"\/**\n * Stops the debugging timer.\n *\n * @since 1.5.0\n *\n * @return float Total time spent on the query, in seconds\n *\/","file":"wp-db.php","line":1613,"missingDoc":false,"filters":[],"uses":{"microtime":[1614]},"used_by":[]},"wpdb::bail":{"doc":"\/**\n * Wraps errors in a nice header and footer and dies.\n *\n * Will not die if wpdb::$show_errors is false.\n *\n * @since 1.5.0\n *\n * @param string $message The Error message\n * @param string $error_code Optional. A Computer readable string to identify the error.\n * @return false|void\n *\/","file":"wp-db.php","line":1628,"missingDoc":false,"filters":[],"uses":{"class_exists":[1630],"wp_die":[1636]},"used_by":[]},"wpdb::check_database_version":{"doc":"\/**\n * Whether MySQL database is at least the required minimum version.\n *\n * @since 2.5.0\n * @uses $wp_version\n * @uses $required_mysql_version\n *\n * @return WP_Error\n *\/","file":"wp-db.php","line":1648,"missingDoc":false,"filters":[],"uses":{"sprintf":[1652],"__":[1652],"version_compare":[1651],"db_version":[1651]},"used_by":[]},"wpdb::supports_collation":{"doc":"\/**\n * Whether the database supports collation.\n *\n * Called when WordPress is generating the table scheme.\n *\n * @since 2.5.0\n * @deprecated 3.5.0\n * @deprecated Use wpdb::has_cap( 'collation' )\n *\n * @return bool True if collation is supported, false if version does not\n *\/","file":"wp-db.php","line":1666,"missingDoc":false,"filters":[],"uses":{"_deprecated_function":[1667],"has_cap":[1668]},"used_by":[]},"wpdb::get_charset_collate":{"doc":"\/**\n * The database character collate.\n *\n * @since 3.5.0\n *\n * @return string The database character collate.\n *\/","file":"wp-db.php","line":1678,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"wpdb::has_cap":{"doc":"\/**\n * Determine if a database supports a particular feature\n *\n * @since 2.7.0\n * @see wpdb::db_version()\n *\n * @param string $db_cap the feature\n * @return bool\n *\/","file":"wp-db.php","line":1698,"missingDoc":false,"filters":[],"uses":{"db_version":[1699],"strtolower":[1701],"version_compare":[1705,1707]},"used_by":[]},"wpdb::get_caller":{"doc":"\/**\n * Retrieve the name of the function that called wpdb.\n *\n * Searches up the list of functions until it reaches\n * the one that would most logically had called this method.\n *\n * @since 2.5.0\n *\n * @return string The name of the calling function\n *\/","file":"wp-db.php","line":1723,"missingDoc":false,"filters":[],"uses":{"wp_debug_backtrace_summary":[1724]},"used_by":[]},"wpdb::db_version":{"doc":"\/**\n * The database version number.\n *\n * @since 2.7.0\n *\n * @return false|string false on failure, version number on success\n *\/","file":"wp-db.php","line":1734,"missingDoc":false,"filters":[],"uses":{"preg_replace":[1735],"mysql_get_server_info":[1735]},"used_by":[]},"WP_Text_Diff_Renderer_Table::__construct":{"doc":"\/**\n * Constructor - Call parent constructor with params array.\n *\n * This will set class properties based on the key value pairs in the array.\n *\n * @since 2.6.0\n *\n * @param array $params\n *\/","file":"wp-diff.php","line":71,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_startBlock":{"doc":"\/**\n * @ignore\n *\n * @param string $header\n * @return string\n *\/","file":"wp-diff.php","line":81,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_lines":{"doc":"\/**\n * @ignore\n *\n * @param array $lines\n * @param string $prefix\n *\/","file":"wp-diff.php","line":91,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::addedLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":100,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::deletedLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":110,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::contextLine":{"doc":"\/**\n * @ignore\n *\n * @param string $line HTML-escape the value.\n * @return string\n *\/","file":"wp-diff.php","line":120,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::emptyLine":{"doc":"\/**\n * @ignore\n *\n * @return string\n *\/","file":"wp-diff.php","line":129,"missingDoc":false,"filters":[],"uses":[],"used_by":[]},"WP_Text_Diff_Renderer_Table::_added":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":141,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[145],"emptyLine":[146],"addedLine":[146]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_deleted":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":159,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[163],"deletedLine":[164],"emptyLine":[164]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_context":{"doc":"\/**\n * @ignore\n * @access private\n *\n * @param array $lines\n * @param bool $encode\n * @return string\n *\/","file":"wp-diff.php","line":177,"missingDoc":false,"filters":[],"uses":{"htmlspecialchars":[181],"contextLine":[183,183]},"used_by":[]},"WP_Text_Diff_Renderer_Table::_changed":{"doc":"\/**\n * Process changed lines to do word-by-word diffs for extra highlighting.\n *\n * (TRAC style) sometimes these lines can actually be deleted or added rows.\n * We do additional processing to figure that out\n *\n * @access private\n * @since 2.6.0\n *\n * @param array $orig\n * @param array $final\n * @return string\n *\/","file":"wp-diff.php","line":201,"missingDoc":false,"filters":[],"uses":{"interleave_changed_lines":[211],"render":[222],"strlen":[227,230],"strip_tags":[227,230],"join":[227],"preg_match_all":[225],"preg_replace":[237,238],"is_numeric":[219,219],"htmlspecialchars":[251,258],"_added":[263],"_deleted":[265],"deletedLine":[267],"addedLine":[267],"array_keys":[242]},"used_by":[]},"WP_Text_Diff_Renderer_Table::interleave_changed_lines":{"doc":"\/**\n * Takes changed blocks and matches which rows in orig turned into which rows in final.\n *\n * Returns\n *\t*_matches ( which rows match with which )\n *\t*_rows ( order of rows in each column interleaved with blank rows as\n *\t\tnecessary )\n *\n * @since 2.6.0\n *\n * @param unknown_type $orig\n * @param unknown_type $final\n * @return unknown\n *\/","file":"wp-diff.php","line":288,"missingDoc":false,"filters":[],"uses":{"compute_string_distance":[294],"array_keys":[293,292,332,333],"asort":[297],"explode":[303],"ksort":[328,329],"array_search":[338,339],"array_splice":[342,346,350],"count":[355,355],"array_push":[358,362]},"used_by":[]},"WP_Text_Diff_Renderer_Table::compute_string_distance":{"doc":"\/**\n * Computes a number that is intended to reflect the \"distance\" between two strings.\n *\n * @since 2.6.0\n *\n * @param string $string1\n * @param string $string2\n * @return int\n *\/","file":"wp-diff.php","line":419,"missingDoc":false,"filters":[],"uses":{"count_chars":[421,422],"array_sum":[425],"array_map":[425],"strlen":[432]},"used_by":[]},"WP_Text_Diff_Renderer_Table::difference":{"doc":"\/**\n * @ignore\n * @since 2.6.0\n *\n * @param int $a\n * @param int $b\n * @return int\n *\/","file":"wp-diff.php","line":443,"missingDoc":false,"filters":[],"uses":{"abs":[444]},"used_by":[]},"WP_Text_Diff_Renderer_inline::_splitOnWords":{"doc":"\/**\n * @ignore\n * @since 2.6.0\n *\n * @param string $string\n * @param string $newlineEscape\n * @return string\n *\/","file":"wp-diff.php","line":465,"missingDoc":false,"filters":[],"uses":{"str_replace":[466,468],"preg_split":[467]},"used_by":[]}} \ No newline at end of file diff --git a/parse.php b/parse.php old mode 100755 new mode 100644 index 82ad5026a..b4d2c512a --- a/parse.php +++ b/parse.php @@ -1,16 +1,19 @@ <?php -require dirname(__FILE__) . '/PHP-Parser/lib/PHPParser/Autoloader.php'; -PHPParser_Autoloader::register(); -require dirname(__FILE__) . '/library/WP/NodeVisitor.php'; +require 'vendor/autoload.php'; -$wp_dir = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'trunk-git' . DIRECTORY_SEPARATOR . 'wp-includes'; +use phpDocumentor\Reflection\FileReflector; + +if ($_SERVER['argc'] < 2) + die("Please provide a directory to scan.\n"); + +$wp_dir = $_SERVER['argv'][1]; function get_wp_files($directory) { $iterableFiles = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($directory) - ); - $files = array(); + ); + $files = array(); try { foreach( $iterableFiles as $file ) { if ($file->getExtension() !== 'php') @@ -29,42 +32,30 @@ function get_wp_files($directory) { return $files; } -function parse_files($files) { - header('Content-Type: text/plain'); +function parse_files($files, $root) { + $functions = array(); - $parser = new PHPParser_Parser(new PHPParser_Lexer); - $repository = new QP_Repo_Functions; - $filters = new QP_Repo_Filters; + foreach ($files as $filename) { + $file = new FileReflector($filename); - foreach ($files as $file) { - $code = file_get_contents($file); - $file = str_replace($wp_dir . DIRECTORY_SEPARATOR, '', $file); - $file = str_replace(DIRECTORY_SEPARATOR, '/', $file); - try { - $stmts = $parser->parse($code); - } - catch (PHPParser_Error $e) { - echo $file . "\n"; - echo $e->getMessage(); - die(); - } + $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); + $file->setFilename($path); - $traverser = new PHPParser_NodeTraverser; - $visitor = new QP_NodeVisitor($file, $repository, $filters); - $traverser->addVisitor($visitor); - $stmts = $traverser->traverse($stmts); - } + $file->process(); - $functions = array_filter($repository->functions, function ($details) { - // Built-in function - return !empty($details->file) || !empty($details->uses); - }); + // TODO proper exporter + foreach ($file->getFunctions() as $function) { + $functions[$file->getFilename()][] = array( + 'name' => $function->getShortName(), + 'line' => $function->getLineNumber(), + ); + } + } - return array('functions' => $functions, 'filters' => $filters->filters); + return $functions; } $files = get_wp_files($wp_dir); -list($functions, $filters) = parse_files($files); +$functions = parse_files($files, $wp_dir); file_put_contents('output.json', json_encode($functions)); -file_put_contents('filters.json', json_encode($filters)); \ No newline at end of file From 3c128ee448045faf6af43153909a54a1cab97397 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 31 Jan 2013 20:13:36 +0000 Subject: [PATCH 008/402] Remove old library code --- library/WP/Caller.php | 8 -- library/WP/Filter.php | 11 -- library/WP/Function.php | 13 -- library/WP/NodeVisitor.php | 148 -------------------- library/WP/Repo/Filters.php | 22 --- library/WP/Repo/Functions.php | 22 --- library/class-phpdoc-parser.php | 231 -------------------------------- library/class-utility.php | 220 ------------------------------ 8 files changed, 675 deletions(-) delete mode 100755 library/WP/Caller.php delete mode 100755 library/WP/Filter.php delete mode 100755 library/WP/Function.php delete mode 100755 library/WP/NodeVisitor.php delete mode 100755 library/WP/Repo/Filters.php delete mode 100755 library/WP/Repo/Functions.php delete mode 100755 library/class-phpdoc-parser.php delete mode 100755 library/class-utility.php diff --git a/library/WP/Caller.php b/library/WP/Caller.php deleted file mode 100755 index 38354b629..000000000 --- a/library/WP/Caller.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php - -class WP_Caller { - public $name = ''; - public $file = ''; - public $line = 0; - public $type = 'unknown'; -} \ No newline at end of file diff --git a/library/WP/Filter.php b/library/WP/Filter.php deleted file mode 100755 index d72d64a6f..000000000 --- a/library/WP/Filter.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php - -class WP_Filter { - public $name = ''; - - public $callers = array(); - - public function __construct($name) { - $this->name = $name; - } -} \ No newline at end of file diff --git a/library/WP/Function.php b/library/WP/Function.php deleted file mode 100755 index 44b298645..000000000 --- a/library/WP/Function.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -class WP_Function { - public $doc = ''; - public $file = ''; - public $line = 0; - - public $missingDoc = false; - - public $filters = array(); - public $uses = array(); - public $used_by = array(); -} \ No newline at end of file diff --git a/library/WP/NodeVisitor.php b/library/WP/NodeVisitor.php deleted file mode 100755 index be1d30f2b..000000000 --- a/library/WP/NodeVisitor.php +++ /dev/null @@ -1,148 +0,0 @@ -<?php - -class WP_NodeVisitor extends PHPParser_NodeVisitorAbstract { - protected $file = ''; - protected $location = array(); - protected $printer = null; - public $functions = null; - - public function __construct($file, $repository, &$filters) { - $this->file = $file; - $this->printer = new PHPParser_PrettyPrinter_Default; - $this->functions = $repository; - $this->filters = &$filters; - } - - public function enterNode(PHPParser_Node $node) { - switch ($node->getType()) { - case 'Stmt_Class': - array_push($this->location, $node->name); - break; - case 'Stmt_Function': - case 'Stmt_ClassMethod': - array_push($this->location, $node->name); - $func = $this->getLocation(); - $this->functions[$func]->line = $node->getLine(); - $this->functions[$func]->file = $this->file; - if ($node->getDocComment()) - $this->functions[$func]->doc = $node->getDocComment()->getReformattedText(); - else - $this->functions[$func]->missingDoc = true; - break; - case 'Expr_FuncCall': - $caller = $this->getLocation(); - - if ( $this->isFilter($node) ) { - $filtered = $this->processFilter($node); - if (!$filtered) - break; - - $this->functions[$caller]->filters[] = $filtered; - } - else { - $this->handleCall($node); - } - break; - case 'Expr_MethodCall': - $this->handleCall($node); - break; - } - } - - protected function isFilter(PHPParser_Node $node) { - // Ignore variable functions - if ($node->name->getType() !== 'Name') - return false; - - $calling = (string) $node->name; - if ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' ) { - return true; - } - } - - protected function handleCall(PHPParser_Node $node) { - // Ignore variable functions - if (!is_string($node->name) && $node->name->getType() !== 'Name') - return false; - - $caller = $this->getLocation(); - $callee = (string) $node->name; - - if (empty($this->functions[$caller]->uses[$callee])) - $this->functions[$caller]->uses[$callee] = array(); - - $this->functions[$caller]->uses[$callee][] = $node->getLine(); - - if (empty($this->functions[$callee]->used_by[$caller])) - $this->functions[$callee]->used_by[$caller] = array(); - - $this->functions[$callee]->used_by[$caller][] = $node->getLine(); - } - - protected function processFilter(PHPParser_Node $node) { - $filter = $node->args[0]->value; - $name = ''; - $nameParts = array(); - switch ($filter->getType()) { - case 'Expr_Concat': - case 'Scalar_Encapsed': - $name = $this->printer->prettyPrintExpr($filter); - $nameParts = $filter->parts; - break; - case 'Scalar_String': - $name = "'" . $filter->value . "'"; - $nameParts[] = $name; - break; - case 'Expr_Variable': - return false; - } - - $caller = new WP_Caller; - $caller->name = $this->getLocation(); - $caller->file = $this->file; - $caller->line = $node->getLine(); - $caller->source = $this->printer->prettyPrintExpr($node); - - $args = $node->args; - array_shift($args); - - switch ((string) $node->name) { - case 'do_action': - $caller->type = 'action'; - break; - case 'do_action_ref_array': - $args = $args[0]->value->items; - $caller->type = 'action_reference'; - break; - case 'apply_filters': - $caller->type = 'filter'; - break; - } - #$caller->args = $args; - - $this->filters[$name]->callers[] = $caller; - - return $name; - } - - protected function getLocation() { - $caller = implode('::', $this->location); - if (empty($caller)) - $caller = '__main'; - return $caller; - } - - protected function parsePHPDoc($doc) { - return Codex_Generator_Phpdoc_Parser::parse_doc($function->doc); - } - - public function leaveNode(PHPParser_Node $node) { - switch ($node->getType()) { - case 'Stmt_Class': - case 'Stmt_Function': - case 'Stmt_ClassMethod': - array_pop($this->location); - break; - } - } -} \ No newline at end of file diff --git a/library/WP/Repo/Filters.php b/library/WP/Repo/Filters.php deleted file mode 100755 index 48936072b..000000000 --- a/library/WP/Repo/Filters.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -class WP_Repo_Filters implements ArrayAccess { - public function offsetGet($name) { - if (!isset($this->filters[$name])) - $this->filters[$name] = new WP_Filter($name); - - return $this->filters[$name]; - } - - public function offsetExists($name) { - return true; - } - - public function offsetSet($name, $value) { - throw new Exception('Cannot set function'); - } - - public function offsetUnset($name) { - unset($this->filters[$name]); - } -} \ No newline at end of file diff --git a/library/WP/Repo/Functions.php b/library/WP/Repo/Functions.php deleted file mode 100755 index 8abbb5a1b..000000000 --- a/library/WP/Repo/Functions.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -class WP_Repo_Functions implements ArrayAccess { - public function offsetGet($name) { - if (!isset($this->functions[$name])) - $this->functions[$name] = new WP_Function($name); - - return $this->functions[$name]; - } - - public function offsetExists($name) { - return true; - } - - public function offsetSet($name, $value) { - throw new Exception('Cannot set function'); - } - - public function offsetUnset($name) { - unset($this->functions[$name]); - } -} \ No newline at end of file diff --git a/library/class-phpdoc-parser.php b/library/class-phpdoc-parser.php deleted file mode 100755 index c086776a9..000000000 --- a/library/class-phpdoc-parser.php +++ /dev/null @@ -1,231 +0,0 @@ -<?php - -class Codex_Generator_Phpdoc_Parser extends Codex_Generator_Utility { - - static $arrays = array(); - static $versions = array(); - static $paths = array(); - - /** - * Parses function information, using PHPDoc and Reflection. - * - * @param string $function Function name. - * - * @return boolean|array false is failed or containing descriptions, tags and parameters - */ - static function parse( $function ) { - - // TODO PHPDoc parameter mismatch - // TODO PHPDoc invalid parameter type - // TODO PHPDoc missing short description - // TODO PHPDoc deprecated - // TODO PHPDoc package/subpackage - - if( isset( self::$arrays[$function] ) ) - return self::$arrays[$function]; - - $reflect = new ReflectionFunction( $function ); - $output = array(); - $output['name'] = $reflect->getName(); - $output['path'] = self::sanitize_path( $reflect->getFileName() ); - - if ( ! in_array( $output['path'], self::$paths ) ) - self::$paths[] = $output['path']; - - $output['line'] = absint( $reflect->getStartLine() ); - - $params = self::parse_params( $reflect->getParameters() ); - $doc = $reflect->getDocComment(); - $output['has_doc'] = ! empty( $doc ); - $doc = self::parse_doc( $doc ); - $output = array_merge( $output, $doc ); - $output['parameters'] = self::merge_params( $params, $doc['tags']['param'] ); - - if ( isset( $output['tags']['since'] ) ) { - $version = self::trim_version( self::sanitize_version( $doc['tags']['since'] ) ); - - if ( ! empty( $version ) ) { - $output['tags']['since'] = $version; - - if ( ! in_array( $version, self::$versions ) ) - self::$versions[] = $version; - } - } - - self::$arrays[$function] = $output; - - return $output; - } - - /** - * Parses PHPDoc - * - * @param string $doc PHPDoc string - * - * @return array of parsed information - */ - static function parse_doc( $doc ) { - - $short_desc = $long_desc = $last_tag = ''; - $tags = array( 'param' => array() ); - $did_short_desc = false; - $did_long_desc = false; - $prepend_short_desc = ''; - $prepend_long_desc = ''; - $doc = explode( "\n", $doc ); - - foreach ( $doc as $line ) { - $line = trim( $line ); - $line = trim( $line, " *\t{}" ); - $line = preg_replace( '/\s+/', ' ', $line ); - - // Start or end - if ('/' == $line) - continue; - - // Empty lines as start - if (empty($line) && !$short_desc) - continue; - - // Tag, also means done with descriptions - if ( '@' == substr( $line, 0, 1 ) ) { - if ( ! $did_long_desc ) - $did_long_desc = $did_short_desc = true; - - $line = trim( $line, '@' ); - list( $tag, $value ) = self::explode( ' ', $line, 2, true ); - $last_tag = $tag; - - if ( ! isset( $tags[$tag] ) ) - $tags[$tag] = $value; - elseif ( ! is_array( $tags[$tag] ) ) - $tags[$tag] = array( $tags[$tag], $value ); - else - $tags[$tag][] = $value; - - continue; - } - - // Short description - if ( ! $did_short_desc ) { - if ( empty( $line ) ) { - $did_short_desc = true; - } - else { - $short_desc .= $prepend_short_desc . $line; - $prepend_short_desc = ' '; - } - - continue; - } - - // Long description - if ( ! $did_long_desc ) { - if ( ! empty( $line ) ) { - if ( '-' == substr( $line, 0, 1 ) ) - $prepend_long_desc .= "\n*"; - - $long_desc .= $prepend_long_desc . $line; - $prepend_long_desc = ' '; - } - else { - $prepend_long_desc = "\n\n"; - } - - continue; - } - - // Additional line for a tag - if ( ! empty( $line ) && ! empty( $last_tag ) ) { - if ( is_array( $tags[$last_tag] ) ) { - end( $tags[$last_tag] ); - $key = key( $tags[$last_tag] ); - $tags[$last_tag][$key] .= ' ' . $line; - } - else { - $tags[$last_tag] .= ' ' . $line; - } - - continue; - } - } - - return compact( 'short_desc', 'long_desc', 'tags' ); - } - - - /** - * Parses parameters from Reflection. - * - * @param array $params of ReflectionParameter objects - * - * @return array of parameters' properties - */ - static function parse_params( $params ) { - - $output = array(); - - foreach ( $params as $param ) { - /** - * @var ReflectionParameter $param - */ - $name = $param->getName(); - $append = array( - 'name' => $name, - 'has_default' => $param->isDefaultValueAvailable(), - 'optional' => $param->isOptional() ? 'optional' : 'required', - ); - - if( $append['has_default'] ) - $append['default'] = $param->getDefaultValue(); - - $output[$name] = $append; - } - - return $output; - } - - /** - * Merges parameter information, obtained from Reflection and PHPDoc. - * - * @param array $from_params info from Reflection - * @param array $from_tags info from PHPDoc - * - * @return array merged info - */ - static function merge_params( $from_params, $from_tags ) { - - foreach ( $from_tags as $param ) { - - // TODO fix case if name is skipped - list( $type, $name, $description ) = self::explode( ' ', $param, 3, '' ); - $name = trim( $name, '$' ); - - // TODO consider merging in order if names are missing in PHPDoc - if( !isset($from_params[$name]) ) - continue; - - if (!empty($type)) - $from_params[$name]['type'] = $type; - - if (!empty($description)) - $from_params[$name]['description'] = $description; - } - - return $from_params; - } - - static function get_versions() { - - usort( self::$versions, 'version_compare' ); - - return self::$versions; - } - - static function get_paths() { - - sort( self::$paths ); - - return self::$paths; - } -} diff --git a/library/class-utility.php b/library/class-utility.php deleted file mode 100755 index fea331c0b..000000000 --- a/library/class-utility.php +++ /dev/null @@ -1,220 +0,0 @@ -<?php - -class Codex_Generator_Utility { - - /** - * Pads exploded array to target number of elements with default value. - * - * @param string $delimiter - * @param string $string - * @param int $count - * @param mixed $default - * - * @return array - */ - static function explode( $delimiter, $string, $count, $default ) { - - $output = array(); - $pieces = substr_count( $string, $delimiter ) + 1; - - if ($pieces < 2) - $output[] = $string; - elseif ($pieces >= $count) - $output = explode( $delimiter, $string, $count ); - else - $output = explode( $delimiter, $string ); - - while ( $count > count( $output ) ) - $output[] = $default; - - return $output; - } - - /** - * Retrieves relative path to file, containing a function. - * - * @param string $path full local path - * - * @return string file path - */ - static function sanitize_path( $path ) { - - static $abspath, $content, $content_dir, $plugin, $plugin_dir; - - if ( empty( $abspath ) ) { - $abspath = self::trim_and_forward_slashes( ABSPATH ); - $content = self::trim_and_forward_slashes( WP_CONTENT_DIR ); - $content_dir = self::last_dir( $content ); - $plugin = self::trim_and_forward_slashes( WP_PLUGIN_DIR ); - $plugin_dir = self::last_dir( $plugin ); - } - - $path = self::trim_and_forward_slashes( $path ); - - if ( false !== strpos( $path, $plugin ) ) { - $prepend = false !== strpos( $path, $content ) ? "{$content_dir}/{$plugin_dir}" : $plugin_dir; - $path = $prepend . str_replace( $plugin, '', $path ); - } - elseif ( false !== strpos( $path, $content ) ) { - $path = $content_dir . str_replace( $content, '', $path ); - } - else { - $path = str_replace( $abspath, '', $path ); - } - - $path = self::trim_and_forward_slashes( $path ); - - return $path; - } - - /** - * Trims any slashes and turns rest to forward. - * - * @param string $path - * - * @return string - */ - static function trim_and_forward_slashes( $path ) { - - $path = trim( $path, '\/' ); - $path = str_replace( '\\', '/', $path ); - - return $path; - } - - /** - * Returns last level of path. - * - * @param string $path - * - * @return string - */ - static function last_dir( $path ) { - - return array_pop( preg_split( '/[\/\\\]/', $path ) ); - } - - /** - * Cleans up version, changes MU to 3.0.0 - * - * @param string $version - * - * @return string - */ - static function sanitize_version( $version ) { - - if ( 'MU' == trim( $version ) ) - $version = '3.0.0'; - - $version = preg_replace( '/[^\d\.]/', '', $version ); - $version = trim( $version, '.' ); - - return $version; - } - - /** - * @param string $compare - * - * @return string - */ - static function sanitize_compare( $compare ) { - - $valid_compare = self::get_compare(); - $compare = html_entity_decode( $compare ); - - if ( in_array( $compare, $valid_compare ) ) - return $compare; - - return '='; - } - - /** - * @return array - */ - static function get_compare() { - - return array( '=', '>', '>=', '<', '<=', '!=' ); - } - - /** - * Trims trailing zero on major versions. - * - * @param string $version - * - * @return string - */ - static function trim_version( $version ) { - - if ( strlen( $version ) > 3 && '.0' === substr( $version, - 2 ) ) - $version = substr( $version, 0, 3 ); - - return $version; - } - - /** - * Adjust type names to forms, supported by Codex. - * - * @param mixed $type - * @param string $context - * - * @return string - */ - static function type_to_string( $type, $context = '' ) { - - if ( 'wiki' == $context ) - $type = str_replace( '|', '|', $type ); - - if ( false === strpos( $type, 'boolean' ) ) - $type = str_replace( 'bool', 'boolean', $type ); - - return $type; - } - - /** - * Turns mixed type values into string representation. - * - * @param mixed $value - * - * @return string - */ - static function value_to_string( $value ) { - - if ( is_null( $value ) ) - $value = 'null'; - - elseif ( is_bool( $value ) ) - $value = $value ? 'true' : 'false'; - - elseif ( is_string( $value ) && empty( $value ) ) - $value = "''"; - - elseif ( is_array( $value ) ) - if ( empty( $value ) ) - $value = 'array()'; - else - $value = "array( '" . implode( "','", $value ) . "')"; - - return $value; - } - - /** - * Get link markup for function reference. - * - * @param string $function - * @param string $anchor - * - * @return string - */ - static function get_codex_link( $function, $anchor = '' ) { - - $link = esc_html( 'codex.wordpress.org/Function_Reference/' . $function ); - $href = esc_url( $link ); - - if( $anchor ) - $link = $anchor; - - $link = "<a href='{$href}'>{$link}</a>"; - - return $link; - } -} \ No newline at end of file From be302dc395191c5e549aa74bcadb40c45e1a1cd7 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 31 Jan 2013 21:15:09 +0000 Subject: [PATCH 009/402] Implement custom FileReflector to parse out hooks --- composer.json | 3 + composer.lock | 2 +- lib/WP/Reflection/FileReflector.php | 113 ++++++++++++++++++++++++++++ lib/WP/Reflection/HookReflector.php | 40 ++++++++++ parse.php | 18 ++++- 5 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 lib/WP/Reflection/FileReflector.php create mode 100644 lib/WP/Reflection/HookReflector.php diff --git a/composer.json b/composer.json index 3e6f41e75..c89be4e5e 100644 --- a/composer.json +++ b/composer.json @@ -3,5 +3,8 @@ "php": ">=5.3.3", "phpdocumentor/reflection": "dev-master" }, + "autoload": { + "psr-0": { "WP": "lib/" } + }, "minimum-stability": "dev" } diff --git a/composer.lock b/composer.lock index 1988d03ab..b9a465937 100644 --- a/composer.lock +++ b/composer.lock @@ -1,5 +1,5 @@ { - "hash": "5e6728e3d489c530b924fda581cebb7e", + "hash": "0138a09193e1550b7154d2dcf43f7ed5", "packages": [ { "name": "dflydev/markdown", diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php new file mode 100644 index 000000000..0b47638f0 --- /dev/null +++ b/lib/WP/Reflection/FileReflector.php @@ -0,0 +1,113 @@ +<?php + +use phpDocumentor\Reflection; +use phpDocumentor\Reflection\FileReflector; + +/** + * Reflection class for a full file. + * + * Extends the FileReflector from phpDocumentor to parse out WordPress + * hooks and note function relationships. + */ +class WP_Reflection_FileReflector extends FileReflector { + /** @var PHPParser_Node[] */ + protected $location = array(); + + public function enterNode(PHPParser_Node $node) { + $prettyPrinter = new PHPParser_PrettyPrinter_Zend; + + switch ($node->getType()) { + case 'Stmt_Use': + /** @var PHPParser_Node_Stmt_UseUse $use */ + foreach ($node->uses as $use) { + $this->context->setNamespaceAlias( + $use->alias, + implode('\\', $use->name->parts) + ); + } + break; + case 'Stmt_Namespace': + $this->context->setNamespace(implode('\\', $node->name->parts)); + break; + case 'Stmt_Class': + $class = new Reflection\ClassReflector($node, $this->context); + array_push($this->location, $class); + $class->parseSubElements(); + $this->classes[] = $class; + break; + case 'Stmt_Trait': + $trait = new Reflection\TraitReflector($node, $this->context); + $this->traits[] = $trait; + break; + case 'Stmt_Interface': + $interface = new Reflection\InterfaceReflector($node, $this->context); + array_push($this->location, $interface); + $interface->parseSubElements(); + $this->interfaces[] = $interface; + break; + case 'Stmt_Function': + $function = new Reflection\FunctionReflector($node, $this->context); + array_push($this->location, $function); + $this->functions[] = $function; + break; + case 'Stmt_Const': + foreach ($node->consts as $constant) { + $reflector = new Reflection\ConstantReflector( + $node, + $this->context, + $constant + ); + $this->constants[] = $reflector; + } + break; + case 'Expr_FuncCall': + if ($node->name instanceof PHPParser_Node_Name && $node->name == 'define') { + $name = trim($prettyPrinter->prettyPrintExpr($node->args[0]->value), '\''); + $constant = new PHPParser_Node_Const($name, $node->args[1]->value, $node->getAttributes()); + $constant->namespacedName = new PHPParser_Node_Name( + ($this->current_namespace ? $this->current_namespace.'\\' : '') . $name + ); + + $constant_statement = new PHPParser_Node_Stmt_Const(array($constant)); + $constant_statement->setAttribute('comments', array($node->getDocComment())); + $this->constants[] = new Reflection\ConstantReflector($constant_statement, $this->context, $constant); + } else if ($this->isFilter($node)) { + $hook = new WP_Reflection_HookReflector($node, $this->context); + $this->getLocation()->hooks[] = $hook; + } + break; + case 'Expr_Include': + $include = new Reflection\IncludeReflector($node, $this->context); + $this->includes[] = $include; + break; + } + } + + public function leaveNode(PHPParser_Node $node) { + switch ($node->getType()) { + case 'Stmt_Class': + case 'Stmt_ClassMethod': + case 'Stmt_Function': + case 'Stmt_Interface': + array_pop($this->location); + break; + } + } + + protected function isFilter(PHPParser_Node $node) { + // Ignore variable functions + if ($node->name->getType() !== 'Name') + return false; + + $calling = (string) $node->name; + return ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' ); + } + + protected function getLocation() { + if (empty($this->location)) { + return $this; + } else { + return end($this->location); + } + } +} diff --git a/lib/WP/Reflection/HookReflector.php b/lib/WP/Reflection/HookReflector.php new file mode 100644 index 000000000..d23d17015 --- /dev/null +++ b/lib/WP/Reflection/HookReflector.php @@ -0,0 +1,40 @@ +<?php + +use phpDocumentor\Reflection\BaseReflector; + +class WP_Reflection_HookReflector extends BaseReflector { + public function getName() { + $name = ''; + $filter = $this->node->args[0]->value; + switch ($filter->getType()) { + case 'Expr_Concat': + case 'Scalar_Encapsed': + $printer = new PHPParser_PrettyPrinter_Default; + $name = $printer->prettyPrintExpr($filter); + break; + case 'Scalar_String': + $name = "'" . $filter->value . "'"; + break; + } + + return $name ? $name : false; + } + + public function getShortName() { + return $this->getName(); + } + + public function getType() { + $type = 'filter'; + switch ((string) $node->name) { + case 'do_action': + $type = 'action'; + break; + case 'do_action_ref_array': + $type = 'action_reference'; + break; + } + + return $type; + } +} diff --git a/parse.php b/parse.php index b4d2c512a..1d1e64454 100644 --- a/parse.php +++ b/parse.php @@ -36,7 +36,7 @@ function parse_files($files, $root) { $functions = array(); foreach ($files as $filename) { - $file = new FileReflector($filename); + $file = new WP_Reflection_FileReflector($filename); $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); $file->setFilename($path); @@ -44,11 +44,27 @@ function parse_files($files, $root) { $file->process(); // TODO proper exporter + + print $file->getFilename() . "\n"; + if (!empty($file->hooks)) { + foreach ($file->hooks as $hook) { + print ' ' . $hook->getName() . "\n"; + } + } + foreach ($file->getFunctions() as $function) { + print ' ' . $function->getShortName() . "\n"; + if (!empty($function->hooks)) { + foreach ($function->hooks as $hook) { + print ' ' . $hook->getName() . "\n"; + } + } + /* $functions[$file->getFilename()][] = array( 'name' => $function->getShortName(), 'line' => $function->getLineNumber(), ); + */ } } From 9d4a32cee2c719be99b8b486ab0ae13721ffd587 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 1 Feb 2013 13:42:45 +0000 Subject: [PATCH 010/402] Update dependencies Update to phpdocumentor/reflection prevents a fatal error. --- composer.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index b9a465937..7c45eb697 100644 --- a/composer.lock +++ b/composer.lock @@ -30,7 +30,7 @@ "dflydev\\markdown": "src" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -84,7 +84,7 @@ "PHPParser": "lib/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -105,12 +105,12 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/Reflection", - "reference": "0.1.3" + "reference": "fc0fc4caeb9a4a9463cef8bd1153d830c781f296" }, "dist": { "type": "zip", - "url": "https://github.com/phpDocumentor/Reflection/archive/0.1.3.zip", - "reference": "0.1.3", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc0fc4caeb9a4a9463cef8bd1153d830c781f296", + "reference": "fc0fc4caeb9a4a9463cef8bd1153d830c781f296", "shasum": "" }, "require": { @@ -123,7 +123,7 @@ "phpunit/phpunit": "3.7.*@stable", "mockery/mockery": ">=0.7.0@stable" }, - "time": "2012-12-22 19:11:10", + "time": "2013-02-01 13:29:56", "type": "library", "autoload": { "psr-0": { @@ -134,7 +134,7 @@ ] } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -177,7 +177,7 @@ ] } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], From a886e0a05db98732bef749229c8cfdaf25c374ee Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 1 Feb 2013 15:42:56 +0000 Subject: [PATCH 011/402] Fix undefined variable notice --- lib/WP/Reflection/HookReflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WP/Reflection/HookReflector.php b/lib/WP/Reflection/HookReflector.php index d23d17015..959ab20cc 100644 --- a/lib/WP/Reflection/HookReflector.php +++ b/lib/WP/Reflection/HookReflector.php @@ -26,7 +26,7 @@ public function getShortName() { public function getType() { $type = 'filter'; - switch ((string) $node->name) { + switch ((string) $this->node->name) { case 'do_action': $type = 'action'; break; From 5c2e222f35dfdf1ac83c1476060e00c3fe8570c9 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 1 Feb 2013 16:03:12 +0000 Subject: [PATCH 012/402] Export lots of information into a pretty printed output.json for testing --- .gitignore | 1 + lib/WP/Reflection/FileReflector.php | 9 +- parse.php | 161 ++++++++++++++++++++++++---- 3 files changed, 148 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 57872d0f1..0f215f819 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /vendor/ +output.json diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index 0b47638f0..f99ac5d97 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -10,6 +10,9 @@ * hooks and note function relationships. */ class WP_Reflection_FileReflector extends FileReflector { + /** @var WP_Reflection_HookReflector[] */ + public $hooks = array(); + /** @var PHPParser_Node[] */ protected $location = array(); @@ -104,10 +107,6 @@ protected function isFilter(PHPParser_Node $node) { } protected function getLocation() { - if (empty($this->location)) { - return $this; - } else { - return end($this->location); - } + return empty($this->location) ? $this : end($this->location); } } diff --git a/parse.php b/parse.php index 1d1e64454..a83e8e3e6 100644 --- a/parse.php +++ b/parse.php @@ -33,7 +33,7 @@ function get_wp_files($directory) { } function parse_files($files, $root) { - $functions = array(); + $output = array(); foreach ($files as $filename) { $file = new WP_Reflection_FileReflector($filename); @@ -44,34 +44,159 @@ function parse_files($files, $root) { $file->process(); // TODO proper exporter + $out = array( + 'path' => $file->getFilename(), + ); + + foreach ($file->getIncludes() as $include) { + $out['includes'][] = array( + 'name' => $include->getName(), + 'line' => $include->getLineNumber(), + 'type' => $include->getType(), + ); + } - print $file->getFilename() . "\n"; - if (!empty($file->hooks)) { - foreach ($file->hooks as $hook) { - print ' ' . $hook->getName() . "\n"; - } + foreach ($file->getConstants() as $constant) { + $out['constants'][] = array( + 'name' => $constant->getShortName(), + 'line' => $constant->getLineNumber(), + 'value' => $constant->getValue(), + ); } + $hooks = export_hooks($file->hooks); + if (!empty($hooks)) + $out['hooks'] = $hooks; + foreach ($file->getFunctions() as $function) { - print ' ' . $function->getShortName() . "\n"; - if (!empty($function->hooks)) { - foreach ($function->hooks as $hook) { - print ' ' . $hook->getName() . "\n"; - } - } - /* - $functions[$file->getFilename()][] = array( + $func = array( 'name' => $function->getShortName(), 'line' => $function->getLineNumber(), + 'arguments' => export_arguments($function->getArguments()), ); - */ + + $docblock = export_docblock($function); + if ($docblock) + $func['doc'] = $docblock; + + if (!empty($function->hooks)) + $func['hooks'] = export_hooks($function->hooks); + + $out['functions'][] = $func; } + + foreach ($file->getClasses() as $class) { + $cl = array( + 'name' => $class->getShortName(), + 'line' => $class->getLineNumber(), + 'final' => $class->isFinal(), + 'abstract' => $class->isAbstract(), + 'extends' => $class->getParentClass(), + 'implements' => $class->getInterfaces(), + 'properties' => export_properties($class->getProperties()), + 'methods' => export_methods($class->getMethods()), + ); + + $docblock = export_docblock($class); + if ($docblock) + $cl['doc'] = $docblock; + + $out['classes'][] = $cl; + } + + $output[] = $out; + } + + return $output; +} + +function export_docblock($element) { + $docblock = $element->getDocBlock(); + if (!$docblock) + return false; + + $output = array( + 'description' => $docblock->getShortDescription(), + 'long-description' => $docblock->getLongDescription()->getFormattedContents(), + ); + + // TODO output tags + + return $output; +} + +function export_hooks(array $hooks) { + $out = array(); + foreach ($hooks as $hook) { + $out[] = array( + 'name' => $hook->getName(), + 'line' => $hook->getLineNumber(), + 'type' => $hook->getType(), + ); } + return $out; +} - return $functions; +function export_arguments(array $arguments) { + $output = array(); + foreach ($arguments as $argument) { + $output[] = array( + 'name' => $argument->getName(), + 'default' => $argument->getDefault(), + 'type' => $argument->getType(), + ); + } + return $output; +} + +function export_properties(array $properties) { + $out = array(); + foreach ($properties as $property) { + $prop = array( + 'name' => $property->getName(), + 'line' => $property->getLineNumber(), + 'default' => $property->getDefault(), + 'final' => $property->isFinal(), + 'static' => $property->isStatic(), + 'visibililty' => $property->getVisibility(), + ); + + $docblock = export_docblock($property); + if ($docblock) + $prop['doc'] = $docblock; + + $out[] = $prop; + + } + return $out; +} + +function export_methods(array $methods) { + $out = array(); + foreach ($methods as $method) { + $meth = array( + 'name' => $method->getShortName(), + 'line' => $method->getLineNumber(), + 'final' => $method->isFinal(), + 'abstract' => $method->isAbstract(), + 'static' => $method->isStatic(), + 'visibility' => $method->getVisibility(), + 'arguments' => export_arguments($method->getArguments()), + ); + + $docblock = export_docblock($method); + if ($docblock) + $meth['doc'] = $docblock; + + if (!empty($method->hooks)) + $meth['hooks'] = export_hooks($method->hooks); + + $out[] = $meth; + } + return $out; } $files = get_wp_files($wp_dir); -$functions = parse_files($files, $wp_dir); +$output = parse_files($files, $wp_dir); -file_put_contents('output.json', json_encode($functions)); +file_put_contents('output.json', json_encode($output, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0)); From a5bc2bb89c8438aaa517e841ba2069759b1b47d3 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 1 Feb 2013 16:53:17 +0000 Subject: [PATCH 013/402] Put method reflectors into the location stack for hook parsing phpdocumentor/reflection buries method parsing in the InterfaceReflector class. So, when a method AST node is encountered the current class reflector can be searched for the corresponding method reflector. Putting these reflectors in the location stack allows hooks to be correctly associated with them. --- lib/WP/Reflection/FileReflector.php | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index f99ac5d97..fc864cef7 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -83,6 +83,13 @@ public function enterNode(PHPParser_Node $node) { $include = new Reflection\IncludeReflector($node, $this->context); $this->includes[] = $include; break; + case 'Stmt_ClassMethod': + $method = $this->findMethodReflector($this->getLocation(), $node); + if ($method) + array_push($this->location, $method); + else + array_push($this->location, $this->getLocation()); + break; } } @@ -109,4 +116,34 @@ protected function isFilter(PHPParser_Node $node) { protected function getLocation() { return empty($this->location) ? $this : end($this->location); } + + /** + * Find the MethodReflector in a ClassReflector that matches the + * given Stmt_ClassMethod node. + * + * @param phpDocumentor\Reflection\ClassReflector $class Class to search in + * @param PHPParser_Node_Stmt_ClassMethod $node AST node to match with + * @return phpDocumentor\Reflection\MethodReflector|bool + */ + protected function findMethodReflector($class, PHPParser_Node_Stmt_ClassMethod $node) { + if (!$class instanceof Reflection\ClassReflector) + return false; + + $found = false; + $method = new Reflection\ClassReflector\MethodReflector($node, $this->context); + + foreach ($class->getMethods() as $poss_method) { + if ($method->getName() === $poss_method->getName() + && $method->getVisibility() === $poss_method->getVisibility() + && $method->isAbstract() === $poss_method->isAbstract() + && $method->isStatic() === $poss_method->isStatic() + && $method->isFinal() === $poss_method->isFinal() + ) { + $found = $poss_method; + break; + } + } + + return $found; + } } From 9fea3d083ef7b9b9de672fecd81c36bddd0d57ca Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 3 Feb 2013 19:06:04 +1000 Subject: [PATCH 014/402] Add hook arguments to exported data --- lib/WP/PrettyPrinter.php | 14 ++++++++++++++ lib/WP/Reflection/HookReflector.php | 12 ++++++++++++ parse.php | 1 + 3 files changed, 27 insertions(+) create mode 100755 lib/WP/PrettyPrinter.php diff --git a/lib/WP/PrettyPrinter.php b/lib/WP/PrettyPrinter.php new file mode 100755 index 000000000..74b6daeac --- /dev/null +++ b/lib/WP/PrettyPrinter.php @@ -0,0 +1,14 @@ +<?php + +class WP_PrettyPrinter extends PHPParser_PrettyPrinter_Default { + /** + * Pretty prints an argument. + * + * @param PHPParser_Node_Arg $node Expression argument + * + * @return string Pretty printed argument + */ + public function prettyPrintArg(PHPParser_Node_Arg $node) { + return str_replace("\n" . $this->noIndentToken, "\n", $this->p($node)); + } +} diff --git a/lib/WP/Reflection/HookReflector.php b/lib/WP/Reflection/HookReflector.php index 959ab20cc..a63607c9d 100644 --- a/lib/WP/Reflection/HookReflector.php +++ b/lib/WP/Reflection/HookReflector.php @@ -37,4 +37,16 @@ public function getType() { return $type; } + + public function getArgs() { + $printer = new WP_PrettyPrinter; + $args = array(); + foreach ($this->node->args as $arg) { + $args[] = $printer->prettyPrintArg($arg); + } + + // Skip the filter name + array_shift($args); + return $args; + } } diff --git a/parse.php b/parse.php index a83e8e3e6..c897fbf84 100644 --- a/parse.php +++ b/parse.php @@ -132,6 +132,7 @@ function export_hooks(array $hooks) { 'name' => $hook->getName(), 'line' => $hook->getLineNumber(), 'type' => $hook->getType(), + 'args' => implode(', ', $hook->getArgs()), ); } return $out; From bfb2952936a75a7f1213006e76b42a6c88e79a07 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 3 Feb 2013 19:10:48 +1000 Subject: [PATCH 015/402] Add DocBlock tags to exported data This is kinda crappy, but there may be more than one of the same tag, so we need to ensure that we don't key by name naively. This could have a better implementation though. --- parse.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/parse.php b/parse.php index c897fbf84..28c80f2a4 100644 --- a/parse.php +++ b/parse.php @@ -119,6 +119,13 @@ function export_docblock($element) { 'description' => $docblock->getShortDescription(), 'long-description' => $docblock->getLongDescription()->getFormattedContents(), ); + $output['tags'] = array(); + foreach ($docblock->getTags() as $tag) { + $output['tags'][] = array( + 'name' => $tag->getName(), + 'content' => $tag->getContent(), + ); + } // TODO output tags From 3b1eaad4ef020a2808901b87ccedd73528429d72 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 3 Feb 2013 22:13:55 +1000 Subject: [PATCH 016/402] Rename long-description to long_description If we don't do this, it's a pain to get it back out when importing. --- parse.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse.php b/parse.php index 28c80f2a4..82646acc1 100644 --- a/parse.php +++ b/parse.php @@ -117,7 +117,7 @@ function export_docblock($element) { $output = array( 'description' => $docblock->getShortDescription(), - 'long-description' => $docblock->getLongDescription()->getFormattedContents(), + 'long_description' => $docblock->getLongDescription()->getFormattedContents(), ); $output['tags'] = array(); foreach ($docblock->getTags() as $tag) { From 5a7b40c78b50404122f6e4306694a2ae9b82e6cc Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 3 Feb 2013 22:14:47 +1000 Subject: [PATCH 017/402] Rename hook args to arguments for consistency --- parse.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse.php b/parse.php index 82646acc1..0eac12f1a 100644 --- a/parse.php +++ b/parse.php @@ -139,7 +139,7 @@ function export_hooks(array $hooks) { 'name' => $hook->getName(), 'line' => $hook->getLineNumber(), 'type' => $hook->getType(), - 'args' => implode(', ', $hook->getArgs()), + 'arguments' => implode(', ', $hook->getArgs()), ); } return $out; From ee5996be6f4ee6d8293f050237dc1472ca7da5c4 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 3 Feb 2013 13:04:48 +0000 Subject: [PATCH 018/402] Don't repeat any enterNode() implementation from FileReflector When updating the location stack it's possible to just peek at the end of the appropriate array to get the class/function reflector. Hook parsing can also be done after the original enterNode() has a go since it only relies on the location stack. --- lib/WP/Reflection/FileReflector.php | 88 +++++++++-------------------- 1 file changed, 26 insertions(+), 62 deletions(-) diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index fc864cef7..f782ebe07 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -10,86 +10,50 @@ * hooks and note function relationships. */ class WP_Reflection_FileReflector extends FileReflector { - /** @var WP_Reflection_HookReflector[] */ + /** + * List of hooks defined in global scope in this file. + * + * @var WP_Reflection_HookReflector[] + */ public $hooks = array(); - /** @var PHPParser_Node[] */ + /** + * Stack of classes/methods/functions currently being parsed. + * + * @see WP_Reflection_FileReflector::getLocation() + * @var phpDocumentor\Reflection\BaseReflector[] + */ protected $location = array(); public function enterNode(PHPParser_Node $node) { - $prettyPrinter = new PHPParser_PrettyPrinter_Zend; + parent::enterNode($node); switch ($node->getType()) { - case 'Stmt_Use': - /** @var PHPParser_Node_Stmt_UseUse $use */ - foreach ($node->uses as $use) { - $this->context->setNamespaceAlias( - $use->alias, - implode('\\', $use->name->parts) - ); - } - break; - case 'Stmt_Namespace': - $this->context->setNamespace(implode('\\', $node->name->parts)); - break; + // Add classes, functions, and methods to the current location stack case 'Stmt_Class': - $class = new Reflection\ClassReflector($node, $this->context); - array_push($this->location, $class); - $class->parseSubElements(); - $this->classes[] = $class; - break; - case 'Stmt_Trait': - $trait = new Reflection\TraitReflector($node, $this->context); - $this->traits[] = $trait; - break; - case 'Stmt_Interface': - $interface = new Reflection\InterfaceReflector($node, $this->context); - array_push($this->location, $interface); - $interface->parseSubElements(); - $this->interfaces[] = $interface; + array_push($this->location, end($this->classes)); break; case 'Stmt_Function': - $function = new Reflection\FunctionReflector($node, $this->context); - array_push($this->location, $function); - $this->functions[] = $function; + array_push($this->location, end($this->functions)); break; - case 'Stmt_Const': - foreach ($node->consts as $constant) { - $reflector = new Reflection\ConstantReflector( - $node, - $this->context, - $constant - ); - $this->constants[] = $reflector; + case 'Stmt_ClassMethod': + $method = $this->findMethodReflector($this->getLocation(), $node); + if ($method) { + array_push($this->location, $method); + } else { + // Repeat the current location so that leaveNode() doesn't + // pop it off + array_push($this->location, $this->getLocation()); } break; - case 'Expr_FuncCall': - if ($node->name instanceof PHPParser_Node_Name && $node->name == 'define') { - $name = trim($prettyPrinter->prettyPrintExpr($node->args[0]->value), '\''); - $constant = new PHPParser_Node_Const($name, $node->args[1]->value, $node->getAttributes()); - $constant->namespacedName = new PHPParser_Node_Name( - ($this->current_namespace ? $this->current_namespace.'\\' : '') . $name - ); - $constant_statement = new PHPParser_Node_Stmt_Const(array($constant)); - $constant_statement->setAttribute('comments', array($node->getDocComment())); - $this->constants[] = new Reflection\ConstantReflector($constant_statement, $this->context, $constant); - } else if ($this->isFilter($node)) { + // Parse out hook definitions and add them to the current location + case 'Expr_FuncCall': + if ($this->isFilter($node)) { $hook = new WP_Reflection_HookReflector($node, $this->context); $this->getLocation()->hooks[] = $hook; } break; - case 'Expr_Include': - $include = new Reflection\IncludeReflector($node, $this->context); - $this->includes[] = $include; - break; - case 'Stmt_ClassMethod': - $method = $this->findMethodReflector($this->getLocation(), $node); - if ($method) - array_push($this->location, $method); - else - array_push($this->location, $this->getLocation()); - break; } } From 453294e0380427beee294b159e57928d4456ab03 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 14 Feb 2013 12:46:43 +1000 Subject: [PATCH 019/402] Mark parser util as executable by PHP --- parse.php | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 parse.php diff --git a/parse.php b/parse.php old mode 100644 new mode 100755 index 0eac12f1a..c07540864 --- a/parse.php +++ b/parse.php @@ -1,3 +1,4 @@ +#!/usr/bin/env php <?php require 'vendor/autoload.php'; From 5f869a1af3c7b6399ee8ff658bdea9ecd9ffa9cd Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 14 Feb 2013 12:47:39 +1000 Subject: [PATCH 020/402] Output the JSON to stdout Rather than handle it ourselves, use standard terminal output redirection. --- parse.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse.php b/parse.php index c07540864..1e52e8394 100755 --- a/parse.php +++ b/parse.php @@ -208,4 +208,4 @@ function export_methods(array $methods) { $files = get_wp_files($wp_dir); $output = parse_files($files, $wp_dir); -file_put_contents('output.json', json_encode($output, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0)); +echo json_encode($output, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0); From 0562c19c341f45844c73565eb9e852b249752244 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 14 Feb 2013 12:52:19 +1000 Subject: [PATCH 021/402] Split CLI functions into a separate file --- lib/WP/runner.php | 196 ++++++++++++++++++++++++++++++++++++++++++++++ parse.php | 196 +--------------------------------------------- 2 files changed, 197 insertions(+), 195 deletions(-) create mode 100755 lib/WP/runner.php diff --git a/lib/WP/runner.php b/lib/WP/runner.php new file mode 100755 index 000000000..5d7608c95 --- /dev/null +++ b/lib/WP/runner.php @@ -0,0 +1,196 @@ +<?php + +function get_wp_files($directory) { + $iterableFiles = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($directory) + ); + $files = array(); + try { + foreach( $iterableFiles as $file ) { + if ($file->getExtension() !== 'php') + continue; + + if ($file->getFilename() === 'class-wp-json-server.php') + continue; + + $files[] = $file->getPathname(); + } + } + catch (UnexpectedValueException $e) { + printf("Directory [%s] contained a directory we can not recurse into", $directory); + } + + return $files; +} + +function parse_files($files, $root) { + $output = array(); + + foreach ($files as $filename) { + $file = new WP_Reflection_FileReflector($filename); + + $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); + $file->setFilename($path); + + $file->process(); + + // TODO proper exporter + $out = array( + 'path' => $file->getFilename(), + ); + + foreach ($file->getIncludes() as $include) { + $out['includes'][] = array( + 'name' => $include->getName(), + 'line' => $include->getLineNumber(), + 'type' => $include->getType(), + ); + } + + foreach ($file->getConstants() as $constant) { + $out['constants'][] = array( + 'name' => $constant->getShortName(), + 'line' => $constant->getLineNumber(), + 'value' => $constant->getValue(), + ); + } + + $hooks = export_hooks($file->hooks); + if (!empty($hooks)) + $out['hooks'] = $hooks; + + foreach ($file->getFunctions() as $function) { + $func = array( + 'name' => $function->getShortName(), + 'line' => $function->getLineNumber(), + 'arguments' => export_arguments($function->getArguments()), + ); + + $docblock = export_docblock($function); + if ($docblock) + $func['doc'] = $docblock; + + if (!empty($function->hooks)) + $func['hooks'] = export_hooks($function->hooks); + + $out['functions'][] = $func; + } + + foreach ($file->getClasses() as $class) { + $cl = array( + 'name' => $class->getShortName(), + 'line' => $class->getLineNumber(), + 'final' => $class->isFinal(), + 'abstract' => $class->isAbstract(), + 'extends' => $class->getParentClass(), + 'implements' => $class->getInterfaces(), + 'properties' => export_properties($class->getProperties()), + 'methods' => export_methods($class->getMethods()), + ); + + $docblock = export_docblock($class); + if ($docblock) + $cl['doc'] = $docblock; + + $out['classes'][] = $cl; + } + + $output[] = $out; + } + + return $output; +} + +function export_docblock($element) { + $docblock = $element->getDocBlock(); + if (!$docblock) + return false; + + $output = array( + 'description' => $docblock->getShortDescription(), + 'long_description' => $docblock->getLongDescription()->getFormattedContents(), + ); + $output['tags'] = array(); + foreach ($docblock->getTags() as $tag) { + $output['tags'][] = array( + 'name' => $tag->getName(), + 'content' => $tag->getContent(), + ); + } + + // TODO output tags + + return $output; +} + +function export_hooks(array $hooks) { + $out = array(); + foreach ($hooks as $hook) { + $out[] = array( + 'name' => $hook->getName(), + 'line' => $hook->getLineNumber(), + 'type' => $hook->getType(), + 'arguments' => implode(', ', $hook->getArgs()), + ); + } + return $out; +} + +function export_arguments(array $arguments) { + $output = array(); + foreach ($arguments as $argument) { + $output[] = array( + 'name' => $argument->getName(), + 'default' => $argument->getDefault(), + 'type' => $argument->getType(), + ); + } + return $output; +} + +function export_properties(array $properties) { + $out = array(); + foreach ($properties as $property) { + $prop = array( + 'name' => $property->getName(), + 'line' => $property->getLineNumber(), + 'default' => $property->getDefault(), + 'final' => $property->isFinal(), + 'static' => $property->isStatic(), + 'visibililty' => $property->getVisibility(), + ); + + $docblock = export_docblock($property); + if ($docblock) + $prop['doc'] = $docblock; + + $out[] = $prop; + + } + return $out; +} + +function export_methods(array $methods) { + $out = array(); + foreach ($methods as $method) { + $meth = array( + 'name' => $method->getShortName(), + 'line' => $method->getLineNumber(), + 'final' => $method->isFinal(), + 'abstract' => $method->isAbstract(), + 'static' => $method->isStatic(), + 'visibility' => $method->getVisibility(), + 'arguments' => export_arguments($method->getArguments()), + ); + + $docblock = export_docblock($method); + if ($docblock) + $meth['doc'] = $docblock; + + if (!empty($method->hooks)) + $meth['hooks'] = export_hooks($method->hooks); + + $out[] = $meth; + } + return $out; +} \ No newline at end of file diff --git a/parse.php b/parse.php index 1e52e8394..7f3bd50fe 100755 --- a/parse.php +++ b/parse.php @@ -2,6 +2,7 @@ <?php require 'vendor/autoload.php'; +require 'lib/WP/runner.php'; use phpDocumentor\Reflection\FileReflector; @@ -10,201 +11,6 @@ $wp_dir = $_SERVER['argv'][1]; -function get_wp_files($directory) { - $iterableFiles = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($directory) - ); - $files = array(); - try { - foreach( $iterableFiles as $file ) { - if ($file->getExtension() !== 'php') - continue; - - if ($file->getFilename() === 'class-wp-json-server.php') - continue; - - $files[] = $file->getPathname(); - } - } - catch (UnexpectedValueException $e) { - printf("Directory [%s] contained a directory we can not recurse into", $directory); - } - - return $files; -} - -function parse_files($files, $root) { - $output = array(); - - foreach ($files as $filename) { - $file = new WP_Reflection_FileReflector($filename); - - $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); - $file->setFilename($path); - - $file->process(); - - // TODO proper exporter - $out = array( - 'path' => $file->getFilename(), - ); - - foreach ($file->getIncludes() as $include) { - $out['includes'][] = array( - 'name' => $include->getName(), - 'line' => $include->getLineNumber(), - 'type' => $include->getType(), - ); - } - - foreach ($file->getConstants() as $constant) { - $out['constants'][] = array( - 'name' => $constant->getShortName(), - 'line' => $constant->getLineNumber(), - 'value' => $constant->getValue(), - ); - } - - $hooks = export_hooks($file->hooks); - if (!empty($hooks)) - $out['hooks'] = $hooks; - - foreach ($file->getFunctions() as $function) { - $func = array( - 'name' => $function->getShortName(), - 'line' => $function->getLineNumber(), - 'arguments' => export_arguments($function->getArguments()), - ); - - $docblock = export_docblock($function); - if ($docblock) - $func['doc'] = $docblock; - - if (!empty($function->hooks)) - $func['hooks'] = export_hooks($function->hooks); - - $out['functions'][] = $func; - } - - foreach ($file->getClasses() as $class) { - $cl = array( - 'name' => $class->getShortName(), - 'line' => $class->getLineNumber(), - 'final' => $class->isFinal(), - 'abstract' => $class->isAbstract(), - 'extends' => $class->getParentClass(), - 'implements' => $class->getInterfaces(), - 'properties' => export_properties($class->getProperties()), - 'methods' => export_methods($class->getMethods()), - ); - - $docblock = export_docblock($class); - if ($docblock) - $cl['doc'] = $docblock; - - $out['classes'][] = $cl; - } - - $output[] = $out; - } - - return $output; -} - -function export_docblock($element) { - $docblock = $element->getDocBlock(); - if (!$docblock) - return false; - - $output = array( - 'description' => $docblock->getShortDescription(), - 'long_description' => $docblock->getLongDescription()->getFormattedContents(), - ); - $output['tags'] = array(); - foreach ($docblock->getTags() as $tag) { - $output['tags'][] = array( - 'name' => $tag->getName(), - 'content' => $tag->getContent(), - ); - } - - // TODO output tags - - return $output; -} - -function export_hooks(array $hooks) { - $out = array(); - foreach ($hooks as $hook) { - $out[] = array( - 'name' => $hook->getName(), - 'line' => $hook->getLineNumber(), - 'type' => $hook->getType(), - 'arguments' => implode(', ', $hook->getArgs()), - ); - } - return $out; -} - -function export_arguments(array $arguments) { - $output = array(); - foreach ($arguments as $argument) { - $output[] = array( - 'name' => $argument->getName(), - 'default' => $argument->getDefault(), - 'type' => $argument->getType(), - ); - } - return $output; -} - -function export_properties(array $properties) { - $out = array(); - foreach ($properties as $property) { - $prop = array( - 'name' => $property->getName(), - 'line' => $property->getLineNumber(), - 'default' => $property->getDefault(), - 'final' => $property->isFinal(), - 'static' => $property->isStatic(), - 'visibililty' => $property->getVisibility(), - ); - - $docblock = export_docblock($property); - if ($docblock) - $prop['doc'] = $docblock; - - $out[] = $prop; - - } - return $out; -} - -function export_methods(array $methods) { - $out = array(); - foreach ($methods as $method) { - $meth = array( - 'name' => $method->getShortName(), - 'line' => $method->getLineNumber(), - 'final' => $method->isFinal(), - 'abstract' => $method->isAbstract(), - 'static' => $method->isStatic(), - 'visibility' => $method->getVisibility(), - 'arguments' => export_arguments($method->getArguments()), - ); - - $docblock = export_docblock($method); - if ($docblock) - $meth['doc'] = $docblock; - - if (!empty($method->hooks)) - $meth['hooks'] = export_hooks($method->hooks); - - $out[] = $meth; - } - return $out; -} - $files = get_wp_files($wp_dir); $output = parse_files($files, $wp_dir); From d62eaff3bec24be6e06e9df012cbff482c02aec5 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 24 Feb 2013 09:39:29 +1000 Subject: [PATCH 022/402] Ignore wp-content --- lib/WP/runner.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 5d7608c95..1abd8171d 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -13,6 +13,9 @@ function get_wp_files($directory) { if ($file->getFilename() === 'class-wp-json-server.php') continue; + if (strpos($file->getPath(), 'wp-content') !== false) + continue; + $files[] = $file->getPathname(); } } From 889ae2dc15d90b88a7fd60057dbabfd5e222984c Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 24 Feb 2013 09:39:51 +1000 Subject: [PATCH 023/402] Ensure we always use forward slashes for paths --- lib/WP/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 1abd8171d..e1cf50850 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -39,7 +39,7 @@ function parse_files($files, $root) { // TODO proper exporter $out = array( - 'path' => $file->getFilename(), + 'path' => str_replace( DIRECTORY_SEPARATOR, '/', $file->getFilename() ), ); foreach ($file->getIncludes() as $include) { From f32e546ef1a33cf82a4015ec75a081f0ec39d309 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 24 Feb 2013 09:40:13 +1000 Subject: [PATCH 024/402] Simply docblock handling --- lib/WP/runner.php | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index e1cf50850..2ef0a476d 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -67,12 +67,9 @@ function parse_files($files, $root) { 'name' => $function->getShortName(), 'line' => $function->getLineNumber(), 'arguments' => export_arguments($function->getArguments()), + 'doc' => export_docblock($function), ); - $docblock = export_docblock($function); - if ($docblock) - $func['doc'] = $docblock; - if (!empty($function->hooks)) $func['hooks'] = export_hooks($function->hooks); @@ -89,12 +86,9 @@ function parse_files($files, $root) { 'implements' => $class->getInterfaces(), 'properties' => export_properties($class->getProperties()), 'methods' => export_methods($class->getMethods()), + 'doc' => export_docblock($class), ); - $docblock = export_docblock($class); - if ($docblock) - $cl['doc'] = $docblock; - $out['classes'][] = $cl; } @@ -106,14 +100,19 @@ function parse_files($files, $root) { function export_docblock($element) { $docblock = $element->getDocBlock(); - if (!$docblock) - return false; + if (!$docblock) { + return array( + 'description' => '', + 'long_description' => '', + 'tags' => array(), + ); + } $output = array( 'description' => $docblock->getShortDescription(), 'long_description' => $docblock->getLongDescription()->getFormattedContents(), + 'tags' => array(), ); - $output['tags'] = array(); foreach ($docblock->getTags() as $tag) { $output['tags'][] = array( 'name' => $tag->getName(), @@ -121,8 +120,6 @@ function export_docblock($element) { ); } - // TODO output tags - return $output; } @@ -184,12 +181,9 @@ function export_methods(array $methods) { 'static' => $method->isStatic(), 'visibility' => $method->getVisibility(), 'arguments' => export_arguments($method->getArguments()), + 'doc' => export_docblock($method), ); - $docblock = export_docblock($method); - if ($docblock) - $meth['doc'] = $docblock; - if (!empty($method->hooks)) $meth['hooks'] = export_hooks($method->hooks); From 4a0765456a7e0e834e62a183591881e8dae72fbb Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 24 Feb 2013 09:41:31 +1000 Subject: [PATCH 025/402] Actually commit the plugin part I'm an idiot. --- plugin.php | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100755 plugin.php diff --git a/plugin.php b/plugin.php new file mode 100755 index 000000000..fba95637e --- /dev/null +++ b/plugin.php @@ -0,0 +1,358 @@ +<?php +/** + * Plugin Name: WordPress API Documentor + * Description: Generates API documentation for WordPress and imports it into WP. + * Author: Ryan McCue and Jon Cave + * Version: 0.1 + */ + +namespace WPAPIDocumentor; + +const TAXONOMY_FILE = 'wpapi-source-file'; +const TAXONOMY_PACKAGE = 'wpapi-package'; + +const POSTTYPE_FUNCTION = 'wpapi-function'; +const POSTTYPE_CLASS = 'wpapi-class'; +const POSTTYPE_HOOK = 'wpapi-hook'; + +bootstrap(); +register_activation_hook( __FILE__, '\\WPAPIDocumentor\\activate' ); +register_deactivation_hook( __FILE__, '\\WPAPIDocumentor\\deactivate' ); + +function bootstrap() { + add_action( 'init', '\\WPAPIDocumentor\\register_types' ); + add_action( 'admin_init', '\\WPAPIDocumentor\\run_import' ); +} + +function activate() { + wp_schedule_event( time(), 'hourly', 'wpapi_import' ); +} + +function deactivate() { + wp_clear_scheduled_hook( 'wpapi_import' ); +} + +function run_import() { + if (strpos($_SERVER['REQUEST_URI'], 'tools.php') === false) + return; + + set_time_limit(0); + header('Content-Type: text/plain'); + $importer = new Importer; + $importer->parseFile( __DIR__ . '/output.json' ); + die(); +} + +function register_types() { + register_taxonomy( TAXONOMY_FILE, null, array( + 'label' => __( 'Files', 'wpapi' ), + 'public' => true, + #'show_ui' => false, + 'hierarchical' => true, + 'rewrite' => array( + 'slug' => 'file', + ), + 'sort' => false, + ) ); + register_taxonomy( TAXONOMY_PACKAGE, null, array( + 'label' => __( 'Packages', 'wpapi' ), + 'public' => true, + 'show_ui' => false, + 'hierarchical' => true, + 'rewrite' => array( + 'slug' => 'package', + ), + 'sort' => false, + ) ); + register_post_type( POSTTYPE_FUNCTION, array( + 'label' => __( 'Functions', 'wpapi' ), + 'public' => true, + #'show_ui' => false, + 'rewrite' => array( + 'slug' => 'function' + ), + 'taxonomies' => array( + TAXONOMY_FILE, + TAXONOMY_PACKAGE, + ), + 'hierarchical' => true, + 'supports' => array( 'title', 'editor', 'excerpt', 'comments', 'custom-fields', 'page-attributes' ) + ) ); + register_post_type( POSTTYPE_CLASS, array( + 'label' => __( 'Classes', 'wpapi' ), + 'public' => true, + #'show_ui' => false, + 'rewrite' => array( + 'slug' => 'class' + ), + 'taxonomies' => array( + TAXONOMY_FILE, + TAXONOMY_PACKAGE, + ), + 'hierarchical' => true, + 'supports' => array( 'title', 'editor', 'excerpt', 'comments', 'custom-fields', 'page-attributes' ) + ) ); + register_post_type( POSTTYPE_HOOK, array( + 'label' => __( 'Hooks', 'wpapi' ), + 'public' => true, + #'show_ui' => false, + 'rewrite' => array( + 'slug' => 'hook' + ), + 'taxonomies' => array( + TAXONOMY_FILE, + TAXONOMY_PACKAGE, + ), + ) ); +} + +class Importer { + public static function getFileTerm( $file, $create = true ) { + $slug = sanitize_title( str_replace( '/', '_', $file ) ); + $term = get_term_by( 'slug', $slug, TAXONOMY_FILE ); + + if ( ! empty( $term ) ) + $term = (int) $term->term_id; + + if ( empty( $term ) && $create ) { + $data = wp_insert_term( add_magic_quotes( $file ), TAXONOMY_FILE, array( 'slug' => $slug ) ); + if ( is_wp_error( $data ) ) { + return $data; + } + $term = (int) $data['term_id']; + } + + return apply_filters( 'wpapi_file_term', $term, $file, $create, $slug ); + } + + public static function getHookDescription( $hook ) { + return apply_filters( 'wpapi_hook_description', $hook->name . ' is a ' . $hook->type, $hook ); + } + + public function parseFile( $path ) { + $contents = file_get_contents( $path ); + $data = json_decode($contents); + return $this->parse( $data ); + } + + public function parse( $data ) { + wp_defer_term_counting( true ); + wp_defer_comment_counting( true ); + + foreach ( $data as $file ) { + $this->handleFile( $file ); + } + + wp_defer_term_counting( false ); + wp_defer_comment_counting( false ); + var_dump($this->log); + } + + protected function handleFile( $file ) { + $this->file = self::getFileTerm( $file->path ); + if ( is_wp_error( $this->file) ) { + var_dump( $this->file ); + return; + } + + #foreach ( $file->constants as $constant ) { + # $this->handleConstant( $constant ); + #} + + if ( ! empty( $file->hooks ) ) { + foreach ( $file->hooks as $hook ) { + $this->handleHook( $hook ); + } + } + + if ( ! empty( $file->functions ) ) { + foreach ( $file->functions as $function ) { + $this->handleFunction( $function ); + } + } + + if ( ! empty( $file->classes ) ) { + foreach ( $file->classes as $class ) { + $this->handleClass( $class ); + } + } + + unset($this->file); + } + + /** + * Handle hook data + * + * @param stdClass $hook Hook data + * @param int|null $function Associated function + */ + public function handleHook( $hook, $function = null ) { + $ID = $this->insertHook( $hook, $function ); + + if ( is_wp_error( $ID ) ) { + $this->log[] = $ID; + return; + } + + wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); + + update_post_meta( $ID, '_wpapi_args', $hook->arguments ); + update_post_meta( $ID, '_wpapi_line_num', $hook->line ); + update_post_meta( $ID, '_wpapi_type', $hook->type ); + } + + /** + * Insert a hook into the database + * + * @param stdClass $hook Hook data + * @param int|null $function Associated function + * @return int|WP_Error + */ + protected function insertHook( $data, $function = null ) { + $slug = sanitize_title( $data->name ); + + $post_data = array( + 'post_type' => POSTTYPE_HOOK, + 'post_parent' => $function, + 'post_title' => $data->name, + 'post_name' => $slug, + 'post_status' => 'publish', + 'post_content' => self::getHookDescription( $data ), + ); + + $search = array( + 'name' => $slug, + 'post_type' => POSTTYPE_HOOK, + 'post_parent' => $function, + ); + $existing = get_posts($search); + + if ( !empty( $existing ) ) { + $post_data['ID'] = $existing[0]->ID; + $ID = wp_update_post( $post_data, true ); + } + else { + $ID = wp_insert_post( $post_data, true ); + } + + return $ID; + } + + public function handleFunction( $function, $class = null ) { + $ID = $this->insertFunction( $function, $class ); + + if ( is_wp_error( $ID ) ) { + $this->log[] = $ID; + return; + } + + wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); + + update_post_meta( $ID, '_wpapi_args', $function->arguments ); + update_post_meta( $ID, '_wpapi_line_num', $function->line ); + update_post_meta( $ID, '_wpapi_tags', $function->doc->tags ); + + if ( null !== $class ) { + update_post_meta( $ID, '_wpapi_final', (bool) $function->final ); + update_post_meta( $ID, '_wpapi_abstract', (bool) $function->abstract ); + update_post_meta( $ID, '_wpapi_static', (bool) $function->static ); + update_post_meta( $ID, '_wpapi_visibility', $function->visibility ); + } + + if ( ! empty( $function->hooks ) ) { + foreach ( $function->hooks as $hook ) { + $this->handleHook( $hook, $ID ); + } + } + } + + /** + * Insert a function into the database + * + * @param stdClass $data Function data + * @return int|WP_Error + */ + protected function insertFunction( $data, $class = 0 ) { + $slug = sanitize_title( $data->name ); + + $post_data = array( + 'post_name' => $slug, + 'post_type' => POSTTYPE_FUNCTION, + 'post_parent' => $class, + 'post_title' => $data->name, + 'post_status' => 'publish', + 'post_content' => '<p>' . $data->doc->description . '</p>' . "\n\n" . $data->doc->long_description, + 'post_excerpt' => $data->doc->description, + ); + + $search = array( + 'name' => $slug, + 'post_type' => POSTTYPE_FUNCTION, + 'post_parent' => $class, + ); + $existing = get_posts($search); + + if ( !empty( $existing ) ) { + $post_data['ID'] = $existing[0]->ID; + $ID = wp_update_post( $post_data, true ); + } + else { + $ID = wp_insert_post( $post_data, true ); + } + + return $ID; + } + + protected function handleClass( $class ) { + $ID = self::insertClass( $class ); + + if ( is_wp_error( $ID ) ) { + $this->log[] = $ID; + return; + } + + wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); + + update_post_meta( $ID, '_wpapi_line_num', $class->line ); + update_post_meta( $ID, '_wpapi_properties', $class->properties ); + + foreach ( $class->methods as $method ) { + $this->handleFunction( $method, $ID ); + } + } + + /** + * Insert a class into the database + * + * @param stdClass $data class data + * @return int|WP_Error + */ + protected function insertClass( $data ) { + $slug = sanitize_title( $data->name ); + + $post_data = array( + 'name' => $slug, + 'post_type' => POSTTYPE_CLASS, + 'post_title' => $data->name, + 'post_status' => 'publish', + 'post_content' => '<p>' . $data->doc->description . '</p>' . "\n\n" . $data->doc->long_description, + 'post_excerpt' => $data->doc->description, + ); + + $search = array( + 'name' => $slug, + 'post_type' => POSTTYPE_CLASS, + ); + $existing = get_posts($search); + + if ( !empty( $existing ) ) { + $post_data['ID'] = $existing[0]->ID; + $ID = wp_update_post( $post_data, true ); + } + else { + $ID = wp_insert_post( $post_data, true ); + } + + return $ID; + } +} \ No newline at end of file From 08d0fffb9eda42310785c887064a0a4bbc4a337a Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Thu, 28 Feb 2013 11:54:51 +0000 Subject: [PATCH 026/402] Ignore composer folders --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0f215f819..8b3e4795b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/vendor/ -output.json +composer.phar +vendor/* \ No newline at end of file From 24c24d3ebc81d3969ce0e26c3f2ab2f291223975 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Thu, 28 Feb 2013 12:16:11 +0000 Subject: [PATCH 027/402] Don't block parsing files inside the wp-content folder Currently, WP Parser is meant to be run in the root directory of a WordPress site to generate documentation for WordPress core, and therefore ignoring everything in wp-content makes sense. However, this makes it harder to generate the JSON in a specific directory -- say for a specific plugin. One solution is to require people to check out a copy of that plugin outside a wp-content folder, and run the documentation there. However, as WP Parser is hopefully going to be used by all great plugins, this puts a speedbump in the way of the plugin authors. The onus should be on the person running WP Parser to decide which directories/files need to be looked at, rather than blocking all wp-content paths. --- lib/WP/runner.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 2ef0a476d..b4919bc00 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -13,9 +13,6 @@ function get_wp_files($directory) { if ($file->getFilename() === 'class-wp-json-server.php') continue; - if (strpos($file->getPath(), 'wp-content') !== false) - continue; - $files[] = $file->getPathname(); } } From fcffbc506945f1770e7015be9327bee7762dde01 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 4 Mar 2013 12:31:53 +0000 Subject: [PATCH 028/402] remove gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 8b3e4795b..000000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -composer.phar -vendor/* \ No newline at end of file From ebc412a980909825c92d6bf3e2ef11589ea5eb37 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 4 Mar 2013 12:32:12 +0000 Subject: [PATCH 029/402] Committing vendor directory and other composer files --- composer.lock | 50 +- composer.phar | Bin 0 -> 688018 bytes vendor/autoload.php | 7 + vendor/composer/ClassLoader.php | 240 +++++++++ vendor/composer/autoload_classmap.php | 9 + vendor/composer/autoload_namespaces.php | 13 + vendor/composer/autoload_real.php | 43 ++ vendor/composer/installed.json | 197 ++++++++ .../reflection-docblock/.gitignore | 2 + .../reflection-docblock/.travis.yml | 23 + .../reflection-docblock/README.md | 57 +++ .../reflection-docblock/composer.json | 18 + .../reflection-docblock/composer.lock | 475 ++++++++++++++++++ .../reflection-docblock/phpunit.xml.dist | 14 + .../src/phpDocumentor/Reflection/DocBlock.php | 376 ++++++++++++++ .../Reflection/DocBlock/Context.php | 154 ++++++ .../Reflection/DocBlock/Description.php | 222 ++++++++ .../Reflection/DocBlock/Location.php | 76 +++ .../phpDocumentor/Reflection/DocBlock/Tag.php | 379 ++++++++++++++ .../Reflection/DocBlock/Tag/AuthorTag.php | 131 +++++ .../Reflection/DocBlock/Tag/CoversTag.php | 24 + .../Reflection/DocBlock/Tag/DeprecatedTag.php | 26 + .../Reflection/DocBlock/Tag/ExampleTag.php | 156 ++++++ .../Reflection/DocBlock/Tag/LinkTag.php | 81 +++ .../Reflection/DocBlock/Tag/MethodTag.php | 163 ++++++ .../Reflection/DocBlock/Tag/ParamTag.php | 103 ++++ .../DocBlock/Tag/PropertyReadTag.php | 24 + .../Reflection/DocBlock/Tag/PropertyTag.php | 24 + .../DocBlock/Tag/PropertyWriteTag.php | 24 + .../Reflection/DocBlock/Tag/ReturnTag.php | 98 ++++ .../Reflection/DocBlock/Tag/SeeTag.php | 81 +++ .../Reflection/DocBlock/Tag/SinceTag.php | 26 + .../Reflection/DocBlock/Tag/SourceTag.php | 137 +++++ .../Reflection/DocBlock/Tag/ThrowsTag.php | 24 + .../Reflection/DocBlock/Tag/UsesTag.php | 24 + .../Reflection/DocBlock/Tag/VarTag.php | 24 + .../Reflection/DocBlock/Tag/VersionTag.php | 108 ++++ .../Reflection/DocBlock/Type/Collection.php | 221 ++++++++ .../Reflection/DocBlock/DescriptionTest.php | 245 +++++++++ .../Reflection/DocBlock/Tag/CoversTagTest.php | 86 ++++ .../DocBlock/Tag/DeprecatedTagTest.php | 115 +++++ .../DocBlock/Tag/ExampleTagTest.php | 203 ++++++++ .../Reflection/DocBlock/Tag/LinkTagTest.php | 87 ++++ .../Reflection/DocBlock/Tag/MethodTagTest.php | 127 +++++ .../Reflection/DocBlock/Tag/ParamTagTest.php | 118 +++++ .../Reflection/DocBlock/Tag/ReturnTagTest.php | 102 ++++ .../Reflection/DocBlock/Tag/SeeTagTest.php | 86 ++++ .../Reflection/DocBlock/Tag/SinceTagTest.php | 115 +++++ .../Reflection/DocBlock/Tag/SourceTagTest.php | 116 +++++ .../Reflection/DocBlock/Tag/ThrowsTagTest.php | 102 ++++ .../Reflection/DocBlock/Tag/UsesTagTest.php | 86 ++++ .../Reflection/DocBlock/Tag/VarTagTest.php | 94 ++++ .../DocBlock/Tag/VersionTagTest.php | 115 +++++ .../Reflection/DocBlock/TagTest.php | 313 ++++++++++++ .../DocBlock/Type/CollectionTest.php | 195 +++++++ .../phpDocumentor/Reflection/DocBlockTest.php | 297 +++++++++++ 56 files changed, 6431 insertions(+), 25 deletions(-) create mode 100755 composer.phar create mode 100644 vendor/autoload.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/phpdocumentor/reflection-docblock/.gitignore create mode 100644 vendor/phpdocumentor/reflection-docblock/.travis.yml create mode 100644 vendor/phpdocumentor/reflection-docblock/README.md create mode 100644 vendor/phpdocumentor/reflection-docblock/composer.json create mode 100644 vendor/phpdocumentor/reflection-docblock/composer.lock create mode 100644 vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php create mode 100644 vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php diff --git a/composer.lock b/composer.lock index 7c45eb697..bf5bbda1d 100644 --- a/composer.lock +++ b/composer.lock @@ -18,7 +18,6 @@ "require": { "php": ">=5.3" }, - "time": "2012-07-15 16:31:27", "type": "library", "extra": { "branch-alias": { @@ -58,26 +57,26 @@ "homepage": "http://github.com/dflydev/dflydev-markdown", "keywords": [ "markdown" - ] + ], + "time": "2012-07-15 16:31:27" }, { "name": "nikic/php-parser", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser", - "reference": "81d20bf10e33b9fca0ddf082322a74df1f71c9f8" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/81d20bf10e33b9fca0ddf082322a74df1f71c9f8", - "reference": "81d20bf10e33b9fca0ddf082322a74df1f71c9f8", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", + "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", "shasum": "" }, "require": { "php": ">=5.2" }, - "time": "2013-01-15 17:21:42", "type": "library", "autoload": { "psr-0": { @@ -95,35 +94,35 @@ ], "description": "A PHP parser written in PHP", "keywords": [ - "php", - "parser" - ] + "parser", + "php" + ], + "time": "2013-02-14 20:49:08" }, { "name": "phpdocumentor/reflection", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/Reflection", - "reference": "fc0fc4caeb9a4a9463cef8bd1153d830c781f296" + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc0fc4caeb9a4a9463cef8bd1153d830c781f296", - "reference": "fc0fc4caeb9a4a9463cef8bd1153d830c781f296", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/257f10cd44bed0a8257c30ef9e218cb115867d40", + "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40", "shasum": "" }, "require": { - "php": ">=5.3.3", "nikic/php-parser": "dev-master", + "php": ">=5.3.3", "phpdocumentor/reflection-docblock": "2.0.0a2" }, "require-dev": { "behat/behat": ">=2.4@stable", - "phpunit/phpunit": "3.7.*@stable", - "mockery/mockery": ">=0.7.0@stable" + "mockery/mockery": ">=0.7.0@stable", + "phpunit/phpunit": "3.7.*@stable" }, - "time": "2013-02-01 13:29:56", "type": "library", "autoload": { "psr-0": { @@ -141,11 +140,12 @@ "description": "Reflection library to do Static Analysis for PHP Projects", "homepage": "http://www.phpdoc.org", "keywords": [ + "phpDocumentor", "phpdoc", "reflection", - "static analysis", - "phpDocumentor" - ] + "static analysis" + ], + "time": "2013-02-01 21:05:30" }, { "name": "phpdocumentor/reflection-docblock", @@ -162,13 +162,12 @@ "shasum": "" }, "require": { - "php": ">=5.3.3", - "dflydev/markdown": "1.0.*" + "dflydev/markdown": "1.0.*", + "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "3.7.*@stable" }, - "time": "2012-12-02 20:26:45", "type": "library", "autoload": { "psr-0": { @@ -186,7 +185,8 @@ "name": "Mike van Riel", "email": "mike.vanriel@naenius.com" } - ] + ], + "time": "2012-12-02 20:26:45" } ], "packages-dev": null, diff --git a/composer.phar b/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..bf2a3d0ff2f9707b05c63170215a337082a455ac GIT binary patch literal 688018 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¨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�-}CU|3w+a}~SLLt$T6s3FS-l!1>sf4^cK3Nu@ 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≷9;WH$epNxB4vtt$bpn;|G5GWJYc<i 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 literal 0 HcmV?d00001 diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 000000000..25e78b541 --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ +<?php + +// autoload.php generated by Composer + +require_once __DIR__ . '/composer' . '/autoload_real.php'; + +return ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0::getLoader(); diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php new file mode 100644 index 000000000..596c65d0f --- /dev/null +++ b/vendor/composer/ClassLoader.php @@ -0,0 +1,240 @@ +<?php + +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0 class loader + * + * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Jordi Boggiano <j.boggiano@seld.be> + */ +class ClassLoader +{ + private $prefixes = array(); + private $fallbackDirs = array(); + private $useIncludePath = false; + private $classMap = array(); + + public function getPrefixes() + { + return $this->prefixes; + } + + public function getFallbackDirs() + { + return $this->fallbackDirs; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of classes, merging with any others previously set. + * + * @param string $prefix The classes prefix + * @param array|string $paths The location(s) of the classes + * @param bool $prepend Prepend the location(s) + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirs = array_merge( + (array) $paths, + $this->fallbackDirs + ); + } else { + $this->fallbackDirs = array_merge( + $this->fallbackDirs, + (array) $paths + ); + } + + return; + } + if (!isset($this->prefixes[$prefix])) { + $this->prefixes[$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixes[$prefix] = array_merge( + (array) $paths, + $this->prefixes[$prefix] + ); + } else { + $this->prefixes[$prefix] = array_merge( + $this->prefixes[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of classes, replacing any others previously set. + * + * @param string $prefix The classes prefix + * @param array|string $paths The location(s) of the classes + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirs = (array) $paths; + + return; + } + $this->prefixes[$prefix] = (array) $paths; + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True, if loaded + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + include $file; + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|null The path, if found + */ + public function findFile($class) + { + if ('\\' == $class[0]) { + $class = substr($class, 1); + } + + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $pos)) . DIRECTORY_SEPARATOR; + $className = substr($class, $pos + 1); + } else { + // PEAR-like class name + $classPath = null; + $className = $class; + } + + $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; + + foreach ($this->prefixes as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { + return $dir . DIRECTORY_SEPARATOR . $classPath; + } + } + } + } + + foreach ($this->fallbackDirs as $dir) { + if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { + return $dir . DIRECTORY_SEPARATOR . $classPath; + } + } + + if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) { + return $file; + } + + return $this->classMap[$class] = false; + } +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..4a9177d7f --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ +<?php + +// autoload_classmap.php generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000..70b49ddc0 --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,13 @@ +<?php + +// autoload_namespaces.php generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = dirname($vendorDir); + +return array( + 'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src/', $vendorDir . '/phpdocumentor/reflection/src/', $vendorDir . '/phpdocumentor/reflection/tests/unit/', $vendorDir . '/phpdocumentor/reflection/tests/mocks/'), + 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', + 'WP' => $baseDir . '/lib/', + 'PHPParser' => $vendorDir . '/nikic/php-parser/lib/', +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 000000000..da2cd6361 --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,43 @@ +<?php + +// autoload_real.php generated by Composer + +class ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0 +{ + private static $loader; + + public static function loadClassLoader($class) + { + if ('Composer\Autoload\ClassLoader' === $class) { + require __DIR__ . '/ClassLoader.php'; + } + } + + public static function getLoader() + { + if (null !== self::$loader) { + return self::$loader; + } + + spl_autoload_register(array('ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0', 'loadClassLoader')); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + spl_autoload_unregister(array('ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0', 'loadClassLoader')); + + $vendorDir = dirname(__DIR__); + $baseDir = dirname($vendorDir); + + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->add($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + + $loader->register(true); + + return $loader; + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 000000000..2a0a0e357 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,197 @@ +[ + { + "name": "dflydev/markdown", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-markdown.git", + "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc" + }, + "dist": { + "type": "zip", + "url": "https://github.com/dflydev/dflydev-markdown/archive/11f8faa2d17f717a038b4d372abd22a6ac4a15dc.zip", + "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "time": "2012-07-15 16:31:27", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "source", + "autoload": { + "psr-0": { + "dflydev\\markdown": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Michel Fortin", + "homepage": "http://michelf.com" + }, + { + "name": "John Gruber", + "homepage": "http://daringfireball.net" + } + ], + "description": "PHP Markdown & Extra", + "homepage": "http://github.com/dflydev/dflydev-markdown", + "keywords": [ + "markdown" + ] + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.0a2", + "version_normalized": "2.0.0.0-alpha2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock", + "reference": "2.0.0a2" + }, + "dist": { + "type": "zip", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", + "reference": "2.0.0a2", + "shasum": "" + }, + "require": { + "dflydev/markdown": "1.0.*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@stable" + }, + "time": "2012-12-02 20:26:45", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ] + }, + { + "name": "nikic/php-parser", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", + "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "time": "2013-02-14 20:49:08", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-0": { + "PHPParser": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ] + }, + { + "name": "phpdocumentor/reflection", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/257f10cd44bed0a8257c30ef9e218cb115867d40", + "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40", + "shasum": "" + }, + "require": { + "nikic/php-parser": "dev-master", + "php": ">=5.3.3", + "phpdocumentor/reflection-docblock": "2.0.0a2" + }, + "require-dev": { + "behat/behat": ">=2.4@stable", + "mockery/mockery": ">=0.7.0@stable", + "phpunit/phpunit": "3.7.*@stable" + }, + "time": "2013-02-01 21:05:30", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ] + } +] diff --git a/vendor/phpdocumentor/reflection-docblock/.gitignore b/vendor/phpdocumentor/reflection-docblock/.gitignore new file mode 100644 index 000000000..331c58f73 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/.gitignore @@ -0,0 +1,2 @@ +.idea +vendor \ No newline at end of file diff --git a/vendor/phpdocumentor/reflection-docblock/.travis.yml b/vendor/phpdocumentor/reflection-docblock/.travis.yml new file mode 100644 index 000000000..6aefeaa9f --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/.travis.yml @@ -0,0 +1,23 @@ +language: php +php: + - 5.3.3 + - 5.3 + - 5.4 + +script: + - vendor/phpunit/phpunit/composer/bin/phpunit + +before_script: + - sudo apt-get -qq update > /dev/null + - phpenv rehash > /dev/null + - composer selfupdate --quiet + - composer install --dev + - vendor/phpunit/phpunit/composer/bin/phpunit + - composer update --dev + +notifications: + irc: "irc.freenode.org#phpdocumentor" + email: + - mike.vanriel@naenius.com + - ashnazg@php.net + - boen.robot@gmail.com diff --git a/vendor/phpdocumentor/reflection-docblock/README.md b/vendor/phpdocumentor/reflection-docblock/README.md new file mode 100644 index 000000000..6405d1a10 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/README.md @@ -0,0 +1,57 @@ +The ReflectionDocBlock Component [![Build Status](https://secure.travis-ci.org/phpDocumentor/ReflectionDocBlock.png)](https://travis-ci.org/phpDocumentor/ReflectionDocBlock) +================================ + +Introduction +------------ + +The ReflectionDocBlock component of phpDocumentor provides a DocBlock parser +that is 100% compatible with the [PHPDoc standard](http://phpdoc.org/docs/latest). + +With this component, a library can provide support for annotations via DocBlocks +or otherwise retrieve information that is embedded in a DocBlock. + +> **Note**: *this is a core component of phpDocumentor and is constantly being +> optimized for performance.* + +Installation +------------ + +You can install the component in the following ways: + +* Use the official Github repository (https://github.com/phpDocumentor/ReflectionDocBlock) +* Via Composer (http://packagist.org/packages/phpdocumentor/reflection-docblock) + +Usage +----- + +The ReflectionDocBlock component is designed to work in an identical fashion to +PHP's own Reflection extension (http://php.net/manual/en/book.reflection.php). + +Parsing can be initiated by instantiating the +`\phpDocumentor\Reflection\DocBlock()` class and passing it a string containing +a DocBlock (including asterisks) or by passing an object supporting the +`getDocComment()` method. + +> *Examples of objects having the `getDocComment()` method are the +> `ReflectionClass` and the `ReflectionMethod` classes of the PHP +> Reflection extension* + +Example: + + $class = new ReflectionClass('MyClass'); + $phpdoc = new \phpDocumentor\Reflection\DocBlock($class); + +or + + $docblock = <<<DOCBLOCK + /** + * This is a short description. + * + * This is a *long* description. + * + * @return void + */ + DOCBLOCK; + + $phpdoc = new \phpDocumentor\Reflection\DocBlock($docblock); + diff --git a/vendor/phpdocumentor/reflection-docblock/composer.json b/vendor/phpdocumentor/reflection-docblock/composer.json new file mode 100644 index 000000000..097174776 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/composer.json @@ -0,0 +1,18 @@ +{ + "name": "phpdocumentor/reflection-docblock", + "type": "library", + "license": "MIT", + "authors": [ + {"name": "Mike van Riel", "email": "mike.vanriel@naenius.com"} + ], + "require": { + "php": ">=5.3.3", + "dflydev/markdown": "1.0.*" + }, + "autoload": { + "psr-0": {"phpDocumentor": ["src/"]} + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@stable" + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/composer.lock b/vendor/phpdocumentor/reflection-docblock/composer.lock new file mode 100644 index 000000000..b70f57fc4 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/composer.lock @@ -0,0 +1,475 @@ +{ + "hash": "c6115c20a4a284f6ca14e676e788b4d3", + "packages": [ + { + "name": "dflydev/markdown", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-markdown.git", + "reference": "v1.0.2" + }, + "dist": { + "type": "zip", + "url": "https://github.com/dflydev/dflydev-markdown/zipball/v1.0.2", + "reference": "v1.0.2", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "time": "2012-01-15 19:36:37", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "dflydev\\markdown": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "New BSD License" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Michel Fortin", + "homepage": "http://michelf.com" + }, + { + "name": "John Gruber", + "homepage": "http://daringfireball.net" + } + ], + "description": "PHP Markdown & Extra", + "homepage": "http://github.com/dflydev/dflydev-markdown", + "keywords": [ + "markdown" + ] + } + ], + "packages-dev": [ + { + "name": "phpunit/php-code-coverage", + "version": "1.2.7", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "1.2.7" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/php-code-coverage/archive/1.2.7.zip", + "reference": "1.2.7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": ">=1.3.0@stable", + "phpunit/php-token-stream": ">=1.1.3@stable", + "phpunit/php-text-template": ">=1.1.1@stable" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.0.5" + }, + "time": "2012-12-02 14:54:55", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "testing", + "coverage", + "xunit" + ] + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.3.3", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "1.3.3" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3", + "reference": "1.3.3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-10-11 04:44:38", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "File/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "filesystem", + "iterator" + ] + }, + { + "name": "phpunit/php-text-template", + "version": "1.1.4", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/php-text-template.git", + "reference": "1.1.4" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4", + "reference": "1.1.4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-10-31 11:15:28", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "Text/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ] + }, + { + "name": "phpunit/php-timer", + "version": "1.0.4", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/php-timer.git", + "reference": "1.0.4" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/php-timer/zipball/1.0.4", + "reference": "1.0.4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-10-11 04:45:58", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "timer" + ] + }, + { + "name": "phpunit/php-token-stream", + "version": "1.1.5", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1.1.5" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/php-token-stream/zipball/1.1.5", + "reference": "1.1.5", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "time": "2012-10-11 04:47:14", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "tokenizer" + ] + }, + { + "name": "phpunit/phpunit", + "version": "3.7.10", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/phpunit.git", + "reference": "3.7.10" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/phpunit/archive/3.7.10.zip", + "reference": "3.7.10", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": ">=1.3.1", + "phpunit/php-text-template": ">=1.1.1", + "phpunit/php-code-coverage": ">=1.2.1", + "phpunit/php-timer": ">=1.0.2", + "phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0", + "symfony/yaml": ">=2.1.0", + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*" + }, + "suggest": { + "phpunit/php-invoker": ">=1.1.0", + "ext-json": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*" + }, + "time": "2012-12-02 14:56:55", + "bin": [ + "composer/bin/phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHPUnit/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "", + "../../symfony/yaml/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "testing", + "phpunit", + "xunit" + ] + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "1.2.2", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "1.2.2" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.2.zip", + "reference": "1.2.2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-text-template": ">=1.1.1@stable" + }, + "suggest": { + "ext-soap": "*" + }, + "time": "2012-11-05 10:39:13", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHPUnit/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ] + }, + { + "name": "symfony/yaml", + "version": "v2.1.4", + "target-dir": "Symfony/Component/Yaml", + "source": { + "type": "git", + "url": "https://github.com/symfony/Yaml", + "reference": "v2.1.4" + }, + "dist": { + "type": "zip", + "url": "https://github.com/symfony/Yaml/archive/v2.1.4.zip", + "reference": "v2.1.4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-11-08 09:51:48", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Symfony\\Component\\Yaml": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "http://symfony.com" + } + ], + "aliases": [ + + ], + "minimum-stability": "stable", + "stability-flags": { + "phpunit/phpunit": 0 + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist new file mode 100644 index 000000000..f67ad2a20 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> + +<phpunit colors="true" strict="true" bootstrap="vendor/autoload.php"> + <testsuites> + <testsuite name="phpDocumentor\Reflection\DocBlock"> + <directory>./tests/</directory> + </testsuite> + </testsuites> + <filter> + <whitelist> + <directory suffix=".php">./src/</directory> + </whitelist> + </filter> +</phpunit> diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php new file mode 100644 index 000000000..bf363459d --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php @@ -0,0 +1,376 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\Context; +use phpDocumentor\Reflection\DocBlock\Location; + +/** + * Parses the DocBlock for any structure. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class DocBlock implements \Reflector +{ + /** @var string The opening line for this docblock. */ + protected $short_description = ''; + + /** + * @var DocBlock\Description The actual + * description for this docblock. + */ + protected $long_description = null; + + /** + * @var Tag[] An array containing all + * the tags in this docblock; except inline. + */ + protected $tags = array(); + + /** @var Context Information about the context of this DocBlock. */ + protected $context = null; + + /** @var Location Information about the location of this DocBlock. */ + protected $location = null; + + /** + * Parses the given docblock and populates the member fields. + * + * The constructor may also receive namespace information such as the + * current namespace and aliases. This information is used by some tags + * (e.g. @return, @param, etc.) to turn a relative Type into a FQCN. + * + * @param \Reflector|string $docblock A docblock comment (including + * asterisks) or reflector supporting the getDocComment method. + * @param Context $context The context in which the DocBlock + * occurs. + * @param Location $location The location within the file that this + * DocBlock occurs in. + * + * @throws \InvalidArgumentException if the given argument does not have the + * getDocComment method. + */ + public function __construct( + $docblock, + Context $context = null, + Location $location = null + ) { + if (is_object($docblock)) { + if (!method_exists($docblock, 'getDocComment')) { + throw new \InvalidArgumentException( + 'Invalid object passed; the given reflector must support ' + . 'the getDocComment method' + ); + } + + $docblock = $docblock->getDocComment(); + } + + $docblock = $this->cleanInput($docblock); + + list($short, $long, $tags) = $this->splitDocBlock($docblock); + $this->short_description = $short; + $this->long_description = new DocBlock\Description($long, $this); + $this->parseTags($tags); + + $this->context = $context; + $this->location = $location; + } + + /** + * Strips the asterisks from the DocBlock comment. + * + * @param string $comment String containing the comment text. + * + * @return string + */ + protected function cleanInput($comment) + { + $comment = trim( + preg_replace( + '#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', + '$1', + $comment + ) + ); + + // reg ex above is not able to remove */ from a single line docblock + if (substr($comment, -2) == '*/') { + $comment = trim(substr($comment, 0, -2)); + } + + // normalize strings + $comment = str_replace(array("\r\n", "\r"), "\n", $comment); + + return $comment; + } + + /** + * Splits the DocBlock into a short description, long description and + * block of tags. + * + * @param string $comment Comment to split into the sub-parts. + * + * @author RichardJ Special thanks to RichardJ for the regex responsible + * for the split. + * + * @return string[] containing the short-, long description and an element + * containing the tags. + */ + protected function splitDocBlock($comment) + { + if (strpos($comment, '@') === 0) { + $matches = array('', '', $comment); + } else { + // clears all extra horizontal whitespace from the line endings + // to prevent parsing issues + $comment = preg_replace('/\h*$/Sum', '', $comment); + + /* + * Splits the docblock into a short description, long description and + * tags section + * - The short description is started from the first character until + * a dot is encountered followed by a whitespace OR + * two consecutive newlines (horizontal whitespace is taken into + * account to consider spacing errors) + * - The long description, any character until a new line is + * encountered followed by an @ and word characters (a tag). + * This is optional. + * - Tags; the remaining characters + * + * Big thanks to RichardJ for contributing this Regular Expression + */ + preg_match( + '/ + \A ( + [^\n.]+ + (?: + (?! \. \s | \n{2} ) # disallow the first seperator here + [\n.] (?! [ \t]* @\pL ) # disallow second seperator + [^\n.]+ + )* + \.? + ) + (?: + \s* # first seperator (actually newlines but it\'s all whitespace) + (?! @\pL ) # disallow the rest, to make sure this one doesn\'t match, + #if it doesn\'t exist + ( + [^\n]+ + (?: \n+ + (?! [ \t]* @\pL ) # disallow second seperator (@param) + [^\n]+ + )* + ) + )? + (\s+ [\s\S]*)? # everything that follows + /ux', + $comment, + $matches + ); + array_shift($matches); + } + + while (count($matches) < 3) { + $matches[] = ''; + } + return $matches; + } + + /** + * Creates the tag objects. + * + * @param string $tags Tag block to parse. + * + * @return void + */ + protected function parseTags($tags) + { + $result = array(); + $tags = trim($tags); + if ('' !== $tags) { + if ('@' !== $tags[0]) { + throw new \LogicException( + 'A tag block started with text instead of an actual tag,' + . ' this makes the tag block invalid: ' . $tags + ); + } + foreach (explode("\n", $tags) as $tag_line) { + if (trim($tag_line) === '') { + continue; + } + + if (isset($tag_line[0]) && ($tag_line[0] === '@')) { + $result[] = $tag_line; + } else { + $result[count($result) - 1] .= PHP_EOL . $tag_line; + } + } + + // create proper Tag objects + foreach ($result as $key => $tag_line) { + $result[$key] = Tag::createInstance($tag_line, $this); + } + } + + $this->tags = $result; + } + + /** + * Returns the opening line or also known as short description. + * + * @return string + */ + public function getShortDescription() + { + return $this->short_description; + } + + /** + * Returns the full description or also known as long description. + * + * @return DocBlock\Description + */ + public function getLongDescription() + { + return $this->long_description; + } + + /** + * Returns the current context. + * + * @return Context + */ + public function getContext() + { + return $this->context; + } + + /** + * Returns the current location. + * + * @return Location + */ + public function getLocation() + { + return $this->location; + } + + /** + * Returns the tags for this DocBlock. + * + * @return Tag[] + */ + public function getTags() + { + return $this->tags; + } + + /** + * Returns an array of tags matching the given name. If no tags are found + * an empty array is returned. + * + * @param string $name String to search by. + * + * @return Tag[] + */ + public function getTagsByName($name) + { + $result = array(); + + /** @var Tag $tag */ + foreach ($this->getTags() as $tag) { + if ($tag->getName() != $name) { + continue; + } + + $result[] = $tag; + } + + return $result; + } + + /** + * Checks if a tag of a certain type is present in this DocBlock. + * + * @param string $name Tag name to check for. + * + * @return bool + */ + public function hasTag($name) + { + /** @var Tag $tag */ + foreach ($this->getTags() as $tag) { + if ($tag->getName() == $name) { + return true; + } + } + + return false; + } + + /** + * Appends a tag at the end of the list of tags. + * + * @param Tag $tag The tag to add. + * + * @return Tag The newly added tag. + * + * @throws \LogicException When the tag belongs to a different DocBlock. + */ + public function appendTag(Tag $tag) + { + if (null === $tag->getDocBlock()) { + $tag->setDocBlock($this); + } + + if ($tag->getDocBlock() === $this) { + $this->tags[] = $tag; + } else { + throw new \LogicException( + 'This tag belongs to a different DocBlock object.' + ); + } + + return $tag; + } + + /** + * Builds a string representation of this object. + * + * @todo determine the exact format as used by PHP Reflection and + * implement it. + * + * @return string + * @codeCoverageIgnore Not yet implemented + */ + public static function export() + { + throw new \Exception('Not yet implemented'); + } + + /** + * Returns the exported information (we should use the export static method + * BUT this throws an exception at this point). + * + * @return string + * @codeCoverageIgnore Not yet implemented + */ + public function __toString() + { + return 'Not yet implemented'; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php new file mode 100644 index 000000000..81aa83ce5 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php @@ -0,0 +1,154 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +/** + * The context in which a DocBlock occurs. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class Context +{ + /** @var string The current namespace. */ + protected $namespace = ''; + + /** @var array List of namespace aliases => Fully Qualified Namespace. */ + protected $namespace_aliases = array(); + + /** @var string Name of the structural element, within the namespace. */ + protected $lsen = ''; + + /** + * Cteates a new context. + * @param string $namespace The namespace where this DocBlock + * resides in. + * @param array $namespace_aliases List of namespace aliases => Fully + * Qualified Namespace. + * @param string $lsen Name of the structural element, within + * the namespace. + */ + public function __construct( + $namespace = '', + array $namespace_aliases = array(), + $lsen = '' + ) { + if (!empty($namespace)) { + $this->setNamespace($namespace); + } + $this->setNamespaceAliases($namespace_aliases); + $this->setLSEN($lsen); + } + + /** + * @return string The namespace where this DocBlock resides in. + */ + public function getNamespace() + { + return $this->namespace; + } + + /** + * @return array List of namespace aliases => Fully Qualified Namespace. + */ + public function getNamespaceAliases() + { + return $this->namespace_aliases; + } + + /** + * Returns the Local Structural Element Name. + * + * @return string Name of the structural element, within the namespace. + */ + public function getLSEN() + { + return $this->lsen; + } + + /** + * Sets a new namespace. + * + * Sets a new namespace for the context. Leading and trailing slashes are + * trimmed, and the keywords "global" and "default" are treated as aliases + * to no namespace. + * + * @param string $namespace The new namespace to set. + * + * @return $this + */ + public function setNamespace($namespace) + { + if ('global' !== $namespace + && 'default' !== $namespace + ) { + // Srip leading and trailing slash + $this->namespace = trim((string)$namespace, '\\'); + } else { + $this->namespace = ''; + } + return $this; + } + + /** + * Sets the namespace aliases, replacing all previous ones. + * + * @param array $namespace_aliases List of namespace aliases => Fully + * Qualified Namespace. + * + * @return $this + */ + public function setNamespaceAliases(array $namespace_aliases) + { + $this->namespace_aliases = array(); + foreach ($namespace_aliases as $alias => $fqnn) { + $this->setNamespaceAlias($alias, $fqnn); + } + return $this; + } + + /** + * Adds a namespace alias to the context. + * + * @param string $alias The alias name (the part after "as", or the last + * part of the Fully Qualified Namespace Name) to add. + * @param string $fqnn The Fully Qualified Namespace Name for this alias. + * Any form of leading/trailing slashes are accepted, but what will be + * stored is a name, prefixed with a slash, and no trailing slash. + * + * @return $this + */ + public function setNamespaceAlias($alias, $fqnn) + { + $this->namespace_aliases[$alias] = '\\' . trim((string)$fqnn, '\\'); + return $this; + } + + /** + * Sets a new Local Structural Element Name. + * + * Sets a new Local Structural Element Name. A local name also contains + * punctuation determining the kind of structural element (e.g. trailing "(" + * and ")" for functions and methods). + * + * @param string $lsen The new local name of a structural element. + * + * @return $this + */ + public function setLSEN($lsen) + { + $this->lsen = (string)$lsen; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php new file mode 100644 index 000000000..cbd6b07ee --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php @@ -0,0 +1,222 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock; + +/** + * Parses a Description of a DocBlock or tag. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class Description implements \Reflector +{ + /** @var string */ + protected $contents = ''; + + /** @var array The contents, as an array of strings and Tag objects. */ + protected $parsedContents = null; + + /** @var DocBlock The DocBlock which this description belongs to. */ + protected $docblock = null; + + /** + * Populates the fields of a description. + * + * @param string $content The description's conetnts. + * @param DocBlock $docblock The DocBlock which this description belongs to. + */ + public function __construct($content, DocBlock $docblock = null) + { + $this->setContent($content)->setDocBlock($docblock); + } + + /** + * Gets the text of this description. + * + * @return string + */ + public function getContents() + { + return $this->contents; + } + + /** + * Sets the text of this description. + * + * @param string $content The new text of this description. + * + * @return $this + */ + public function setContent($content) + { + $this->contents = trim($content); + + $this->parsedContents = null; + return $this; + } + + /** + * Returns the parsed text of this description. + * + * @return array An array of strings and tag objects, in the order they + * occur within the description. + */ + public function getParsedContents() + { + if (null === $this->parsedContents) { + $this->parsedContents = preg_split( + '/\{ + # "{@}" is not a valid inline tag. This ensures that + # we do not treat it as one, but treat it literally. + (?!@\}) + # We want to capture the whole tag line, but without the + # inline tag delimiters. + (\@ + # Match everything up to the next delimiter. + [^{}]* + # Nested inline tag content should not be captured, or + # it will appear in the result separately. + (?: + # Match nested inline tags. + (?: + # Because we did not catch the tag delimiters + # earlier, we must be explicit with them here. + # Notice that this also matches "{}", as a way + # to later introduce it as an escape sequence. + \{(?1)?\} + | + # Make sure we match hanging "{". + \{ + ) + # Match content after the nested inline tag. + [^{}]* + )* # If there are more inline tags, match them as well. + # We use "*" since there may not be any nested inline + # tags. + ) + \}/Sux', + $this->contents, + null, + PREG_SPLIT_DELIM_CAPTURE + ); + + $count = count($this->parsedContents); + for ($i=1; $i<$count; $i += 2) { + $this->parsedContents[$i] = Tag::createInstance( + $this->parsedContents[$i], + $this->docblock + ); + } + + //In order to allow "literal" inline tags, the otherwise invalid + //sequence "{@}" is changed to "@", and "{}" is changed to "}". + //See unit tests for examples. + for ($i=0; $i<$count; $i += 2) { + $this->parsedContents[$i] = str_replace( + array('{@}', '{}'), + array('@', '}'), + $this->parsedContents[$i] + ); + } + } + return $this->parsedContents; + } + + /** + * Return a formatted variant of the Long Description using MarkDown. + * + * @todo this should become a more intelligent piece of code where the + * configuration contains a setting what format long descriptions are. + * + * @codeCoverageIgnore Will be removed soon, in favor of adapters at + * PhpDocumentor itself that will process text in various formats. + * + * @return string + */ + public function getFormattedContents() + { + $result = $this->contents; + + // if the long description contains a plain HTML <code> element, surround + // it with a pre element. Please note that we explicitly used str_replace + // and not preg_replace to gain performance + if (strpos($result, '<code>') !== false) { + $result = str_replace( + array('<code>', "<code>\r\n", "<code>\n", "<code>\r", '</code>'), + array('<pre><code>', '<code>', '<code>', '<code>', '</code></pre>'), + $result + ); + } + + if (class_exists('dflydev\markdown\MarkdownExtraParser')) { + $markdown = new \dflydev\markdown\MarkdownExtraParser(); + $result = $markdown->transformMarkdown($result); + } + + return trim($result); + } + + /** + * Gets the docblock this tag belongs to. + * + * @return DocBlock The docblock this description belongs to. + */ + public function getDocBlock() + { + return $this->docblock; + } + + /** + * Sets the docblock this tag belongs to. + * + * @param DocBlock $docblock The new docblock this description belongs to. + * Setting NULL removes any association. + * + * @return $this + */ + public function setDocBlock(DocBlock $docblock = null) + { + $this->docblock = $docblock; + + return $this; + } + + /** + * Builds a string representation of this object. + * + * @todo determine the exact format as used by PHP Reflection + * and implement it. + * + * @return void + * @codeCoverageIgnore Not yet implemented + */ + public static function export() + { + throw new \Exception('Not yet implemented'); + } + + /** + * Returns the exported information (we should use the export static method + * BUT this throws an exception at this point). + * + * @return string + * @codeCoverageIgnore Not yet implemented + */ + public function __toString() + { + return 'Not yet implemented'; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php new file mode 100644 index 000000000..966ed44d7 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php @@ -0,0 +1,76 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +/** + * The location a DocBlock occurs within a file. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class Location +{ + /** @var int Line where the DocBlock text starts. */ + protected $lineNumber = 0; + + /** @var int Column where the DocBlock text starts. */ + protected $columnNumber = 0; + + public function __construct( + $lineNumber = 0, + $columnNumber = 0 + ) { + $this->setLineNumber($lineNumber)->setColumnNumber($columnNumber); + } + + /** + * @return int Line where the DocBlock text starts. + */ + public function getLineNumber() + { + return $this->lineNumber; + } + + /** + * + * @param type $lineNumber + * @return $this + */ + public function setLineNumber($lineNumber) + { + $this->lineNumber = (int)$lineNumber; + + return $this; + } + + /** + * @return int Column where the DocBlock text starts. + */ + public function getColumnNumber() + { + return $this->columnNumber; + } + + /** + * + * @param int $columnNumber + * @return $this + */ + public function setColumnNumber($columnNumber) + { + $this->columnNumber = (int)$columnNumber; + + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php new file mode 100644 index 000000000..e32e813c7 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php @@ -0,0 +1,379 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock; + +/** + * Parses a tag definition for a DocBlock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class Tag implements \Reflector +{ + /** + * PCRE regular expression matching a tag name. + */ + const REGEX_TAGNAME = '[\w\-\_\\\\]+'; + + /** @var string Name of the tag */ + protected $tag = ''; + + /** + * @var string|null Content of the tag. + * When set to NULL, it means it needs to be regenerated. + */ + protected $content = ''; + + /** @var string Description of the content of this tag */ + protected $description = ''; + + /** + * @var array|null The description, as an array of strings and Tag objects. + * When set to NULL, it means it needs to be regenerated. + */ + protected $parsedDescription = null; + + /** @var Location Location of the tag. */ + protected $location = null; + + /** @var DocBlock The DocBlock which this tag belongs to. */ + protected $docblock = null; + + /** + * @var array An array with a tag as a key, and an FQCN to a class that + * handles it as an array value. The class is expected to inherit this + * class. + */ + private static $tagHandlerMappings = array( + 'author' + => '\phpDocumentor\Reflection\DocBlock\Tag\AuthorTag', + 'covers' + => '\phpDocumentor\Reflection\DocBlock\Tag\CoversTag', + 'deprecated' + => '\phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag', + 'example' + => '\phpDocumentor\Reflection\DocBlock\Tag\ExampleTag', + 'link' + => '\phpDocumentor\Reflection\DocBlock\Tag\LinkTag', + 'method' + => '\phpDocumentor\Reflection\DocBlock\Tag\MethodTag', + 'param' + => '\phpDocumentor\Reflection\DocBlock\Tag\ParamTag', + 'property-read' + => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyReadTag', + 'property' + => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyTag', + 'property-write' + => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyWriteTag', + 'return' + => '\phpDocumentor\Reflection\DocBlock\Tag\ReturnTag', + 'see' + => '\phpDocumentor\Reflection\DocBlock\Tag\SeeTag', + 'since' + => '\phpDocumentor\Reflection\DocBlock\Tag\SinceTag', + 'source' + => '\phpDocumentor\Reflection\DocBlock\Tag\SourceTag', + 'throw' + => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', + 'throws' + => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', + 'uses' + => '\phpDocumentor\Reflection\DocBlock\Tag\UsesTag', + 'var' + => '\phpDocumentor\Reflection\DocBlock\Tag\VarTag', + 'version' + => '\phpDocumentor\Reflection\DocBlock\Tag\VersionTag' + ); + + /** + * Factory method responsible for instantiating the correct sub type. + * + * @param string $tag_line The text for this tag, including description. + * @param DocBlock $docblock The DocBlock which this tag belongs to. + * @param Location $location Location of the tag. + * + * @throws \InvalidArgumentException if an invalid tag line was presented. + * + * @return static A new tag object. + */ + final public static function createInstance( + $tag_line, + DocBlock $docblock = null, + Location $location = null + ) { + if (!preg_match( + '/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', + $tag_line, + $matches + )) { + throw new \InvalidArgumentException( + 'Invalid tag_line detected: ' . $tag_line + ); + } + + $handler = __CLASS__; + if (isset(self::$tagHandlerMappings[$matches[1]])) { + $handler = self::$tagHandlerMappings[$matches[1]]; + } elseif (isset($docblock)) { + $tagName = (string)new Type\Collection( + array($matches[1]), + $docblock->getContext() + ); + + if (isset(self::$tagHandlerMappings[$tagName])) { + $handler = self::$tagHandlerMappings[$tagName]; + } + } + + return new $handler( + $matches[1], + isset($matches[2]) ? $matches[2] : '', + $docblock, + $location + ); + } + + /** + * Registers a handler for tags. + * + * Registers a handler for tags. The class specified is autoloaded if it's + * not available. It must inherit from this class. + * + * @param string $tag Name of tag to regiser a handler for. When + * registering a namespaced tag, the full name, along with a prefixing + * slash MUST be provided. + * @param string|null $handler FQCN of handler. Specifing NULL removes the + * handler for the specified tag, if any. + * + * @return bool TRUE on success, FALSE on failure. + */ + final public static function registerTagHandler($tag, $handler) + { + $tag = trim((string)$tag); + + if (null === $handler) { + unset(self::$tagHandlerMappings[$tag]); + return true; + } + + if ('' !== $tag + && class_exists($handler, true) + && is_subclass_of($handler, __CLASS__) + && !strpos($tag, '\\') //Accept no slash, and 1st slash at offset 0. + ) { + self::$tagHandlerMappings[$tag] = $handler; + return true; + } + + return false; + } + + /** + * Parses a tag and populates the member variables. + * + * @param string $name Name of the tag. + * @param string $content The contents of the given tag. + * @param DocBlock $docblock The DocBlock which this tag belongs to. + * @param Location $location Location of the tag. + */ + public function __construct( + $name, + $content, + DocBlock $docblock = null, + Location $location = null + ) { + $this + ->setName($name) + ->setContent($content) + ->setDocBlock($docblock) + ->setLocation($location); + } + + /** + * Gets the name of this tag. + * + * @return string The name of this tag. + */ + public function getName() + { + return $this->tag; + } + + /** + * Sets the name of this tag. + * + * @param string $name The new name of this tag. + * + * @return $this + * @throws \InvalidArgumentException When an invalid tag name is provided. + */ + public function setName($name) + { + if (!preg_match('/^' . self::REGEX_TAGNAME . '$/u', $name)) { + throw new \InvalidArgumentException( + 'Invalid tag name supplied: ' . $name + ); + } + + $this->tag = $name; + + return $this; + } + + /** + * Gets the content of this tag. + * + * @return string + */ + public function getContent() + { + if (null === $this->content) { + $this->content = $this->description; + } + + return $this->content; + } + + /** + * Sets the content of this tag. + * + * @param string $content The new content of this tag. + * + * @return $this + */ + public function setContent($content) + { + $this->setDescription($content); + $this->content = $content; + + return $this; + } + + /** + * Gets the description component of this tag. + * + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * Sets the description component of this tag. + * + * @param string $description The new description component of this tag. + * + * @return $this + */ + public function setDescription($description) + { + $this->content = null; + $this->parsedDescription = null; + $this->description = trim($description); + + return $this; + } + + /** + * Gets the parsed text of this description. + * + * @return array An array of strings and tag objects, in the order they + * occur within the description. + */ + public function getParsedDescription() + { + if (null === $this->parsedDescription) { + $description = new Description($this->description, $this->docblock); + $this->parsedDescription = $description->getParsedContents(); + } + return $this->parsedDescription; + } + + /** + * Gets the docblock this tag belongs to. + * + * @return DocBlock The docblock this tag belongs to. + */ + public function getDocBlock() + { + return $this->docblock; + } + + /** + * Sets the docblock this tag belongs to. + * + * @param DocBlock $docblock The new docblock this tag belongs to. Setting + * NULL removes any association. + * + * @return $this + */ + public function setDocBlock(DocBlock $docblock = null) + { + $this->docblock = $docblock; + + return $this; + } + + /** + * Gets the location of the tag. + * + * @return Location The tag's location. + */ + public function getLocation() + { + return $this->location; + } + + /** + * Sets the location of the tag. + * + * @param Location $location The new location of the tag. + * + * @return $this + */ + public function setLocation(Location $location = null) + { + $this->location = $location; + + return $this; + } + + /** + * Builds a string representation of this object. + * + * @todo determine the exact format as used by PHP Reflection and implement it. + * + * @return void + * @codeCoverageIgnore Not yet implemented + */ + public static function export() + { + throw new \Exception('Not yet implemented'); + } + + /** + * Returns the exported information (we should use the export static method + * BUT this throws an exception at this point). + * + * @return string + * @codeCoverageIgnore Not yet implemented + */ + public function __toString() + { + return 'Not yet implemented'; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php new file mode 100644 index 000000000..bacf52ebe --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php @@ -0,0 +1,131 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for an @author tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class AuthorTag extends Tag +{ + /** + * PCRE regular expression matching any valid value for the name component. + */ + const REGEX_AUTHOR_NAME = '[^\<]*'; + + /** + * PCRE regular expression matching any valid value for the email component. + */ + const REGEX_AUTHOR_EMAIL = '[^\>]*'; + + /** @var string The name of the author */ + protected $authorName = ''; + + /** @var string The email of the author */ + protected $authorEmail = ''; + + public function getContent() + { + if (null === $this->content) { + $this->content = $this->authorName; + if ('' != $this->authorEmail) { + $this->content .= "<{$this->authorEmail}>"; + } + } + + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + if (preg_match( + '/^(' . self::REGEX_AUTHOR_NAME . + ')(\<(' . self::REGEX_AUTHOR_EMAIL . + ')\>)?$/u', + $this->description, + $matches + )) { + $this->authorName = trim($matches[1]); + if (isset($matches[3])) { + $this->authorEmail = trim($matches[3]); + } + } + + return $this; + } + + /** + * Gets the author's name. + * + * @return string The author's name. + */ + public function getAuthorName() + { + return $this->authorName; + } + + /** + * Sets the author's name. + * + * @param string $authorName The new author name. + * An invalid value will set an empty string. + * + * @return $this + */ + public function setAuthorName($authorName) + { + $this->content = null; + $this->authorName + = preg_match('/^' . self::REGEX_AUTHOR_NAME . '$/u', $authorName) + ? $authorName : ''; + + return $this; + } + + /** + * Gets the author's email. + * + * @return string The author's email. + */ + public function getAuthorEmail() + { + return $this->authorEmail; + } + + /** + * Sets the author's email. + * + * @param string $authorEmail The new author email. + * An invalid value will set an empty string. + * + * @return $this + */ + public function setAuthorEmail($authorEmail) + { + $this->authorEmail + = preg_match('/^' . self::REGEX_AUTHOR_EMAIL . '$/u', $authorEmail) + ? $authorEmail : ''; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php new file mode 100644 index 000000000..bd31b56bf --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @covers tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class CoversTag extends SeeTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php new file mode 100644 index 000000000..7226316b7 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php @@ -0,0 +1,26 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; + +/** + * Reflection class for a @deprecated tag in a Docblock. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class DeprecatedTag extends VersionTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php new file mode 100644 index 000000000..9173de453 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php @@ -0,0 +1,156 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @example tag in a Docblock. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ExampleTag extends SourceTag +{ + /** + * @var string Path to a file to use as an example. + * May also be an absolute URI. + */ + protected $filePath = ''; + + /** + * @var bool Whether the file path component represents an URI. + * This determines how the file portion appears at {@link getContent()}. + */ + protected $isURI = false; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $filePath = ''; + if ($this->isURI) { + if (false === strpos($this->filePath, ':')) { + $filePath = str_replace( + '%2F', + '/', + rawurlencode($this->filePath) + ); + } else { + $filePath = $this->filePath; + } + } else { + $filePath = '"' . $this->filePath . '"'; + } + + $this->content = $filePath . ' ' . $this->getContent(); + } + + return $this->content; + } + /** + * {@inheritdoc} + */ + public function setContent($content) + { + Tag::setContent($content); + if (preg_match( + '/^ + # File component + (?: + # File path in quotes + \"([^\"]+)\" + | + # File URI + (\S+) + ) + # Remaining content (parsed by SourceTag) + (?:\s+(.*))? + $/sux', + $this->description, + $matches + )) { + if ('' !== $matches[1]) { + $this->setFilePath($matches[1]); + } else { + $this->setFileURI($matches[2]); + } + + if (isset($matches[3])) { + parent::setContent($matches[3]); + } else { + $this->setDescription(''); + } + $this->content = $content; + } + + return $this; + } + + /** + * Returns the file path. + * + * @return string Path to a file to use as an example. + * May also be an absolute URI. + */ + public function getFilePath() + { + return $this->filePath; + } + + /** + * Sets the file path. + * + * @param string $filePath The new file path to use for the example. + * + * @return $this + */ + public function setFilePath($filePath) + { + $this->isURI = false; + $this->filePath = trim($filePath); + + $this->content = null; + return $this; + } + + /** + * Sets the file path as an URI. + * + * This function is equivalent to {@link setFilePath()}, except that it + * convers an URI to a file path before that. + * + * There is no getFileURI(), as {@link getFilePath()} is compatible. + * + * @param type $uri The new file URI to use as an example. + */ + public function setFileURI($uri) + { + $this->isURI = true; + if (false === strpos($uri, ':')) { + //Relative URL + $this->filePath = rawurldecode( + str_replace(array('/', '\\'), '%2F', $uri) + ); + } else { + //Absolute URL or URI. + $this->filePath = $uri; + } + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php new file mode 100644 index 000000000..f79f25dd8 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php @@ -0,0 +1,81 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Ben Selby <benmatselby@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @link tag in a Docblock. + * + * @author Ben Selby <benmatselby@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class LinkTag extends Tag +{ + /** @var string */ + protected $link = ''; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->link} {$this->description}"; + } + + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + $parts = preg_split('/\s+/Su', $this->description, 2); + + $this->link = $parts[0]; + + $this->setDescription(isset($parts[1]) ? $parts[1] : $parts[0]); + + $this->content = $content; + return $this; + } + + /** + * Gets the link + * + * @return string + */ + public function getLink() + { + return $this->link; + } + + /** + * Sets the link + * + * @param string $link The link + * + * @return $this + */ + public function setLink($link) + { + $this->link = $link; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php new file mode 100644 index 000000000..ec4694260 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php @@ -0,0 +1,163 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @method in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class MethodTag extends ReturnTag +{ + + /** @var string */ + protected $method_name = ''; + + /** @var string */ + protected $arguments = ''; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $this->content = $this->type . + " {$this->method_name}({$this->arguments}) " . + $this->description; + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + Tag::setContent($content); + // 1. none or more whitespace + // 2. optionally a word with underscores followed by whitespace : as + // type for the return value + // 3. then optionally a word with underscores followed by () and + // whitespace : as method name as used by phpDocumentor + // 4. then a word with underscores, followed by ( and any character + // until a ) and whitespace : as method name with signature + // 5. any remaining text : as description + if (preg_match( + '/^ + # Return type + (?: + ([\w\|_\\\\]+) + \s+ + )? + # Legacy method name (not captured) + (?: + [\w_]+\(\)\s+ + )? + # Method name + ([\w\|_\\\\]+) + # Arguments + \(([^\)]*)\) + \s* + # Description + (.*) + $/sux', + $this->description, + $matches + )) { + list( + , + $this->type, + $this->method_name, + $this->arguments, + $this->description + ) = $matches; + if (!$this->type) { + $this->type = 'void'; + } + $this->parsedDescription = null; + } else { + echo date('c') . ' ERR (3): @method contained invalid contents: ' + . $this->content . PHP_EOL; + } + + return $this; + } + + /** + * Sets the name of this method. + * + * @param string $method_name The name of the method. + * + * @return $this + */ + public function setMethodName($method_name) + { + $this->method_name = $method_name; + + $this->content = null; + return $this; + } + + /** + * Retrieves the method name. + * + * @return string + */ + public function getMethodName() + { + return $this->method_name; + } + + /** + * Sets the arguments for this method. + * + * @param string $arguments A comma-separated arguments line. + * + * @return void + */ + public function setArguments($arguments) + { + $this->arguments = $arguments; + + $this->content = null; + return $this; + } + + /** + * Returns an array containing each argument as array of type and name. + * + * Please note that the argument sub-array may only contain 1 element if no + * type was specified. + * + * @return string[] + */ + public function getArguments() + { + if (empty($this->arguments)) { + return array(); + } + + $arguments = explode(',', $this->arguments); + foreach ($arguments as $key => $value) { + $arguments[$key] = explode(' ', trim($value)); + } + + return $arguments; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php new file mode 100644 index 000000000..f544a9b20 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php @@ -0,0 +1,103 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @param tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ParamTag extends ReturnTag +{ + /** + * @var string + */ + protected $variableName = ''; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $this->content + = "{$this->type} {$this->variableName} {$this->description}"; + } + return $this->content; + } + /** + * {@inheritdoc} + */ + public function setContent($content) + { + Tag::setContent($content); + $parts = preg_split( + '/(\s+)/Su', + $this->description, + 3, + PREG_SPLIT_DELIM_CAPTURE + ); + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) + && (strlen($parts[0]) > 0) + && ($parts[0][0] !== '$') + ) { + $this->type = array_shift($parts); + array_shift($parts); + } + + // if the next item starts with a $ it must be the variable name + if (isset($parts[0]) + && (strlen($parts[0]) > 0) + && ($parts[0][0] == '$') + ) { + $this->variableName = array_shift($parts); + array_shift($parts); + } + + $this->setDescription(implode('', $parts)); + + $this->content = $content; + return $this; + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Sets the variable's name. + * + * @param string $name The new name for this variable. + * + * @return $this + */ + public function setVariableName($name) + { + $this->variableName = $name; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php new file mode 100644 index 000000000..33406026a --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @property-read tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class PropertyReadTag extends PropertyTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php new file mode 100644 index 000000000..288ecff87 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @property tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class PropertyTag extends ParamTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php new file mode 100644 index 000000000..ec4e866d4 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @property-write tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class PropertyWriteTag extends PropertyTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php new file mode 100644 index 000000000..60fbd1d2f --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php @@ -0,0 +1,98 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\Type\Collection; + +/** + * Reflection class for a @return tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ReturnTag extends Tag +{ + /** @var string The raw type component. */ + protected $type = ''; + + /** @var Collection The parsed type component. */ + protected $types = null; + + /** + * {@inheritdoc} + */ + public function getCotnent() + { + if (null === $this->content) { + $this->content = "{$this->type} {$this->description}"; + } + + return $this->cotnent; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + + $parts = preg_split('/\s+/Su', $this->description, 2); + + // any output is considered a type + $this->type = $parts[0]; + + $this->setDescription(isset($parts[1]) ? $parts[1] : ''); + + $this->content = $content; + return $this; + } + + /** + * Returns the unique types of the variable. + * + * @return string[] + */ + public function getTypes() + { + return $this->getTypesCollection()->getArrayCopy(); + } + + /** + * Returns the type section of the variable. + * + * @return string + */ + public function getType() + { + return (string) $this->getTypesCollection(); + } + + /** + * Returns the type collection. + * + * @return void + */ + protected function getTypesCollection() + { + if (null === $this->types) { + $this->types = new Collection( + array($this->type), + $this->docblock ? $this->docblock->getContext() : null + ); + } + return $this->types; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php new file mode 100644 index 000000000..4f5f22ce1 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php @@ -0,0 +1,81 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @see tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SeeTag extends Tag +{ + /** @var string */ + protected $refers = null; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->refers} {$this->description}"; + } + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + $parts = preg_split('/\s+/Su', $this->description, 2); + + // any output is considered a type + $this->refers = $parts[0]; + + $this->setDescription(isset($parts[1]) ? $parts[1] : ''); + + $this->content = $content; + return $this; + } + + /** + * Gets the structural element this tag refers to. + * + * @return string + */ + public function getReference() + { + return $this->refers; + } + + /** + * Sets the structural element this tag refers to. + * + * @param string $refers The new type this tag refers to. + * + * @return $this + */ + public function setReference($refers) + { + $this->refers = $refers; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php new file mode 100644 index 000000000..ba009c447 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php @@ -0,0 +1,26 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; + +/** + * Reflection class for a @since tag in a Docblock. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SinceTag extends VersionTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php new file mode 100644 index 000000000..3400220ea --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php @@ -0,0 +1,137 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @source tag in a Docblock. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SourceTag extends Tag +{ + /** + * @var int The starting line, relative to the structural element's + * location. + */ + protected $startingLine = 1; + + /** + * @var int|null The number of lines, relative to the starting line. NULL + * means "to the end". + */ + protected $lineCount = null; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->content) { + $this->content + = "{$this->startingLine} {$this->lineCount} {$this->description}"; + } + + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + if (preg_match( + '/^ + # Starting line + ([1-9]\d*) + \s* + # Number of lines + (?: + ((?1)) + \s+ + )? + # Description + (.*) + $/sux', + $this->description, + $matches + )) { + $this->startingLine = (int)$matches[1]; + if (isset($matches[2]) && '' !== $matches[2]) { + $this->lineCount = (int)$matches[2]; + } + $this->setDescription($matches[3]); + $this->content = $content; + } + + return $this; + } + + /** + * Gets the starting line. + * + * @return int The starting line, relative to the structural element's + * location. + */ + public function getStartingLine() + { + return $this->startingLine; + } + + /** + * Sets the starting line. + * + * @param int $startingLine The new starting line, relative to the + * structural element's location. + * + * @return $this + */ + public function setStartingLine($startingLine) + { + $this->startingLine = $startingLine; + + $this->content = null; + return $this; + } + + /** + * Returns the number of lines. + * + * @return int|null The number of lines, relative to the starting line. NULL + * means "to the end". + */ + public function getLineCount() + { + return $this->lineCount; + } + + /** + * Sets the number of lines. + * + * @param int|null $lineCount The new number of lines, relative to the + * starting line. NULL means "to the end". + * + * @return $this + */ + public function setLineCount($lineCount) + { + $this->lineCount = $lineCount; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php new file mode 100644 index 000000000..58ee44a42 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @throws tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ThrowsTag extends ReturnTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php new file mode 100644 index 000000000..da0d66381 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @uses tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class UsesTag extends SeeTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php new file mode 100644 index 000000000..236b2c8b0 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php @@ -0,0 +1,24 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @var tag in a Docblock. + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class VarTag extends ParamTag +{ +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php new file mode 100644 index 000000000..260f6984f --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php @@ -0,0 +1,108 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a @version tag in a Docblock. + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class VersionTag extends Tag +{ + /** + * PCRE regular expression matching a version vector. + * Assumes the "x" modifier. + */ + const REGEX_VECTOR = '(?: + # Normal release vectors. + \d\S* + | + # VCS version vectors. Per PHPCS, they are expected to + # follow the form of the VCS name, followed by ":", followed + # by the version vector itself. + # By convention, popular VCSes like CVS, SVN and GIT use "$" + # around the actual version vector. + [^\s\:]+\:\s*\$[^\$]+\$ + )'; + + /** @var string The version vector. */ + protected $version = ''; + + public function getContent() + { + if (null === $this->content) { + $this->content = "{$this->version} {$this->description}"; + } + + return $this->content; + } + + /** + * {@inheritdoc} + */ + public function setContent($content) + { + parent::setContent($content); + + if (preg_match( + '/^ + # The version vector + (' . self::REGEX_VECTOR . ') + \s* + # The description + (.+)? + $/sux', + $this->description, + $matches + )) { + $this->version = $matches[1]; + $this->setDescription(isset($matches[2]) ? $matches[2] : ''); + $this->content = $content; + } + + return $this; + } + + /** + * Gets the version section of the tag. + * + * @return string The version section of the tag. + */ + public function getVersion() + { + return $this->version; + } + + /** + * Sets the version section of the tag. + * + * @param string $version The new version section of the tag. + * An invalid value will set an empty string. + * + * @return $this + */ + public function setVersion($version) + { + $this->version + = preg_match('/^' . self::REGEX_VECTOR . '$/ux', $version) + ? $version + : ''; + + $this->content = null; + return $this; + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php new file mode 100644 index 000000000..90ead3ff4 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php @@ -0,0 +1,221 @@ +<?php +/** + * phpDocumentor + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Type; + +use phpDocumentor\Reflection\DocBlock\Context; + +/** + * Collection + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class Collection extends \ArrayObject +{ + /** @var string Definition of the OR operator for types */ + const OPERATOR_OR = '|'; + + /** @var string Definition of the ARRAY operator for types */ + const OPERATOR_ARRAY = '[]'; + + /** @var string Definition of the NAMESPACE operator in PHP */ + const OPERATOR_NAMESPACE = '\\'; + + /** @var string[] List of recognized keywords */ + protected static $keywords = array( + 'string', 'int', 'integer', 'bool', 'boolean', 'float', 'double', + 'object', 'mixed', 'array', 'resource', 'void', 'null', 'scalar', + 'callback', 'callable', 'false', 'true', 'self', '$this', 'static' + ); + + /** + * Current invoking location. + * + * This is used to prepend to type with a relative location. + * May also be 'default' or 'global', in which case they are ignored. + * + * @var Context + */ + protected $context = null; + + /** + * Registers the namespace and aliases; uses that to add and expand the + * given types. + * + * @param string[] $types Array containing a list of types to add to this + * container. + * @param Context $location The current invoking location. + */ + public function __construct( + array $types = array(), + Context $context = null + ) { + $this->context = null === $context ? new Context() : $context; + + foreach ($types as $type) { + $this->add($type); + } + } + + /** + * Returns the current invoking location. + * + * @return Context + */ + public function getContext() + { + return $this->context; + } + + /** + * Adds a new type to the collection and expands it if it contains a + * relative namespace. + * + * If a class in the type contains a relative namespace than this collection + * will try to expand that into a FQCN. + * + * @param string $type A 'Type' as defined in the phpDocumentor + * documentation. + * + * @throws \InvalidArgumentException if a non-string argument is passed. + * + * @see http://phpdoc.org/docs/latest/for-users/types.html for the + * definition of a type. + * + * @return void + */ + public function add($type) + { + if (!is_string($type)) { + throw new \InvalidArgumentException( + 'A type should be represented by a string, received: ' + .var_export($type, true) + ); + } + + // separate the type by the OR operator + $type_parts = explode(self::OPERATOR_OR, $type); + foreach ($type_parts as $part) { + $expanded_type = $this->expand($part); + if ($expanded_type) { + $this[] = $expanded_type; + } + } + } + + /** + * Returns a string representation of the collection. + * + * @return string The resolved types across the collection, separated with + * {@link self::OPERATOR_OR}. + */ + public function __toString() + { + return implode(self::OPERATOR_OR, $this->getArrayCopy()); + } + + /** + * Analyzes the given type and returns the FQCN variant. + * + * When a type is provided this method checks whether it is not a keyword or + * Fully Qualified Class Name. If so it will use the given namespace and + * aliases to expand the type to a FQCN representation. + * + * This method only works as expected if the namespace and aliases are set; + * no dynamic reflection is being performed here. + * + * @param string $type The relative or absolute type. + * + * @uses getNamespace to determine with what to prefix the type name. + * @uses getNamespaceAliases to check whether the first part of the relative + * type name should not be replaced with another namespace. + * + * @return string + */ + protected function expand($type) + { + $type = trim($type); + if (!$type) { + return ''; + } + + if ($this->isTypeAnArray($type)) { + return $this->expand(substr($type, 0, -2)) . self::OPERATOR_ARRAY; + } + + if ($this->isRelativeType($type) && !$this->isTypeAKeyword($type)) { + $type_parts = explode(self::OPERATOR_NAMESPACE, $type, 2); + + $namespace_aliases = $this->context->getNamespaceAliases(); + // if the first segment is not an alias; prepend namespace name and + // return + if (!isset($namespace_aliases[$type_parts[0]])) { + $namespace = $this->context->getNamespace(); + if ('' !== $namespace) { + $namespace .= self::OPERATOR_NAMESPACE; + } + return self::OPERATOR_NAMESPACE . $namespace . $type; + } + + $type_parts[0] = $namespace_aliases[$type_parts[0]]; + $type = implode(self::OPERATOR_NAMESPACE, $type_parts); + } + + return $type; + } + + /** + * Detects whether the given type represents an array. + * + * @param string $type A relative or absolute type as defined in the + * phpDocumentor documentation. + * + * @return bool + */ + protected function isTypeAnArray($type) + { + return substr($type, -2) === self::OPERATOR_ARRAY; + } + + /** + * Detects whether the given type represents a PHPDoc keyword. + * + * @param string $type A relative or absolute type as defined in the + * phpDocumentor documentation. + * + * @return bool + */ + protected function isTypeAKeyword($type) + { + return in_array(strtolower($type), static::$keywords, true); + } + + /** + * Detects whether the given type represents a relative or absolute path. + * + * This method will detect keywords as being absolute; even though they are + * not preceeded by a namespace separator. + * + * @param string $type A relative or absolute type as defined in the + * phpDocumentor documentation. + * + * @return bool + */ + protected function isRelativeType($type) + { + return ($type[0] !== self::OPERATOR_NAMESPACE) + || $this->isTypeAKeyword($type); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php new file mode 100644 index 000000000..a6ca7b37e --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php @@ -0,0 +1,245 @@ +<?php +/** + * phpDocumentor Description Test + * + * PHP Version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Description + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class DescriptionTest extends \PHPUnit_Framework_TestCase +{ + public function testConstruct() + { + $fixture = <<<LONGDESC +This is text for a description. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(1, $parsedContents); + $this->assertSame($fixture, $parsedContents[0]); + } + + public function testInlineTagParsing() + { + $fixture = <<<LONGDESC +This is text for a {@link http://phpdoc.org/ description} that uses inline +tags. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + $this->assertSame('This is text for a ', $parsedContents[0]); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag\LinkTag', + $parsedContents[1] + ); + $this->assertSame( + ' that uses inline +tags.', + $parsedContents[2] + ); + } + + public function testInlineTagAtStartParsing() + { + $fixture = <<<LONGDESC +{@link http://phpdoc.org/ This} is text for a description that uses inline +tags. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + + $this->assertSame('', $parsedContents[0]); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag\LinkTag', + $parsedContents[1] + ); + $this->assertSame( + ' is text for a description that uses inline +tags.', + $parsedContents[2] + ); + } + + public function testNestedInlineTagParsing() + { + $fixture = <<<LONGDESC +This is text for a description with {@internal inline tag with +{@link http://phpdoc.org another inline tag} in it}. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + + $this->assertSame( + 'This is text for a description with ', + $parsedContents[0] + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $parsedContents[1] + ); + $this->assertSame('.', $parsedContents[2]); + + $parsedDescription = $parsedContents[1]->getParsedDescription(); + $this->assertCount(3, $parsedDescription); + $this->assertSame("inline tag with\n", $parsedDescription[0]); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag\LinkTag', + $parsedDescription[1] + ); + $this->assertSame(' in it', $parsedDescription[2]); + } + + public function testLiteralOpeningDelimiter() + { + $fixture = <<<LONGDESC +This is text for a description containing { that is literal. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(1, $parsedContents); + $this->assertSame($fixture, $parsedContents[0]); + } + + public function testNestedLiteralOpeningDelimiter() + { + $fixture = <<<LONGDESC +This is text for a description containing {@internal inline tag that has { that +is literal}. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + $this->assertSame( + 'This is text for a description containing ', + $parsedContents[0] + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $parsedContents[1] + ); + $this->assertSame('.', $parsedContents[2]); + + $this->assertSame( + array('inline tag that has { that +is literal'), + $parsedContents[1]->getParsedDescription() + ); + } + + public function testLiteralClosingDelimiter() + { + $fixture = <<<LONGDESC +This is text for a description with {} that is not a tag. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(1, $parsedContents); + $this->assertSame( + 'This is text for a description with } that is not a tag.', + $parsedContents[0] + ); + } + + public function testNestedLiteralClosingDelimiter() + { + $fixture = <<<LONGDESC +This is text for a description with {@internal inline tag with {} that is not an +inline tag}. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + $this->assertSame( + 'This is text for a description with ', + $parsedContents[0] + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $parsedContents[1] + ); + $this->assertSame('.', $parsedContents[2]); + + $this->assertSame( + array('inline tag with } that is not an +inline tag'), + $parsedContents[1]->getParsedDescription() + ); + } + + public function testInlineTagEscapingSequence() + { + $fixture = <<<LONGDESC +This is text for a description with literal {{@}link}. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(1, $parsedContents); + $this->assertSame( + 'This is text for a description with literal {@link}.', + $parsedContents[0] + ); + } + + public function testNestedInlineTagEscapingSequence() + { + $fixture = <<<LONGDESC +This is text for a description with an {@internal inline tag with literal +{{@}link{} in it}. +LONGDESC; + $object = new Description($fixture); + $this->assertSame($fixture, $object->getContents()); + + $parsedContents = $object->getParsedContents(); + $this->assertCount(3, $parsedContents); + $this->assertSame( + 'This is text for a description with an ', + $parsedContents[0] + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $parsedContents[1] + ); + $this->assertSame('.', $parsedContents[2]); + + $this->assertSame( + array('inline tag with literal +{@link} in it'), + $parsedContents[1]->getParsedDescription() + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php new file mode 100644 index 000000000..ff257aa19 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php @@ -0,0 +1,86 @@ +<?php +/** + * phpDocumentor Covers Tag Test + * + * PHP version 5.3 + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\CoversTag + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class CoversTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\CoversTag can create + * a link for the covers doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exReference + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\CoversTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exReference + ) { + $tag = new CoversTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exReference, $tag->getReference()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exReference + return array( + array( + 'covers', + 'Foo::bar()', + 'Foo::bar()', + '', + 'Foo::bar()' + ), + array( + 'covers', + 'Foo::bar() Testing', + 'Foo::bar() Testing', + 'Testing', + 'Foo::bar()', + ), + array( + 'covers', + 'Foo::bar() Testing comments', + 'Foo::bar() Testing comments', + 'Testing comments', + 'Foo::bar()', + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php new file mode 100644 index 000000000..7a75e79ce --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php @@ -0,0 +1,115 @@ +<?php +/** + * phpDocumentor Deprecated Tag Test + * + * PHP version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class DeprecatedTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create + * a link for the @deprecated doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exDescription + * @param string $exVersion + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exVersion + ) { + $tag = new DeprecatedTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exVersion, $tag->getVersion()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exVersion + return array( + array( + 'deprecated', + '1.0 First release.', + '1.0 First release.', + 'First release.', + '1.0' + ), + array( + 'deprecated', + "1.0\nFirst release.", + "1.0\nFirst release.", + 'First release.', + '1.0' + ), + array( + 'deprecated', + "1.0\nFirst\nrelease.", + "1.0\nFirst\nrelease.", + "First\nrelease.", + '1.0' + ), + array( + 'deprecated', + 'Unfinished release', + 'Unfinished release', + 'Unfinished release', + '' + ), + array( + 'deprecated', + '1.0', + '1.0', + '', + '1.0' + ), + array( + 'deprecated', + 'GIT: $Id$', + 'GIT: $Id$', + '', + 'GIT: $Id$' + ), + array( + 'deprecated', + 'GIT: $Id$ Dev build', + 'GIT: $Id$ Dev build', + 'Dev build', + 'GIT: $Id$' + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php new file mode 100644 index 000000000..519a61b3a --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php @@ -0,0 +1,203 @@ +<?php +/** + * phpDocumentor Example Tag Test + * + * PHP version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ExampleTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\SourceTag can + * understand the @source DocBlock. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exStartingLine + * @param string $exLineCount + * @param string $exFilepath + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exStartingLine, + $exLineCount, + $exFilePath + ) { + $tag = new ExampleTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exStartingLine, $tag->getStartingLine()); + $this->assertEquals($exLineCount, $tag->getLineCount()); + $this->assertEquals($exFilePath, $tag->getFilePath()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, + // $content, + // $exContent, + // $exDescription, + // $exStartingLine, + // $exLineCount, + // $exFilePath + return array( + array( + 'example', + 'file.php', + 'file.php', + '', + 1, + null, + 'file.php' + ), + array( + 'example', + 'Testing comments', + 'Testing comments', + 'comments', + 1, + null, + 'Testing' + ), + array( + 'example', + 'file.php 2 Testing', + 'file.php 2 Testing', + 'Testing', + 2, + null, + 'file.php' + ), + array( + 'example', + 'file.php 2 3 Testing comments', + 'file.php 2 3 Testing comments', + 'Testing comments', + 2, + 3, + 'file.php' + ), + array( + 'example', + 'file.php 2 -1 Testing comments', + 'file.php 2 -1 Testing comments', + '-1 Testing comments', + 2, + null, + 'file.php' + ), + array( + 'example', + 'file.php -1 1 Testing comments', + 'file.php -1 1 Testing comments', + '-1 1 Testing comments', + 1, + null, + 'file.php' + ), + array( + 'example', + '"file with spaces.php" Testing comments', + '"file with spaces.php" Testing comments', + 'Testing comments', + 1, + null, + 'file with spaces.php' + ), + array( + 'example', + '"file with spaces.php" 2 Testing comments', + '"file with spaces.php" 2 Testing comments', + 'Testing comments', + 2, + null, + 'file with spaces.php' + ), + array( + 'example', + '"file with spaces.php" 2 3 Testing comments', + '"file with spaces.php" 2 3 Testing comments', + 'Testing comments', + 2, + 3, + 'file with spaces.php' + ), + array( + 'example', + '"file with spaces.php" 2 -3 Testing comments', + '"file with spaces.php" 2 -3 Testing comments', + '-3 Testing comments', + 2, + null, + 'file with spaces.php' + ), + array( + 'example', + '"file with spaces.php" -2 3 Testing comments', + '"file with spaces.php" -2 3 Testing comments', + '-2 3 Testing comments', + 1, + null, + 'file with spaces.php' + ), + array( + 'example', + 'file%20with%20spaces.php Testing comments', + 'file%20with%20spaces.php Testing comments', + 'Testing comments', + 1, + null, + 'file with spaces.php' + ), + array( + 'example', + 'folder/file%20with%20spaces.php Testing comments', + 'folder/file%20with%20spaces.php Testing comments', + 'Testing comments', + 1, + null, + 'folder/file with spaces.php' + ), + array( + 'example', + 'http://example.com/file%20with%20spaces.php Testing comments', + 'http://example.com/file%20with%20spaces.php Testing comments', + 'Testing comments', + 1, + null, + 'http://example.com/file%20with%20spaces.php' + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php new file mode 100644 index 000000000..0c64ed086 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php @@ -0,0 +1,87 @@ +<?php +/** + * phpDocumentor Link Tag Test + * + * PHP version 5.3 + * + * @author Ben Selby <benmatselby@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\LinkTag + * + * @author Ben Selby <benmatselby@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class LinkTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create + * a link for the @link doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exDescription + * @param string $exLink + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\LinkTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exLink + ) { + $tag = new LinkTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exLink, $tag->getLink()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exLink + return array( + array( + 'link', + 'http://www.phpdoc.org/', + 'http://www.phpdoc.org/', + 'http://www.phpdoc.org/', + 'http://www.phpdoc.org/' + ), + array( + 'link', + 'http://www.phpdoc.org/ Testing', + 'http://www.phpdoc.org/ Testing', + 'Testing', + 'http://www.phpdoc.org/' + ), + array( + 'link', + 'http://www.phpdoc.org/ Testing comments', + 'http://www.phpdoc.org/ Testing comments', + 'Testing comments', + 'http://www.phpdoc.org/' + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php new file mode 100644 index 000000000..72ccb783f --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php @@ -0,0 +1,127 @@ +<?php +/** + * phpDocumentor Method Tag Test + * + * PHP version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\MethodTag + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class MethodTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * @param string $signature The signature to test. + * @param bool $valid Whether the given signature is expected to + * be valid. + * @param string $expected_name The method name that is expected from this + * signature. + * @param string $expected_return The return type that is expected from this + * signature. + * @param bool $paramCount Number of parameters in the signature. + * @param string $description The short description mentioned in the + * signature. + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag + * @dataProvider getTestSignatures + * + * @return void + */ + public function testConstruct( + $signature, + $valid, + $expected_name, + $expected_return, + $paramCount, + $description + ) { + ob_start(); + $tag = new MethodTag('method', $signature); + $stdout = ob_get_clean(); + + $this->assertSame( + $valid, + empty($stdout), + 'No error should have been output if the signature is valid' + ); + + if (!$valid) { + return; + } + + $this->assertEquals($expected_name, $tag->getMethodName()); + $this->assertEquals($expected_return, $tag->getType()); + $this->assertEquals($description, $tag->getDescription()); + $this->assertCount($paramCount, $tag->getArguments()); + } + + public function getTestSignatures() + { + return array( + array( + 'foo', + false, 'foo', '', 0, '' + ), + array( + 'foo()', + true, 'foo', 'void', 0, '' + ), + array( + 'foo() description', + true, 'foo', 'void', 0, 'description' + ), + array( + 'int foo()', + true, 'foo', 'int', 0, '' + ), + array( + 'int foo() description', + true, 'foo', 'int', 0, 'description' + ), + array( + 'int foo($a, $b)', + true, 'foo', 'int', 2, '' + ), + array( + 'int foo() foo(int $a, int $b)', + true, 'foo', 'int', 2, '' + ), + array( + 'int foo(int $a, int $b)', + true, 'foo', 'int', 2, '' + ), + array( + 'null|int foo(int $a, int $b)', + true, 'foo', 'null|int', 2, '' + ), + array( + 'int foo(null|int $a, int $b)', + true, 'foo', 'int', 2, '' + ), + array( + '\Exception foo() foo(Exception $a, Exception $b)', + true, 'foo', '\Exception', 2, '' + ), + array( + 'int foo() foo(Exception $a, Exception $b) description', + true, 'foo', 'int', 2, 'description' + ), + array( + 'int foo() foo(\Exception $a, \Exception $b) description', + true, 'foo', 'int', 2, 'description' + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php new file mode 100644 index 000000000..0e05382fa --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php @@ -0,0 +1,118 @@ +<?php +/** + * phpDocumentor Param tag test. + * + * PHP version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\ParamTag + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ParamTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can + * understand the @param DocBlock. + * + * @param string $type + * @param string $content + * @param string $extractedType + * @param string $extractedTypes + * @param string $extractedVarName + * @param string $extractedDescription + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ParamTag + * @dataProvider provideDataForConstructor + * + * @return void + */ + public function testConstructorParsesInputsIntoCorrectFields( + $type, + $content, + $extractedType, + $extractedTypes, + $extractedVarName, + $extractedDescription + ) { + $tag = new ParamTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($extractedType, $tag->getType()); + $this->assertEquals($extractedTypes, $tag->getTypes()); + $this->assertEquals($extractedVarName, $tag->getVariableName()); + $this->assertEquals($extractedDescription, $tag->getDescription()); + } + + /** + * Data provider for testConstructorParsesInputsIntoCorrectFields() + * + * @return array + */ + public function provideDataForConstructor() + { + return array( + array('param', 'int', 'int', array('int'), '', ''), + array('param', '$bob', '', array(), '$bob', ''), + array( + 'param', + 'int Number of bobs', + 'int', + array('int'), + '', + 'Number of bobs' + ), + array( + 'param', + 'int $bob', + 'int', + array('int'), + '$bob', + '' + ), + array( + 'param', + 'int $bob Number of bobs', + 'int', + array('int'), + '$bob', + 'Number of bobs' + ), + array( + 'param', + "int Description \n on multiple lines", + 'int', + array('int'), + '', + "Description \n on multiple lines" + ), + array( + 'param', + "int \n\$bob Variable name on a new line", + 'int', + array('int'), + '$bob', + "Variable name on a new line" + ), + array( + 'param', + "\nint \$bob Type on a new line", + 'int', + array('int'), + '$bob', + "Type on a new line" + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php new file mode 100644 index 000000000..9e2aec0d1 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php @@ -0,0 +1,102 @@ +<?php +/** + * phpDocumentor Return tag test. + * + * PHP version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\ReturnTag + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ReturnTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can + * understand the @return DocBlock. + * + * @param string $type + * @param string $content + * @param string $extractedType + * @param string $extractedTypes + * @param string $extractedDescription + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag + * @dataProvider provideDataForConstructor + * + * @return void + */ + public function testConstructorParsesInputsIntoCorrectFields( + $type, + $content, + $extractedType, + $extractedTypes, + $extractedDescription + ) { + $tag = new ReturnTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($extractedType, $tag->getType()); + $this->assertEquals($extractedTypes, $tag->getTypes()); + $this->assertEquals($extractedDescription, $tag->getDescription()); + } + + /** + * Data provider for testConstructorParsesInputsIntoCorrectFields() + * + * @return array + */ + public function provideDataForConstructor() + { + return array( + array('return', '', '', array(), ''), + array('return', 'int', 'int', array('int'), ''), + array( + 'return', + 'int Number of Bobs', + 'int', + array('int'), + 'Number of Bobs' + ), + array( + 'return', + 'int|double Number of Bobs', + 'int|double', + array('int', 'double'), + 'Number of Bobs' + ), + array( + 'return', + "int Number of \n Bobs", + 'int', + array('int'), + "Number of \n Bobs" + ), + array( + 'return', + " int Number of Bobs", + 'int', + array('int'), + "Number of Bobs" + ), + array( + 'return', + "int\nNumber of Bobs", + 'int', + array('int'), + "Number of Bobs" + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php new file mode 100644 index 000000000..6829b0460 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php @@ -0,0 +1,86 @@ +<?php +/** + * phpDocumentor See Tag Test + * + * PHP version 5.3 + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SeeTag + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SeeTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the phpDocumentor_Reflection_DocBlock_Tag_See can create a link + * for the @see doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exReference + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\SeeTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exReference + ) { + $tag = new SeeTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exReference, $tag->getReference()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exReference + return array( + array( + 'see', + 'Foo::bar()', + 'Foo::bar()', + '', + 'Foo::bar()' + ), + array( + 'see', + 'Foo::bar() Testing', + 'Foo::bar() Testing', + 'Testing', + 'Foo::bar()', + ), + array( + 'see', + 'Foo::bar() Testing comments', + 'Foo::bar() Testing comments', + 'Testing comments', + 'Foo::bar()', + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php new file mode 100644 index 000000000..8caf25d1c --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php @@ -0,0 +1,115 @@ +<?php +/** + * phpDocumentor Since Tag Test + * + * PHP version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SinceTag + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SinceTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create + * a link for the @since doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exDescription + * @param string $exVersion + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\SinceTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exVersion + ) { + $tag = new SinceTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exVersion, $tag->getVersion()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exVersion + return array( + array( + 'since', + '1.0 First release.', + '1.0 First release.', + 'First release.', + '1.0' + ), + array( + 'since', + "1.0\nFirst release.", + "1.0\nFirst release.", + 'First release.', + '1.0' + ), + array( + 'since', + "1.0\nFirst\nrelease.", + "1.0\nFirst\nrelease.", + "First\nrelease.", + '1.0' + ), + array( + 'since', + 'Unfinished release', + 'Unfinished release', + 'Unfinished release', + '' + ), + array( + 'since', + '1.0', + '1.0', + '', + '1.0' + ), + array( + 'since', + 'GIT: $Id$', + 'GIT: $Id$', + '', + 'GIT: $Id$' + ), + array( + 'since', + 'GIT: $Id$ Dev build', + 'GIT: $Id$ Dev build', + 'Dev build', + 'GIT: $Id$' + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php new file mode 100644 index 000000000..2a40e0aa3 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php @@ -0,0 +1,116 @@ +<?php +/** + * phpDocumentor Source Tag Test + * + * PHP version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SourceTag + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class SourceTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\SourceTag can + * understand the @source DocBlock. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exStartingLine + * @param string $exLineCount + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exStartingLine, + $exLineCount + ) { + $tag = new SourceTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exStartingLine, $tag->getStartingLine()); + $this->assertEquals($exLineCount, $tag->getLineCount()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exStartingLine, $exLineCount + return array( + array( + 'source', + '2', + '2', + '', + 2, + null + ), + array( + 'source', + 'Testing', + 'Testing', + 'Testing', + 1, + null + ), + array( + 'source', + '2 Testing', + '2 Testing', + 'Testing', + 2, + null + ), + array( + 'source', + '2 3 Testing comments', + '2 3 Testing comments', + 'Testing comments', + 2, + 3 + ), + array( + 'source', + '2 -1 Testing comments', + '2 -1 Testing comments', + '-1 Testing comments', + 2, + null + ), + array( + 'source', + '-1 1 Testing comments', + '-1 1 Testing comments', + '-1 1 Testing comments', + 1, + null + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php new file mode 100644 index 000000000..3c669d558 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php @@ -0,0 +1,102 @@ +<?php +/** + * phpDocumentor Throws tag test. + * + * PHP version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\ThrowsTag + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class ThrowsTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag can + * understand the @throws DocBlock. + * + * @param string $type + * @param string $content + * @param string $extractedType + * @param string $extractedTypes + * @param string $extractedDescription + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag + * @dataProvider provideDataForConstructor + * + * @return void + */ + public function testConstructorParsesInputsIntoCorrectFields( + $type, + $content, + $extractedType, + $extractedTypes, + $extractedDescription + ) { + $tag = new ThrowsTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($extractedType, $tag->getType()); + $this->assertEquals($extractedTypes, $tag->getTypes()); + $this->assertEquals($extractedDescription, $tag->getDescription()); + } + + /** + * Data provider for testConstructorParsesInputsIntoCorrectFields() + * + * @return array + */ + public function provideDataForConstructor() + { + return array( + array('throws', '', '', array(), ''), + array('throws', 'int', 'int', array('int'), ''), + array( + 'throws', + 'int Number of Bobs', + 'int', + array('int'), + 'Number of Bobs' + ), + array( + 'throws', + 'int|double Number of Bobs', + 'int|double', + array('int', 'double'), + 'Number of Bobs' + ), + array( + 'throws', + "int Number of \n Bobs", + 'int', + array('int'), + "Number of \n Bobs" + ), + array( + 'throws', + " int Number of Bobs", + 'int', + array('int'), + "Number of Bobs" + ), + array( + 'throws', + "int\nNumber of Bobs", + 'int', + array('int'), + "Number of Bobs" + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php new file mode 100644 index 000000000..45868d73e --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php @@ -0,0 +1,86 @@ +<?php +/** + * phpDocumentor Uses Tag Test + * + * PHP version 5.3 + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\UsesTag + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class UsesTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\UsesTag can create + * a link for the @uses doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exReference + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\UsesTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exReference + ) { + $tag = new UsesTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exReference, $tag->getReference()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exReference + return array( + array( + 'uses', + 'Foo::bar()', + 'Foo::bar()', + '', + 'Foo::bar()' + ), + array( + 'uses', + 'Foo::bar() Testing', + 'Foo::bar() Testing', + 'Testing', + 'Foo::bar()', + ), + array( + 'uses', + 'Foo::bar() Testing comments', + 'Foo::bar() Testing comments', + 'Testing comments', + 'Foo::bar()', + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php new file mode 100644 index 000000000..9ae2aa5f7 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php @@ -0,0 +1,94 @@ +<?php +/** + * phpDocumentor Var Tag Test + * + * PHP version 5.3 + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VarTag + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class VarTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can + * understand the @var doc block. + * + * @param string $type + * @param string $content + * @param string $exType + * @param string $exVariable + * @param string $exDescription + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\VarTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exType, + $exVariable, + $exDescription + ) { + $tag = new VarTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exType, $tag->getType()); + $this->assertEquals($exVariable, $tag->getVariableName()); + $this->assertEquals($exDescription, $tag->getDescription()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exType, $exVariable, $exDescription + return array( + array( + 'var', + 'int', + 'int', + '', + '' + ), + array( + 'var', + 'int $bob', + 'int', + '$bob', + '' + ), + array( + 'var', + 'int $bob Number of bobs', + 'int', + '$bob', + 'Number of bobs' + ), + array( + 'var', + '', + '', + '', + '' + ), + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php new file mode 100644 index 000000000..e145386d4 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php @@ -0,0 +1,115 @@ +<?php +/** + * phpDocumentor Version Tag Test + * + * PHP version 5.3 + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VersionTag + * + * @author Vasil Rangelov <boen.robot@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class VersionTagTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create + * a link for the @version doc block. + * + * @param string $type + * @param string $content + * @param string $exContent + * @param string $exDescription + * @param string $exVersion + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exContent, + $exDescription, + $exVersion + ) { + $tag = new VersionTag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($exContent, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + $this->assertEquals($exVersion, $tag->getVersion()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exContent, $exDescription, $exVersion + return array( + array( + 'version', + '1.0 First release.', + '1.0 First release.', + 'First release.', + '1.0' + ), + array( + 'version', + "1.0\nFirst release.", + "1.0\nFirst release.", + 'First release.', + '1.0' + ), + array( + 'version', + "1.0\nFirst\nrelease.", + "1.0\nFirst\nrelease.", + "First\nrelease.", + '1.0' + ), + array( + 'version', + 'Unfinished release', + 'Unfinished release', + 'Unfinished release', + '' + ), + array( + 'version', + '1.0', + '1.0', + '', + '1.0' + ), + array( + 'version', + 'GIT: $Id$', + 'GIT: $Id$', + '', + 'GIT: $Id$' + ), + array( + 'version', + 'GIT: $Id$ Dev build', + 'GIT: $Id$ Dev build', + 'Dev build', + 'GIT: $Id$' + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php new file mode 100644 index 000000000..9e873ecb5 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php @@ -0,0 +1,313 @@ +<?php +/** + * phpDocumentor Var Tag Test + * + * PHP version 5.3 + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock; +use phpDocumentor\Reflection\DocBlock\Context; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VarTag + * + * @author Daniel O'Connor <daniel.oconnor@gmail.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class TagTest extends \PHPUnit_Framework_TestCase +{ + + /** + * @expectedException \InvalidArgumentException + * + * @return void + */ + public function testInvalidTagLine() + { + Tag::createInstance('Invalid tag line'); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * + * @return void + */ + public function testTagHandlerUnregistration() + { + $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; + $tagPreUnreg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPreUnreg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreUnreg + ); + + Tag::registerTagHandler('var', null); + + $tagPostUnreg = Tag::createInstance('@var mixed'); + $this->assertNotInstanceOf( + $currentHandler, + $tagPostUnreg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostUnreg + ); + + Tag::registerTagHandler('var', $currentHandler); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * + * @return void + */ + public function testTagHandlerCorrectRegistration() + { + if (0 == ini_get('allow_url_include')) { + $this->markTestSkipped('"data" URIs for includes are required.'); + } + $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; + $tagPreReg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPreReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreReg + ); + + include 'data:text/plain;base64,'. base64_encode( +<<<TAG_HANDLER +<?php + class MyTagHandler extends \phpDocumentor\Reflection\DocBlock\Tag {} +TAG_HANDLER + ); + + $this->assertTrue(Tag::registerTagHandler('var', '\MyTagHandler')); + + $tagPostReg = Tag::createInstance('@var mixed'); + $this->assertNotInstanceOf( + $currentHandler, + $tagPostReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostReg + ); + $this->assertInstanceOf( + '\MyTagHandler', + $tagPostReg + ); + + $this->assertTrue(Tag::registerTagHandler('var', $currentHandler)); + } + + /** + * @depends testTagHandlerCorrectRegistration + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * @covers \phpDocumentor\Reflection\DocBlock\Tag::createInstance + * + * @return void + */ + public function testNamespacedTagHandlerCorrectRegistration() + { + $tagPreReg = Tag::createInstance('@T something'); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreReg + ); + $this->assertNotInstanceOf( + '\MyTagHandler', + $tagPreReg + ); + + $this->assertTrue( + Tag::registerTagHandler('\MyNamespace\MyTag', '\MyTagHandler') + ); + + $tagPostReg = Tag::createInstance( + '@T something', + new DocBlock( + '', + new Context('', array('T' => '\MyNamespace\MyTag')) + ) + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostReg + ); + $this->assertInstanceOf( + '\MyTagHandler', + $tagPostReg + ); + + $this->assertTrue( + Tag::registerTagHandler('\MyNamespace\MyTag', null) + ); + } + + /** + * @depends testTagHandlerCorrectRegistration + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * @covers \phpDocumentor\Reflection\DocBlock\Tag::createInstance + * + * @return void + */ + public function testNamespacedTagHandlerIncorrectRegistration() + { + $tagPreReg = Tag::createInstance('@T something'); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreReg + ); + $this->assertNotInstanceOf( + '\MyTagHandler', + $tagPreReg + ); + + $this->assertFalse( + Tag::registerTagHandler('MyNamespace\MyTag', '\MyTagHandler') + ); + + $tagPostReg = Tag::createInstance( + '@T something', + new DocBlock( + '', + new Context('', array('T' => '\MyNamespace\MyTag')) + ) + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostReg + ); + $this->assertNotInstanceOf( + '\MyTagHandler', + $tagPostReg + ); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * + * @return void + */ + public function testNonExistentTagHandlerRegistration() + { + $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; + $tagPreReg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPreReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreReg + ); + + $this->assertFalse(Tag::registerTagHandler('var', 'Non existent')); + + $tagPostReg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPostReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostReg + ); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler + * + * @return void + */ + public function testIncompatibleTagHandlerRegistration() + { + $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; + $tagPreReg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPreReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPreReg + ); + + $this->assertFalse( + Tag::registerTagHandler('var', __NAMESPACE__ . '\TagTest') + ); + + $tagPostReg = Tag::createInstance('@var mixed'); + $this->assertInstanceOf( + $currentHandler, + $tagPostReg + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\Tag', + $tagPostReg + ); + } + + /** + * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can + * understand the @var doc block. + * + * @param string $type + * @param string $content + * @param string $exDescription + * + * @covers \phpDocumentor\Reflection\DocBlock\Tag + * @dataProvider provideDataForConstuctor + * + * @return void + */ + public function testConstructorParesInputsIntoCorrectFields( + $type, + $content, + $exDescription + ) { + $tag = new Tag($type, $content); + + $this->assertEquals($type, $tag->getName()); + $this->assertEquals($content, $tag->getContent()); + $this->assertEquals($exDescription, $tag->getDescription()); + } + + /** + * Data provider for testConstructorParesInputsIntoCorrectFields + * + * @return array + */ + public function provideDataForConstuctor() + { + // $type, $content, $exDescription + return array( + array( + 'unknown', + 'some content', + 'some content', + ), + array( + 'unknown', + '', + '', + ) + ); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php new file mode 100644 index 000000000..78c7306d6 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php @@ -0,0 +1,195 @@ +<?php +/** + * phpDocumentor Collection Test + * + * PHP version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Type; + +use phpDocumentor\Reflection\DocBlock\Context; + +/** + * Test class for \phpDocumentor\Reflection\DocBlock\Type\Collection + * + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class CollectionTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::getContext + * + * @return void + */ + public function testConstruct() + { + $collection = new Collection(); + $this->assertCount(0, $collection); + $this->assertEquals('', $collection->getContext()->getNamespace()); + $this->assertCount(0, $collection->getContext()->getNamespaceAliases()); + } + + /** + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct + * + * @return void + */ + public function testConstructWithTypes() + { + $collection = new Collection(array('integer', 'string')); + $this->assertCount(2, $collection); + } + + /** + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct + * + * @return void + */ + public function testConstructWithNamespace() + { + $collection = new Collection(array(), new Context('\My\Space')); + $this->assertEquals('My\Space', $collection->getContext()->getNamespace()); + + $collection = new Collection(array(), new Context('My\Space')); + $this->assertEquals('My\Space', $collection->getContext()->getNamespace()); + + $collection = new Collection(array(), null); + $this->assertEquals('', $collection->getContext()->getNamespace()); + } + + /** + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct + * + * @return void + */ + public function testConstructWithNamespaceAliases() + { + $fixture = array('a' => 'b'); + $collection = new Collection(array(), new Context(null, $fixture)); + $this->assertEquals( + array('a' => '\b'), + $collection->getContext()->getNamespaceAliases() + ); + } + + /** + * @param string $fixture + * @param array $expected + * + * @dataProvider provideTypesToExpand + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add + * + * @return void + */ + public function testAdd($fixture, $expected) + { + $collection = new Collection( + array(), + new Context('\My\Space', array('Alias' => '\My\Space\Aliasing')) + ); + $collection->add($fixture); + + $this->assertSame($expected, $collection->getArrayCopy()); + } + + /** + * @param string $fixture + * @param array $expected + * + * @dataProvider provideTypesToExpandWithoutNamespace + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add + * + * @return void + */ + public function testAddWithoutNamespace($fixture, $expected) + { + $collection = new Collection( + array(), + new Context(null, array('Alias' => '\My\Space\Aliasing')) + ); + $collection->add($fixture); + + $this->assertSame($expected, $collection->getArrayCopy()); + } + + /** + * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add + * @expectedException InvalidArgumentException + * + * @return void + */ + public function testAddWithInvalidArgument() + { + $collection = new Collection(); + $collection->add(array()); + } + + /** + * Returns the types and their expected values to test the retrieval of + * types. + * + * @param string $method Name of the method consuming this data provider. + * @param string $namespace Name of the namespace to user as basis. + * + * @return string[] + */ + public function provideTypesToExpand($method, $namespace = '\My\Space\\') + { + return array( + array('', array()), + array(' ', array()), + array('int', array('int')), + array('int ', array('int')), + array('string', array('string')), + array('DocBlock', array($namespace.'DocBlock')), + array('DocBlock[]', array($namespace.'DocBlock[]')), + array(' DocBlock ', array($namespace.'DocBlock')), + array('\My\Space\DocBlock', array('\My\Space\DocBlock')), + array('Alias\DocBlock', array('\My\Space\Aliasing\DocBlock')), + array( + 'DocBlock|Tag', + array($namespace .'DocBlock', $namespace .'Tag') + ), + array( + 'DocBlock|null', + array($namespace.'DocBlock', 'null') + ), + array( + '\My\Space\DocBlock|Tag', + array('\My\Space\DocBlock', $namespace.'Tag') + ), + array( + 'DocBlock[]|null', + array($namespace.'DocBlock[]', 'null') + ), + array( + 'DocBlock[]|int[]', + array($namespace.'DocBlock[]', 'int[]') + ), + ); + } + + /** + * Returns the types and their expected values to test the retrieval of + * types when no namespace is available. + * + * @param string $method Name of the method consuming this data provider. + * + * @return string[] + */ + public function provideTypesToExpandWithoutNamespace($method) + { + return $this->provideTypesToExpand($method, '\\'); + } +} diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php new file mode 100644 index 000000000..e87e3b943 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php @@ -0,0 +1,297 @@ +<?php +/** + * phpDocumentor DocBlock Test + * + * PHP Version 5.3 + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\DocBlock\Context; +use phpDocumentor\Reflection\DocBlock\Location; + +/** + * Test class for phpDocumentor\Reflection\DocBlock + * + * @author Mike van Riel <mike.vanriel@naenius.com> + * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ +class DocBlockTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers \phpDocumentor\Reflection\DocBlock + * + * @return void + */ + public function testConstruct() + { + $fixture = <<<DOCBLOCK +/** + * This is a short description. + * + * This is a long description. + * + * @see \MyClass + * @return void + */ +DOCBLOCK; + $object = new DocBlock( + $fixture, + new Context('\MyNamespace', array('PHPDoc' => '\phpDocumentor')), + new Location(2) + ); + $this->assertEquals( + 'This is a short description.', + $object->getShortDescription() + ); + $this->assertEquals( + 'This is a long description.', + $object->getLongDescription()->getContents() + ); + $this->assertCount(2, $object->getTags()); + $this->assertTrue($object->hasTag('see')); + $this->assertTrue($object->hasTag('return')); + $this->assertFalse($object->hasTag('category')); + + $this->assertSame('MyNamespace', $object->getContext()->getNamespace()); + $this->assertSame( + array('PHPDoc' => '\phpDocumentor'), + $object->getContext()->getNamespaceAliases() + ); + $this->assertSame(2, $object->getLocation()->getLineNumber()); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock::splitDocBlock + * + * @return void + */ + public function testConstructWithTagsOnly() + { + $fixture = <<<DOCBLOCK +/** + * @see \MyClass + * @return void + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertEquals('', $object->getShortDescription()); + $this->assertEquals('', $object->getLongDescription()->getContents()); + $this->assertCount(2, $object->getTags()); + $this->assertTrue($object->hasTag('see')); + $this->assertTrue($object->hasTag('return')); + $this->assertFalse($object->hasTag('category')); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock::cleanInput + * + * @return void + */ + public function testConstructOneLiner() + { + $fixture = '/** Short description and nothing more. */'; + $object = new DocBlock($fixture); + $this->assertEquals( + 'Short description and nothing more.', + $object->getShortDescription() + ); + $this->assertEquals('', $object->getLongDescription()->getContents()); + $this->assertCount(0, $object->getTags()); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock::__construct + * + * @return void + */ + public function testConstructFromReflector() + { + $object = new DocBlock(new \ReflectionClass($this)); + $this->assertEquals( + 'Test class for phpDocumentor\Reflection\DocBlock', + $object->getShortDescription() + ); + $this->assertEquals('', $object->getLongDescription()->getContents()); + $this->assertCount(4, $object->getTags()); + $this->assertTrue($object->hasTag('author')); + $this->assertTrue($object->hasTag('copyright')); + $this->assertTrue($object->hasTag('license')); + $this->assertTrue($object->hasTag('link')); + $this->assertFalse($object->hasTag('category')); + } + + /** + * @expectedException \InvalidArgumentException + * + * @return void + */ + public function testExceptionOnInvalidObject() + { + new DocBlock($this); + } + + public function testDotSeperation() + { + $fixture = <<<DOCBLOCK +/** + * This is a short description. This is a long description. + * This is a continuation of the long description. + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertEquals( + 'This is a short description.', + $object->getShortDescription() + ); + $this->assertEquals( + "This is a long description.\nThis is a continuation of the long " + ."description.", + $object->getLongDescription()->getContents() + ); + } + + /** + * @covers \phpDocumentor\Reflection\DocBlock::parseTags + * @expectedException \LogicException + * + * @return void + */ + public function testInvalidTagBlock() + { + if (0 == ini_get('allow_url_include')) { + $this->markTestSkipped('"data" URIs for includes are required.'); + } + + include 'data:text/plain;base64,'. base64_encode( + <<<DOCBLOCK_EXTENSION +<?php +class MyReflectionDocBlock extends \phpDocumentor\Reflection\DocBlock { + protected function splitDocBlock(\$comment) { + return array('', '', 'Invalid tag block'); + } +} +DOCBLOCK_EXTENSION + ); + new \MyReflectionDocBlock(''); + + } + + public function testTagCaseSensitivity() + { + $fixture = <<<DOCBLOCK +/** + * This is a short description. + * + * This is a long description. + * + * @method null something() + * @Method({"GET", "POST"}) + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertEquals( + 'This is a short description.', + $object->getShortDescription() + ); + $this->assertEquals( + 'This is a long description.', + $object->getLongDescription()->getContents() + ); + $tags = $object->getTags(); + $this->assertCount(2, $tags); + $this->assertTrue($object->hasTag('method')); + $this->assertTrue($object->hasTag('Method')); + $this->assertInstanceOf( + __NAMESPACE__ . '\DocBlock\Tag\MethodTag', + $tags[0] + ); + $this->assertInstanceOf( + __NAMESPACE__ . '\DocBlock\Tag', + $tags[1] + ); + $this->assertNotInstanceOf( + __NAMESPACE__ . '\DocBlock\Tag\MethodTag', + $tags[1] + ); + } + + /** + * @depends testConstructFromReflector + * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName + * + * @return void + */ + public function testGetTagsByNameZeroAndOneMatch() + { + $object = new DocBlock(new \ReflectionClass($this)); + $this->assertEmpty($object->getTagsByName('category')); + $this->assertCount(1, $object->getTagsByName('author')); + } + + /** + * @depends testConstructWithTagsOnly + * @covers \phpDocumentor\Reflection\DocBlock::parseTags + * + * @return void + */ + public function testParseMultilineTag() + { + $fixture = <<<DOCBLOCK +/** + * @return void Content on + * multiple lines. + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertCount(1, $object->getTags()); + } + + /** + * @depends testConstructWithTagsOnly + * @covers \phpDocumentor\Reflection\DocBlock::parseTags + * + * @return void + */ + public function testParseMultilineTagWithLineBreaks() + { + $fixture = <<<DOCBLOCK +/** + * @return void Content on + * multiple lines. + * + * One more, after the break. + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertCount(1, $object->getTags()); + } + + /** + * @depends testConstructWithTagsOnly + * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName + * + * @return void + */ + public function testGetTagsByNameMultipleMatch() + { + $fixture = <<<DOCBLOCK +/** + * @param string + * @param int + * @return void + */ +DOCBLOCK; + $object = new DocBlock($fixture); + $this->assertEmpty($object->getTagsByName('category')); + $this->assertCount(1, $object->getTagsByName('return')); + $this->assertCount(2, $object->getTagsByName('param')); + } +} From ef4b0dffe3a75126645343cd860246182a7857bc Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 4 Mar 2013 12:32:31 +0000 Subject: [PATCH 030/402] Add dependency folders missed from alst commit --- vendor/dflydev/markdown | 1 + vendor/nikic/php-parser | 1 + vendor/phpdocumentor/reflection | 1 + 3 files changed, 3 insertions(+) create mode 160000 vendor/dflydev/markdown create mode 160000 vendor/nikic/php-parser create mode 160000 vendor/phpdocumentor/reflection diff --git a/vendor/dflydev/markdown b/vendor/dflydev/markdown new file mode 160000 index 000000000..11f8faa2d --- /dev/null +++ b/vendor/dflydev/markdown @@ -0,0 +1 @@ +Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc diff --git a/vendor/nikic/php-parser b/vendor/nikic/php-parser new file mode 160000 index 000000000..75ec7a3e7 --- /dev/null +++ b/vendor/nikic/php-parser @@ -0,0 +1 @@ +Subproject commit 75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab diff --git a/vendor/phpdocumentor/reflection b/vendor/phpdocumentor/reflection new file mode 160000 index 000000000..257f10cd4 --- /dev/null +++ b/vendor/phpdocumentor/reflection @@ -0,0 +1 @@ +Subproject commit 257f10cd44bed0a8257c30ef9e218cb115867d40 From cdceb908cc39f4ad9ae2a9bcb64248c693ca8ac9 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 4 Mar 2013 12:32:50 +0000 Subject: [PATCH 031/402] Remove parse.php and the plugin. --- parse.php | 17 --- plugin.php | 358 ----------------------------------------------------- 2 files changed, 375 deletions(-) delete mode 100755 parse.php delete mode 100755 plugin.php diff --git a/parse.php b/parse.php deleted file mode 100755 index 7f3bd50fe..000000000 --- a/parse.php +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env php -<?php - -require 'vendor/autoload.php'; -require 'lib/WP/runner.php'; - -use phpDocumentor\Reflection\FileReflector; - -if ($_SERVER['argc'] < 2) - die("Please provide a directory to scan.\n"); - -$wp_dir = $_SERVER['argv'][1]; - -$files = get_wp_files($wp_dir); -$output = parse_files($files, $wp_dir); - -echo json_encode($output, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0); diff --git a/plugin.php b/plugin.php deleted file mode 100755 index fba95637e..000000000 --- a/plugin.php +++ /dev/null @@ -1,358 +0,0 @@ -<?php -/** - * Plugin Name: WordPress API Documentor - * Description: Generates API documentation for WordPress and imports it into WP. - * Author: Ryan McCue and Jon Cave - * Version: 0.1 - */ - -namespace WPAPIDocumentor; - -const TAXONOMY_FILE = 'wpapi-source-file'; -const TAXONOMY_PACKAGE = 'wpapi-package'; - -const POSTTYPE_FUNCTION = 'wpapi-function'; -const POSTTYPE_CLASS = 'wpapi-class'; -const POSTTYPE_HOOK = 'wpapi-hook'; - -bootstrap(); -register_activation_hook( __FILE__, '\\WPAPIDocumentor\\activate' ); -register_deactivation_hook( __FILE__, '\\WPAPIDocumentor\\deactivate' ); - -function bootstrap() { - add_action( 'init', '\\WPAPIDocumentor\\register_types' ); - add_action( 'admin_init', '\\WPAPIDocumentor\\run_import' ); -} - -function activate() { - wp_schedule_event( time(), 'hourly', 'wpapi_import' ); -} - -function deactivate() { - wp_clear_scheduled_hook( 'wpapi_import' ); -} - -function run_import() { - if (strpos($_SERVER['REQUEST_URI'], 'tools.php') === false) - return; - - set_time_limit(0); - header('Content-Type: text/plain'); - $importer = new Importer; - $importer->parseFile( __DIR__ . '/output.json' ); - die(); -} - -function register_types() { - register_taxonomy( TAXONOMY_FILE, null, array( - 'label' => __( 'Files', 'wpapi' ), - 'public' => true, - #'show_ui' => false, - 'hierarchical' => true, - 'rewrite' => array( - 'slug' => 'file', - ), - 'sort' => false, - ) ); - register_taxonomy( TAXONOMY_PACKAGE, null, array( - 'label' => __( 'Packages', 'wpapi' ), - 'public' => true, - 'show_ui' => false, - 'hierarchical' => true, - 'rewrite' => array( - 'slug' => 'package', - ), - 'sort' => false, - ) ); - register_post_type( POSTTYPE_FUNCTION, array( - 'label' => __( 'Functions', 'wpapi' ), - 'public' => true, - #'show_ui' => false, - 'rewrite' => array( - 'slug' => 'function' - ), - 'taxonomies' => array( - TAXONOMY_FILE, - TAXONOMY_PACKAGE, - ), - 'hierarchical' => true, - 'supports' => array( 'title', 'editor', 'excerpt', 'comments', 'custom-fields', 'page-attributes' ) - ) ); - register_post_type( POSTTYPE_CLASS, array( - 'label' => __( 'Classes', 'wpapi' ), - 'public' => true, - #'show_ui' => false, - 'rewrite' => array( - 'slug' => 'class' - ), - 'taxonomies' => array( - TAXONOMY_FILE, - TAXONOMY_PACKAGE, - ), - 'hierarchical' => true, - 'supports' => array( 'title', 'editor', 'excerpt', 'comments', 'custom-fields', 'page-attributes' ) - ) ); - register_post_type( POSTTYPE_HOOK, array( - 'label' => __( 'Hooks', 'wpapi' ), - 'public' => true, - #'show_ui' => false, - 'rewrite' => array( - 'slug' => 'hook' - ), - 'taxonomies' => array( - TAXONOMY_FILE, - TAXONOMY_PACKAGE, - ), - ) ); -} - -class Importer { - public static function getFileTerm( $file, $create = true ) { - $slug = sanitize_title( str_replace( '/', '_', $file ) ); - $term = get_term_by( 'slug', $slug, TAXONOMY_FILE ); - - if ( ! empty( $term ) ) - $term = (int) $term->term_id; - - if ( empty( $term ) && $create ) { - $data = wp_insert_term( add_magic_quotes( $file ), TAXONOMY_FILE, array( 'slug' => $slug ) ); - if ( is_wp_error( $data ) ) { - return $data; - } - $term = (int) $data['term_id']; - } - - return apply_filters( 'wpapi_file_term', $term, $file, $create, $slug ); - } - - public static function getHookDescription( $hook ) { - return apply_filters( 'wpapi_hook_description', $hook->name . ' is a ' . $hook->type, $hook ); - } - - public function parseFile( $path ) { - $contents = file_get_contents( $path ); - $data = json_decode($contents); - return $this->parse( $data ); - } - - public function parse( $data ) { - wp_defer_term_counting( true ); - wp_defer_comment_counting( true ); - - foreach ( $data as $file ) { - $this->handleFile( $file ); - } - - wp_defer_term_counting( false ); - wp_defer_comment_counting( false ); - var_dump($this->log); - } - - protected function handleFile( $file ) { - $this->file = self::getFileTerm( $file->path ); - if ( is_wp_error( $this->file) ) { - var_dump( $this->file ); - return; - } - - #foreach ( $file->constants as $constant ) { - # $this->handleConstant( $constant ); - #} - - if ( ! empty( $file->hooks ) ) { - foreach ( $file->hooks as $hook ) { - $this->handleHook( $hook ); - } - } - - if ( ! empty( $file->functions ) ) { - foreach ( $file->functions as $function ) { - $this->handleFunction( $function ); - } - } - - if ( ! empty( $file->classes ) ) { - foreach ( $file->classes as $class ) { - $this->handleClass( $class ); - } - } - - unset($this->file); - } - - /** - * Handle hook data - * - * @param stdClass $hook Hook data - * @param int|null $function Associated function - */ - public function handleHook( $hook, $function = null ) { - $ID = $this->insertHook( $hook, $function ); - - if ( is_wp_error( $ID ) ) { - $this->log[] = $ID; - return; - } - - wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); - - update_post_meta( $ID, '_wpapi_args', $hook->arguments ); - update_post_meta( $ID, '_wpapi_line_num', $hook->line ); - update_post_meta( $ID, '_wpapi_type', $hook->type ); - } - - /** - * Insert a hook into the database - * - * @param stdClass $hook Hook data - * @param int|null $function Associated function - * @return int|WP_Error - */ - protected function insertHook( $data, $function = null ) { - $slug = sanitize_title( $data->name ); - - $post_data = array( - 'post_type' => POSTTYPE_HOOK, - 'post_parent' => $function, - 'post_title' => $data->name, - 'post_name' => $slug, - 'post_status' => 'publish', - 'post_content' => self::getHookDescription( $data ), - ); - - $search = array( - 'name' => $slug, - 'post_type' => POSTTYPE_HOOK, - 'post_parent' => $function, - ); - $existing = get_posts($search); - - if ( !empty( $existing ) ) { - $post_data['ID'] = $existing[0]->ID; - $ID = wp_update_post( $post_data, true ); - } - else { - $ID = wp_insert_post( $post_data, true ); - } - - return $ID; - } - - public function handleFunction( $function, $class = null ) { - $ID = $this->insertFunction( $function, $class ); - - if ( is_wp_error( $ID ) ) { - $this->log[] = $ID; - return; - } - - wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); - - update_post_meta( $ID, '_wpapi_args', $function->arguments ); - update_post_meta( $ID, '_wpapi_line_num', $function->line ); - update_post_meta( $ID, '_wpapi_tags', $function->doc->tags ); - - if ( null !== $class ) { - update_post_meta( $ID, '_wpapi_final', (bool) $function->final ); - update_post_meta( $ID, '_wpapi_abstract', (bool) $function->abstract ); - update_post_meta( $ID, '_wpapi_static', (bool) $function->static ); - update_post_meta( $ID, '_wpapi_visibility', $function->visibility ); - } - - if ( ! empty( $function->hooks ) ) { - foreach ( $function->hooks as $hook ) { - $this->handleHook( $hook, $ID ); - } - } - } - - /** - * Insert a function into the database - * - * @param stdClass $data Function data - * @return int|WP_Error - */ - protected function insertFunction( $data, $class = 0 ) { - $slug = sanitize_title( $data->name ); - - $post_data = array( - 'post_name' => $slug, - 'post_type' => POSTTYPE_FUNCTION, - 'post_parent' => $class, - 'post_title' => $data->name, - 'post_status' => 'publish', - 'post_content' => '<p>' . $data->doc->description . '</p>' . "\n\n" . $data->doc->long_description, - 'post_excerpt' => $data->doc->description, - ); - - $search = array( - 'name' => $slug, - 'post_type' => POSTTYPE_FUNCTION, - 'post_parent' => $class, - ); - $existing = get_posts($search); - - if ( !empty( $existing ) ) { - $post_data['ID'] = $existing[0]->ID; - $ID = wp_update_post( $post_data, true ); - } - else { - $ID = wp_insert_post( $post_data, true ); - } - - return $ID; - } - - protected function handleClass( $class ) { - $ID = self::insertClass( $class ); - - if ( is_wp_error( $ID ) ) { - $this->log[] = $ID; - return; - } - - wp_set_object_terms( $ID, $this->file, TAXONOMY_FILE ); - - update_post_meta( $ID, '_wpapi_line_num', $class->line ); - update_post_meta( $ID, '_wpapi_properties', $class->properties ); - - foreach ( $class->methods as $method ) { - $this->handleFunction( $method, $ID ); - } - } - - /** - * Insert a class into the database - * - * @param stdClass $data class data - * @return int|WP_Error - */ - protected function insertClass( $data ) { - $slug = sanitize_title( $data->name ); - - $post_data = array( - 'name' => $slug, - 'post_type' => POSTTYPE_CLASS, - 'post_title' => $data->name, - 'post_status' => 'publish', - 'post_content' => '<p>' . $data->doc->description . '</p>' . "\n\n" . $data->doc->long_description, - 'post_excerpt' => $data->doc->description, - ); - - $search = array( - 'name' => $slug, - 'post_type' => POSTTYPE_CLASS, - ); - $existing = get_posts($search); - - if ( !empty( $existing ) ) { - $post_data['ID'] = $existing[0]->ID; - $ID = wp_update_post( $post_data, true ); - } - else { - $ID = wp_insert_post( $post_data, true ); - } - - return $ID; - } -} \ No newline at end of file From 2da1f233684464f0bb99d880fdc08aed942b7d8b Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 10 Mar 2013 13:09:03 +0000 Subject: [PATCH 032/402] Update parser to support scanning an individual file, as well as a directory. --- parse.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/parse.php b/parse.php index 7f3bd50fe..510fdd5c6 100755 --- a/parse.php +++ b/parse.php @@ -7,11 +7,19 @@ use phpDocumentor\Reflection\FileReflector; if ($_SERVER['argc'] < 2) - die("Please provide a directory to scan.\n"); + die("Please provide a directory or file to scan.\n"); $wp_dir = $_SERVER['argv'][1]; -$files = get_wp_files($wp_dir); +// Find the files to get the PHPDoc data from. $wp_dir can either be a folder or an absolute ref to a file. +if ( is_file( $wp_dir ) ) { + $files = array( $wp_dir ); + $wp_dir = dirname( $path ); + +} else { + $files = get_wp_files( $wp_dir ); +} + $output = parse_files($files, $wp_dir); echo json_encode($output, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0); From 13cfb35897e346ece1a3e52259b3cc4027591ae1 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 11 Mar 2013 16:16:11 +0000 Subject: [PATCH 033/402] Remove parsing exception for class-wp-json-server.php --- lib/WP/runner.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index b4919bc00..896de9853 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -10,9 +10,6 @@ function get_wp_files($directory) { if ($file->getExtension() !== 'php') continue; - if ($file->getFilename() === 'class-wp-json-server.php') - continue; - $files[] = $file->getPathname(); } } From b5f20d8d2e3cd400c8871f907bb22b3b86438686 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:13:44 +1000 Subject: [PATCH 034/402] Move files into parser subdirectory --- composer.json => WP-Parser/composer.json | 0 composer.lock => WP-Parser/composer.lock | 0 composer.phar => WP-Parser/composer.phar | Bin {lib => WP-Parser/lib}/WP/PrettyPrinter.php | 0 .../lib}/WP/Reflection/FileReflector.php | 0 .../lib}/WP/Reflection/HookReflector.php | 0 {lib => WP-Parser/lib}/WP/runner.php | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename composer.json => WP-Parser/composer.json (100%) rename composer.lock => WP-Parser/composer.lock (100%) rename composer.phar => WP-Parser/composer.phar (100%) rename {lib => WP-Parser/lib}/WP/PrettyPrinter.php (100%) rename {lib => WP-Parser/lib}/WP/Reflection/FileReflector.php (100%) rename {lib => WP-Parser/lib}/WP/Reflection/HookReflector.php (100%) rename {lib => WP-Parser/lib}/WP/runner.php (100%) diff --git a/composer.json b/WP-Parser/composer.json similarity index 100% rename from composer.json rename to WP-Parser/composer.json diff --git a/composer.lock b/WP-Parser/composer.lock similarity index 100% rename from composer.lock rename to WP-Parser/composer.lock diff --git a/composer.phar b/WP-Parser/composer.phar similarity index 100% rename from composer.phar rename to WP-Parser/composer.phar diff --git a/lib/WP/PrettyPrinter.php b/WP-Parser/lib/WP/PrettyPrinter.php similarity index 100% rename from lib/WP/PrettyPrinter.php rename to WP-Parser/lib/WP/PrettyPrinter.php diff --git a/lib/WP/Reflection/FileReflector.php b/WP-Parser/lib/WP/Reflection/FileReflector.php similarity index 100% rename from lib/WP/Reflection/FileReflector.php rename to WP-Parser/lib/WP/Reflection/FileReflector.php diff --git a/lib/WP/Reflection/HookReflector.php b/WP-Parser/lib/WP/Reflection/HookReflector.php similarity index 100% rename from lib/WP/Reflection/HookReflector.php rename to WP-Parser/lib/WP/Reflection/HookReflector.php diff --git a/lib/WP/runner.php b/WP-Parser/lib/WP/runner.php similarity index 100% rename from lib/WP/runner.php rename to WP-Parser/lib/WP/runner.php From e7ceb9e56e6cce534804212fbcc512aedaf7a3dd Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:16:13 +1000 Subject: [PATCH 035/402] Remove the Markdown subrepo --- vendor/dflydev/markdown | 1 - 1 file changed, 1 deletion(-) delete mode 160000 vendor/dflydev/markdown diff --git a/vendor/dflydev/markdown b/vendor/dflydev/markdown deleted file mode 160000 index 11f8faa2d..000000000 --- a/vendor/dflydev/markdown +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc From a51b8dbc64d0db804d11157349257a426eff4c65 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:20:10 +1000 Subject: [PATCH 036/402] Add Markdown to the composer dependencies --- WP-Parser/composer.json | 3 ++- WP-Parser/composer.lock | 36 +++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/WP-Parser/composer.json b/WP-Parser/composer.json index c89be4e5e..714bbf67c 100644 --- a/WP-Parser/composer.json +++ b/WP-Parser/composer.json @@ -1,7 +1,8 @@ { "require": { "php": ">=5.3.3", - "phpdocumentor/reflection": "dev-master" + "phpdocumentor/reflection": "dev-master", + "dflydev/markdown": "dev-master" }, "autoload": { "psr-0": { "WP": "lib/" } diff --git a/WP-Parser/composer.lock b/WP-Parser/composer.lock index bf5bbda1d..141074627 100644 --- a/WP-Parser/composer.lock +++ b/WP-Parser/composer.lock @@ -1,5 +1,9 @@ { - "hash": "0138a09193e1550b7154d2dcf43f7ed5", + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" + ], + "hash": "f74c79a7061421b34bce86b1457c9dc7", "packages": [ { "name": "dflydev/markdown", @@ -66,24 +70,29 @@ "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab" + "reference": "5fca55702b4e035b60a7b1cbac538572db47121d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", - "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5fca55702b4e035b60a7b1cbac538572db47121d", + "reference": "5fca55702b4e035b60a7b1cbac538572db47121d", "shasum": "" }, "require": { "php": ">=5.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + } + }, "autoload": { "psr-0": { "PHPParser": "lib/" } }, - "notification-url": "https://packagist.org/downloads/", + "notification-url": "http://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -97,7 +106,7 @@ "parser", "php" ], - "time": "2013-02-14 20:49:08" + "time": "2013-03-05 14:42:24" }, { "name": "phpdocumentor/reflection", @@ -189,12 +198,21 @@ "time": "2012-12-02 20:26:45" } ], - "packages-dev": null, + "packages-dev": [ + + ], "aliases": [ ], "minimum-stability": "dev", "stability-flags": { - "phpdocumentor/reflection": 20 - } + "phpdocumentor/reflection": 20, + "dflydev/markdown": 20 + }, + "platform": { + "php": ">=5.3.3" + }, + "platform-dev": [ + + ] } From fb52c3ca4b86b89a42158d6c9fd4450ba47d5cd8 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:22:11 +1000 Subject: [PATCH 037/402] Remove other old submodules --- vendor/nikic/php-parser | 1 - vendor/phpdocumentor/reflection | 1 - 2 files changed, 2 deletions(-) delete mode 160000 vendor/nikic/php-parser delete mode 160000 vendor/phpdocumentor/reflection diff --git a/vendor/nikic/php-parser b/vendor/nikic/php-parser deleted file mode 160000 index 75ec7a3e7..000000000 --- a/vendor/nikic/php-parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab diff --git a/vendor/phpdocumentor/reflection b/vendor/phpdocumentor/reflection deleted file mode 160000 index 257f10cd4..000000000 --- a/vendor/phpdocumentor/reflection +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 257f10cd44bed0a8257c30ef9e218cb115867d40 From 93dd0f0561fa6526ddd8fc2d3cba1698f0776798 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:22:42 +1000 Subject: [PATCH 038/402] Move the vendor directory into the parser directory --- {vendor => WP-Parser/vendor}/autoload.php | 0 {vendor => WP-Parser/vendor}/composer/ClassLoader.php | 0 {vendor => WP-Parser/vendor}/composer/autoload_classmap.php | 0 {vendor => WP-Parser/vendor}/composer/autoload_namespaces.php | 0 {vendor => WP-Parser/vendor}/composer/autoload_real.php | 0 {vendor => WP-Parser/vendor}/composer/installed.json | 0 .../vendor}/phpdocumentor/reflection-docblock/.gitignore | 0 .../vendor}/phpdocumentor/reflection-docblock/.travis.yml | 0 .../vendor}/phpdocumentor/reflection-docblock/README.md | 0 .../vendor}/phpdocumentor/reflection-docblock/composer.json | 0 .../vendor}/phpdocumentor/reflection-docblock/composer.lock | 0 .../vendor}/phpdocumentor/reflection-docblock/phpunit.xml.dist | 0 .../reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Context.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Description.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Location.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php | 0 .../phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php | 0 .../src/phpDocumentor/Reflection/DocBlock/Type/Collection.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php | 0 .../phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php | 0 .../phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php | 0 .../phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlock/TagTest.php | 0 .../phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php | 0 .../tests/phpDocumentor/Reflection/DocBlockTest.php | 0 54 files changed, 0 insertions(+), 0 deletions(-) rename {vendor => WP-Parser/vendor}/autoload.php (100%) rename {vendor => WP-Parser/vendor}/composer/ClassLoader.php (100%) rename {vendor => WP-Parser/vendor}/composer/autoload_classmap.php (100%) rename {vendor => WP-Parser/vendor}/composer/autoload_namespaces.php (100%) rename {vendor => WP-Parser/vendor}/composer/autoload_real.php (100%) rename {vendor => WP-Parser/vendor}/composer/installed.json (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/.gitignore (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/.travis.yml (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/README.md (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/composer.json (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/composer.lock (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/phpunit.xml.dist (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php (100%) rename {vendor => WP-Parser/vendor}/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php (100%) diff --git a/vendor/autoload.php b/WP-Parser/vendor/autoload.php similarity index 100% rename from vendor/autoload.php rename to WP-Parser/vendor/autoload.php diff --git a/vendor/composer/ClassLoader.php b/WP-Parser/vendor/composer/ClassLoader.php similarity index 100% rename from vendor/composer/ClassLoader.php rename to WP-Parser/vendor/composer/ClassLoader.php diff --git a/vendor/composer/autoload_classmap.php b/WP-Parser/vendor/composer/autoload_classmap.php similarity index 100% rename from vendor/composer/autoload_classmap.php rename to WP-Parser/vendor/composer/autoload_classmap.php diff --git a/vendor/composer/autoload_namespaces.php b/WP-Parser/vendor/composer/autoload_namespaces.php similarity index 100% rename from vendor/composer/autoload_namespaces.php rename to WP-Parser/vendor/composer/autoload_namespaces.php diff --git a/vendor/composer/autoload_real.php b/WP-Parser/vendor/composer/autoload_real.php similarity index 100% rename from vendor/composer/autoload_real.php rename to WP-Parser/vendor/composer/autoload_real.php diff --git a/vendor/composer/installed.json b/WP-Parser/vendor/composer/installed.json similarity index 100% rename from vendor/composer/installed.json rename to WP-Parser/vendor/composer/installed.json diff --git a/vendor/phpdocumentor/reflection-docblock/.gitignore b/WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/.gitignore rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore diff --git a/vendor/phpdocumentor/reflection-docblock/.travis.yml b/WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/.travis.yml rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml diff --git a/vendor/phpdocumentor/reflection-docblock/README.md b/WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/README.md rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md diff --git a/vendor/phpdocumentor/reflection-docblock/composer.json b/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/composer.json rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json diff --git a/vendor/phpdocumentor/reflection-docblock/composer.lock b/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/composer.lock rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock diff --git a/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php diff --git a/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php similarity index 100% rename from vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php rename to WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php From 5361e291f0ce0adc756e393cdab38ef21621dcda Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:25:19 +1000 Subject: [PATCH 039/402] Readd dependencies from composer Run `composer install` to update these on your local copy. --- WP-Parser/composer.lock | 4 +- WP-Parser/vendor/autoload.php | 2 +- WP-Parser/vendor/composer/ClassLoader.php | 4 +- .../vendor/composer/autoload_classmap.php | 2 +- .../vendor/composer/autoload_namespaces.php | 8 +- WP-Parser/vendor/composer/autoload_real.php | 6 +- WP-Parser/vendor/composer/installed.json | 103 +++++++++--------- WP-Parser/vendor/dflydev/markdown | 1 + WP-Parser/vendor/nikic/php-parser | 1 + WP-Parser/vendor/phpdocumentor/reflection | 1 + 10 files changed, 70 insertions(+), 62 deletions(-) create mode 160000 WP-Parser/vendor/dflydev/markdown create mode 160000 WP-Parser/vendor/nikic/php-parser create mode 160000 WP-Parser/vendor/phpdocumentor/reflection diff --git a/WP-Parser/composer.lock b/WP-Parser/composer.lock index 141074627..6f9633f6f 100644 --- a/WP-Parser/composer.lock +++ b/WP-Parser/composer.lock @@ -3,7 +3,7 @@ "This file locks the dependencies of your project to a known state", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" ], - "hash": "f74c79a7061421b34bce86b1457c9dc7", + "hash": "13f69154147a5e8618b0bd37b4187d1b", "packages": [ { "name": "dflydev/markdown", @@ -142,7 +142,7 @@ ] } }, - "notification-url": "https://packagist.org/downloads/", + "notification-url": "http://packagist.org/downloads/", "license": [ "MIT" ], diff --git a/WP-Parser/vendor/autoload.php b/WP-Parser/vendor/autoload.php index 25e78b541..2ae5cca4f 100644 --- a/WP-Parser/vendor/autoload.php +++ b/WP-Parser/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0::getLoader(); +return ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263::getLoader(); diff --git a/WP-Parser/vendor/composer/ClassLoader.php b/WP-Parser/vendor/composer/ClassLoader.php index 596c65d0f..bcf980915 100644 --- a/WP-Parser/vendor/composer/ClassLoader.php +++ b/WP-Parser/vendor/composer/ClassLoader.php @@ -175,7 +175,7 @@ public function unregister() * Loads the given class or interface. * * @param string $class The name of the class - * @return bool|null True, if loaded + * @return bool|null True if loaded, null otherwise */ public function loadClass($class) { @@ -191,7 +191,7 @@ public function loadClass($class) * * @param string $class The name of the class * - * @return string|null The path, if found + * @return string|false The path if found, false otherwise */ public function findFile($class) { diff --git a/WP-Parser/vendor/composer/autoload_classmap.php b/WP-Parser/vendor/composer/autoload_classmap.php index 4a9177d7f..af4ad5805 100644 --- a/WP-Parser/vendor/composer/autoload_classmap.php +++ b/WP-Parser/vendor/composer/autoload_classmap.php @@ -2,7 +2,7 @@ // autoload_classmap.php generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( diff --git a/WP-Parser/vendor/composer/autoload_namespaces.php b/WP-Parser/vendor/composer/autoload_namespaces.php index 70b49ddc0..783508a3d 100644 --- a/WP-Parser/vendor/composer/autoload_namespaces.php +++ b/WP-Parser/vendor/composer/autoload_namespaces.php @@ -2,12 +2,12 @@ // autoload_namespaces.php generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src/', $vendorDir . '/phpdocumentor/reflection/src/', $vendorDir . '/phpdocumentor/reflection/tests/unit/', $vendorDir . '/phpdocumentor/reflection/tests/mocks/'), + 'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/reflection/src', $vendorDir . '/phpdocumentor/reflection/tests/unit', $vendorDir . '/phpdocumentor/reflection/tests/mocks'), 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', - 'WP' => $baseDir . '/lib/', - 'PHPParser' => $vendorDir . '/nikic/php-parser/lib/', + 'WP' => $baseDir . '/lib', + 'PHPParser' => $vendorDir . '/nikic/php-parser/lib', ); diff --git a/WP-Parser/vendor/composer/autoload_real.php b/WP-Parser/vendor/composer/autoload_real.php index da2cd6361..e6a58bb81 100644 --- a/WP-Parser/vendor/composer/autoload_real.php +++ b/WP-Parser/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php generated by Composer -class ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0 +class ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263 { private static $loader; @@ -19,9 +19,9 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0', 'loadClassLoader')); + spl_autoload_register(array('ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit6c22cd8d65e5a0487e0bac79d91638e0', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263', 'loadClassLoader')); $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); diff --git a/WP-Parser/vendor/composer/installed.json b/WP-Parser/vendor/composer/installed.json index 2a0a0e357..38edc4b0c 100644 --- a/WP-Parser/vendor/composer/installed.json +++ b/WP-Parser/vendor/composer/installed.json @@ -1,4 +1,47 @@ [ + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.0a2", + "version_normalized": "2.0.0.0-alpha2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock", + "reference": "2.0.0a2" + }, + "dist": { + "type": "zip", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", + "reference": "2.0.0a2", + "shasum": "" + }, + "require": { + "dflydev/markdown": "1.0.*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@stable" + }, + "time": "2012-12-02 20:26:45", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ] + }, { "name": "dflydev/markdown", "version": "dev-master", @@ -60,49 +103,6 @@ "markdown" ] }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.0a2", - "version_normalized": "2.0.0.0-alpha2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock", - "reference": "2.0.0a2" - }, - "dist": { - "type": "zip", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", - "reference": "2.0.0a2", - "shasum": "" - }, - "require": { - "dflydev/markdown": "1.0.*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@stable" - }, - "time": "2012-12-02 20:26:45", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ] - }, { "name": "nikic/php-parser", "version": "dev-master", @@ -110,26 +110,31 @@ "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab" + "reference": "5fca55702b4e035b60a7b1cbac538572db47121d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", - "reference": "75ec7a3e78bd1fca42ede6def41ce25a9b81c7ab", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5fca55702b4e035b60a7b1cbac538572db47121d", + "reference": "5fca55702b4e035b60a7b1cbac538572db47121d", "shasum": "" }, "require": { "php": ">=5.2" }, - "time": "2013-02-14 20:49:08", + "time": "2013-03-05 14:42:24", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + } + }, "installation-source": "source", "autoload": { "psr-0": { "PHPParser": "lib/" } }, - "notification-url": "https://packagist.org/downloads/", + "notification-url": "http://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -181,7 +186,7 @@ ] } }, - "notification-url": "https://packagist.org/downloads/", + "notification-url": "http://packagist.org/downloads/", "license": [ "MIT" ], diff --git a/WP-Parser/vendor/dflydev/markdown b/WP-Parser/vendor/dflydev/markdown new file mode 160000 index 000000000..11f8faa2d --- /dev/null +++ b/WP-Parser/vendor/dflydev/markdown @@ -0,0 +1 @@ +Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc diff --git a/WP-Parser/vendor/nikic/php-parser b/WP-Parser/vendor/nikic/php-parser new file mode 160000 index 000000000..5fca55702 --- /dev/null +++ b/WP-Parser/vendor/nikic/php-parser @@ -0,0 +1 @@ +Subproject commit 5fca55702b4e035b60a7b1cbac538572db47121d diff --git a/WP-Parser/vendor/phpdocumentor/reflection b/WP-Parser/vendor/phpdocumentor/reflection new file mode 160000 index 000000000..257f10cd4 --- /dev/null +++ b/WP-Parser/vendor/phpdocumentor/reflection @@ -0,0 +1 @@ +Subproject commit 257f10cd44bed0a8257c30ef9e218cb115867d40 From 52c37f2bf280fd6aca59cddc91976550d4dc0f72 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Thu, 11 Apr 2013 14:27:17 +1000 Subject: [PATCH 040/402] Add the WP CLI command Thanks to @paulgibbs for this. Originally from https://github.com/Automattic/WP-CLI-PHPDoc/blob/master/phpdoc.php --- cli.php | 503 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 503 insertions(+) create mode 100644 cli.php diff --git a/cli.php b/cli.php new file mode 100644 index 000000000..73680f21b --- /dev/null +++ b/cli.php @@ -0,0 +1,503 @@ +<?php +use phpDocumentor\Reflection\FileReflector; + +/** + * Converts PHPDoc markup into a template ready for import to a WordPress blog. + */ +class WP_PHPDoc_Command extends WP_CLI_Command { + + /** + * Generate a JSON file containing the PHPDoc markup, and save to filesystem. + * + * @synopsis <directory> <output_file> + */ + public function generate( $args ) { + list( $directory, $output_file ) = $args; + $directory = realpath( $directory ); + $this->_load_libs(); + WP_CLI::line(); + + // Get data from the PHPDoc + $json = $this->_get_phpdoc_data( $directory ); + + // Write to $output_file + $error = ! file_put_contents( $output_file, $json ); + if ( $error ) { + WP_CLI::error( sprintf( 'Problem writing %1$s bytes of data to %2$s', strlen( $json ), $output_file ) ); + exit; + } + + WP_CLI::success( sprintf( 'Data exported to %1$s', $output_file ) ); + WP_CLI::line(); + } + + /** + * Read a JSON file containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. + * + * @synopsis <file> + */ + public function import( $args, $assoc_args ) { + list( $file ) = $args; + $this->_load_libs(); + WP_CLI::line(); + + // Get the data from the <file>, and check it's valid. + $phpdoc = false; + if ( is_readable( $file ) ) + $phpdoc = file_get_contents( $file ); + + if ( ! $phpdoc ) { + WP_CLI::error( sprintf( "Can't read %1\$s. Does the file exist?", $file ) ); + exit; + } + + $phpdoc = json_decode( $phpdoc ); + if ( is_null( $phpdoc ) ) { + WP_CLI::error( sprintf( "JSON in %1\$s can't be decoded :(", $file ) ); + exit; + } + + // Import data + $this->_do_import( $phpdoc ); + } + + /** + * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. + * + * @subcommand generate-and-import + * @synopsis <directory> + */ + public function generate_and_import( $args ) { + list( $directory ) = $args; + $directory = realpath( $directory ); + $this->_load_libs(); + WP_CLI::line(); + + // Import data + $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ) ); + } + + + /** + * Loads required libraries from WP-Parser project + * + * @see https://github.com/rmccue/WP-Parser/ + */ + protected function _load_libs() { + $path = dirname( __FILE__ ). '/WP-Parser/'; + + require_once "$path/vendor/autoload.php"; + require_once "$path/lib/WP/runner.php"; + } + + /** + * Generate the data from the PHPDoc markup. + * + * @param string $path Directory to scan for PHPDoc + * @param string $format Optional. What format the data is returned in: [json*|array]. + * @return string + */ + protected function _get_phpdoc_data( $path, $format = 'json' ) { + WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s/. This may take a few minutes...', $path ) ); + + // Find the files to get the PHPDoc data from. $path can either be a folder or an absolute ref to a file. + if ( is_file( $path ) ) { + $files = array( $path ); + $path = dirname( $path ); + + } else { + ob_start(); + $files = get_wp_files( $path ); + $error = ob_get_clean(); + + if ( $error ) { + WP_CLI::error( sprintf( 'Problem with %1$s: %2$s', $path, $error ) ); + exit; + } + } + + // Extract PHPDoc + $output = parse_files( $files, $path ); + + if ( $format == 'json' ) + $output = json_encode( $output, JSON_PRETTY_PRINT ); + + return $output; + } + + /** + * Import the PHPDoc $data into WordPress posts and taxonomies + * + * @param array $data + */ + protected function _do_import( array $data ) { + + // Make sure a current user is set + if ( ! wp_get_current_user()->exists() ) { + WP_CLI::error( 'Please specify a valid user: --user=<id|login>' ); + exit; + } + + WP_CLI::line( 'Starting import. This will take some time…' ); + + $file_number = 1; + $num_of_files = count( $data ); + + // Defer term counting for performance + wp_defer_term_counting( true ); + wp_defer_comment_counting( true ); + + // Run the importer + $importer = new WP_PHPDoc_Importer; + + // Sanity check -- do the required post types exist? + if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) ) { + WP_CLI::error( sprintf( 'Missing post type; check that "%1$s" and "%2$s" are registered.', $importer->post_type_class, $importer->post_type_function ) ); + exit; + } + + // Sanity check -- do the required taxonomies exist? + if ( ! taxonomy_exists( $importer->taxonomy_file ) ) { + WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); + exit; + } + + foreach ( $data as $file ) { + WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); + $file_number++; + + $importer->import_file( $file ); + } + + // Start counting again + wp_defer_term_counting( false ); + wp_defer_comment_counting( false ); + + if ( empty( $importer->errors ) ) { + WP_CLI::success( 'Import complete!' ); + + } else { + WP_CLI::line( 'Import complete, but some errors were found:' ); + foreach ( $importer->errors as $error ) + WP_CLI::warning( $error ); + } + + WP_CLI::line(); + } +} +WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); + +/** + * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. + * + * Based on the Importer class from https://github.com/rmccue/WP-Parser/ + */ +class WP_PHPDoc_Importer { + public $taxonomy_file; + public $taxonomy_package; // todo + public $post_type_function; + public $post_type_class; + public $post_type_hook; // todo + + /** + * Stores a reference to the current file's term in the file taxonomy + * + * @var string + */ + public $file_term_id; + + /** + * @var array Human-readable errors + */ + public $errors = array(); + + + /** + * Constructor. Sets up post type/taxonomy names. + * + * @param string $class Optional. Post type name for classes. + * @param string $file Optional. Taxonony name for files. + * @param string $function Optional. Post type name for functions. + */ + public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function' ) { + $this->post_type_class = $class; + $this->post_type_function = $function; + $this->taxonomy_file = $file; + } + + /** + * For a specific file, go through and import the file, functions, and classes. + * + * @param array $file + */ + public function import_file( array $file ) { + + // Maybe add an item for this file to the file taxonomy + $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); + $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + if ( ! $term ) { + + $term = wp_insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); + if ( is_wp_error( $term ) ) { + $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); + return; + } + + // Grab the full term object + $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + } + + $this->file_term_id = $term['name']; + + // Functions + if ( ! empty( $file['functions'] ) ) { + $i = 0; + + foreach ( $file['functions'] as $function ) { + $this->import_function( $function ); + $i++; + + // Wait 3 seconds after every 10 items + if ( $i % 10 == 0 ) + sleep( 3 ); + } + } + + // Classes + if ( ! empty( $file['classes'] ) ) { + $i = 0; + + // @todo Temporarily disabled class/method generation until the templates are sorted out + foreach ( $file['classes'] as $class ) { + //$this->import_class( $class ); + $i++; + + // Wait 3 seconds after every 10 items + if ( $i % 10 == 0 ) + sleep( 3 ); + } + } + } + + /** + * Get the template for function pages' post_content + * + * @param array $function_data Function data from the PHPDoc used to populate this template + * @return string + */ + public static function _get_function_template( array $function_data ) { + + // Prepare some variables to keep later code tidy + $description = $function_data['doc']['description']; + $long_description = str_replace( array( "\r", "\n" ), '', $function_data['doc']['long_description'] ); + $name = $function_data['name']; + $output = array(); + $parameters = array(); + $return_desc = ''; + + // Removing wrapping paragraph tags; see https://github.com/rmccue/WP-Parser/issues/6 + $long_description = substr( $long_description, strlen( '<p>' ) ); + $long_description = substr( $long_description, 0, strlen( $long_description ) - strlen( '</p>' ) ); + + // Extract the return type + $return_type = wp_list_filter( $function_data['doc']['tags'], array( 'name' => 'return' ) ); + if ( ! empty( $return_type ) ) { + + // Grab the description from the return type + $return_type = array_shift( $return_type )['content']; + $parts = explode( ' ', $return_type ); + + // The substr handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". + if ( count( $parts ) > 1 ) { + $return_desc = implode( ' ', array_slice( $parts, 1 ) ); + $return_type = substr( $return_type, 0, strpos( $return_type, ' ' ) ); + } + + } else { + $return_type = 'void'; + } + + // Function arguments, like: <function name> (<param1_type> <param1_name> = <param1_default_value>, ...) + $arg_string = "<h1 class='func-name'>{$name}</h1>( "; + + /** + * Loop through the parameters + * + * This is messy because ['arguments'] doesn't contain information from ['doc']['tags'][x]['name' == 'param']. + * See https://github.com/rmccue/WP-Parser/issues/4 + */ + $arguments = wp_list_filter( $function_data['doc']['tags'], array( 'name' => 'param' ) ); + foreach( $arguments as $param ) { + + // Split the string: "[bool] [$launch_missles] Fire the rockets" + $parts = explode( ' ', $param['content'] ); + $arg_string .= "<span class='param-type'>{$parts[0]}</span> <strong class='param-name'>{$parts[1]}</strong>"; + + // Maybe add default value + $param_default = wp_list_filter( $function_data['arguments'], array( 'name' => $parts[1] ) ); + if ( ! empty( $param_default ) ) { + + $param_default = array_shift( $param_default )['default']; + if ( ! is_null( $param_default ) ) + $arg_string .= " = {$param_default}"; + } + + $arg_string .= ', '; + } + $output[] = "{$arg_string})"; + + // Short function description + $output[] = $description; + + // Long description + $output[] = $long_description; + $output[] = '<!--more-->'; + + // Parameters + if ( ! empty( $arguments ) ) { + $output[] = '<h3>Parameters</h3>'; + $output[] = '<dl>'; + + foreach( $arguments as $param ) { + + // Split the param string: "bool [$launch_missles] [Fire the rockets]" + $parts = explode( ' ', $param['content'] ); + $output[] = "<dt>{$parts[1]}</dt>"; + + if ( isset( $parts[2] ) ) + $output[] = '<dd>' . implode( ' ', array_slice( $parts, 2 ) ) . '</dd>'; + } + + $output[] = '</dl>'; + } + + // Return value + $output[] = '<h3>Return Value</h3>'; + $output[] = "<span class='func-return-type'>({$return_type})</span> <span class='func-return-desc'>{$return_desc}</span>"; + + return implode( PHP_EOL . PHP_EOL, array_filter( $output ) ); + } + + /** + * Create a post for a function + * + * @param array $data Function + * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). + */ + public function import_function( array $data, $class_post_id = 0 ) { + global $wpdb; + + $is_new_post = true; + $slug = sanitize_title( $data['name'] ); + $post_data = array( + 'post_content' => self::_get_function_template( $data ), + 'post_excerpt' => $data['doc']['description'], + 'post_name' => $slug, + 'post_parent' => (int) $class_post_id, + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_function, + ); + + // Look for an existing post for this function + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $this->post_type_function, (int) $class_post_id ) ); + + // Insert/update the function post + if ( ! empty( $existing_post_id ) ) { + $is_new_post = false; + $post_data['ID'] = (int) $existing_post_id; + $ID = wp_update_post( $post_data, true ); + + } else { + $wpdb->insert( $wpdb->posts, $post_data ); + $ID = $wpdb->insert_id; + } + + if ( is_wp_error( $ID ) ) { + $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); + return; + } + + // Set taxonomy and post meta to use in the theme template + wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); + + update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags']); + + if ( $class_post_id ) { + update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $ID, '_wpapi_static', (bool) $data['static'] ); + update_post_meta( $ID, '_wpapi_visibility', $data['visibility'] ); + } + + // Everything worked! Woo hoo! + if ( $is_new_post ) { + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tImported method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); + + } else { + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tUpdated method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); + } + } + + /** + * Create a post for a class + * + * @param array $data Class + */ + protected function import_class( array $data ) { + global $wpdb; + + $is_new_post = true; + $slug = sanitize_title( $data['name'] ); + $post_data = array( + 'name' => $slug, + 'post_content' => '<p>' . $data['doc']['description'] . '</p>' . "\n\n" . $data['doc']['long_description'], + 'post_excerpt' => $data['doc']['description'], + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_class, + ); + + // Look for an existing post for this class + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s LIMIT 1", $slug, $this->post_type_class ) ); + + // Insert/update the function post + if ( ! empty( $existing_post_id ) ) { + $is_new_post = false; + $post_data['ID'] = (int) $existing_post_id; + $ID = wp_update_post( $post_data, true ); + + } else { + $ID = wp_insert_post( $post_data, true ); + } + + if ( is_wp_error( $ID ) ) { + $this->errors[] = sprintf( 'Problem inserting/updating post for class "%1$s": %2$s', $data['name'], $ID->get_error_message() ); + return; + } + + // Set taxonomy and post meta to use in the theme template + wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); + + update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_properties', $data['properties'] ); + + // Everything worked! Woo hoo! + if ( $is_new_post ) + WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); + + // Now add this class's methods + foreach ( $data['methods'] as $method ) + $this->import_function( $method, $ID ); + } +} From e93c7cda4b1402ea172d697073c99d567ab63916 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Thu, 18 Apr 2013 20:06:15 +0100 Subject: [PATCH 041/402] Simplify the generate subcommand by setting a default output filename --- cli.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cli.php b/cli.php index 73680f21b..3b1b16a54 100644 --- a/cli.php +++ b/cli.php @@ -9,10 +9,14 @@ class WP_PHPDoc_Command extends WP_CLI_Command { /** * Generate a JSON file containing the PHPDoc markup, and save to filesystem. * - * @synopsis <directory> <output_file> + * @synopsis <directory> [<output_file>] */ public function generate( $args ) { list( $directory, $output_file ) = $args; + + if ( empty( $output_file ) ) + $output_file = 'phpdoc.xml'; + $directory = realpath( $directory ); $this->_load_libs(); WP_CLI::line(); From 74bb90c214a5f9ea5a35eb2a2ba8fc0d0e16a4a7 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Fri, 19 Apr 2013 20:12:33 +0100 Subject: [PATCH 042/402] Use wp_insert_post to add new records into the DB instead of $wpdb->insert This fixes a bug where author, timestamps, and other post info was not being set. --- cli.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cli.php b/cli.php index 3b1b16a54..a04c67d90 100644 --- a/cli.php +++ b/cli.php @@ -75,7 +75,7 @@ public function generate_and_import( $args ) { list( $directory ) = $args; $directory = realpath( $directory ); $this->_load_libs(); - WP_CLI::line(); + WP_CLI::line(); // Import data $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ) ); @@ -413,11 +413,10 @@ public function import_function( array $data, $class_post_id = 0 ) { $ID = wp_update_post( $post_data, true ); } else { - $wpdb->insert( $wpdb->posts, $post_data ); - $ID = $wpdb->insert_id; + $ID = wp_insert_post( $post_data ); } - if ( is_wp_error( $ID ) ) { + if ( ! $ID || is_wp_error( $ID ) ) { $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); return; } @@ -483,7 +482,7 @@ protected function import_class( array $data ) { $ID = wp_insert_post( $post_data, true ); } - if ( is_wp_error( $ID ) ) { + if ( ! $ID || is_wp_error( $ID ) ) { $this->errors[] = sprintf( 'Problem inserting/updating post for class "%1$s": %2$s', $data['name'], $ID->get_error_message() ); return; } From dcc30a0ce7c413f62be30c2f3ffbcd547715229a Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 2 Jun 2013 11:35:58 +0300 Subject: [PATCH 043/402] Remove inline newlines in the phpDoc strings. Fixes #13 --- cli.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/cli.php b/cli.php index a04c67d90..d24769ec8 100644 --- a/cli.php +++ b/cli.php @@ -283,6 +283,22 @@ public function import_file( array $file ) { } } + /** + * Remove inline newlines in the $input string. + * + * This tidies up a block of text from phpDoc where the author split the block over multiple lines. + * We remove the inline newlines and replace with a space to avoid getting the end of one line being + * joined to the beginning of the next line, without any space inbetween. + * + * This regex was taken from wpautop(). + * + * @param string $input + * @return string + */ + public static function _fix_linebreaks( $input ) { + return preg_replace( '|(?<!<br />)\s*\n|', ' ', $input ); + } + /** * Get the template for function pages' post_content * @@ -293,7 +309,7 @@ public static function _get_function_template( array $function_data ) { // Prepare some variables to keep later code tidy $description = $function_data['doc']['description']; - $long_description = str_replace( array( "\r", "\n" ), '', $function_data['doc']['long_description'] ); + $long_description = self::_fix_linebreaks( $function_data['doc']['long_description'] ); $name = $function_data['name']; $output = array(); $parameters = array(); @@ -395,7 +411,7 @@ public function import_function( array $data, $class_post_id = 0 ) { $slug = sanitize_title( $data['name'] ); $post_data = array( 'post_content' => self::_get_function_template( $data ), - 'post_excerpt' => $data['doc']['description'], + 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), 'post_name' => $slug, 'post_parent' => (int) $class_post_id, 'post_status' => 'publish', From beb7630147bcd55c7445569d11f7476cc63bac65 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 2 Jun 2013 11:44:11 +0300 Subject: [PATCH 044/402] Don't hardcode the function argument blocks into the post_content The function metadata should be fetched with template functions built into the theme. Examples will be provided on ticket #14 --- cli.php | 87 ++------------------------------------------------------- 1 file changed, 3 insertions(+), 84 deletions(-) diff --git a/cli.php b/cli.php index d24769ec8..123f4d983 100644 --- a/cli.php +++ b/cli.php @@ -307,95 +307,14 @@ public static function _fix_linebreaks( $input ) { */ public static function _get_function_template( array $function_data ) { - // Prepare some variables to keep later code tidy - $description = $function_data['doc']['description']; + // Long description $long_description = self::_fix_linebreaks( $function_data['doc']['long_description'] ); - $name = $function_data['name']; - $output = array(); - $parameters = array(); - $return_desc = ''; // Removing wrapping paragraph tags; see https://github.com/rmccue/WP-Parser/issues/6 $long_description = substr( $long_description, strlen( '<p>' ) ); $long_description = substr( $long_description, 0, strlen( $long_description ) - strlen( '</p>' ) ); - // Extract the return type - $return_type = wp_list_filter( $function_data['doc']['tags'], array( 'name' => 'return' ) ); - if ( ! empty( $return_type ) ) { - - // Grab the description from the return type - $return_type = array_shift( $return_type )['content']; - $parts = explode( ' ', $return_type ); - - // The substr handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". - if ( count( $parts ) > 1 ) { - $return_desc = implode( ' ', array_slice( $parts, 1 ) ); - $return_type = substr( $return_type, 0, strpos( $return_type, ' ' ) ); - } - - } else { - $return_type = 'void'; - } - - // Function arguments, like: <function name> (<param1_type> <param1_name> = <param1_default_value>, ...) - $arg_string = "<h1 class='func-name'>{$name}</h1>( "; - - /** - * Loop through the parameters - * - * This is messy because ['arguments'] doesn't contain information from ['doc']['tags'][x]['name' == 'param']. - * See https://github.com/rmccue/WP-Parser/issues/4 - */ - $arguments = wp_list_filter( $function_data['doc']['tags'], array( 'name' => 'param' ) ); - foreach( $arguments as $param ) { - - // Split the string: "[bool] [$launch_missles] Fire the rockets" - $parts = explode( ' ', $param['content'] ); - $arg_string .= "<span class='param-type'>{$parts[0]}</span> <strong class='param-name'>{$parts[1]}</strong>"; - - // Maybe add default value - $param_default = wp_list_filter( $function_data['arguments'], array( 'name' => $parts[1] ) ); - if ( ! empty( $param_default ) ) { - - $param_default = array_shift( $param_default )['default']; - if ( ! is_null( $param_default ) ) - $arg_string .= " = {$param_default}"; - } - - $arg_string .= ', '; - } - $output[] = "{$arg_string})"; - - // Short function description - $output[] = $description; - - // Long description - $output[] = $long_description; - $output[] = '<!--more-->'; - - // Parameters - if ( ! empty( $arguments ) ) { - $output[] = '<h3>Parameters</h3>'; - $output[] = '<dl>'; - - foreach( $arguments as $param ) { - - // Split the param string: "bool [$launch_missles] [Fire the rockets]" - $parts = explode( ' ', $param['content'] ); - $output[] = "<dt>{$parts[1]}</dt>"; - - if ( isset( $parts[2] ) ) - $output[] = '<dd>' . implode( ' ', array_slice( $parts, 2 ) ) . '</dd>'; - } - - $output[] = '</dl>'; - } - - // Return value - $output[] = '<h3>Return Value</h3>'; - $output[] = "<span class='func-return-type'>({$return_type})</span> <span class='func-return-desc'>{$return_desc}</span>"; - - return implode( PHP_EOL . PHP_EOL, array_filter( $output ) ); + return self::_fix_linebreaks( $long_description ); } /** @@ -478,7 +397,7 @@ protected function import_class( array $data ) { $slug = sanitize_title( $data['name'] ); $post_data = array( 'name' => $slug, - 'post_content' => '<p>' . $data['doc']['description'] . '</p>' . "\n\n" . $data['doc']['long_description'], + 'post_content' => $data['doc']['long_description'], 'post_excerpt' => $data['doc']['description'], 'post_status' => 'publish', 'post_title' => $data['name'], From c1910952dfef58afa97b0f064b3f58e5a11ac359 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 2 Jun 2013 12:15:52 +0300 Subject: [PATCH 045/402] Add a --quick parameter to the WP-CLI commands which skips the sleep() calls during the WordPress import This is intended for local dev/testing only! --- cli.php | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cli.php b/cli.php index 123f4d983..9e3a9a4db 100644 --- a/cli.php +++ b/cli.php @@ -38,7 +38,7 @@ public function generate( $args ) { /** * Read a JSON file containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * - * @synopsis <file> + * @synopsis <file> [--quick] */ public function import( $args, $assoc_args ) { list( $file ) = $args; @@ -62,14 +62,14 @@ public function import( $args, $assoc_args ) { } // Import data - $this->_do_import( $phpdoc ); + $this->_do_import( $phpdoc, isset( $assoc_args['quick'] ) ); } /** * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * * @subcommand generate-and-import - * @synopsis <directory> + * @synopsis <directory> [--quick] */ public function generate_and_import( $args ) { list( $directory ) = $args; @@ -78,7 +78,7 @@ public function generate_and_import( $args ) { WP_CLI::line(); // Import data - $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ) ); + $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ), isset( $assoc_args['quick'] ) ); } @@ -133,8 +133,9 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * Import the PHPDoc $data into WordPress posts and taxonomies * * @param array $data + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. */ - protected function _do_import( array $data ) { + protected function _do_import( array $data, $skip_sleep = false ) { // Make sure a current user is set if ( ! wp_get_current_user()->exists() ) { @@ -170,7 +171,7 @@ protected function _do_import( array $data ) { WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); $file_number++; - $importer->import_file( $file ); + $importer->import_file( $file, $skip_sleep ); } // Start counting again @@ -233,8 +234,9 @@ public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file' * For a specific file, go through and import the file, functions, and classes. * * @param array $file + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. */ - public function import_file( array $file ) { + public function import_file( array $file, $skip_sleep = false ) { // Maybe add an item for this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); @@ -262,7 +264,7 @@ public function import_file( array $file ) { $i++; // Wait 3 seconds after every 10 items - if ( $i % 10 == 0 ) + if ( ! $skip_sleep && $i % 10 == 0 ) sleep( 3 ); } } @@ -277,7 +279,7 @@ public function import_file( array $file ) { $i++; // Wait 3 seconds after every 10 items - if ( $i % 10 == 0 ) + if ( ! $skip_sleep && $i % 10 == 0 ) sleep( 3 ); } } From 48c509ff14581ecdf57bc44014806a2ba2770add Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 2 Jun 2013 17:55:00 +0300 Subject: [PATCH 046/402] Don't remove wrapping paragraph tags. See #6 The old logic caused broken tags if there happened to be multiple <p> tags within the long description. This commit also removes the _get_function_template() function as it doesn't have a multi-purpose any more. --- cli.php | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/cli.php b/cli.php index 9e3a9a4db..67f3e85d1 100644 --- a/cli.php +++ b/cli.php @@ -301,24 +301,6 @@ public static function _fix_linebreaks( $input ) { return preg_replace( '|(?<!<br />)\s*\n|', ' ', $input ); } - /** - * Get the template for function pages' post_content - * - * @param array $function_data Function data from the PHPDoc used to populate this template - * @return string - */ - public static function _get_function_template( array $function_data ) { - - // Long description - $long_description = self::_fix_linebreaks( $function_data['doc']['long_description'] ); - - // Removing wrapping paragraph tags; see https://github.com/rmccue/WP-Parser/issues/6 - $long_description = substr( $long_description, strlen( '<p>' ) ); - $long_description = substr( $long_description, 0, strlen( $long_description ) - strlen( '</p>' ) ); - - return self::_fix_linebreaks( $long_description ); - } - /** * Create a post for a function * @@ -331,7 +313,7 @@ public function import_function( array $data, $class_post_id = 0 ) { $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = array( - 'post_content' => self::_get_function_template( $data ), + 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), 'post_name' => $slug, 'post_parent' => (int) $class_post_id, From f5123ab29491e1de86fd93c4d326d33533fcdb2a Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sat, 8 Jun 2013 21:07:02 +0100 Subject: [PATCH 047/402] Add @since data into a new taxonomy. Fixes #15 --- cli.php | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/cli.php b/cli.php index 67f3e85d1..a00ad0099 100644 --- a/cli.php +++ b/cli.php @@ -161,12 +161,18 @@ protected function _do_import( array $data, $skip_sleep = false ) { exit; } - // Sanity check -- do the required taxonomies exist? + // Sanity check -- does the file taxonomy exist? if ( ! taxonomy_exists( $importer->taxonomy_file ) ) { WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); exit; } + // Sanity check -- does the @since taxonomy exist? + if ( ! taxonomy_exists( $importer->taxonomy_since_version ) ) { + WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_since_version ) ); + exit; + } + foreach ( $data as $file ) { WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); $file_number++; @@ -199,6 +205,7 @@ protected function _do_import( array $data, $skip_sleep = false ) { */ class WP_PHPDoc_Importer { public $taxonomy_file; + public $taxonomy_since_version; public $taxonomy_package; // todo public $post_type_function; public $post_type_class; @@ -224,10 +231,11 @@ class WP_PHPDoc_Importer { * @param string $file Optional. Taxonony name for files. * @param string $function Optional. Post type name for functions. */ - public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function' ) { - $this->post_type_class = $class; - $this->post_type_function = $function; - $this->taxonomy_file = $file; + public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function', $since = 'wpapi-since' ) { + $this->post_type_class = $class; + $this->post_type_function = $function; + $this->taxonomy_file = $file; + $this->taxonomy_since_version = $since; } /** @@ -238,7 +246,7 @@ public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file' */ public function import_file( array $file, $skip_sleep = false ) { - // Maybe add an item for this file to the file taxonomy + // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); if ( ! $term ) { @@ -340,7 +348,22 @@ public function import_function( array $data, $class_post_id = 0 ) { return; } - // Set taxonomy and post meta to use in the theme template + // If the function has @since markup, assign the taxonomy + $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); + if ( ! empty( $since_version ) ) { + + $since_version = array_shift( $since_version ); + $since_version = $since_version['content']; + $since_term = term_exists( $since_version, $this->taxonomy_since_version ); + + if ( ! $since_term ) + $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); + + // Assign the tax item to the post + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + } + + // Set other taxonomy and post meta to use in the theme template wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); From ec322a8898759e5865ecd16205b93896ccff72b3 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Wed, 19 Jun 2013 20:27:26 +0100 Subject: [PATCH 048/402] Add missing function arg to generate_and_import. Fixes --quick param for generate_and_import. Missed in c1910952df --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index a00ad0099..3854f120b 100644 --- a/cli.php +++ b/cli.php @@ -71,7 +71,7 @@ public function import( $args, $assoc_args ) { * @subcommand generate-and-import * @synopsis <directory> [--quick] */ - public function generate_and_import( $args ) { + public function generate_and_import( $args, $assoc_args ) { list( $directory ) = $args; $directory = realpath( $directory ); $this->_load_libs(); From 013d45757b030c3bf13ed2378f69a3ddc4ceb8d1 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Wed, 19 Jun 2013 21:33:19 +0100 Subject: [PATCH 049/402] Don't import functions marked @internal unless explicitly requested. Fixes #16 New --import-internal flag for generate and generate-and-import subcommands --- cli.php | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/cli.php b/cli.php index 3854f120b..4ff854295 100644 --- a/cli.php +++ b/cli.php @@ -38,7 +38,7 @@ public function generate( $args ) { /** * Read a JSON file containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * - * @synopsis <file> [--quick] + * @synopsis <file> [--quick] [--import-internal] */ public function import( $args, $assoc_args ) { list( $file ) = $args; @@ -62,23 +62,24 @@ public function import( $args, $assoc_args ) { } // Import data - $this->_do_import( $phpdoc, isset( $assoc_args['quick'] ) ); + $this->_do_import( $phpdoc, isset( $assoc_args['quick'] ), isset( $assoc_args['import-internal'] ) ); } /** * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * * @subcommand generate-and-import - * @synopsis <directory> [--quick] + * @synopsis <directory> [--quick] [--import-internal] */ public function generate_and_import( $args, $assoc_args ) { list( $directory ) = $args; $directory = realpath( $directory ); + $this->_load_libs(); WP_CLI::line(); // Import data - $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ), isset( $assoc_args['quick'] ) ); + $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ), isset( $assoc_args['quick'] ), isset( $assoc_args['import-internal'] ) ); } @@ -134,8 +135,9 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * * @param array $data * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ - protected function _do_import( array $data, $skip_sleep = false ) { + protected function _do_import( array $data, $skip_sleep = false, $import_internal_functions = false ) { // Make sure a current user is set if ( ! wp_get_current_user()->exists() ) { @@ -177,7 +179,7 @@ protected function _do_import( array $data, $skip_sleep = false ) { WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); $file_number++; - $importer->import_file( $file, $skip_sleep ); + $importer->import_file( $file, $skip_sleep, $import_internal_functions ); } // Start counting again @@ -243,8 +245,9 @@ public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file' * * @param array $file * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ - public function import_file( array $file, $skip_sleep = false ) { + public function import_file( array $file, $skip_sleep = false, $import_internal_functions = false ) { // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); @@ -268,7 +271,7 @@ public function import_file( array $file, $skip_sleep = false ) { $i = 0; foreach ( $file['functions'] as $function ) { - $this->import_function( $function ); + $this->import_function( $function, 0, $import_internal_functions ); $i++; // Wait 3 seconds after every 10 items @@ -314,10 +317,22 @@ public static function _fix_linebreaks( $input ) { * * @param array $data Function * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ - public function import_function( array $data, $class_post_id = 0 ) { + public function import_function( array $data, $class_post_id = 0, $import_internal_functions = false ) { global $wpdb; + // Don't import functions marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_internal_functions && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); + + return; + } + $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = array( From 36d1dbe9d08e2fff9fee7a9997058d32a956674a Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 24 Jun 2013 17:10:08 -0400 Subject: [PATCH 050/402] Import classes. --- cli.php | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/cli.php b/cli.php index 4ff854295..9c2f6c7cc 100644 --- a/cli.php +++ b/cli.php @@ -284,9 +284,8 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ if ( ! empty( $file['classes'] ) ) { $i = 0; - // @todo Temporarily disabled class/method generation until the templates are sorted out foreach ( $file['classes'] as $class ) { - //$this->import_class( $class ); + $this->import_class( $class, $import_internal_functions ); $i++; // Wait 3 seconds after every 10 items @@ -355,7 +354,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern $ID = wp_update_post( $post_data, true ); } else { - $ID = wp_insert_post( $post_data ); + $ID = wp_insert_post( $post_data, true ); } if ( ! $ID || is_wp_error( $ID ) ) { @@ -383,7 +382,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags']); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); if ( $class_post_id ) { update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); @@ -411,16 +410,23 @@ public function import_function( array $data, $class_post_id = 0, $import_intern * Create a post for a class * * @param array $data Class + * @param bool $import_internal_classes Optional; defaults to false. If true, functions marked @internal will be imported. */ - protected function import_class( array $data ) { + protected function import_class( array $data, $import_internal_classes = false ) { global $wpdb; + // Don't import classes marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_internal_classes && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); + return; + } + $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = array( - 'name' => $slug, - 'post_content' => $data['doc']['long_description'], - 'post_excerpt' => $data['doc']['description'], + 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), + 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), + 'post_name' => $slug, 'post_status' => 'publish', 'post_title' => $data['name'], 'post_type' => $this->post_type_class, @@ -444,11 +450,28 @@ protected function import_class( array $data ) { return; } + // If the function has @since markup, assign the taxonomy + $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); + if ( ! empty( $since_version ) ) { + + $since_version = array_shift( $since_version ); + $since_version = $since_version['content']; + $since_term = term_exists( $since_version, $this->taxonomy_since_version ); + + if ( ! $since_term ) + $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); + + // Assign the tax item to the post + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + } + // Set taxonomy and post meta to use in the theme template wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); - update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_properties', $data['properties'] ); + update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); + update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); // Everything worked! Woo hoo! if ( $is_new_post ) @@ -456,8 +479,8 @@ protected function import_class( array $data ) { else WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - // Now add this class's methods + // Now add this class' methods foreach ( $data['methods'] as $method ) $this->import_function( $method, $ID ); } -} +} \ No newline at end of file From 297008ed5786580c563d972184dcddf254064ed3 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Mon, 1 Jul 2013 23:29:05 +1000 Subject: [PATCH 051/402] Split the importer class into a separate file --- cli.php | 286 --------------------------------------------------- importer.php | 285 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 285 insertions(+), 286 deletions(-) create mode 100755 importer.php diff --git a/cli.php b/cli.php index 9c2f6c7cc..024fd349d 100644 --- a/cli.php +++ b/cli.php @@ -198,289 +198,3 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna WP_CLI::line(); } } -WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); - -/** - * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. - * - * Based on the Importer class from https://github.com/rmccue/WP-Parser/ - */ -class WP_PHPDoc_Importer { - public $taxonomy_file; - public $taxonomy_since_version; - public $taxonomy_package; // todo - public $post_type_function; - public $post_type_class; - public $post_type_hook; // todo - - /** - * Stores a reference to the current file's term in the file taxonomy - * - * @var string - */ - public $file_term_id; - - /** - * @var array Human-readable errors - */ - public $errors = array(); - - - /** - * Constructor. Sets up post type/taxonomy names. - * - * @param string $class Optional. Post type name for classes. - * @param string $file Optional. Taxonony name for files. - * @param string $function Optional. Post type name for functions. - */ - public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function', $since = 'wpapi-since' ) { - $this->post_type_class = $class; - $this->post_type_function = $function; - $this->taxonomy_file = $file; - $this->taxonomy_since_version = $since; - } - - /** - * For a specific file, go through and import the file, functions, and classes. - * - * @param array $file - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. - */ - public function import_file( array $file, $skip_sleep = false, $import_internal_functions = false ) { - - // Maybe add this file to the file taxonomy - $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); - $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); - if ( ! $term ) { - - $term = wp_insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); - if ( is_wp_error( $term ) ) { - $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); - return; - } - - // Grab the full term object - $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); - } - - $this->file_term_id = $term['name']; - - // Functions - if ( ! empty( $file['functions'] ) ) { - $i = 0; - - foreach ( $file['functions'] as $function ) { - $this->import_function( $function, 0, $import_internal_functions ); - $i++; - - // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) - sleep( 3 ); - } - } - - // Classes - if ( ! empty( $file['classes'] ) ) { - $i = 0; - - foreach ( $file['classes'] as $class ) { - $this->import_class( $class, $import_internal_functions ); - $i++; - - // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) - sleep( 3 ); - } - } - } - - /** - * Remove inline newlines in the $input string. - * - * This tidies up a block of text from phpDoc where the author split the block over multiple lines. - * We remove the inline newlines and replace with a space to avoid getting the end of one line being - * joined to the beginning of the next line, without any space inbetween. - * - * This regex was taken from wpautop(). - * - * @param string $input - * @return string - */ - public static function _fix_linebreaks( $input ) { - return preg_replace( '|(?<!<br />)\s*\n|', ' ', $input ); - } - - /** - * Create a post for a function - * - * @param array $data Function - * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. - */ - public function import_function( array $data, $class_post_id = 0, $import_internal_functions = false ) { - global $wpdb; - - // Don't import functions marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_internal_functions && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); - else - WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); - - return; - } - - $is_new_post = true; - $slug = sanitize_title( $data['name'] ); - $post_data = array( - 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), - 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), - 'post_name' => $slug, - 'post_parent' => (int) $class_post_id, - 'post_status' => 'publish', - 'post_title' => $data['name'], - 'post_type' => $this->post_type_function, - ); - - // Look for an existing post for this function - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $this->post_type_function, (int) $class_post_id ) ); - - // Insert/update the function post - if ( ! empty( $existing_post_id ) ) { - $is_new_post = false; - $post_data['ID'] = (int) $existing_post_id; - $ID = wp_update_post( $post_data, true ); - - } else { - $ID = wp_insert_post( $post_data, true ); - } - - if ( ! $ID || is_wp_error( $ID ) ) { - $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); - return; - } - - // If the function has @since markup, assign the taxonomy - $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); - if ( ! empty( $since_version ) ) { - - $since_version = array_shift( $since_version ); - $since_version = $since_version['content']; - $since_term = term_exists( $since_version, $this->taxonomy_since_version ); - - if ( ! $since_term ) - $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); - - // Assign the tax item to the post - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); - } - - // Set other taxonomy and post meta to use in the theme template - wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); - - update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); - update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); - - if ( $class_post_id ) { - update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $ID, '_wpapi_static', (bool) $data['static'] ); - update_post_meta( $ID, '_wpapi_visibility', $data['visibility'] ); - } - - // Everything worked! Woo hoo! - if ( $is_new_post ) { - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tImported method \"%1\$s\"", $data['name'] ) ); - else - WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); - - } else { - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tUpdated method \"%1\$s\"", $data['name'] ) ); - else - WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); - } - } - - /** - * Create a post for a class - * - * @param array $data Class - * @param bool $import_internal_classes Optional; defaults to false. If true, functions marked @internal will be imported. - */ - protected function import_class( array $data, $import_internal_classes = false ) { - global $wpdb; - - // Don't import classes marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_internal_classes && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); - return; - } - - $is_new_post = true; - $slug = sanitize_title( $data['name'] ); - $post_data = array( - 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), - 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), - 'post_name' => $slug, - 'post_status' => 'publish', - 'post_title' => $data['name'], - 'post_type' => $this->post_type_class, - ); - - // Look for an existing post for this class - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s LIMIT 1", $slug, $this->post_type_class ) ); - - // Insert/update the function post - if ( ! empty( $existing_post_id ) ) { - $is_new_post = false; - $post_data['ID'] = (int) $existing_post_id; - $ID = wp_update_post( $post_data, true ); - - } else { - $ID = wp_insert_post( $post_data, true ); - } - - if ( ! $ID || is_wp_error( $ID ) ) { - $this->errors[] = sprintf( 'Problem inserting/updating post for class "%1$s": %2$s', $data['name'], $ID->get_error_message() ); - return; - } - - // If the function has @since markup, assign the taxonomy - $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); - if ( ! empty( $since_version ) ) { - - $since_version = array_shift( $since_version ); - $since_version = $since_version['content']; - $since_term = term_exists( $since_version, $this->taxonomy_since_version ); - - if ( ! $since_term ) - $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); - - // Assign the tax item to the post - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); - } - - // Set taxonomy and post meta to use in the theme template - wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); - - update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); - update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); - - // Everything worked! Woo hoo! - if ( $is_new_post ) - WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); - else - WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - - // Now add this class' methods - foreach ( $data['methods'] as $method ) - $this->import_function( $method, $ID ); - } -} \ No newline at end of file diff --git a/importer.php b/importer.php new file mode 100755 index 000000000..8b962515b --- /dev/null +++ b/importer.php @@ -0,0 +1,285 @@ +<?php +/** + * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. + * + * Based on the Importer class from https://github.com/rmccue/WP-Parser/ + */ +class WP_PHPDoc_Importer { + public $taxonomy_file; + public $taxonomy_since_version; + public $taxonomy_package; // todo + public $post_type_function; + public $post_type_class; + public $post_type_hook; // todo + + /** + * Stores a reference to the current file's term in the file taxonomy + * + * @var string + */ + public $file_term_id; + + /** + * @var array Human-readable errors + */ + public $errors = array(); + + + /** + * Constructor. Sets up post type/taxonomy names. + * + * @param string $class Optional. Post type name for classes. + * @param string $file Optional. Taxonony name for files. + * @param string $function Optional. Post type name for functions. + */ + public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function', $since = 'wpapi-since' ) { + $this->post_type_class = $class; + $this->post_type_function = $function; + $this->taxonomy_file = $file; + $this->taxonomy_since_version = $since; + } + + /** + * For a specific file, go through and import the file, functions, and classes. + * + * @param array $file + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + */ + public function import_file( array $file, $skip_sleep = false, $import_internal_functions = false ) { + + // Maybe add this file to the file taxonomy + $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); + $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + if ( ! $term ) { + + $term = wp_insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); + if ( is_wp_error( $term ) ) { + $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); + return; + } + + // Grab the full term object + $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + } + + $this->file_term_id = $term['name']; + + // Functions + if ( ! empty( $file['functions'] ) ) { + $i = 0; + + foreach ( $file['functions'] as $function ) { + $this->import_function( $function, 0, $import_internal_functions ); + $i++; + + // Wait 3 seconds after every 10 items + if ( ! $skip_sleep && $i % 10 == 0 ) + sleep( 3 ); + } + } + + // Classes + if ( ! empty( $file['classes'] ) ) { + $i = 0; + + foreach ( $file['classes'] as $class ) { + $this->import_class( $class, $import_internal_functions ); + $i++; + + // Wait 3 seconds after every 10 items + if ( ! $skip_sleep && $i % 10 == 0 ) + sleep( 3 ); + } + } + } + + /** + * Remove inline newlines in the $input string. + * + * This tidies up a block of text from phpDoc where the author split the block over multiple lines. + * We remove the inline newlines and replace with a space to avoid getting the end of one line being + * joined to the beginning of the next line, without any space inbetween. + * + * This regex was taken from wpautop(). + * + * @param string $input + * @return string + */ + public static function _fix_linebreaks( $input ) { + return preg_replace( '|(?<!<br />)\s*\n|', ' ', $input ); + } + + /** + * Create a post for a function + * + * @param array $data Function + * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + */ + public function import_function( array $data, $class_post_id = 0, $import_internal_functions = false ) { + global $wpdb; + + // Don't import functions marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_internal_functions && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); + + return; + } + + $is_new_post = true; + $slug = sanitize_title( $data['name'] ); + $post_data = array( + 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), + 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), + 'post_name' => $slug, + 'post_parent' => (int) $class_post_id, + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_function, + ); + + // Look for an existing post for this function + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $this->post_type_function, (int) $class_post_id ) ); + + // Insert/update the function post + if ( ! empty( $existing_post_id ) ) { + $is_new_post = false; + $post_data['ID'] = (int) $existing_post_id; + $ID = wp_update_post( $post_data, true ); + + } else { + $ID = wp_insert_post( $post_data, true ); + } + + if ( ! $ID || is_wp_error( $ID ) ) { + $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); + return; + } + + // If the function has @since markup, assign the taxonomy + $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); + if ( ! empty( $since_version ) ) { + + $since_version = array_shift( $since_version ); + $since_version = $since_version['content']; + $since_term = term_exists( $since_version, $this->taxonomy_since_version ); + + if ( ! $since_term ) + $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); + + // Assign the tax item to the post + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + } + + // Set other taxonomy and post meta to use in the theme template + wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); + + update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); + + if ( $class_post_id ) { + update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $ID, '_wpapi_static', (bool) $data['static'] ); + update_post_meta( $ID, '_wpapi_visibility', $data['visibility'] ); + } + + // Everything worked! Woo hoo! + if ( $is_new_post ) { + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tImported method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); + + } else { + if ( $class_post_id ) + WP_CLI::line( sprintf( "\tUpdated method \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); + } + } + + /** + * Create a post for a class + * + * @param array $data Class + * @param bool $import_internal_classes Optional; defaults to false. If true, functions marked @internal will be imported. + */ + protected function import_class( array $data, $import_internal_classes = false ) { + global $wpdb; + + // Don't import classes marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_internal_classes && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); + return; + } + + $is_new_post = true; + $slug = sanitize_title( $data['name'] ); + $post_data = array( + 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), + 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), + 'post_name' => $slug, + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_class, + ); + + // Look for an existing post for this class + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s LIMIT 1", $slug, $this->post_type_class ) ); + + // Insert/update the function post + if ( ! empty( $existing_post_id ) ) { + $is_new_post = false; + $post_data['ID'] = (int) $existing_post_id; + $ID = wp_update_post( $post_data, true ); + + } else { + $ID = wp_insert_post( $post_data, true ); + } + + if ( ! $ID || is_wp_error( $ID ) ) { + $this->errors[] = sprintf( 'Problem inserting/updating post for class "%1$s": %2$s', $data['name'], $ID->get_error_message() ); + return; + } + + // If the function has @since markup, assign the taxonomy + $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); + if ( ! empty( $since_version ) ) { + + $since_version = array_shift( $since_version ); + $since_version = $since_version['content']; + $since_term = term_exists( $since_version, $this->taxonomy_since_version ); + + if ( ! $since_term ) + $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); + + // Assign the tax item to the post + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + } + + // Set taxonomy and post meta to use in the theme template + wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); + + update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); + update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); + + // Everything worked! Woo hoo! + if ( $is_new_post ) + WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); + else + WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); + + // Now add this class' methods + foreach ( $data['methods'] as $method ) + $this->import_function( $method, $ID ); + } +} \ No newline at end of file From 7432fe2094902fbeef8c0bdc43ec12e71fc3e24e Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Mon, 1 Jul 2013 23:29:20 +1000 Subject: [PATCH 052/402] Allow actually activating the plugin --- plugin.php | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 plugin.php diff --git a/plugin.php b/plugin.php new file mode 100755 index 000000000..fde049315 --- /dev/null +++ b/plugin.php @@ -0,0 +1,67 @@ +<?php +/** + * Plugin Name: WP Parser + * Description: Create a function reference site powered by WordPress + * Author: Ryan McCue and Paul Gibbs + * Plugin URI: https://github.com/rmccue/WP-Parser + * Version: 1.0 + */ + +require __DIR__ . '/importer.php'; +require __DIR__ . '/cli.php'; + +WP_PHPDoc::bootstrap(); + +class WP_PHPDoc { + public static function bootstrap() { + WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); + + add_action( 'init', __CLASS__ . '::register_post_types' ); + add_action( 'init', __CLASS__ . '::register_taxonomies' ); + } + + public static function register_post_types() { + // Functions + register_post_type( 'wpapi-function', array( + 'has_archive' => true, + 'hierarchical' => true, + 'label' => __( 'Functions' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'functions' ), + 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), + 'taxonomies' => array( 'wpapi-source-file' ), + ) ); + + // Classes + register_post_type( 'wpapi-class', array( + 'has_archive' => true, + 'hierarchical' => false, + 'label' => __( 'Classes' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'classes' ), + 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), + 'taxonomies' => array( 'wpapi-source-file' ), + ) ); + } + + public static function register_taxonomies() { + // Files + register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( + 'hierarchical' => true, + 'label' => __( 'Files' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'files' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) ); + + // Files + register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( + 'hierarchical' => true, + 'label' => __( '@since' ), + 'public' => true, + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) ); + } +} From 7b749b63644d40de79dd5f6ec1d13721461aaa3f Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Mon, 1 Jul 2013 23:30:26 +1000 Subject: [PATCH 053/402] Only include the CLI class if we're in CLI mode --- plugin.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugin.php b/plugin.php index fde049315..c6e3429ee 100755 --- a/plugin.php +++ b/plugin.php @@ -8,13 +8,15 @@ */ require __DIR__ . '/importer.php'; -require __DIR__ . '/cli.php'; WP_PHPDoc::bootstrap(); class WP_PHPDoc { public static function bootstrap() { - WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); + if ( defined('WP_CLI') && WP_CLI ) { + require __DIR__ . '/cli.php'; + WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); + } add_action( 'init', __CLASS__ . '::register_post_types' ); add_action( 'init', __CLASS__ . '::register_taxonomies' ); From 9fd3f9b76534b76aad8ba7fb8d8a305a2f30f0db Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Mon, 1 Jul 2013 23:49:31 +1000 Subject: [PATCH 054/402] Transition to namespace-based classes/functions --- cli.php | 7 +++- importer.php | 5 ++- plugin.php | 102 +++++++++++++++++++++++++-------------------------- 3 files changed, 61 insertions(+), 53 deletions(-) diff --git a/cli.php b/cli.php index 024fd349d..5f365382d 100644 --- a/cli.php +++ b/cli.php @@ -1,10 +1,15 @@ <?php + +namespace WPFuncRef; + use phpDocumentor\Reflection\FileReflector; +use WP_CLI; +use WP_CLI_Command; /** * Converts PHPDoc markup into a template ready for import to a WordPress blog. */ -class WP_PHPDoc_Command extends WP_CLI_Command { +class Command extends WP_CLI_Command { /** * Generate a JSON file containing the PHPDoc markup, and save to filesystem. diff --git a/importer.php b/importer.php index 8b962515b..f56fe53e0 100755 --- a/importer.php +++ b/importer.php @@ -1,10 +1,13 @@ <?php + +namespace WPFuncRef; + /** * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. * * Based on the Importer class from https://github.com/rmccue/WP-Parser/ */ -class WP_PHPDoc_Importer { +class Importer { public $taxonomy_file; public $taxonomy_since_version; public $taxonomy_package; // todo diff --git a/plugin.php b/plugin.php index c6e3429ee..64b9961ea 100755 --- a/plugin.php +++ b/plugin.php @@ -7,63 +7,63 @@ * Version: 1.0 */ -require __DIR__ . '/importer.php'; +namespace WPFuncRef; -WP_PHPDoc::bootstrap(); +require __DIR__ . '/importer.php'; -class WP_PHPDoc { - public static function bootstrap() { - if ( defined('WP_CLI') && WP_CLI ) { - require __DIR__ . '/cli.php'; - WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); - } +bootstrap(); - add_action( 'init', __CLASS__ . '::register_post_types' ); - add_action( 'init', __CLASS__ . '::register_taxonomies' ); +function bootstrap() { + if ( defined('WP_CLI') && WP_CLI ) { + require __DIR__ . '/cli.php'; + WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); } - public static function register_post_types() { - // Functions - register_post_type( 'wpapi-function', array( - 'has_archive' => true, - 'hierarchical' => true, - 'label' => __( 'Functions' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'functions' ), - 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), - 'taxonomies' => array( 'wpapi-source-file' ), - ) ); + add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); + add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); +} - // Classes - register_post_type( 'wpapi-class', array( - 'has_archive' => true, - 'hierarchical' => false, - 'label' => __( 'Classes' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'classes' ), - 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), - 'taxonomies' => array( 'wpapi-source-file' ), - ) ); - } +function register_post_types() { + // Functions + register_post_type( 'wpapi-function', array( + 'has_archive' => true, + 'hierarchical' => true, + 'label' => __( 'Functions' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'functions' ), + 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), + 'taxonomies' => array( 'wpapi-source-file' ), + ) ); - public static function register_taxonomies() { - // Files - register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( - 'hierarchical' => true, - 'label' => __( 'Files' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'files' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) ); + // Classes + register_post_type( 'wpapi-class', array( + 'has_archive' => true, + 'hierarchical' => false, + 'label' => __( 'Classes' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'classes' ), + 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), + 'taxonomies' => array( 'wpapi-source-file' ), + ) ); +} - // Files - register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( - 'hierarchical' => true, - 'label' => __( '@since' ), - 'public' => true, - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) ); - } +function register_taxonomies() { + // Files + register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( + 'hierarchical' => true, + 'label' => __( 'Files' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'files' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) ); + + // Files + register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( + 'hierarchical' => true, + 'label' => __( '@since' ), + 'public' => true, + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) ); } From e7dc6f8decf10be705537e33e042be556a68b345 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Mon, 1 Jul 2013 23:59:48 +1000 Subject: [PATCH 055/402] Move WP_CLI::add_command back to cli.php Looks like WP CLI requires this to be in cli.php unfortunately. --- cli.php | 2 ++ plugin.php | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cli.php b/cli.php index 5f365382d..4532f4934 100644 --- a/cli.php +++ b/cli.php @@ -203,3 +203,5 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna WP_CLI::line(); } } + +WP_CLI::add_command( 'phpdoc', __NAMESPACE__ . '\\Command' ); diff --git a/plugin.php b/plugin.php index 64b9961ea..a4affe70b 100755 --- a/plugin.php +++ b/plugin.php @@ -11,13 +11,13 @@ require __DIR__ . '/importer.php'; +if ( defined('WP_CLI') && WP_CLI ) { + require __DIR__ . '/cli.php'; +} + bootstrap(); function bootstrap() { - if ( defined('WP_CLI') && WP_CLI ) { - require __DIR__ . '/cli.php'; - WP_CLI::add_command( 'phpdoc', 'WP_PHPDoc_Command' ); - } add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); From 33b0a3ba6cad8d1e663a7ab82fbac9b1a0c295de Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:03:24 +1000 Subject: [PATCH 056/402] Add templating functions Props to @paulgibbs for this. --- plugin.php | 1 + template.php | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100755 template.php diff --git a/plugin.php b/plugin.php index a4affe70b..d968557e8 100755 --- a/plugin.php +++ b/plugin.php @@ -10,6 +10,7 @@ namespace WPFuncRef; require __DIR__ . '/importer.php'; +require __DIR__ . '/template.php'; if ( defined('WP_CLI') && WP_CLI ) { require __DIR__ . '/cli.php'; diff --git a/template.php b/template.php new file mode 100755 index 000000000..807df3df2 --- /dev/null +++ b/template.php @@ -0,0 +1,194 @@ +<?php + +/** + * Prints the current function's return type. Template tag function for the function post type. + * + * @return string + */ +function wpfuncref_the_return_type() { + $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $return_type = wp_list_filter( $function_data, array( 'name' => 'return' ) ); + + if ( ! empty( $return_type ) ) { + + // Grab the description from the return type + $return_type = array_shift( $return_type ); + $return_type = $return_type['content']; + $parts = explode( ' ', $return_type ); + $return_type = $parts[0]; + + + } else { + $return_type = 'void'; + } + + $return_type = wpfuncref_format_type( $return_type ); + + echo apply_filters( 'wpfuncref_the_return_type', $return_type ); +} + +/** + * Prints the current function's return description. Template tag function for the function post type. + * + * @return string + */ +function wpfuncref_the_return_desc() { + $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $return_desc = wp_list_filter( $function_data, array( 'name' => 'return' ) ); + + if ( ! empty( $return_desc ) ) { + + // Grab the description from the return type + $return_desc = array_shift( $return_desc ); + $return_desc = $return_desc['content']; + $parts = explode( ' ', $return_desc ); + + // This handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". + if ( count( $parts ) > 1 ) + $return_desc = ': ' . implode( ' ', array_slice( $parts, 1 ) ); + else + $return_desc = ''; + + + } else { + $return_desc = ''; + } + + echo apply_filters( 'wpfuncref_the_return_desc', $return_desc ); +} + +/** + * Do any of the current function's arguments have a default value? + * + * @return bool + */ +function wpfuncref_arguments_have_default_values() { + $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_args', true ), array( 'name' => 'default' ) ); + return apply_filters( 'wpfuncref_arguments_have_default_values', ! empty( $retval ) ); +} + +/** + * Is the current function deprecated? + * + * @return bool + */ +function wpfuncref_is_function_deprecated() { + $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_tags', true ), array( 'name' => 'deprecated' ) ); + return apply_filters( 'wpfuncref_is_function_deprecated', ! empty( $retval ) ); +} + +/** + * Return the current function's arguments. Template tag function for the function post type. + * + * The default value stuff is messy because ['arguments'] doesn't contain information from ['doc']['tags'][x]['name' == 'param']. + * + * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) + * @see https://github.com/rmccue/WP-Parser/issues/4 + */ +function wpfuncref_get_the_arguments() { + $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); + $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $params = wp_list_filter( $function_data, array( 'name' => 'param' ) ); + $return_args = array(); + + if ( ! empty( $params ) ) { + foreach ( $params as $param ) { + + // Split the string: "[bool] [$launch_missles] Fire the rockets" + $parts = explode( ' ', $param['content'] ); + + $return_desc = ''; + $return_type = $parts[0]; + + // The substr handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". + if ( count( $parts ) > 2 ) + $return_desc = implode( ' ', array_slice( $parts, 2 ) ); + + // Assemble data for this parameter + $arg = array( + 'desc' => $return_desc, + 'name' => $parts[1], + 'type' => $return_type, + ); + + // Maybe add default value + $param_default_value = wp_list_filter( $args_data, array( 'name' => $parts[1] ) ); + if ( ! empty( $param_default_value ) ) { + $param_default_value = array_shift( $param_default_value ); + $param_default_value = $param_default_value['default']; + + if ( ! is_null( $param_default_value ) ) + $arg['default_value'] = $param_default_value; + } + + $return_args[] = $arg; + } + + + } else { + $return_args = array(); + } + + return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); +} + + +/** + * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. + * + * @param array $args Parameter arguments to make safe + * @param array Filtered arguments + * @return array + */ +function wpfuncref_make_args_safe( $args ) { + $filters = array( + 'wp_filter_kses', + 'make_clickable', + 'force_balance_tags', + 'wptexturize', + 'convert_smilies', + 'convert_chars', + 'wpautop', + 'stripslashes_deep', + ); + + foreach ( $args as &$arg ) { + foreach ( $arg as &$value ) { + + // Loop through all elements of the $args array, and apply our set of filters to them. + foreach ( $filters as $filter_function ) + $value = call_user_func( $filter_function, $value ); + } + } + + return apply_filters( 'wpfuncref_make_args_safe', $args ); +} +add_filter( 'wpfuncref_get_the_arguments', 'wpfuncref_make_args_safe' ); + +function wpfuncref_format_type( $type ) { + return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); +} + +/** + * Returns the URL to the current function on the bbP/BP trac. + * + * @return string + */ +function bpcodex_get_wpapi_source_link() { + if ( strpos( wp_get_theme()->get( 'Name' ), 'BuddyPress.org' ) !== false ) + $trac_url = 'https://buddypress.trac.wordpress.org/browser/trunk/'; + else + $trac_url = 'https://bbpress.trac.wordpress.org/browser/trunk/'; + + // Find the current post in the wpapi-source-file term + $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); + if ( ! empty( $term ) && ! is_wp_error( $term ) ) { + $term = array_shift( $term ); + $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); + + // Link to the specific file name and the line number on trac + $trac_url .= "{$term->name}#L{$line_num}"; + } + + return $trac_url; +} \ No newline at end of file From d445077a69b6a267d623f9aecdd19f271dcd27ef Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:04:32 +1000 Subject: [PATCH 057/402] Remove unneeded bootstrap function --- plugin.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/plugin.php b/plugin.php index d968557e8..785486864 100755 --- a/plugin.php +++ b/plugin.php @@ -16,13 +16,8 @@ require __DIR__ . '/cli.php'; } -bootstrap(); - -function bootstrap() { - - add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); - add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); -} +add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); +add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); function register_post_types() { // Functions From 893e41babeaf7f6cce9a1bdea1cf8b23d607f5b7 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:13:01 +1000 Subject: [PATCH 058/402] Ensure we use consistent naming for template tags That is, use the_*() for printing --- template.php | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/template.php b/template.php index 807df3df2..c9a854dbe 100755 --- a/template.php +++ b/template.php @@ -1,11 +1,11 @@ <?php /** - * Prints the current function's return type. Template tag function for the function post type. + * Get the current function's return type * * @return string */ -function wpfuncref_the_return_type() { +function wpfuncref_return_type() { $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $return_type = wp_list_filter( $function_data, array( 'name' => 'return' ) ); @@ -24,11 +24,20 @@ function wpfuncref_the_return_type() { $return_type = wpfuncref_format_type( $return_type ); - echo apply_filters( 'wpfuncref_the_return_type', $return_type ); + return apply_filters( 'wpfuncref_the_return_type', $return_type ); +} + +/** + * Print the current function's return type + * + * @see wpfuncref_return_type + */ +function wpfuncref_the_return_type() { + echo wpfuncref_return_type(); } /** - * Prints the current function's return description. Template tag function for the function post type. + * Get the current function's return description * * @return string */ @@ -54,7 +63,14 @@ function wpfuncref_the_return_desc() { $return_desc = ''; } - echo apply_filters( 'wpfuncref_the_return_desc', $return_desc ); + return apply_filters( 'wpfuncref_the_return_desc', $return_desc ); +} + +/** + * Print the current function's return description + */ +function wpfuncref_the_return_desc() { + echo wpfuncref_the_return_desc(); } /** From f47691cdff45243c3428896e5eeeb09a0b069bc0 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:16:17 +1000 Subject: [PATCH 059/402] PHPDoc improvements --- plugin.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugin.php b/plugin.php index 785486864..dd833faeb 100755 --- a/plugin.php +++ b/plugin.php @@ -19,6 +19,9 @@ add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); +/** + * Register the function and class post types + */ function register_post_types() { // Functions register_post_type( 'wpapi-function', array( @@ -43,6 +46,11 @@ function register_post_types() { ) ); } +/** + * Register the file and @since taxonomies + * + * @return [type] [description] + */ function register_taxonomies() { // Files register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( From b9aea85a0b7c893a370daadab26728702dfab381 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:16:34 +1000 Subject: [PATCH 060/402] Explicitly list WP_CLI as a dependency for Importer --- importer.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/importer.php b/importer.php index f56fe53e0..ddef08ee5 100755 --- a/importer.php +++ b/importer.php @@ -2,6 +2,8 @@ namespace WPFuncRef; +use WP_CLI; + /** * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. * From c7c24b831342e7ea52423eb7941b8b6cc050fcff Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:17:25 +1000 Subject: [PATCH 061/402] Move non-templating functions into a separate file --- plugin.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ template.php | 61 ------------------------------------------------ 2 files changed, 66 insertions(+), 61 deletions(-) diff --git a/plugin.php b/plugin.php index dd833faeb..f819d019b 100755 --- a/plugin.php +++ b/plugin.php @@ -18,6 +18,7 @@ add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); +add_filter( 'wpfuncref_get_the_arguments', __NAMESPACE__ . '\\make_args_safe' ); /** * Register the function and class post types @@ -71,3 +72,68 @@ function register_taxonomies() { 'update_count_callback' => '_update_post_term_count', ) ); } + +/** + * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. + * + * @param array $args Parameter arguments to make safe + * @param array Filtered arguments + * @return array + */ +function make_args_safe( $args ) { + $filters = array( + 'wp_filter_kses', + 'make_clickable', + 'force_balance_tags', + 'wptexturize', + 'convert_smilies', + 'convert_chars', + 'wpautop', + 'stripslashes_deep', + ); + + foreach ( $args as &$arg ) { + foreach ( $arg as &$value ) { + + // Loop through all elements of the $args array, and apply our set of filters to them. + foreach ( $filters as $filter_function ) + $value = call_user_func( $filter_function, $value ); + } + } + + return apply_filters( 'wpfuncref_make_args_safe', $args ); +} + +/** + * Replace separators with a more readable version + * + * @param string $type Variable type + * @return string + */ +function wpfuncref_format_type( $type ) { + return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); +} + +/** + * Returns the URL to the current function on the bbP/BP trac. + * + * @return string + */ +function bpcodex_get_wpapi_source_link() { + if ( strpos( wp_get_theme()->get( 'Name' ), 'BuddyPress.org' ) !== false ) + $trac_url = 'https://buddypress.trac.wordpress.org/browser/trunk/'; + else + $trac_url = 'https://bbpress.trac.wordpress.org/browser/trunk/'; + + // Find the current post in the wpapi-source-file term + $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); + if ( ! empty( $term ) && ! is_wp_error( $term ) ) { + $term = array_shift( $term ); + $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); + + // Link to the specific file name and the line number on trac + $trac_url .= "{$term->name}#L{$line_num}"; + } + + return $trac_url; +} diff --git a/template.php b/template.php index c9a854dbe..557672f4f 100755 --- a/template.php +++ b/template.php @@ -147,64 +147,3 @@ function wpfuncref_get_the_arguments() { return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); } - - -/** - * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. - * - * @param array $args Parameter arguments to make safe - * @param array Filtered arguments - * @return array - */ -function wpfuncref_make_args_safe( $args ) { - $filters = array( - 'wp_filter_kses', - 'make_clickable', - 'force_balance_tags', - 'wptexturize', - 'convert_smilies', - 'convert_chars', - 'wpautop', - 'stripslashes_deep', - ); - - foreach ( $args as &$arg ) { - foreach ( $arg as &$value ) { - - // Loop through all elements of the $args array, and apply our set of filters to them. - foreach ( $filters as $filter_function ) - $value = call_user_func( $filter_function, $value ); - } - } - - return apply_filters( 'wpfuncref_make_args_safe', $args ); -} -add_filter( 'wpfuncref_get_the_arguments', 'wpfuncref_make_args_safe' ); - -function wpfuncref_format_type( $type ) { - return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); -} - -/** - * Returns the URL to the current function on the bbP/BP trac. - * - * @return string - */ -function bpcodex_get_wpapi_source_link() { - if ( strpos( wp_get_theme()->get( 'Name' ), 'BuddyPress.org' ) !== false ) - $trac_url = 'https://buddypress.trac.wordpress.org/browser/trunk/'; - else - $trac_url = 'https://bbpress.trac.wordpress.org/browser/trunk/'; - - // Find the current post in the wpapi-source-file term - $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); - if ( ! empty( $term ) && ! is_wp_error( $term ) ) { - $term = array_shift( $term ); - $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); - - // Link to the specific file name and the line number on trac - $trac_url .= "{$term->name}#L{$line_num}"; - } - - return $trac_url; -} \ No newline at end of file From da09c488c887e933c267509c88074f743a0a0c40 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:18:39 +1000 Subject: [PATCH 062/402] Replace separators via a hook instead of a function call --- plugin.php | 3 ++- template.php | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/plugin.php b/plugin.php index f819d019b..2159049f6 100755 --- a/plugin.php +++ b/plugin.php @@ -19,6 +19,7 @@ add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); add_filter( 'wpfuncref_get_the_arguments', __NAMESPACE__ . '\\make_args_safe' ); +add_filter( 'wpfuncref_the_return_type', __NAMESPACE__ . '\\humanize_separator' ); /** * Register the function and class post types @@ -110,7 +111,7 @@ function make_args_safe( $args ) { * @param string $type Variable type * @return string */ -function wpfuncref_format_type( $type ) { +function humanize_separator( $type ) { return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); } diff --git a/template.php b/template.php index 557672f4f..c1c9673c9 100755 --- a/template.php +++ b/template.php @@ -22,8 +22,6 @@ function wpfuncref_return_type() { $return_type = 'void'; } - $return_type = wpfuncref_format_type( $return_type ); - return apply_filters( 'wpfuncref_the_return_type', $return_type ); } From d912006409d859cb864ba51139fdae3504276b70 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:20:53 +1000 Subject: [PATCH 063/402] Rework the source URL function --- plugin.php | 24 ------------------------ template.php | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/plugin.php b/plugin.php index 2159049f6..8d66afb7e 100755 --- a/plugin.php +++ b/plugin.php @@ -114,27 +114,3 @@ function make_args_safe( $args ) { function humanize_separator( $type ) { return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); } - -/** - * Returns the URL to the current function on the bbP/BP trac. - * - * @return string - */ -function bpcodex_get_wpapi_source_link() { - if ( strpos( wp_get_theme()->get( 'Name' ), 'BuddyPress.org' ) !== false ) - $trac_url = 'https://buddypress.trac.wordpress.org/browser/trunk/'; - else - $trac_url = 'https://bbpress.trac.wordpress.org/browser/trunk/'; - - // Find the current post in the wpapi-source-file term - $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); - if ( ! empty( $term ) && ! is_wp_error( $term ) ) { - $term = array_shift( $term ); - $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); - - // Link to the specific file name and the line number on trac - $trac_url .= "{$term->name}#L{$line_num}"; - } - - return $trac_url; -} diff --git a/template.php b/template.php index c1c9673c9..88f0717cc 100755 --- a/template.php +++ b/template.php @@ -145,3 +145,29 @@ function wpfuncref_get_the_arguments() { return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); } + + +/** + * Returns the URL to the current function on the bbP/BP trac. + * + * @return string + */ +function wpfuncref_source_link() { + $trac_url = apply_filters( 'wpfuncref_source_link_base', false ); + if ( empty( $trac_url ) ) + return ''; + + // Find the current post in the wpapi-source-file term + $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); + if ( ! empty( $term ) && ! is_wp_error( $term ) ) { + $term = array_shift( $term ); + $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); + + // The format here takes the base URL, the term name, and the line number + $format = apply_filters( 'wpfuncref_source_link_format', '%s%s#L%d' ); + // Link to the specific file name and the line number on trac + $trac_url = sprintf( $format, $trac_url, $term->name, $line_num ); + } + + return $trac_url; +} \ No newline at end of file From bf9e956b167259e790bddf984c88a9440064336f Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:29:39 +1000 Subject: [PATCH 064/402] Add basic README --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 README.md diff --git a/README.md b/README.md new file mode 100755 index 000000000..14a68e0a2 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# WP Function Reference +## Requirements +* PHP 5.3+ +* [WP CLI](http://wp-cli.org/) + +## Running +Note: ensure the plugin is enabled first. + +In your site's directory: + + $ wp phpdoc generate-and-import /path/to/source/code From ea0481154de6052b8e6a65bd2eb5eb686feca77d Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:32:30 +1000 Subject: [PATCH 065/402] Avoid naming conflict --- template.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/template.php b/template.php index 88f0717cc..53d81dc93 100755 --- a/template.php +++ b/template.php @@ -39,7 +39,7 @@ function wpfuncref_the_return_type() { * * @return string */ -function wpfuncref_the_return_desc() { +function wpfuncref_return_desc() { $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $return_desc = wp_list_filter( $function_data, array( 'name' => 'return' ) ); @@ -68,7 +68,7 @@ function wpfuncref_the_return_desc() { * Print the current function's return description */ function wpfuncref_the_return_desc() { - echo wpfuncref_the_return_desc(); + echo wpfuncref_return_desc(); } /** From 76ca22f5aa6111dc4fbe1f4f252ae87b5eb82660 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 00:33:48 +1000 Subject: [PATCH 066/402] Change command to "funcref" --- README.md | 2 +- cli.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 14a68e0a2..28095f118 100755 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ Note: ensure the plugin is enabled first. In your site's directory: - $ wp phpdoc generate-and-import /path/to/source/code + $ wp funcref generate-and-import /path/to/source/code diff --git a/cli.php b/cli.php index 4532f4934..c49145c87 100644 --- a/cli.php +++ b/cli.php @@ -204,4 +204,4 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } } -WP_CLI::add_command( 'phpdoc', __NAMESPACE__ . '\\Command' ); +WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); From 006f1d524bb96b8a51331e0b66c36fbfeb42d634 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 01:24:13 +1000 Subject: [PATCH 067/402] Use the correct class name for importing --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index c49145c87..de2664042 100644 --- a/cli.php +++ b/cli.php @@ -160,7 +160,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna wp_defer_comment_counting( true ); // Run the importer - $importer = new WP_PHPDoc_Importer; + $importer = new Importer; // Sanity check -- do the required post types exist? if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) ) { From f29e3e3d888d1e6a94d808b475cedfef29326f79 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 01:48:59 +1000 Subject: [PATCH 068/402] Show a warning if the @since term can't be set --- importer.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/importer.php b/importer.php index ddef08ee5..39b18174b 100755 --- a/importer.php +++ b/importer.php @@ -178,7 +178,10 @@ public function import_function( array $data, $class_post_id = 0, $import_intern $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); // Assign the tax item to the post - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + if ( ! is_wp_error( $since_term ) ) + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + else + WP_CLI::warning( "Cannot set @since term: " . $since_term->get_error_message() ); } // Set other taxonomy and post meta to use in the theme template @@ -266,7 +269,10 @@ protected function import_class( array $data, $import_internal_classes = false ) $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); // Assign the tax item to the post - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + if ( ! is_wp_error( $since_term ) ) + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + else + WP_CLI::warning( "Cannot set @since term: " . $since_term->get_error_message() ); } // Set taxonomy and post meta to use in the theme template From ac001a308ce600561e052ebb31fccfc7def52edc Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 1 Jul 2013 22:10:56 +0100 Subject: [PATCH 069/402] Register new taxonomy for @package/@subpackage --- plugin.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/plugin.php b/plugin.php index 8d66afb7e..fb4badb03 100755 --- a/plugin.php +++ b/plugin.php @@ -50,8 +50,6 @@ function register_post_types() { /** * Register the file and @since taxonomies - * - * @return [type] [description] */ function register_taxonomies() { // Files @@ -64,7 +62,16 @@ function register_taxonomies() { 'update_count_callback' => '_update_post_term_count', ) ); - // Files + // Package + register_taxonomy( 'wpapi-package', array( 'wpapi-class', 'wpapi-function' ), array( + 'hierarchical' => true, + 'label' => '@package', + 'public' => true, + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) ); + + // @since register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( 'hierarchical' => true, 'label' => __( '@since' ), From c99b2bd2da8a797af36cfbe09a0010f82e5e7791 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 1 Jul 2013 23:59:30 +0100 Subject: [PATCH 070/402] Add phpDoc for Importer class properties --- importer.php | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/importer.php b/importer.php index 39b18174b..ff311f42a 100755 --- a/importer.php +++ b/importer.php @@ -10,12 +10,37 @@ * Based on the Importer class from https://github.com/rmccue/WP-Parser/ */ class Importer { + + /** + * Taxonony name for files + * + * @var string + */ public $taxonomy_file; + + /** + * Taxonomy name for a function's @since tag + * + * @var string + */ public $taxonomy_since_version; - public $taxonomy_package; // todo + + /** + * Post type name for functions + * + * @var string + */ public $post_type_function; + + /** + * Post type name for classes + * + * @var string + */ public $post_type_class; - public $post_type_hook; // todo + + public $taxonomy_package; // todo + public $post_type_hook; // todo /** * Stores a reference to the current file's term in the file taxonomy From 77e5351ee277a381c5f3abd3f1537c590c85bd4a Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Tue, 2 Jul 2013 00:01:20 +0100 Subject: [PATCH 071/402] Change Importer constructor to accept params in an assoc array As and when parameters are added to the constructor, this is a much neater way than adding more and more optional parameters to the function --- importer.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/importer.php b/importer.php index ff311f42a..07a3f8ed2 100755 --- a/importer.php +++ b/importer.php @@ -58,15 +58,20 @@ class Importer { /** * Constructor. Sets up post type/taxonomy names. * - * @param string $class Optional. Post type name for classes. - * @param string $file Optional. Taxonony name for files. - * @param string $function Optional. Post type name for functions. + * @param array $args Optional. Associative array; class property => value. */ - public function __construct( $class = 'wpapi-class', $file = 'wpapi-source-file', $function = 'wpapi-function', $since = 'wpapi-since' ) { - $this->post_type_class = $class; - $this->post_type_function = $function; - $this->taxonomy_file = $file; - $this->taxonomy_since_version = $since; + public function __construct( array $args = array() ) { + + $r = wp_parse_args( $args, array( + 'post_type_class' => 'wpapi-class', + 'post_type_function' => 'wpapi-function', + 'taxonomy_file' => 'wpapi-source-file', + 'taxonomy_since_version' => 'wpapi-since', + ) ); + + foreach ( $r as $property_name => $value ) { + $this->{$property_name} = $value; + } } /** From 40845fd16737678bae9e8d855b4b4c1ece7a7362 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 14:02:38 +1000 Subject: [PATCH 072/402] Correct translations with the wpfuncref domain --- plugin.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin.php b/plugin.php index fb4badb03..77c7c429e 100755 --- a/plugin.php +++ b/plugin.php @@ -29,7 +29,7 @@ function register_post_types() { register_post_type( 'wpapi-function', array( 'has_archive' => true, 'hierarchical' => true, - 'label' => __( 'Functions' ), + 'label' => __( 'Functions', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'functions' ), 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), @@ -40,7 +40,7 @@ function register_post_types() { register_post_type( 'wpapi-class', array( 'has_archive' => true, 'hierarchical' => false, - 'label' => __( 'Classes' ), + 'label' => __( 'Classes', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'classes' ), 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), @@ -55,7 +55,7 @@ function register_taxonomies() { // Files register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( 'hierarchical' => true, - 'label' => __( 'Files' ), + 'label' => __( 'Files', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'files' ), 'sort' => false, @@ -74,7 +74,7 @@ function register_taxonomies() { // @since register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( 'hierarchical' => true, - 'label' => __( '@since' ), + 'label' => __( '@since', 'wpfuncref' ), 'public' => true, 'sort' => false, 'update_count_callback' => '_update_post_term_count', @@ -119,5 +119,5 @@ function make_args_safe( $args ) { * @return string */ function humanize_separator( $type ) { - return str_replace( '|', ' <span class="wpapi-item-type-or">or</span> ', $type ); + return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wpfuncref' ) . '</span>', $type ); } From 293f06ba55357702331395d8b8a85cdb88a103ed Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 14:29:31 +1000 Subject: [PATCH 073/402] Don't autop the arguments --- plugin.php | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin.php b/plugin.php index 77c7c429e..463271b0a 100755 --- a/plugin.php +++ b/plugin.php @@ -96,7 +96,6 @@ function make_args_safe( $args ) { 'wptexturize', 'convert_smilies', 'convert_chars', - 'wpautop', 'stripslashes_deep', ); From bdb13c6ef6bfbe0a3dae00a66f09a4f8e7a66d50 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 15:14:39 +1000 Subject: [PATCH 074/402] Add template tags for the full prototype --- template.php | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/template.php b/template.php index 53d81dc93..9f5f8f66a 100755 --- a/template.php +++ b/template.php @@ -146,6 +146,43 @@ function wpfuncref_get_the_arguments() { return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); } +/** + * Retrieve the function's prototype as HTML + * + * Use the wpfuncref_prototype filter to change the content of this. + * + * @return string Prototype HTML + */ +function wpfuncref_prototype() { + $type = wpfuncref_return_type(); + + $friendly_args = array(); + $args = wpfuncref_get_the_arguments(); + foreach ( $args as $arg ) { + $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', $arg['type'], $arg['name'] ); + if ( !empty( $arg['default_value'] ) ) + $friendly .= ' <span class="default"> = <span class="value">' . $arg['default_value'] . '</span></span>'; + + $friendly_args[] = $friendly; + } + $friendly_args = implode( ', ', $friendly_args ); + + $name = get_the_title(); + + $prototype = sprintf( '<p class="wpfuncref-prototype"><code><span class="type">%s</span> %s ( %s )</code></p>', $type, $name, $friendly_args ); + + return apply_filters( 'wpfuncref_prototype', $prototype ); +} + +/** + * Print the function's prototype + * + * @see wpfuncref_prototype + */ +function wpfuncref_the_prototype() { + echo wpfuncref_prototype(); +} + /** * Returns the URL to the current function on the bbP/BP trac. From 5e503e515b990c20314b0b0f92cb5c2b9c202c84 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 15:14:53 +1000 Subject: [PATCH 075/402] By default, format the content as needed If themes prefer, they can unhook this as needed and implement it themselves, but this gives a default starting place. --- plugin.php | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/plugin.php b/plugin.php index 463271b0a..492cf5cbe 100755 --- a/plugin.php +++ b/plugin.php @@ -21,6 +21,8 @@ add_filter( 'wpfuncref_get_the_arguments', __NAMESPACE__ . '\\make_args_safe' ); add_filter( 'wpfuncref_the_return_type', __NAMESPACE__ . '\\humanize_separator' ); +add_filter( 'the_content', __NAMESPACE__ . '\\expand_content' ); + /** * Register the function and class post types */ @@ -120,3 +122,34 @@ function make_args_safe( $args ) { function humanize_separator( $type ) { return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wpfuncref' ) . '</span>', $type ); } + +function expand_content( $content ) { + $post = get_post(); + + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) + return $content; + + $before_content = wpfuncref_prototype(); + $before_content .= '<p class="wpfuncref-description">' . get_the_excerpt() . '</p>'; + $before_content .= '<div class="wpfuncref-longdesc">'; + + $after_content = '</div>'; + $after_content .= '<div class="wpfuncref-arguments"><h3>Arguments</h3>'; + $args = wpfuncref_get_the_arguments(); + foreach ( $args as $arg ) { + $after_content .= '<div class="wpfuncref-arg">'; + $after_content .= '<h4><code><span class="type">' . $arg['type'] . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; + $after_content .= wpautop( $arg['desc'], false ); + $after_content .= '</div>'; + } + $after_content .= '</div>'; + + $source = wpfuncref_source_link(); + if ( $source ) + $after_content .= '<a href="' . $source . '">Source</a>'; + + $before_content = apply_filters( 'wpfuncref_before_content', $before_content ); + $after_content = apply_filters( 'wpfuncref_after_content', $after_content ); + + return $before_content . $content . $after_content; +} \ No newline at end of file From 5dff523acf9b16c5dba885f271e11c6439e93f38 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 19:06:04 +1000 Subject: [PATCH 076/402] Document the new expand content function --- README.md | 9 +++++++++ plugin.php | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/README.md b/README.md index 28095f118..ce49e8926 100755 --- a/README.md +++ b/README.md @@ -9,3 +9,12 @@ Note: ensure the plugin is enabled first. In your site's directory: $ wp funcref generate-and-import /path/to/source/code + +## Displaying in your theme +By default, your theme will use the built-in content. This content is generated +on the fly by the `expand_content` function. + +To use your own theming instead, simply add the following to +your `functions.php`: + + remove_filter( 'the_content', 'WPFuncRef\\expand_content' ); diff --git a/plugin.php b/plugin.php index 492cf5cbe..b00bef932 100755 --- a/plugin.php +++ b/plugin.php @@ -123,6 +123,12 @@ function humanize_separator( $type ) { return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wpfuncref' ) . '</span>', $type ); } +/** + * Extend the post's content with function reference pieces + * + * @param string $content Unfiltered content + * @return string Content with Function reference pieces added + */ function expand_content( $content ) { $post = get_post(); From 58c8cb32e8208e7f6fda2398e492e247bdf0c244 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <andrewnacin@gmail.com> Date: Tue, 2 Jul 2013 05:37:42 -0400 Subject: [PATCH 077/402] Don't append / to the end of a file in the extraction message. --- cli.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli.php b/cli.php index de2664042..df3e7dedf 100644 --- a/cli.php +++ b/cli.php @@ -108,13 +108,13 @@ protected function _load_libs() { * @return string */ protected function _get_phpdoc_data( $path, $format = 'json' ) { - WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s/. This may take a few minutes...', $path ) ); + $is_file = is_file( $path ); + WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s. This may take a few minutes...', $is_file ? "$path/" : $path ) ); // Find the files to get the PHPDoc data from. $path can either be a folder or an absolute ref to a file. - if ( is_file( $path ) ) { + if ( $is_file ) { $files = array( $path ); $path = dirname( $path ); - } else { ob_start(); $files = get_wp_files( $path ); From 898a7e4417254c94a05c06ac389015217e6bd438 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <andrewnacin@gmail.com> Date: Tue, 2 Jul 2013 06:18:56 -0400 Subject: [PATCH 078/402] Fix logic inversion. --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index df3e7dedf..e1d2787d2 100644 --- a/cli.php +++ b/cli.php @@ -109,7 +109,7 @@ protected function _load_libs() { */ protected function _get_phpdoc_data( $path, $format = 'json' ) { $is_file = is_file( $path ); - WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s. This may take a few minutes...', $is_file ? "$path/" : $path ) ); + WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s. This may take a few minutes...', $is_file ? $path : "$path/" ) ); // Find the files to get the PHPDoc data from. $path can either be a folder or an absolute ref to a file. if ( $is_file ) { From 614bcb1229b7d799a0551d088b7de4a1bc1e38e1 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <andrewnacin@gmail.com> Date: Tue, 2 Jul 2013 06:39:53 -0400 Subject: [PATCH 079/402] Remove newline fix, as this is not needed with Markdown processing. We can remove wpautop() processing for these post types as well, since we'll be storing full HTML content inside post_content. But, wpautop() will mostly leave alone full HTML, so we can just wait until there is an edge case. --- importer.php | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/importer.php b/importer.php index 07a3f8ed2..d1944b018 100755 --- a/importer.php +++ b/importer.php @@ -129,22 +129,6 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ } } - /** - * Remove inline newlines in the $input string. - * - * This tidies up a block of text from phpDoc where the author split the block over multiple lines. - * We remove the inline newlines and replace with a space to avoid getting the end of one line being - * joined to the beginning of the next line, without any space inbetween. - * - * This regex was taken from wpautop(). - * - * @param string $input - * @return string - */ - public static function _fix_linebreaks( $input ) { - return preg_replace( '|(?<!<br />)\s*\n|', ' ', $input ); - } - /** * Create a post for a function * @@ -169,8 +153,8 @@ public function import_function( array $data, $class_post_id = 0, $import_intern $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = array( - 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), - 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), + 'post_content' => $data['doc']['long_description'], + 'post_excerpt' => $data['doc']['description'], 'post_name' => $slug, 'post_parent' => (int) $class_post_id, 'post_status' => 'publish', @@ -261,8 +245,8 @@ protected function import_class( array $data, $import_internal_classes = false ) $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = array( - 'post_content' => self::_fix_linebreaks( $data['doc']['long_description'] ), - 'post_excerpt' => self::_fix_linebreaks( $data['doc']['description'] ), + 'post_content' => $data['doc']['long_description'], + 'post_excerpt' => $data['doc']['description'], 'post_name' => $slug, 'post_status' => 'publish', 'post_title' => $data['name'], From 8673cd6ba15fca3b7d868d6121b3db7545558433 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 20:48:38 +1000 Subject: [PATCH 080/402] Switch to submodules instead of Composer blamenacin. --- .gitmodules | 12 ++++++++++ cli.php | 30 +++++++++++++++++++++++- vendor/dflydev/markdown | 1 + vendor/nikic/php-parser | 1 + vendor/phpdocumentor/reflection | 1 + vendor/phpdocumentor/reflection-docblock | 1 + 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 160000 vendor/dflydev/markdown create mode 160000 vendor/nikic/php-parser create mode 160000 vendor/phpdocumentor/reflection create mode 160000 vendor/phpdocumentor/reflection-docblock diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..3567b7974 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule "vendor/phpdocumentor/reflection"] + path = vendor/phpdocumentor/reflection + url = git@github.com:phpDocumentor/Reflection.git +[submodule "vendor/phpdocumentor/reflection-docblock"] + path = vendor/phpdocumentor/reflection-docblock + url = git@github.com:phpDocumentor/ReflectionDocBlock.git +[submodule "vendor/dflydev/markdown"] + path = vendor/dflydev/markdown + url = git@github.com:dflydev/dflydev-markdown.git +[submodule "vendor/nikic/php-parser"] + path = vendor/nikic/php-parser + url = git@github.com:nikic/PHP-Parser.git diff --git a/cli.php b/cli.php index e1d2787d2..2e865c6d1 100644 --- a/cli.php +++ b/cli.php @@ -96,10 +96,38 @@ public function generate_and_import( $args, $assoc_args ) { protected function _load_libs() { $path = dirname( __FILE__ ). '/WP-Parser/'; - require_once "$path/vendor/autoload.php"; + spl_autoload_register( __CLASS__ . '::autoloader' ); require_once "$path/lib/WP/runner.php"; } + public static function autoloader( $class ) { + $vendorDir = __DIR__ . '/vendor'; + $map = array( + 'phpDocumentor' => array( + $vendorDir . '/phpdocumentor/reflection-docblock/src', + $vendorDir . '/phpdocumentor/reflection/src', + $vendorDir . '/phpdocumentor/reflection/tests/unit', + $vendorDir . '/phpdocumentor/reflection/tests/mocks' + ), + 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', + 'WP' => __DIR__ . '/WP-Parser/lib', + 'PHPParser' => $vendorDir . '/nikic/php-parser/lib', + ); + + foreach ( $map as $prefix => $paths ) { + foreach ( (array) $paths as $path ) { + if ( strpos( $class, $prefix ) !== 0 ) { + continue; + } + + $file = $path . DIRECTORY_SEPARATOR . str_replace( array( '_', '\\' ), DIRECTORY_SEPARATOR, $class ) . '.php'; + + if (file_exists($file)) + include $file; + } + } + } + /** * Generate the data from the PHPDoc markup. * diff --git a/vendor/dflydev/markdown b/vendor/dflydev/markdown new file mode 160000 index 000000000..11f8faa2d --- /dev/null +++ b/vendor/dflydev/markdown @@ -0,0 +1 @@ +Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc diff --git a/vendor/nikic/php-parser b/vendor/nikic/php-parser new file mode 160000 index 000000000..5ccf6196d --- /dev/null +++ b/vendor/nikic/php-parser @@ -0,0 +1 @@ +Subproject commit 5ccf6196d6925e66568e3b8460c262e9512e4b92 diff --git a/vendor/phpdocumentor/reflection b/vendor/phpdocumentor/reflection new file mode 160000 index 000000000..0e613ee01 --- /dev/null +++ b/vendor/phpdocumentor/reflection @@ -0,0 +1 @@ +Subproject commit 0e613ee01ec62cf894223914921f56fecb4f7a8f diff --git a/vendor/phpdocumentor/reflection-docblock b/vendor/phpdocumentor/reflection-docblock new file mode 160000 index 000000000..6d705c1a0 --- /dev/null +++ b/vendor/phpdocumentor/reflection-docblock @@ -0,0 +1 @@ +Subproject commit 6d705c1a0f9e2a6d73d2e9ec0e538b9dfaf4315f From 897eabfee8c730dfbac11ed30f5d79708e83fc06 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 20:49:12 +1000 Subject: [PATCH 081/402] Check that the directory/file exists --- cli.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cli.php b/cli.php index 2e865c6d1..0d8212e90 100644 --- a/cli.php +++ b/cli.php @@ -80,6 +80,11 @@ public function generate_and_import( $args, $assoc_args ) { list( $directory ) = $args; $directory = realpath( $directory ); + if ( empty( $directory ) ) { + WP_CLI::error( sprintf( "Can't read %1\$s. Does the file exist?", $directory ) ); + exit; + } + $this->_load_libs(); WP_CLI::line(); From 6938d270a006a926c4b06c37e99b8ef2a1693754 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 20:51:20 +1000 Subject: [PATCH 082/402] Remove the old WP-Parser directory --- WP-Parser/composer.json | 11 - WP-Parser/composer.lock | 218 -------- WP-Parser/composer.phar | Bin 688018 -> 0 bytes WP-Parser/vendor/autoload.php | 7 - WP-Parser/vendor/composer/ClassLoader.php | 240 --------- .../vendor/composer/autoload_classmap.php | 9 - .../vendor/composer/autoload_namespaces.php | 13 - WP-Parser/vendor/composer/autoload_real.php | 43 -- WP-Parser/vendor/composer/installed.json | 202 -------- WP-Parser/vendor/dflydev/markdown | 1 - WP-Parser/vendor/nikic/php-parser | 1 - WP-Parser/vendor/phpdocumentor/reflection | 1 - .../reflection-docblock/.gitignore | 2 - .../reflection-docblock/.travis.yml | 23 - .../reflection-docblock/README.md | 57 --- .../reflection-docblock/composer.json | 18 - .../reflection-docblock/composer.lock | 475 ------------------ .../reflection-docblock/phpunit.xml.dist | 14 - .../src/phpDocumentor/Reflection/DocBlock.php | 376 -------------- .../Reflection/DocBlock/Context.php | 154 ------ .../Reflection/DocBlock/Description.php | 222 -------- .../Reflection/DocBlock/Location.php | 76 --- .../phpDocumentor/Reflection/DocBlock/Tag.php | 379 -------------- .../Reflection/DocBlock/Tag/AuthorTag.php | 131 ----- .../Reflection/DocBlock/Tag/CoversTag.php | 24 - .../Reflection/DocBlock/Tag/DeprecatedTag.php | 26 - .../Reflection/DocBlock/Tag/ExampleTag.php | 156 ------ .../Reflection/DocBlock/Tag/LinkTag.php | 81 --- .../Reflection/DocBlock/Tag/MethodTag.php | 163 ------ .../Reflection/DocBlock/Tag/ParamTag.php | 103 ---- .../DocBlock/Tag/PropertyReadTag.php | 24 - .../Reflection/DocBlock/Tag/PropertyTag.php | 24 - .../DocBlock/Tag/PropertyWriteTag.php | 24 - .../Reflection/DocBlock/Tag/ReturnTag.php | 98 ---- .../Reflection/DocBlock/Tag/SeeTag.php | 81 --- .../Reflection/DocBlock/Tag/SinceTag.php | 26 - .../Reflection/DocBlock/Tag/SourceTag.php | 137 ----- .../Reflection/DocBlock/Tag/ThrowsTag.php | 24 - .../Reflection/DocBlock/Tag/UsesTag.php | 24 - .../Reflection/DocBlock/Tag/VarTag.php | 24 - .../Reflection/DocBlock/Tag/VersionTag.php | 108 ---- .../Reflection/DocBlock/Type/Collection.php | 221 -------- .../Reflection/DocBlock/DescriptionTest.php | 245 --------- .../Reflection/DocBlock/Tag/CoversTagTest.php | 86 ---- .../DocBlock/Tag/DeprecatedTagTest.php | 115 ----- .../DocBlock/Tag/ExampleTagTest.php | 203 -------- .../Reflection/DocBlock/Tag/LinkTagTest.php | 87 ---- .../Reflection/DocBlock/Tag/MethodTagTest.php | 127 ----- .../Reflection/DocBlock/Tag/ParamTagTest.php | 118 ----- .../Reflection/DocBlock/Tag/ReturnTagTest.php | 102 ---- .../Reflection/DocBlock/Tag/SeeTagTest.php | 86 ---- .../Reflection/DocBlock/Tag/SinceTagTest.php | 115 ----- .../Reflection/DocBlock/Tag/SourceTagTest.php | 116 ----- .../Reflection/DocBlock/Tag/ThrowsTagTest.php | 102 ---- .../Reflection/DocBlock/Tag/UsesTagTest.php | 86 ---- .../Reflection/DocBlock/Tag/VarTagTest.php | 94 ---- .../DocBlock/Tag/VersionTagTest.php | 115 ----- .../Reflection/DocBlock/TagTest.php | 313 ------------ .../DocBlock/Type/CollectionTest.php | 195 ------- .../phpDocumentor/Reflection/DocBlockTest.php | 297 ----------- cli.php | 6 +- {WP-Parser/lib => lib}/WP/PrettyPrinter.php | 0 .../WP/Reflection/FileReflector.php | 0 .../WP/Reflection/HookReflector.php | 0 {WP-Parser/lib => lib}/WP/runner.php | 0 65 files changed, 2 insertions(+), 6647 deletions(-) delete mode 100644 WP-Parser/composer.json delete mode 100644 WP-Parser/composer.lock delete mode 100755 WP-Parser/composer.phar delete mode 100644 WP-Parser/vendor/autoload.php delete mode 100644 WP-Parser/vendor/composer/ClassLoader.php delete mode 100644 WP-Parser/vendor/composer/autoload_classmap.php delete mode 100644 WP-Parser/vendor/composer/autoload_namespaces.php delete mode 100644 WP-Parser/vendor/composer/autoload_real.php delete mode 100644 WP-Parser/vendor/composer/installed.json delete mode 160000 WP-Parser/vendor/dflydev/markdown delete mode 160000 WP-Parser/vendor/nikic/php-parser delete mode 160000 WP-Parser/vendor/phpdocumentor/reflection delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php delete mode 100644 WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php rename {WP-Parser/lib => lib}/WP/PrettyPrinter.php (100%) rename {WP-Parser/lib => lib}/WP/Reflection/FileReflector.php (100%) rename {WP-Parser/lib => lib}/WP/Reflection/HookReflector.php (100%) rename {WP-Parser/lib => lib}/WP/runner.php (100%) diff --git a/WP-Parser/composer.json b/WP-Parser/composer.json deleted file mode 100644 index 714bbf67c..000000000 --- a/WP-Parser/composer.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "require": { - "php": ">=5.3.3", - "phpdocumentor/reflection": "dev-master", - "dflydev/markdown": "dev-master" - }, - "autoload": { - "psr-0": { "WP": "lib/" } - }, - "minimum-stability": "dev" -} diff --git a/WP-Parser/composer.lock b/WP-Parser/composer.lock deleted file mode 100644 index 6f9633f6f..000000000 --- a/WP-Parser/composer.lock +++ /dev/null @@ -1,218 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" - ], - "hash": "13f69154147a5e8618b0bd37b4187d1b", - "packages": [ - { - "name": "dflydev/markdown", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-markdown.git", - "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc" - }, - "dist": { - "type": "zip", - "url": "https://github.com/dflydev/dflydev-markdown/archive/11f8faa2d17f717a038b4d372abd22a6ac4a15dc.zip", - "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "dflydev\\markdown": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Michel Fortin", - "homepage": "http://michelf.com" - }, - { - "name": "John Gruber", - "homepage": "http://daringfireball.net" - } - ], - "description": "PHP Markdown & Extra", - "homepage": "http://github.com/dflydev/dflydev-markdown", - "keywords": [ - "markdown" - ], - "time": "2012-07-15 16:31:27" - }, - { - "name": "nikic/php-parser", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "5fca55702b4e035b60a7b1cbac538572db47121d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5fca55702b4e035b60a7b1cbac538572db47121d", - "reference": "5fca55702b4e035b60a7b1cbac538572db47121d", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2013-03-05 14:42:24" - }, - { - "name": "phpdocumentor/reflection", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/257f10cd44bed0a8257c30ef9e218cb115867d40", - "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40", - "shasum": "" - }, - "require": { - "nikic/php-parser": "dev-master", - "php": ">=5.3.3", - "phpdocumentor/reflection-docblock": "2.0.0a2" - }, - "require-dev": { - "behat/behat": ">=2.4@stable", - "mockery/mockery": ">=0.7.0@stable", - "phpunit/phpunit": "3.7.*@stable" - }, - "type": "library", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/", - "tests/mocks/" - ] - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2013-02-01 21:05:30" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.0a2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock", - "reference": "2.0.0a2" - }, - "dist": { - "type": "zip", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", - "reference": "2.0.0a2", - "shasum": "" - }, - "require": { - "dflydev/markdown": "1.0.*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@stable" - }, - "type": "library", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2012-12-02 20:26:45" - } - ], - "packages-dev": [ - - ], - "aliases": [ - - ], - "minimum-stability": "dev", - "stability-flags": { - "phpdocumentor/reflection": 20, - "dflydev/markdown": 20 - }, - "platform": { - "php": ">=5.3.3" - }, - "platform-dev": [ - - ] -} diff --git a/WP-Parser/composer.phar b/WP-Parser/composer.phar deleted file mode 100755 index bf2a3d0ff2f9707b05c63170215a337082a455ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688018 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¨6QS~zT3gm=TG;)-}-;@s?7-@vtk$&_N8=Ki!zz4e5PbR zxXx7h2D{Lc`8&);CqKPI5>kdq@ZYzS<JsxEy`#_eHaFcL44A-G?5fytkS~@$2%)~= zI|sIei$q_hR7t=v-f=O0e%GU*jV^SIRHejgT_Aj}epSb7aBs$uK+EK>RCrQWz(|m} zI2d0dKY);3SQZ@URJ)2L48nb^c{lmJCNw%Dukx_qPP~X#Z5aI#sk~CY>*|~3oy5jg z&Om9KFP*KU2yb1!N7deCs(LnL_qG^-4a}=5slzSaWG%ltm^mzcTSwnb)V~KR>K0c0 zz+$xp_HcIi(_{|w<8w3;OdS67EfQ&`JuNKdXYyFtMG!2i=cJweuSmoDIsxJiLY1L| zFAh`%?49>+?;T)^7Y>F0>uw$8%{20z7&AGB;(l{fNN7kgM9~?=O*|`z6|!X`je3m{ zK@B;Qw3+5T!5~Jj&?{BvUQevmD~#%m4%whl98HJ~>nMG#Tcs|FIk}4<Df?6252bgm zqT<6U&`AB)rS)|2kWzwV?J%lnTb;i1Gc`^SuE^jc+Jh;!F0=&{dXQxQ#N0g5$r)jj z<3xcrjh!TC)<Rr3w}~e@PF3+2;_d5|S9dv^^{^>l#?>Fzw>ZxBS~B<x4+~mlFbKWF zbxNMC;;r=OYJ*jujrp4|eJ-J)=V|*^pKy_3Lhl3s$6tDf!<LC6H6}-<`;3YTACQfc zeY0toFgV!J_$DurlEQX&fvpQzIn`i9tiL?_9L@)0WAzb-IK<iGaa)RPRFi6dp(9X% z^)NA91W+TyyePY{>aRqwB&5EvQJ(x+iIOFFP*Yr7B0hB?)3}dVHfKx<eAh))-j8uh z6P0)m$arHFO|?Qvf(GoB`0fv9hX=>^CvP)#DOs1c$qll{w``Em#M$xN$<dFoR`ui- z9Mm)2(%3LhfoE_a{>?AMP(MUvP9t%Lkb|cw##>6$6IZHrYhu(I>mEpj5p94vrp)s% zxyCbhiog<hHCbMvCz=si3`Aez?VI8@$E^V^!|X$_=@1X&7OUJCbJ?VI`pMQ%;u7X7 zYbSMgAeCnq;t16(;Lzhk)i7c+K?0Jy+>5|N60fF*@jA|WB;+37L&6cR3(4Qn_1`Tv zez&+@ZnvEvjPZ)OD(6Vd9lXK@3|^XQNI{1hmZmv|1wtPl^8l=mQ>j(UuH|;g;v(dz zvW{v;DGdy%Uc=G*IvWutHhb({>z=sW>Di6<>}*Jlriv*}oI=Zwxs8$@3S;iz`yf)l zvG8$bX7%0K+3ZJH=~ymmGv;C?_Ni&Ky3;o1k>19;IA%02ODEEftKju<h@=0GmKd0& zHDG9b|4EQ<;2E1uvi(vVjjLf9n>iaVd8EdSV8OBX9T@7WRi}gof})Cy&aC8!4AM{3 z9vY-(xnLCKmt*qKm?x-E^vl+R&NmKK76w!$7na6n;fLr?c*eResGZYcV={g;Lx}0{ zCmcYXAjE%ua<n=6;Y99&oy}l14vyqAEQrakzrwc!sbZ4}nd_DGgps;T_P<?5K^cQQ z!qBib@|fS`?T)#{-7^wcwwP##Bu15x7Lm;m0AQ&ygO~c~)25RH{Efo}F=Boqmr|KU z;iKFIfK^QtQM<2h(n}9jJOb#uwI=dXFA4>7eIKxRQr4xoP=>0sGH*cA6PMavD%I_W zR2MK}vB@p-KPckWIS;9&G?G899{h))Lm0VQKB2)D?yzKh3vsm@8<LD#?W*DzT#+q< zq7yqN8e!adudmiG_~2eE4cGzdQmYnTuP$pf|Di^Ppws%ItW0Peu*=o_X3IJD&h|@{ z_WXpW$NF_JEigm51e)PKnIe{jXEq11pp`|BEEjS#u3CQyNeVqxZ-1Uo@p`8;#IO^- zwCrM`Krq`QG)#t<OCCz`&08@oPE~*M$=MN#3ftqV3KY^&D6g3{ASi1ea~|=n6qjPX zD#$2DNyvO_m`)w?kOh}p9`kM2`q56a5=Ui$oU&jP*Bi3aVN+cEx*Zi|x^&mO?>k|q zSK!J8CG-DqQGvRFEC#THhJW~Pe4K?CD`zz<vT>LH4NU>cc87$O<7{xHwHy}K7IfPH z%@%!H-CQ{?RB{2PLKTb(cKCfF|3U2O0_!h`G$>ShF`Px<WgYSqy%(&R`c)9(EJ$!^ zCPhWUsu3a;@IfZc3aK1`Do^@g#J0fJ?MV(!+v<y{O7oke5a;!^12Eu)bbL5_bBd?D z5wHWf5SBh9y%E3A@B*v(-!3o~Coc^N$EVp+Di~bD)QpY$lMLC7DwlKs9zOy9SN7qc z6m10~^KefsI|Mgzj5qc|#;Bqq>P~^7(-_vZiUVU~d_%klWhTD`Cq@0XHE1c;&gB{- zvFrRix=a`$LqPjUc^`-skFe!Mj-#5{D3dz$4ijB2tEe|mh`zhQePHf;ynclhfr^qZ zINF`Y3IZpdDVQ0pdIdquY;Tc>A%wY8-`<ee&f@3k8S^2e(GrbAWPp%O>hT?+y`2?_ z(-^+5BKz2~d3bUg8-Tj*{OWgyXSl|T<o^eF+WPeb%c1!z?*Rkg{*CU!;1BXhX0mz{ zYH#r=cbXP<{vvJKROHU@QLOW!i)xE{d8X29IK*=B6GT=A3l>~5R^KPh`<&$cyVtMy zpI@;BI{ygcUdO<1VB~T-BIs0h*On6?j-;$Mc=35$XG4%-WBu=eH?qU*62J%SF_qX> zy1x`Q0L+npxO6$0zr_1Mqpp>JZIFLmA0Jxk6Y5|E4WHE2P<a3pR&|a}w+0pz+lb~* zj|OW19n={7Z1d6(e6*&~7;euBlFj7)biTCK19{1B5DyL{ZQ-b$gKvn=2itIH{Wi<0 z*XDDOJz9-7LN5oF%;FLv(m-BHNLIS6)1IXr90Y4t&vh*uOLp!AVpq^WYZcm6YUXg* zvR-2?Tj<=<fnB>eu)NkiT((2*YVKD#BU->P6}_DzY1Z;uFb+KOd`T?{sq2aL<>2CV zsDc`)+#vFnzxz~bHfmK5IYrHGMd(y9a_i;KFmib-a}WwRUz(O-b~{70cxZANELo&1 z1*39ydA%P_rhhq~)JC*{Rri^uLFD%L&t^|Fz1d)$P=iwOH=Trr4j1g;uoGe*ZwhBz z<`4Le3@-N~n#~Lc>Donpd!sR#8R-y{Ih!70rPI4m2Vc$uN;q&YH~JXg&@vp#)Rg<v z*@?tA##Tpi`07=;PC4(+V2LV9E1!lSd8Hnx@`146B2u%Lg0eb2NKsBeb5;JOfUHgr zP?RemAydTCh6d=Q8m)t;c;Q&iJH5dT+#B@JGx6}vts!!5U!$CY2sp_3<muKo+Yh&& z{>MK5diVg$`dm`1SKoH;q5SXr<=;Gbx`i*d8%?$z?tCZT8qMxM_z|tXKr1(8AwA`O z4{EsBFy6;Y9*`QIOuKWZi#3S9d$0L@_a45zn4BFnzY>3ZKR7;p-L4>`Kn>8Z2>>He zYC;gsCWm-$Xe0p>o_L7@tP`-eMT5fumvZpj_6e)%(<9f(u2srMUZfj|1!(}IbOOQ| z4i+ak>0d`;5rn`hOc_bqxa~{dZnrRAYAxZqy5p^#63miTYLN%p7KE2TU|US4+?-%v zJo;clQDPtppTfZiTQ?f4h>HF730&f0j3LVMRp1U>yp51ui5CaF-I(gH0ME!MW3e-{ zf(Lk_2S~a+C=NSmp-2eZ;KL8K!Jz5F_qaCP;{9fR0G6<UVpF7<WE~FYjkkQu1c_o# zG|w(GiX0t5d9b&_z0?AWhjH;XV7Cj(c&W660N|48Sc4FK2w{*sa)XGT&zTJXpm6RW z2UWdQ`R-Wu`v92il=K*e?<(Y*;|(PH2@y;_HKe91GMH-*ju-3QDLW!CqE)n~Bqm|% zwt)PZN74-sujMupkCGaXU(!3%fTIU_mV&WB5PP>j`@q89L}i}1A_BwI%>G!5l$q25 zrAs)FTP>G6Yb_|*wjq~NW{ZAW&K#I>o*Gco){t%u%NeVaeSR;m(etoiKB*i+6Nx3c zU%ZC>H$4BLL#8mMOFrF;tOa}D<7D=<{9dh*kuo>a<*WLt_F3<6fL9*3b*JLZ?1-<h z&m}D+#BKbHFD!kHn>si?P0!*T9fWr;-tFFdC$7M|gLeq>9lm~ddi?H`*TSFSi7;Hf zLX_*q*SLcvKj9MG_!?<M?4Jpd^%>>^vF^p>iEm=Y9VXGew{g-5b76i^`tNu_R^F`O z#)Vaba*4UsYfN$?-k&M78usKPlM~tNguD&atHd`9O9Wk98&v}$AwfH&VIOa*r?plQ zkBKaa7nTa~DxsqXOf}-CX2cJ!NZGUBSGkc&pAsdv9YL*mTWj)z`)yQt|0sid0beW^ z=HZC1=XNMOyIfm9(A~?08HBon0Ryi;4A+I*$%<vav2`M(D-^A?5R}9zE(~6%S@vHL z*G%kE3)0}eSQHAHW8#Z9l<5#7+#Vm5$LB8)>i|eutc8?vNq7)9K)XsG_8BaOM|6Ux z=D2e}=ZMG(4~q%6$RMfwN!ds^)vY_R@Hv_m+X@I~W6i?N1>IKg!R3Z6!)jMW0xxV| zfM9YbA~)4OQ_$^(5bF=0C&rgC#0>DGZ(fczM=<jEUstE4z(o`PQJuLJ1`@z440<RF z2WxW^91M{P69Z<w#MulR0r<r!rDJz=@4+=#6_?di-cxf@sRPdKl42!i6~&B+rt%?& z$ez(mreU3i)sP;n5XgqY4}<^u4ovU{%<<QETK9iENrR6rF}k{wCmo2nAvjg_q;k&h zz*nBt?OIT{Wxa}jQ2wic)}(pM$>hIo-~9crH`ezyIj^9g{_k=F?8JBSO%}Qr*Cils zklucNZ8MG$3Ug5Sg&x!@KVd4yNFjBjQ5UwGTi9Or_s^Hq{X<>%4^bCuO&rFY`~ub@ zAfRd5N%R(7{_v|zxpy$<f=XZfdIOaDhpJ2{_w|jd(1_1E7Ai^iSO!?0ioN@Ck8Oj~ zu8$WJQbPWVB#*Y)FXIyOizUpn87Qs8PLmo9vIH|?`bo9QyzEG_KmU8Q3FieOx~cv; z&$6B3yu%ZpEbKaUhKDyCtC={yeTH#mwkn<|C3khzrIx)pp3fjamBtEYjFJd_+~ygf z6U{1quWx?(^$mBXET>B7nKD3n(bq^EsCvs`@V@EaBp-Z&M9)jfeai2VXic+ikAZVf z6xC*pHwE9noFkSKh7}25^oo79k3x(tU@U(|*Re846*tG%k?0ZG{SSEPCckVj`GwI} z8$QVx&$U!E`|}V^im`0Lrv8*m?~m9*HuVSbyGeVG3*mSw<iK+-Fn}?-n4SB>k3jq7 z^cU8`j{R$fCpT0&Qf%Od6Ns?H&3@zyv*j@N*s|U`K{%=NtrC*cXarK?M;@9PT$v)f zi@Kh?5M7xL1#iD9E~Vya7w?6o;i>3kLvMvn$4~sjuAFvUmyV#WYsgNNp(}5H_h*?B zkb`P(6UGlS!n<d`d<q@oyl_du+TTesBE`|oR;`^d8z4P{#MtwN3BLW$xFRw75~djc z{R~NYFuNO7X=BW=xdmLCim3nx;x6p?Qx5x=Y$v4_XOUl&%cibXD>m@Smu;<2Xq3dd zv+dAj&Zb2&H7G{LcKIp`EZo-p2?-)pXaQIM_)(oV{7#z;_{GrQLRgPGC!mH#6d^n% z$|qGMu4k`sAiBuBhZs$Mx~lV#lB_7|TJY$w06Z#7SNb+881kij2>cCg3UlPucpoSU z0TL8(vc)st9Sb%c(G4CG<ry2&E|E^Zf=b;kdt~hN6U!0wCyZ22waKq))CG<*1$G1B z@=}EqOLa^+YolnsCZ>~RdA!o57GFxUX%ja;a#F9<6^1N2pvsg!0Hr)F!pGuV3Z>wR zOPZiah|pDZxWzPtp495=ck$QW<}Xx&8?pG$gI<P7-C=G8G=)r(i3Tn?j_4rOogC9q z&p!=G(lZcSOCz5@AzRpOu@R;4@r(Zjvpt|arJAN1EWejS*?%*czrsXY>RUG$ep6?1 zRSp32d#Fqg2<7NfC=1+m)M<pYxGf8z9z_hRu2|H9YLx&Fcr~y>ZK_`<AeKku-H0G1 zqNJNtPjufI$L4CC!4N_p3n2uMN5^96*s((y17F@ZmF=^Ss%%3NPNEi#B2(<=7tiIy zw#QpUvRtJvzPFHHY0U&i;{NqDk~1x)S($KgdQWE4LNwvBO=dAuU_R=@`QH*D<ZQiZ zvBIIhhZZhh_j-4-*aDB8c4lWTxe)XiYYsdm4lF*4F{{6xzItsFO3(sd;pQWtfw(o6 z5<bm?pk7uM5?JkhM&;)hfA$E6e}8^|n9<MgpL;h^^oP)q#sIngYz&aaD-Ey=1|uwk z`MAURJUsS3QUw8!JtGh(G)B!8dSlcq#;D($1C}2;?9fsGsBGz^P0qVZ$iKJMUxKpo z(iCkWO}$m=KcF~88UEq2b?841pwL}|+IBHbt;y`YaO2j;cfX<=T84qM5d$^9WW}US zdWwR6X)E-_kj{|utEJH;WHB?BD>?*zMTrl+N-7;?&}izPWle+FQuy*$da+}Kf>x5V z(h_}bxTP@Qsgp7T7Ghu3AhDZz2tMz(_2`OJ>kp!$6vjJ9sX`TK{18>HMx6rs5`rhE zBZ+N;=ACgSw5su9Bx$_Wgt)58R7;vl4$7!jBpBv$cW^Gz@ZUzkzr6eIlds<0{p#y? zU*iA1`U=~E@T?Kgx*-vmLA|zzb>GI;pSh$Fo+y-nskgO`o8O*$BU40nYEvlCy3l=& z%1iRji^=W*c9)eBF#a;{e~I%zjpC;&57(^?f;pb7-2%z;g0nanc4MSMzzuenp>3fG zLj^g(ZIZFrZy&127j~z3J!CIpNuxDhc^YZ#4`+xx>~~LIa$}wV@qi=JRCot7ncQx* zl;(X+)D}B9l9I8Hwa&Z5;&HDM@AB98I0OVay07B(0=>a8iDSessCTA(lv9$*#Tkzm zlZ|?n<N!BGOr>ql6o>ufM$L=##r9V9!zn)4U&pDAY@B0O(NEZmEP!RN)Iw!Z8q09x zlol2(2^%~@816^aoSlOy(*23*GgN^eLJ0W_M34{r^7aqnD*FAOB@}}52mW176PKVE zHg>@6^AmozC7(6aV3~eQ5i@>8U0EEJJp}H1eRYRf<e%|BGzl`-Bir?8?F*=eF1-ab zb_X!2t6<4RRWY&PAPy}l+K88pFcrfSG{N(B62C`ryBYT#Py?-RMdAh^OEIOCCLo{+ zB7h=w)aZWS6cXnA)bJ%}<l2UzLoAPxHgWy>2vKc;dUNyz#>1Es2%T<9>-|2t*Q|lc zxQ8cY4ik8Ui@FR32Oz3atcLZeQuKcJdqm{QjUCU^w4;00arh<P2I_vmCb<0T#=5YL z{N!*xJ+1B*^dgw36^FzSi&}cd{o(X*a<W){ujbz-7eCMDN6P`-FUPKzcKF@w&EypO zB&AY61d9RS`oU}F-=v)xB!!*~XPx&t#pEChgVHlVedY{tZwZsW?>^%Z!)OlniQ7+0 z>fs1BE60%oA<mTs-g~Ml1hF&Ld{VzfBRLxt$CA6*7NF1WCRFE<V-k_!qLw;bpiy;} z`6cq{Fb`|4(3S<9GVM{km!?9@xrXZ+i1w<B0Yi5U73}pz&^Fnb@6_$Vq4nVb_YV7Q z4yvh?u&+OWI%UQaf_h&K%sV~x@vdPzq$bu$4h>^$&l$@Swxy7mmR}CLfn|c+$FPR* zzT)3JwP+rIA8y={=fzwHRaeYFhn}Rsf2{+&Cs@g`ZhzoXVpW<iV(YP->a%V)@t$6z z7&r48r9rgn+mT)O>lJo^u;MU?e0{G1Wz%d`rlDgaYV~D~H(lWa-p6sTs$8~QvzjM6 z@M3y`+x@i_NS|fbd->O@D@9Ju7gyz2G*rJs5vo%7_Bi;71pzJ>2?cA5WpBo`4H{Mf zdM$8Zpcs_g2ORip{$OPd6CHrR-^UpMusDD93Q4Vp036tTzk$}%lf&clqX{zvR1nl4 z_YFkvW=Zk$=-9zpo?V!TP{*-g>c8_xzm5~9*;JD?Am|<={6gD*$?#aA>Y#uKuA+|h zuG-#z%Efv^|JDa6Ovu_{0>t2!FF8q#u0gZoi@hmABo5wYqY35&xudJMj?vP3rEw7) z#4xnm!grFkeak7Wxx_u5B8l|;LU+|0-P6l-kEC%&A;vyr!ij!d#a;^om?niNlhJtH zA$S~;*AaZUt|+Gpl_LR?%L|>11)j~z$FfL*Sma~TBScjH{O;Kv{^3D}8zY>U+x(h^ zUi5D527floZ+!ZzoIYT1!ujJ^GUqwgNkanyfgZ>$belNE{w4CbJ=C)(Lr_2#h0<rW z02peA-s6I-A>c+f;owE&kpDdd5tszTJ~EfJ20mhsu~IQ~%%~@9ikbIE2AAOC(E6wt zn4z|g3G&DAFjcpIl0rTVwFe!f?}pMWZHIn$#DZySvtIHe;h;86N{LDOxdfjKw@;51 zU;wv9ZiB96>iaXI*~{%z18yJ1KIEa%0#kLRnzpmJR4ZVX;Pf#nkS@i9Nfg%3=Xy%o zW)3+AhYv&ppN3#SmJ|!Z7(xQyhS~=;!mH!+Wagj~p3h{SY)4&pVinbfU<Ymm_7H|q zV+a=TWP*q$&)j=mfnx!qkBCFL1Ow8!!z;E#@#UOi?`=LAh)enoDz$k;AW>yi4iTql z)R3SG=q31N{~t%YULV{>D*eNs7Uyr0BoSb)NJMkhp*|o@#5Fe^KsQ%e0?j<T1`u=V zmb6uSISfH9rhRufeWwpnopX=uammA+YE-UR10~v}Qsr+{@;<t5C8(Br=!<;<=`aTH zw8SB?ir3#2cCoSn{`$AWY~p1QTS(Qdn;6~mm6H1dv2;o}MH%T8KbBxsp!U(~wQu6J z;~86wQodqKSa}hV^1qkh6cGC;bz3(vLYP;x!vyd2cfu&G8^JsMyac0w*vF{bx{1;K zvJQ3bVWHzo(}Y(lC9%@aCD>)?eFPgYnm9%h9HW}Aj1zWVMAZE6C3pqIK2qJ*O^hPh zj$!1B@r02V5hMS52}S|2k5RXE6Qe4zk71Q#012~POziUSB^Xvc^s#I~X=2(<tFzV# z(j-hfUx;j{XbHaEe)=dkV11PMBo9=>dSNGxN5wr%SxN@(JliDY^>bKLgPO9GSQ6RH z(f`iIK<tt*c2g3N#Qd7dIx}Ya0)4HbYX@9(J;p`+RA)Y$AqlVKB=wb#CE!h!QbeL^ z8&g%Pn@oKw#h(&<tNRXfnQG1_hqE_GiF1TA>8ZG=xkPjtQI#AK>+bj2y7KYMD@4hR zYH|^l``P*~o_Y7i5K4OR#y(YiVTGz7!d?cR6@ov$bnqY%KANz7#Aq7M!Nv6nF+l58 zCZ}ZV`6?gYpJ#lF!5_Vjkr3Xv`(I<YOXJP+!<X3C$Huc%{goSs(S@}lAiGzH3mUw& zL6CYRuXQ<tHH7p#vVbp2sVR09s^8fIPCSI77bK#kF7xDd#3<8v7t7kGR`i&Pt|*PM zOexB7^}?&PX_4_ns*pD9%C1%P=o~tN(3WSjk_1!k0(=O?*DxYdpb8_m*gy<FjQHM@ z92@vsp}felUrZ1#fMbrSgbaCJN3Ye#k$Q;lmRiTgswVVuFd}T)*=QS9VX*B7g@S>% zD#kDd9kbKM;|f7^Ss<;v5NQw`y6kxzd%^qAkR=YojxQJbo<f;!+QSvx&9(2hb}d}e z_Z1xFzR+<I+nIiGXO-6~8#r|;(!@wrN3ti<(?t*X<zO9JgI%H@S;Bckage+!l}p<6 z@C8pKNYzKu^iQS%t-_8QDAv0ewliUqX$8dh5%g$F1JY37KSQxPEnL9aM(|aq#S$6} zV9Tnvz=Ko`@XHC;YA^tMX>>M_1`@gAQdsTST_2RxTMB7e#H|l6)owur-E|11UJ1@F zA?NaTt)4(E#^6>E@KS9FoXhD+Fw3aP?`70W#%h?Sx=ZlN0mN)78ahY>>goe<<3L_- zlBoDyj_vhL1NgPY*}b^~Hee=F8{ZNW=b>RN9QJZ5My-Ky#!11Y<BVDZP?p6d)WH!m zTB;4exg>g!NnckTfQPu3ruCBplS_wKR~>{G5!_1zt%~9fKwGlAnnzly4ZtZUIhT&G zR2zU(9rj!bs;W5vtsDtm3aV5afU_hDm#I{$4Zwl$>Dkkz=tQjnC{O%!>QX3CYXHjS zQKvk#UhNjtb~?jy0;eRO#&ynh0Y93(<SB1mZ{`let=}Bq5O?dh2zYU|SQge1dKw6O zbz>{_K|aC)LvrLsHbARjj-Dl{is0~D{H-cZc_6BCUDOn$9SH`9x)wSIhDyc>#o^{? zVDLGE0mBM>G_6WYfkMPfkewTc<IZM0qteC6nsHX}fR2y?<rr#YcUVXv<`%1@h;=Gy zVX0Keg^Jac7lV=r#~SHpbkxANHwMagkD%fCH7u`=W~kXyal9MNbbLe23ZENI3n_-0 z>sq7(q;<xrOA$s#R=Er04_=KaOrzf|<f*F{lgY{G&2$0$UQS<~^X*bTb@dt#5uVI= z2c^!L@oM^Za<b`XoisN>=g@PvO>?|$>r)9}&VHH%BNr<_XrIC?6*{{uY6*tY`iW*a z=$Z=8^J3-MUsAcT4=LbhkdSbu7|6?TZlK(R`2GfUueKI$bu`@HNeq#r`*pLhu(hEq z1g=Bh%627$_qfc)*=|w-mrPJ9tu2SfD!Xv)CgA$O0Adq%&Mr!jQ75w87vsL=Hx)~+ zBc`&AyWW}a?9Ov0hj<nc2FYA@=Cf?-0DSjK4$Z772@^3gWl4?vy9pSUuL4Y19EYh_ zZqFgsON;zfpx2+X;x;?a6*#99at?%gSK&g2qL0HBup4)Cml@^pv+?Hijb0^V3>&jw zX|{l}KL2RCg?A6+eGBu1?uDNacLkmx9~n=LmrtTs)3?lex;8tV%n#0Hay`I`A|`8F zNnN3@90qTXAzC|UI`#<U_Fr^Cmd6js)A*~eG(<)b8Gm{Avg)5$b(1FVnUd*$$K-9e z@LLS0F;&|)?k?g4xIOEKp*Xx43$}YamF77g7LlrwIa88a^gq9_<i%Oe9V*BogJ;vV z10~XnEI)?UKDPP>@RHgsZ%&MavwZzWy<A#YUt1(>KR;kn^~a|m6h>9jq465>*k{{~ zyN)?MEDIjbA6?qkYgX-XJ#$eyr3@$mR2#h`^fO&Nnw_MYVE<sv9gTI*Q}qDc$3lR6 zlYvfJt*{Sg*?BA6kQf-q_TeSgf070brt_!QH<YgtiqfDflm!+00s*aRf>j`ngkK7Z zH9e79sEAzRx>$ADdoKJ;c*hiytoRks>u9XZTS3d-@Tea307X$sJr@$G=*2}Gsa5^a z7g<l^i&@j>q8PAEKBYq63YLW`3~D`DIfmISGrCc8-)ogR;8b<qH*%Fvs?Hf`!q;;a zL#sHM2;%-^JpuQ;S9d>F@^wUBoHhB?gpL<TUc?)xVOo-}Lq<}v<reiIRN;5xtMR`! zh5=qR#W)rm?=txR4ljvncI~4G9M1mO3y=d6Kxyji8?P=i2w!yCE~kILe$V;rSLym| zE8MEbilVx-x&3%=`*EyLIx(Oh&ZftEd{29Eu{fK&(XUS~-n^WhT<p=wzzZ2TLG>+9 zc+BlTzGP81PF~v1{@HYfVOaKzHJ(OFKPM+lPr|p3REVSA&#&>AH**}M$}baID>!y( zkeJ<O^k5Hg=o%ME@n^tC*W-hY|NMO8pSUzHBOk4m?ocN(wX0d4&QJ!R;jM98D4J^~ ziPF*d*4`e@dLTE_EqIEi)VcG5Nqnw4&S>E38P8x8B;|5HP0A<J#r_eV?X(VvjZ9JU z?O)#f)cFR_?jQg0ADQ<8JJB>c)~>K4W(`RI(iLp@Kgzg9w8mhFd)I9T0q2%=qm{}< z!@tGzx_A|pB#~tu{{Wp~=<_wSXGp=^r7e~y`e28o4i^BL)uS_3ChP!Ee-AoQ5M0xa zlUbIk7zP|$7!yoPndH$x27l@NYY)~FB!$xey2D<hDNJI`4;Z}9@G^$e^W|g67_By( z!`bP@xAWN><rdmo+!MAyW<Av$6OWHE9-|P4qt*)9*H0FR!$HN733WEVc<>7>$YLGR z&zrDKR$(S}x^MtF?Jnl+jk}`QE(og=;^{2NV3A#rL8R#e7}zHx-AZBSL`OO#y=SxY z!`IF6cZaWB%A*D+Z3wFke?ECLdkbO{ufGYMJwG`{)OKL>CD;@uuQ!jsIz;0$ZV$XU z_~ps;KXq8hv;#Q<J86^SehN)8Zk_TId_d+ry;#>L!p@H2OD}Nv6(?W0)S)<V76k-j z8|;cstm`*6?(*&I^)YfEO^+pum4QSE4lc?1_&+w@Y#fcgyEDB5V1QOaa|V_1IAH<I zyHkL_B~ZFMIXLD`bUEq@60Dug&JK<_w1N#QyIw8uB@+-GsxU?~ob`0#a6ZB8EkT(A zt{U88Hb493V(SpeNsx-0_j)*FRN1z6BqOFt*gJIF=!AkFoow92L8&R;)eEbFlvl6W zwWG0d_wanq3-Z=Y89%sH;BN#g`h#Z)!2+>NPAf`1A%8x)p{^9!8g|if6YOtDRTe;J zpCir8e$QzQFuwTvfA||3)a!%AYaP^BaVt@wZ0Ce!J{Kfo5Qp>gSyI<iSaqA{wdBs7 zLwGFET!{1ZBvTOuB2+FKD|qgE_a~<~CyyLH7rT?i>=^5Bn2pMrxBZm8?nVsi;a^$s z?9A}U)J1sx^v^qsl}=Ek3lL$xo1=aqf`ld12w%Mel(y)HQ<^esipLLUvtz{Y@W1wa z1GE%7!w1J$2Yi2U+Un#~uP=Z>UHEtr4Kw}DT(0FFt=@<2px|*Yn5kn~o?p8%LqKR< z`s|(`Po7Nh1V;&5?72bPdi4rED+qCOgmo0mIu|}*!!;zf!|+E>|6}LD{?69Df7|-k z2e4f6e6N)M@$ok(!)vgq?!yOLyN@2+NBJMXYy>Lov0IQ*UVY|C_OfkoZ3BtZ?~cYl zJo>jskN@;&eDj(<CRcZh3Wh>mLHfr>{I~uPNZ_OWjS65?LTGIcveX-1EcxbQ8_%Q` zym5m2mork3#kpLXe{=C2w3r_{5|%^x;%%q{Q-CQk)BLCvFxT*`9#VkSS0Bv(A<EC> zI42)v(AyJgAl$`b4aKTcp^G7&QC;V_aB~&^OK*zTEWmnMoM{e0d)ZHTX5GqUmiDF} zpPxN``3)rJXc2id*T+Ac{B$z=`D8@UBQ{5N654C&L;SVWOGZ8S(kSnYsZm4slGrb& zQ1zAZgKPzC`CXVmBFgYlmrW#J{!^d}3rT8#v85a@<n{odMz4%H5|K_Fa^cX$g`l9& z$PNr#dG<`&S^DOJy>ZmO1`z}|vOh8*4mHVCX)c{LjV0M%$6E`nglk<PBGE`%JQj1* zZ|q-jP3A}+x#+fsxbFf4#J$%u8@Km{D}SuCqrXdFFm-O-oMELKQme163F5aihAY5) z$r57B+E-1pa&hORO5udI5a2kqc`Sn>`;{T3e-pG~0fA690_?cfe4#_p`G9Uk(xvgN zNdakp>9GHVhnHsOc7y8bLzm9l<6b(-bEK+7=XtD(^3_N7l%y27QnmrBY|iK|OP|8I zXB+Z(n+w0N+g{sFob5_4V<Wh^sk?59y&F)=!P?MAjxiYo)Adu#lUP$79N#}bg-e79 znIdB1BV=&{(QTjCSS=`AaP`Y6!xU~aZxek1x>b=ijSIe9$V-Uik@lv*Y99y54CP&} zuSVDRPOfLH6OlsnCD*HrTeQvEA}cL7Q%@0l%e*vIxH<Zt*sx;~+|AMTJEN)(0VUA+ zR|lpLVN=n<g}TxiiUilPVzQ6ay4CiYn!a+lW>3U>{^tBu%$;$%U~iX;>^J45Gg!K= z0A?>E@<Ov-BkS5VufTym#YBjn4kxF~csKePLh@z?ckg)m)8zO9&#l9oKN`Kb;G1pd zulPEh1lbpp`6dXmdF}d+oPw6;*XL*QOdYn=-|(Cn-*v-7d-`^rK2<lF&+(v`e3%?g zaNg_)KDJh!!_P$Yo`C<?0+`_czdk!VUEH~K3opFBK7X-^@3*{8`2+fO4i(uz*9SQI z2H2kfF|ipRz?T)*FwJUPJmqe#zV1)lvyu5KsI%Yb_qXrG$r4NjAsP24FAtCySr<sz zb^og@nIJ>yU=1u0r<NbPXCBsLjRp7dg%~xfBLN&gATrpTXB5!#px4q3PQt-<E`2w) zys_Av&_C`1kJPZm-q6I&h2zHEpI;wf)u%VknU!0vx6A140=HP8L&*M=i_b8^Q6di& zc|);M-mjgJ@}_Elf=*tmNep-&JM-ymjwhq5W$sQlYjt#t0lOQh1Ir-1mW(UzOk8-( zu4|)Us6WbDxWfeZtmd=x(}%WR{^o*Y)@8R{JDb2Y)kS@0IgfkNvB*xYi4&5H`X8kZ z=0Jd9tioqysyL#B>rv<CC;~Bd-08-MhJyXGAq2gF2zgvc&3cFl>fxksE}UyCj!0Q$ z<9a$X_5vB+ARqep0v~0+4WgqiR|(lJA%;`W$+2<w6i-}Ep3c5ODpEHBK47m5_`Jlg zbnmtN4i8YFu@Cz3{JmH>1a}u<|Fel0XSjn6j2LEC8I=v+LwN7|;M;tk>@>%JtPY_( zI!BA;gyDd$fy*KY4&?t>K_L4%B9})WkQ$YU<b;^Nx?J~mE{m!K+vqq4T_GD0+bH4~ zl0%o)eq<X-<)>5)iMlsQ1{tHx>v8AnGslD=-9uMviSUcnl5ZJPND_gW>z|{C&v2$F zEX554s3L_$$m{7#n2~nZkTu5|T!>|UyRuFZR-a5uZmYLYUUoe7OAXGYY~1NhC4*tv z=_|ZoGr_#U1Xm!REFgT@WWGS2RrF}0dKbBzoVP=R>Ohbm2%E{%s#;x3L_`kM0`N!& z4u%SEkb)k!pK7;l?M15hVz{0xodPB{eLjhn$)a!I_1tTCPDVs*Emv>Vw#p_&ILVj^ zl}2mJCC?DX0QlMq3Co${re1vk8I>6rKgg9GM|4|J6EU5Nmi(QDhCpzUE=)0^Q_|*3 zcLlY@*CT{@?=VPg18b>AYOl&+BLQ+tn<<;wQPoUa8H^MI@~I`JfrA@(u+%+?<R$qu zL9$i@pntCaN`yG<;oPa**9JXv(Aq>O+wjHEX>IqfG!dM}gSlf&E{Oc`hg5oMx0_V< z6=E`SKzNi`S61<E>C+m%Z{-{FdNv1cpERlN3rye-%LK1RJgVr6scWocBwE2-+dHd; zI%eQBOolhAC7qA>6i%7Xl@L?@W{hTfV)r%N%C68YCqkjJs#|9p$^lXJ%4iUMxNDE- zq*Ccj?c+aRlj?&M;tX8QW4>R{SWAh5Ry{165;Ctu%^D)DF2JM7&t;I2%sEeRv1jJY zk?9;e?}I}%wsLnq$$~eBq=*39C&tY`iU2I(sC8X;3;q@a6MIV`x!Y_CUN0N}Dy(k8 z?V=QXPrWT;d#WZ}hjnN$-n4#+Po9l{=y`X;)C!%YA`$LVf@*3TsAf1mtgBO$@<1bs z2AFNIsMoH6qFu81wvTDy<JC=-n={X;YNoKgOeC=)=uon<CKRTUt=<Qr$dwT-nO>}K zib7><>eaSvN&9eb@V-G1jD5Yp#{N$NVF>9mQAZ8u{4nq9byI`c6<@L2^>BuzlXy>H ziOnd#4IiBrL++Uz!U?{%(h&)dx;X2+800jTe8L^MGB&pK^^sGcCVm#}-$aZ*((qjs zI}%>48oUli_yJ*6@tE{1!hKwsTOj1T$RW)*jnFxS0Bu7|`u>A^+fTM1KiYq|{q(`^ z)<Y0Djv>Ui-3MDw9zVh-_<qTri6d8S=N}mYIMdNA|M&CBIhQ5HJaq$FRnYwu+9{Sz zCu{yhW9!ybKXsV_L%_PASrd=s`Gf*fe>{0R;R(N=Utgqduy^l->{W&}>GUf@5;p6g z?2JXwF6df3DL;o1b)3Ga0#xKIMFal@&Uh?vvd{-0D4Qm3bL~~FgTX2H(IYGbfBbXm zui0v)Y9e5)zPFF`+3U_&!PZ<wz`c7{z<>F1!2=wRl{82J*_9-7SD=MQ5I)M_c_7gY z)d<+$7=aoetplTGbO7ev7@&uWHlneH%;Wiv#SHSn0e`=?KlCg)xh<c*ZIB=5QAC$6 z>u~bs6jAYp5WQ!A)|-Vaheqk9yQd3zL`5w=q7pQT<a+gxM&<)?rZcn>zG(&(8uwXU zsASAFE1@xmmd)ghvWtD)4;({sS8A+uQefCo*PBi_jzyLf$;RQ1rHsq#Ji{dV^3I*G zq-JfafCbW|=(O0atY%lv&OpeG4(cN}g#G|Wv0lodhQDwY(;u|K?y)pR^=vKGZ6DH+ zQ_Pn@PC!O?F+qzDmJ7f1mvS38v{e|l?~y6)0K3AC(?L$Kf9F7-*(1Cy(0o+=`4Y1B z=3sXFP(v6Wy<g{jQycM$EzZD@U4Fvc2kBnJ{^{(rYpa9+y6~@u&zW#FLF6eo(XEC^ z2~tmI&i$FlSHf`_<>4!6{n2Nm+v0MsKA@fx^Rb45K+f4iu-Hxpz2;>aM=SbJN>-9^ z!>A-K)G#BOob4U1TSB!afcfNSoLCl=aqzk=0?meTy`UHYFY3&BDo0HqKTWW?TLAFq z>Wz7TFt^4Pxwr4p+-^{m-eqMe+vM**5Zn)x={^l+2`40oXmd_KEV|SM2fAevYq-5w zz)#*zXXlIiX7^ENrO6Y~=nm<-4lnLvN(e=#rEWI}9>4_zcIJgW@iSQlmFt&{yY}(v zOh3o0%B6+PbU?V>#JsxPrkob;A9q^6cKzx6VtVolxy(k?!y_C>u93r$AXx>)VhG;K z3C{h@&R@Nbtynq2<W$88CIyAeSBug0&2?NjxWTANP4vy{o7c@-6>3?xTr&ub`u5aE zkHrTGAZS5lVqfmE78}vzBP^)%@%}#@oE^S?ga_6kdFCLk{me2fhpXRT)XQTYhC_+` z>pE7|I#*83QLJ@{{7DK}d*_&(S!9`n(;nJJ0He3wP?17YQ#_;jf*UcPQ@XtX5nyZ^ zLH(>pY4}CE;q9v7ZEJ|x%>Q+VrobMbSa@^Y)esII1xErDG!lUg$67|-ADwNTIr3O( z{hlJEewP?kWruj$0ETfTXEU00H?~#o(RW}~CMyAz)yy`9=*xqcslO!5%A262j}KIq zGDoi#Q>9{;hIXbo+xA2v8S`Mn$7io6^FL8O%K$)b(LyD&po6<1)G`&LLQiLf4kPJb z?dB>7A`+6&9RqKK8X7NgMHq3Gvl;o`Mub%oEgeNRN=S6&Rlk0)zH9hQ4JeM7;g-&u za^Yh6q0yMUU;(vZ75U2hIJ6F(!vWb0i1R~3s$gQ*CxZ~ZQ6_plYLEXN3Z2`qLjFxO z8b?@-w0f28d)(1Hc%`qR&~c4X#(r$4o>(t<Bj~Js0@+cNLwdT<vm)g>+u{WB_0ecY z3BajkZTi{m8=F2n-93UFo?ZCdsierGyAel?MbL2E7zbeC69GQ9m|z%>nW^z?^kRYs zJP^phfo9||>QqB2N67)gsnh3Vt6gKece3MW%k^CE;?CX)Rz+L9mowwhUMORLIKd$b z`TR5$;;b<7Ie2?8J?8x|HaY-8{Ci_^A``J~kd6)x4`=fuo6vDAcaBt)C(}3QZ#Gze z3T3{)Is7y1$-Y8ABm6xXeHll7d7@~s`D!+Mbv%)izel&uW~bA`IQYAPgkZP!U;TdT z$z=Q6<N4vOBP6;!U(jOT<#Q)E#*E9)M-!aOKVIOh^4<xSkVo1B&lFG2{4DY2Z2s!j z(d_Wn!5kOUaM$G48G6Tv7O#;D0_bhNIZ}`>&*!vPJgNK!&WMZ2=5;Z0VRXPgDd;MY z?B=M#G>oM~Q#*C#%YN^BB)NYqeeba(tOFsTefXya=P8bIFAffQN*wwFWbHa1BHTQz zSQ!#Jk5xey`szbWXH_Yl!ScQ?u|w87>^1wue{xUw8St|)isPG(x|x$^%svC`TPJH7 z-LOXd2n(0Sg9@>s&{$<dM1uNuXT=csegc~4RaJQU>__cMIpB=?pw`;CTxZof(UsGs zTYP@v;00#XPd<ru6N5@N(aXfl*yNlE@a(?3P>rY;h=ct~p7c*7Yqp5c*Ok^Bc9<#L z3w7$@PSiol%;wlP$a}#YWN*{gT@qg@&|R?Qo71&oTle@MgJYlgT4HDylRe{Ps%LHv zRxX2F2|{B$A%@q+HfJF7AACjoar4?(`_oc8v~&&WrpYla)W7vIEsnnG9jcW^4c7aS zHu_!9Y;1+vz|PJl#e&KKr(K<@zDn-kXa*3cM+hw}yR*NYu=~^;irZOX@8~8-$SHNX zT8w_F!PIM2c;GUzg@9c{?j;EY*EBbL3K2DQm<_^}<Ys`<N@%lL$sRHx4~!DLp2A_+ z?J#2eJJ~2wCFWTP*(F#y>Bh_y?q90%zTMGPl;E{1%>J8$)AfMt_g*k5QcE2(%}t2H zXQ5pTsNeJ@EN%8Kd<*0G;NWEo?b_N~tV7S_OnR};78&+!GQm+fSOiUKYlKq2L-FjZ z>^u37kO31p7Z~d|#DF`k9HzlN$2Ddp4wz(cLuwrh;cEYY?ImCYBRN9y_@!PaaYIm4 z)q0Ss{`#z4miNPva0=iM!jtpwoNH9YRr~5|I=y3*7*~|ti_2MpP_h}lPPllV<02(e z><o?5KdZ9`6XZ+|Vh2+gVCq=I#x#@cqO-|HYI?N}qpN8wpl;C%>LwY5fDY9$wSLYp zS;yAb;P73~Ih)l9P0oGhZ3?Xb^qMuF`9$;_$PLsmNf<Aw(m=lnOtA0F3EBRL_Y(!= zu2DJ4@WQ;?t4!Hs#-8~!s+*eaCF|-Y0w@>(B<NNch|QKlF{nOs$w(Ei4t4LTlOCqE z8nhDJyYcmajMu(VmEuDhX~%|0r#;qJj#LkazkQW94Y0wPG8c_4Qsgs&)Et_hDi@wJ zj`Ohc@O%amFTc?2Z_s0L36Wv6ZGR;Ib<A{Rj!wM~VkD6iJRwer;v$-=(jwz-<@F+6 zq418nS&XuX`(VpP{gFGV=QMZp30o&&SGvFfOi$|MsBkXOzXd}N@akDR{SXjDJ_={O zuG$<~)jcc`Q1J~FfR*Z%QEMf=HRVXxAXQ7*()0oOlmxrv(%XbHB+XViE;50TYJDS~ zx`KRo&&roK2lJoA8`#zvOzv_jBMWrF$GDn2KA|)(Eyucg&!9v>1J$9yDcO)a%!9<G ze~Bt~UD8JHKL{sN=M7kc-TTziKpFjuOkAD1KREOcq;J4UgEXuPxrT<g60cXK_4hr& z`5=^HU`+zOH&O}QWoTXX%xx9RYla5RAV%gjSTXshQNKVj5R4rL-GPX5j6MeiRXZKn z(!GQ(2C<k3VS&-*UN#L#b2q^33wm>_uHDl|F~JjYlYzCOvRb_rl=X4I8V<Go<Lm`f z%;eTci)m(1pWi^!Znrs6HpXQJZyW??;5?EB+aP47*g@4Zx!=CdH;KygNSHaW5fE3d zZGO`MpyvC$-gZe)_$q=_TfNn!2>S)hgku6yhlu5-TYNF@G^h+u0~;pihiB_nIV7FI zVu3$=8}I58Sffrsv=TVt${D?#XGpPv7AzIi?TR2-;tXir?NV5JSJ3)zfU59Y3aP08 z!teK%ezvM4zaG#P6rct`J>UV8@n(|^efUTtbcu#lbowjknK(in!B=CwWVTyP-%j1y znL71tR?()6Mp)Ua>x*^$-)FJ=e#iR?FUeoYu8pZLRF}$>wG?T^3c}_R$(F?ALe*oP zxt9o;UA<3f8F2mz^1P!$7iQUg29@cqum14`x!eE$4Z?gy=fjBo@r77a>9_M?&FAqv zS~~}Gq-_~Uz13y6iyKZzW7T+gHd49kc(?hITDZI+vbFE4-l)S}W<$#ksJpi|jVlNm zLkG6R|J)rq8lT!0*F5$vYIm_qme2w^-R7JcnU%bE?$iL>(YDyv)y^+mzFf)Ej+3}E z`-KZVISN*Ne6x`e31a=<F#jd;{q4+vv7Y)rehw7ZY8nqcg@k5fB6Yfk14l!`(RRsi z)NyMtR3)!F>D6CNQ31WV2>j+?F)>pzV1KjT3{-g^bN&#iPX@s7)4kZW>*QPva<A6d zP%7X$%}PF^z4GT!AEk!ASjFAlQZ@|vo~4morLIlolcQ331$3UAVa|BN(|qsMYzL2! zb2ccAT>9+r*bWY7VIGmy!|401r}w_wf3)@e159vC>{As#e#BxNi%z8|=v3R;ef;D0 zeb&S|_Ed9!_rcD?t$Y0Nd*D!}Jxrw7r=8-_ooUKCkI5=k!Jlt&?O-m$0EF0W&vn#W zE&Bi+5c*m34-SC9!AN9VC6S-lK}eufArc29zdb&9ReyS`sW;ul$(R}T^1j(X*Hd1- zmW%OA&i1a^IZelonGVN9>3D*acS01ro#baY1;x^xoU`+fO6p`2?%aunGG=pkszCu( z$}#E#wVF-ZmEKcwn899UJH;`?*s#HgyG3|s44b(UK$l<Kg&G9$tVbeTLC3zG26mb_ z;*gV5Om2)wC$zsvGpx<xyHm8ZFfni+uovaR6{Mni>*deTc>0m2d|{6JkYa(e62!&~ zE9FyYYH%v+B;#Z~*=6G&vS8e0iD?%%D9cS4uWP$z{3$MC+AGs4dTIh+3nk@)LDd~I zmO!uZfD!L&gYh!3jC0=>@yv9u+H(7-g22u)=)V1x%dM=oaTm!!c1#0t5Hk&;vMPBL zf|EQnuv@r-Jly362xXPz_NDviM{?3L<%jAby3~vlH5ls&-Wp`qZ$Tcu#rFu5y@^;W zdJsK1ReL7G;fZik+{&JfSun=Irj*{dd^DYw?;+Y~ZZoMbB2Kwhd*Z5*llh7+8lTI{ zy?E7EQQ8VCy1qt4Al%VSbr9;=czQGzol`xV9`RiUQ#u>VLiu99IC+f(XfgBG<TtGa z&*I3bM<Qs4T!JLV?6Dq{DrD|g5b|p5P;8J)Vsj*s#|1T*5)O$Ed`Or(9RaEj*92Iw zk=fyf`;7`$@3%;e=(1(S7eq~1RQ`{$@aOpu`}S7jIq4m52-_$)T-iUxEVVKELa(65 z$<k1Z`v+$SP>e+V_(X~kpXbk9B$W?Er`TAmMp3d}6SrQehoJKT!*Bb@TM1RclVcF9 z8?*r?1}#LEG<_fBmVx0k(xiuwO1L3-C*_5csRwrD15P9z{EVSME$nw_Z$&J^dp4FT z6%9%|`KH<y#7M2g8dw(!X7*BR$M~qM1zuBi4FEgXFCFR`xu#xAC1`c%<6lpJIcJXs zCCT(vseV=V1nHEbSvU(J3!RFIwz5v8{j0D<71uB^Yx>_xbvfDHKQtQC-HsZj73Mkd zZyv#_(61?TOyZW*D07$@C-+f4WbP900LkdWFn;zKk!VrdXrHCrIUOU2(Y~LdjwxRZ zO(o8u<jM3JCeo|T_MVot2>R*`G2VcPbL?BRz{oSp|Fmoo>67d0c6p<f+PkO<7ibs0 zkT|i(a<Fk1PW6roiS=f`z<91t1Y%S$FmOT!5$k-T>H}4&ZeYR}wBL#}?OL;DPcGVm zk$b45BY)_L2&d8Ed0Z!1ajG&D%18cxy@d*h9I1B;wL8lcSweaeMNnIf^<r``=PhAs zFi5E?z#qQsi0t(;6>4?}NdfJkIGmD!p!cfE`t^Hp;S$#dCvz-=C-Sa|$^@?aX>!WV z5wAo>*B6p;fY&1Nejc9loy>7m-!D@l?y;$lk$4b&15S{_QEh6*`b?bigIYFXeL&a* zWE=Si4~}>ksbdlF%$B6Pf!uh%Lsb$M{X;7C`FL{u=BN&<CEgVemMUWBb<)&lINBmf z!W8a%tz+*6yG}^WP=Kg+R38NNwbbQ}Wms2jOxv#5;-)7aqMrPzdd@@XkWdAgb!`sT zzQuDM<pGEl+aorH$KUNSkh16?`@&~&1{(cDeZ-lkBvQ6ZO_p@uAmMnRH>%fMYe#>g z=JCrW@A$2rcBw6vg85OA+CX#pMAg-1D;tM7`6P7!AQ}1pvNKyrw#L;=YIKzsje~6a z@;bwM0n2eO0VB+#oKj{rVRVtgny{%ek`M`SbnWJ>>ynZ+($aH4c>}7-kxOk9>*IGw zB8)T%`Wl$&!S_+3(G|2821_|8+fTk)V2bF(Pa?kfd5RABp0TXLq`O2#6CV60QHSjg z5%aef)hx7&815ZUN89*}$nTvRQT5#|<7%%(v$B&zSMG}P3iKW7W8Wgm=&L5~$AWKx zX}~u=UJ>w-J_mItPh~$Kx6&!z)|njr$Vg^9A;#x7{fj0EkS93#xVNa89lWPa5RoA_ zUHS}5Q4TB9iP*HuzC#>pdZ`R|H>T`VdLtz>O`lD7+e;FIb`_Y;Pc*xvPlUrTxs;og zWk);8Ea}YnvoUhb;5l@@9A{k)qb{@=9x13+l0O&}kju_y$V~=yb=1o&lg_dpvuVtb z2Jb{5*U`)AF96;f>ra!(sSJ0HmvP=sL@Ip61f~u(vtFg;(d=YzjQ51~SiZ_tNRWcS z5mg*xHCD;wp&q$0rOmq4qI}?^O0Zv8R4Wi+Kna`sWRb!&TJ6#>z05Br`f8xMi}}m? zTe5)=NIvIIgNa%c)|iJ<1{Q{u*>|ATb36u2;Sqyppqsj7{+g+jQu&j&#xh@DF(RO| zt$6#7Ulv(4#;T{<YlHd7D)d?)RHxM?#KYW-tfEEqU&hG$e+=(-iwnISUx@KLbjZ+v z@HqVT+R3lS8rT#t;^M1pQhX?q6@Dtx6=JkjWwb<_zc^s)Ih$GeCIzxK;Q#d4E7rF) zIj`WIlmEVmcL^wt0L7rVPLD7(5Y70WqW)24i~LT#2q7jyBdi{+dZ1$sDuI@$*Mcrp zBeo#4qUd&kGij7MyrDwLd9jBC@fcXzZ@d==2G;FS!Y(3Egs-!^g9$?uyOw?JKxn!c zAh6Au^jR%-9Npk9rMmdgxoeT-�-}CU|3w+a}~SLLt$T6s3FS-l!1>sf4^cK3Nu@ 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≷9;WH$epNxB4vtt$bpn;|G5GWJYc<i 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 diff --git a/WP-Parser/vendor/autoload.php b/WP-Parser/vendor/autoload.php deleted file mode 100644 index 2ae5cca4f..000000000 --- a/WP-Parser/vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php - -// autoload.php generated by Composer - -require_once __DIR__ . '/composer' . '/autoload_real.php'; - -return ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263::getLoader(); diff --git a/WP-Parser/vendor/composer/ClassLoader.php b/WP-Parser/vendor/composer/ClassLoader.php deleted file mode 100644 index bcf980915..000000000 --- a/WP-Parser/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,240 +0,0 @@ -<?php - -/* - * This file is part of Composer. - * - * (c) Nils Adermann <naderman@naderman.de> - * Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0 class loader - * - * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier <fabien@symfony.com> - * @author Jordi Boggiano <j.boggiano@seld.be> - */ -class ClassLoader -{ - private $prefixes = array(); - private $fallbackDirs = array(); - private $useIncludePath = false; - private $classMap = array(); - - public function getPrefixes() - { - return $this->prefixes; - } - - public function getFallbackDirs() - { - return $this->fallbackDirs; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of classes, merging with any others previously set. - * - * @param string $prefix The classes prefix - * @param array|string $paths The location(s) of the classes - * @param bool $prepend Prepend the location(s) - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirs = array_merge( - (array) $paths, - $this->fallbackDirs - ); - } else { - $this->fallbackDirs = array_merge( - $this->fallbackDirs, - (array) $paths - ); - } - - return; - } - if (!isset($this->prefixes[$prefix])) { - $this->prefixes[$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixes[$prefix] = array_merge( - (array) $paths, - $this->prefixes[$prefix] - ); - } else { - $this->prefixes[$prefix] = array_merge( - $this->prefixes[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of classes, replacing any others previously set. - * - * @param string $prefix The classes prefix - * @param array|string $paths The location(s) of the classes - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirs = (array) $paths; - - return; - } - $this->prefixes[$prefix] = (array) $paths; - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - include $file; - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $pos)) . DIRECTORY_SEPARATOR; - $className = substr($class, $pos + 1); - } else { - // PEAR-like class name - $classPath = null; - $className = $class; - } - - $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - - foreach ($this->prefixes as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { - return $dir . DIRECTORY_SEPARATOR . $classPath; - } - } - } - } - - foreach ($this->fallbackDirs as $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { - return $dir . DIRECTORY_SEPARATOR . $classPath; - } - } - - if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) { - return $file; - } - - return $this->classMap[$class] = false; - } -} diff --git a/WP-Parser/vendor/composer/autoload_classmap.php b/WP-Parser/vendor/composer/autoload_classmap.php deleted file mode 100644 index af4ad5805..000000000 --- a/WP-Parser/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php - -// autoload_classmap.php generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( -); diff --git a/WP-Parser/vendor/composer/autoload_namespaces.php b/WP-Parser/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 783508a3d..000000000 --- a/WP-Parser/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -// autoload_namespaces.php generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( - 'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/reflection/src', $vendorDir . '/phpdocumentor/reflection/tests/unit', $vendorDir . '/phpdocumentor/reflection/tests/mocks'), - 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', - 'WP' => $baseDir . '/lib', - 'PHPParser' => $vendorDir . '/nikic/php-parser/lib', -); diff --git a/WP-Parser/vendor/composer/autoload_real.php b/WP-Parser/vendor/composer/autoload_real.php deleted file mode 100644 index e6a58bb81..000000000 --- a/WP-Parser/vendor/composer/autoload_real.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -// autoload_real.php generated by Composer - -class ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263 -{ - private static $loader; - - public static function loadClassLoader($class) - { - if ('Composer\Autoload\ClassLoader' === $class) { - require __DIR__ . '/ClassLoader.php'; - } - } - - public static function getLoader() - { - if (null !== self::$loader) { - return self::$loader; - } - - spl_autoload_register(array('ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInite24a790d5d55d8269caa80a46de66263', 'loadClassLoader')); - - $vendorDir = dirname(__DIR__); - $baseDir = dirname($vendorDir); - - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->add($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - - $loader->register(true); - - return $loader; - } -} diff --git a/WP-Parser/vendor/composer/installed.json b/WP-Parser/vendor/composer/installed.json deleted file mode 100644 index 38edc4b0c..000000000 --- a/WP-Parser/vendor/composer/installed.json +++ /dev/null @@ -1,202 +0,0 @@ -[ - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.0a2", - "version_normalized": "2.0.0.0-alpha2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock", - "reference": "2.0.0a2" - }, - "dist": { - "type": "zip", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock/archive/2.0.0a2.zip", - "reference": "2.0.0a2", - "shasum": "" - }, - "require": { - "dflydev/markdown": "1.0.*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@stable" - }, - "time": "2012-12-02 20:26:45", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ] - }, - { - "name": "dflydev/markdown", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-markdown.git", - "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc" - }, - "dist": { - "type": "zip", - "url": "https://github.com/dflydev/dflydev-markdown/archive/11f8faa2d17f717a038b4d372abd22a6ac4a15dc.zip", - "reference": "11f8faa2d17f717a038b4d372abd22a6ac4a15dc", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "time": "2012-07-15 16:31:27", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "source", - "autoload": { - "psr-0": { - "dflydev\\markdown": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Michel Fortin", - "homepage": "http://michelf.com" - }, - { - "name": "John Gruber", - "homepage": "http://daringfireball.net" - } - ], - "description": "PHP Markdown & Extra", - "homepage": "http://github.com/dflydev/dflydev-markdown", - "keywords": [ - "markdown" - ] - }, - { - "name": "nikic/php-parser", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "5fca55702b4e035b60a7b1cbac538572db47121d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5fca55702b4e035b60a7b1cbac538572db47121d", - "reference": "5fca55702b4e035b60a7b1cbac538572db47121d", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "time": "2013-03-05 14:42:24", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } - }, - "installation-source": "source", - "autoload": { - "psr-0": { - "PHPParser": "lib/" - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ] - }, - { - "name": "phpdocumentor/reflection", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/257f10cd44bed0a8257c30ef9e218cb115867d40", - "reference": "257f10cd44bed0a8257c30ef9e218cb115867d40", - "shasum": "" - }, - "require": { - "nikic/php-parser": "dev-master", - "php": ">=5.3.3", - "phpdocumentor/reflection-docblock": "2.0.0a2" - }, - "require-dev": { - "behat/behat": ">=2.4@stable", - "mockery/mockery": ">=0.7.0@stable", - "phpunit/phpunit": "3.7.*@stable" - }, - "time": "2013-02-01 21:05:30", - "type": "library", - "installation-source": "source", - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/", - "tests/mocks/" - ] - } - }, - "notification-url": "http://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ] - } -] diff --git a/WP-Parser/vendor/dflydev/markdown b/WP-Parser/vendor/dflydev/markdown deleted file mode 160000 index 11f8faa2d..000000000 --- a/WP-Parser/vendor/dflydev/markdown +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc diff --git a/WP-Parser/vendor/nikic/php-parser b/WP-Parser/vendor/nikic/php-parser deleted file mode 160000 index 5fca55702..000000000 --- a/WP-Parser/vendor/nikic/php-parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5fca55702b4e035b60a7b1cbac538572db47121d diff --git a/WP-Parser/vendor/phpdocumentor/reflection b/WP-Parser/vendor/phpdocumentor/reflection deleted file mode 160000 index 257f10cd4..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 257f10cd44bed0a8257c30ef9e218cb115867d40 diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore b/WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore deleted file mode 100644 index 331c58f73..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea -vendor \ No newline at end of file diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml b/WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml deleted file mode 100644 index 6aefeaa9f..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -language: php -php: - - 5.3.3 - - 5.3 - - 5.4 - -script: - - vendor/phpunit/phpunit/composer/bin/phpunit - -before_script: - - sudo apt-get -qq update > /dev/null - - phpenv rehash > /dev/null - - composer selfupdate --quiet - - composer install --dev - - vendor/phpunit/phpunit/composer/bin/phpunit - - composer update --dev - -notifications: - irc: "irc.freenode.org#phpdocumentor" - email: - - mike.vanriel@naenius.com - - ashnazg@php.net - - boen.robot@gmail.com diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md b/WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md deleted file mode 100644 index 6405d1a10..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/README.md +++ /dev/null @@ -1,57 +0,0 @@ -The ReflectionDocBlock Component [![Build Status](https://secure.travis-ci.org/phpDocumentor/ReflectionDocBlock.png)](https://travis-ci.org/phpDocumentor/ReflectionDocBlock) -================================ - -Introduction ------------- - -The ReflectionDocBlock component of phpDocumentor provides a DocBlock parser -that is 100% compatible with the [PHPDoc standard](http://phpdoc.org/docs/latest). - -With this component, a library can provide support for annotations via DocBlocks -or otherwise retrieve information that is embedded in a DocBlock. - -> **Note**: *this is a core component of phpDocumentor and is constantly being -> optimized for performance.* - -Installation ------------- - -You can install the component in the following ways: - -* Use the official Github repository (https://github.com/phpDocumentor/ReflectionDocBlock) -* Via Composer (http://packagist.org/packages/phpdocumentor/reflection-docblock) - -Usage ------ - -The ReflectionDocBlock component is designed to work in an identical fashion to -PHP's own Reflection extension (http://php.net/manual/en/book.reflection.php). - -Parsing can be initiated by instantiating the -`\phpDocumentor\Reflection\DocBlock()` class and passing it a string containing -a DocBlock (including asterisks) or by passing an object supporting the -`getDocComment()` method. - -> *Examples of objects having the `getDocComment()` method are the -> `ReflectionClass` and the `ReflectionMethod` classes of the PHP -> Reflection extension* - -Example: - - $class = new ReflectionClass('MyClass'); - $phpdoc = new \phpDocumentor\Reflection\DocBlock($class); - -or - - $docblock = <<<DOCBLOCK - /** - * This is a short description. - * - * This is a *long* description. - * - * @return void - */ - DOCBLOCK; - - $phpdoc = new \phpDocumentor\Reflection\DocBlock($docblock); - diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json b/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json deleted file mode 100644 index 097174776..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "phpdocumentor/reflection-docblock", - "type": "library", - "license": "MIT", - "authors": [ - {"name": "Mike van Riel", "email": "mike.vanriel@naenius.com"} - ], - "require": { - "php": ">=5.3.3", - "dflydev/markdown": "1.0.*" - }, - "autoload": { - "psr-0": {"phpDocumentor": ["src/"]} - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@stable" - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock b/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock deleted file mode 100644 index b70f57fc4..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/composer.lock +++ /dev/null @@ -1,475 +0,0 @@ -{ - "hash": "c6115c20a4a284f6ca14e676e788b4d3", - "packages": [ - { - "name": "dflydev/markdown", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-markdown.git", - "reference": "v1.0.2" - }, - "dist": { - "type": "zip", - "url": "https://github.com/dflydev/dflydev-markdown/zipball/v1.0.2", - "reference": "v1.0.2", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "time": "2012-01-15 19:36:37", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "dflydev\\markdown": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "New BSD License" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Michel Fortin", - "homepage": "http://michelf.com" - }, - { - "name": "John Gruber", - "homepage": "http://daringfireball.net" - } - ], - "description": "PHP Markdown & Extra", - "homepage": "http://github.com/dflydev/dflydev-markdown", - "keywords": [ - "markdown" - ] - } - ], - "packages-dev": [ - { - "name": "phpunit/php-code-coverage", - "version": "1.2.7", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1.2.7" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/php-code-coverage/archive/1.2.7.zip", - "reference": "1.2.7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-token-stream": ">=1.1.3@stable", - "phpunit/php-text-template": ">=1.1.1@stable" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" - }, - "time": "2012-12-02 14:54:55", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "testing", - "coverage", - "xunit" - ] - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.3", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "1.3.3" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3", - "reference": "1.3.3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2012-10-11 04:44:38", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "filesystem", - "iterator" - ] - }, - { - "name": "phpunit/php-text-template", - "version": "1.1.4", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/php-text-template.git", - "reference": "1.1.4" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4", - "reference": "1.1.4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2012-10-31 11:15:28", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "Text/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ] - }, - { - "name": "phpunit/php-timer", - "version": "1.0.4", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/php-timer.git", - "reference": "1.0.4" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/php-timer/zipball/1.0.4", - "reference": "1.0.4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2012-10-11 04:45:58", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "timer" - ] - }, - { - "name": "phpunit/php-token-stream", - "version": "1.1.5", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1.1.5" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/php-token-stream/zipball/1.1.5", - "reference": "1.1.5", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "time": "2012-10-11 04:47:14", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "tokenizer" - ] - }, - { - "name": "phpunit/phpunit", - "version": "3.7.10", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/phpunit.git", - "reference": "3.7.10" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/phpunit/archive/3.7.10.zip", - "reference": "3.7.10", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.1", - "phpunit/php-text-template": ">=1.1.1", - "phpunit/php-code-coverage": ">=1.2.1", - "phpunit/php-timer": ">=1.0.2", - "phpunit/phpunit-mock-objects": ">=1.2.0,<1.3.0", - "symfony/yaml": ">=2.1.0", - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*" - }, - "suggest": { - "phpunit/php-invoker": ">=1.1.0", - "ext-json": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*" - }, - "time": "2012-12-02 14:56:55", - "bin": [ - "composer/bin/phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "testing", - "phpunit", - "xunit" - ] - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "1.2.2", - "source": { - "type": "git", - "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "1.2.2" - }, - "dist": { - "type": "zip", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.2.zip", - "reference": "1.2.2", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-text-template": ">=1.1.1@stable" - }, - "suggest": { - "ext-soap": "*" - }, - "time": "2012-11-05 10:39:13", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ] - }, - { - "name": "symfony/yaml", - "version": "v2.1.4", - "target-dir": "Symfony/Component/Yaml", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml", - "reference": "v2.1.4" - }, - "dist": { - "type": "zip", - "url": "https://github.com/symfony/Yaml/archive/v2.1.4.zip", - "reference": "v2.1.4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2012-11-08 09:51:48", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Symfony\\Component\\Yaml": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "http://symfony.com" - } - ], - "aliases": [ - - ], - "minimum-stability": "stable", - "stability-flags": { - "phpunit/phpunit": 0 - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist deleted file mode 100644 index f67ad2a20..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<phpunit colors="true" strict="true" bootstrap="vendor/autoload.php"> - <testsuites> - <testsuite name="phpDocumentor\Reflection\DocBlock"> - <directory>./tests/</directory> - </testsuite> - </testsuites> - <filter> - <whitelist> - <directory suffix=".php">./src/</directory> - </whitelist> - </filter> -</phpunit> diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php deleted file mode 100644 index bf363459d..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php +++ /dev/null @@ -1,376 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Context; -use phpDocumentor\Reflection\DocBlock\Location; - -/** - * Parses the DocBlock for any structure. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DocBlock implements \Reflector -{ - /** @var string The opening line for this docblock. */ - protected $short_description = ''; - - /** - * @var DocBlock\Description The actual - * description for this docblock. - */ - protected $long_description = null; - - /** - * @var Tag[] An array containing all - * the tags in this docblock; except inline. - */ - protected $tags = array(); - - /** @var Context Information about the context of this DocBlock. */ - protected $context = null; - - /** @var Location Information about the location of this DocBlock. */ - protected $location = null; - - /** - * Parses the given docblock and populates the member fields. - * - * The constructor may also receive namespace information such as the - * current namespace and aliases. This information is used by some tags - * (e.g. @return, @param, etc.) to turn a relative Type into a FQCN. - * - * @param \Reflector|string $docblock A docblock comment (including - * asterisks) or reflector supporting the getDocComment method. - * @param Context $context The context in which the DocBlock - * occurs. - * @param Location $location The location within the file that this - * DocBlock occurs in. - * - * @throws \InvalidArgumentException if the given argument does not have the - * getDocComment method. - */ - public function __construct( - $docblock, - Context $context = null, - Location $location = null - ) { - if (is_object($docblock)) { - if (!method_exists($docblock, 'getDocComment')) { - throw new \InvalidArgumentException( - 'Invalid object passed; the given reflector must support ' - . 'the getDocComment method' - ); - } - - $docblock = $docblock->getDocComment(); - } - - $docblock = $this->cleanInput($docblock); - - list($short, $long, $tags) = $this->splitDocBlock($docblock); - $this->short_description = $short; - $this->long_description = new DocBlock\Description($long, $this); - $this->parseTags($tags); - - $this->context = $context; - $this->location = $location; - } - - /** - * Strips the asterisks from the DocBlock comment. - * - * @param string $comment String containing the comment text. - * - * @return string - */ - protected function cleanInput($comment) - { - $comment = trim( - preg_replace( - '#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', - '$1', - $comment - ) - ); - - // reg ex above is not able to remove */ from a single line docblock - if (substr($comment, -2) == '*/') { - $comment = trim(substr($comment, 0, -2)); - } - - // normalize strings - $comment = str_replace(array("\r\n", "\r"), "\n", $comment); - - return $comment; - } - - /** - * Splits the DocBlock into a short description, long description and - * block of tags. - * - * @param string $comment Comment to split into the sub-parts. - * - * @author RichardJ Special thanks to RichardJ for the regex responsible - * for the split. - * - * @return string[] containing the short-, long description and an element - * containing the tags. - */ - protected function splitDocBlock($comment) - { - if (strpos($comment, '@') === 0) { - $matches = array('', '', $comment); - } else { - // clears all extra horizontal whitespace from the line endings - // to prevent parsing issues - $comment = preg_replace('/\h*$/Sum', '', $comment); - - /* - * Splits the docblock into a short description, long description and - * tags section - * - The short description is started from the first character until - * a dot is encountered followed by a whitespace OR - * two consecutive newlines (horizontal whitespace is taken into - * account to consider spacing errors) - * - The long description, any character until a new line is - * encountered followed by an @ and word characters (a tag). - * This is optional. - * - Tags; the remaining characters - * - * Big thanks to RichardJ for contributing this Regular Expression - */ - preg_match( - '/ - \A ( - [^\n.]+ - (?: - (?! \. \s | \n{2} ) # disallow the first seperator here - [\n.] (?! [ \t]* @\pL ) # disallow second seperator - [^\n.]+ - )* - \.? - ) - (?: - \s* # first seperator (actually newlines but it\'s all whitespace) - (?! @\pL ) # disallow the rest, to make sure this one doesn\'t match, - #if it doesn\'t exist - ( - [^\n]+ - (?: \n+ - (?! [ \t]* @\pL ) # disallow second seperator (@param) - [^\n]+ - )* - ) - )? - (\s+ [\s\S]*)? # everything that follows - /ux', - $comment, - $matches - ); - array_shift($matches); - } - - while (count($matches) < 3) { - $matches[] = ''; - } - return $matches; - } - - /** - * Creates the tag objects. - * - * @param string $tags Tag block to parse. - * - * @return void - */ - protected function parseTags($tags) - { - $result = array(); - $tags = trim($tags); - if ('' !== $tags) { - if ('@' !== $tags[0]) { - throw new \LogicException( - 'A tag block started with text instead of an actual tag,' - . ' this makes the tag block invalid: ' . $tags - ); - } - foreach (explode("\n", $tags) as $tag_line) { - if (trim($tag_line) === '') { - continue; - } - - if (isset($tag_line[0]) && ($tag_line[0] === '@')) { - $result[] = $tag_line; - } else { - $result[count($result) - 1] .= PHP_EOL . $tag_line; - } - } - - // create proper Tag objects - foreach ($result as $key => $tag_line) { - $result[$key] = Tag::createInstance($tag_line, $this); - } - } - - $this->tags = $result; - } - - /** - * Returns the opening line or also known as short description. - * - * @return string - */ - public function getShortDescription() - { - return $this->short_description; - } - - /** - * Returns the full description or also known as long description. - * - * @return DocBlock\Description - */ - public function getLongDescription() - { - return $this->long_description; - } - - /** - * Returns the current context. - * - * @return Context - */ - public function getContext() - { - return $this->context; - } - - /** - * Returns the current location. - * - * @return Location - */ - public function getLocation() - { - return $this->location; - } - - /** - * Returns the tags for this DocBlock. - * - * @return Tag[] - */ - public function getTags() - { - return $this->tags; - } - - /** - * Returns an array of tags matching the given name. If no tags are found - * an empty array is returned. - * - * @param string $name String to search by. - * - * @return Tag[] - */ - public function getTagsByName($name) - { - $result = array(); - - /** @var Tag $tag */ - foreach ($this->getTags() as $tag) { - if ($tag->getName() != $name) { - continue; - } - - $result[] = $tag; - } - - return $result; - } - - /** - * Checks if a tag of a certain type is present in this DocBlock. - * - * @param string $name Tag name to check for. - * - * @return bool - */ - public function hasTag($name) - { - /** @var Tag $tag */ - foreach ($this->getTags() as $tag) { - if ($tag->getName() == $name) { - return true; - } - } - - return false; - } - - /** - * Appends a tag at the end of the list of tags. - * - * @param Tag $tag The tag to add. - * - * @return Tag The newly added tag. - * - * @throws \LogicException When the tag belongs to a different DocBlock. - */ - public function appendTag(Tag $tag) - { - if (null === $tag->getDocBlock()) { - $tag->setDocBlock($this); - } - - if ($tag->getDocBlock() === $this) { - $this->tags[] = $tag; - } else { - throw new \LogicException( - 'This tag belongs to a different DocBlock object.' - ); - } - - return $tag; - } - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection and - * implement it. - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the exported information (we should use the export static method - * BUT this throws an exception at this point). - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public function __toString() - { - return 'Not yet implemented'; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php deleted file mode 100644 index 81aa83ce5..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -/** - * The context in which a DocBlock occurs. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Context -{ - /** @var string The current namespace. */ - protected $namespace = ''; - - /** @var array List of namespace aliases => Fully Qualified Namespace. */ - protected $namespace_aliases = array(); - - /** @var string Name of the structural element, within the namespace. */ - protected $lsen = ''; - - /** - * Cteates a new context. - * @param string $namespace The namespace where this DocBlock - * resides in. - * @param array $namespace_aliases List of namespace aliases => Fully - * Qualified Namespace. - * @param string $lsen Name of the structural element, within - * the namespace. - */ - public function __construct( - $namespace = '', - array $namespace_aliases = array(), - $lsen = '' - ) { - if (!empty($namespace)) { - $this->setNamespace($namespace); - } - $this->setNamespaceAliases($namespace_aliases); - $this->setLSEN($lsen); - } - - /** - * @return string The namespace where this DocBlock resides in. - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * @return array List of namespace aliases => Fully Qualified Namespace. - */ - public function getNamespaceAliases() - { - return $this->namespace_aliases; - } - - /** - * Returns the Local Structural Element Name. - * - * @return string Name of the structural element, within the namespace. - */ - public function getLSEN() - { - return $this->lsen; - } - - /** - * Sets a new namespace. - * - * Sets a new namespace for the context. Leading and trailing slashes are - * trimmed, and the keywords "global" and "default" are treated as aliases - * to no namespace. - * - * @param string $namespace The new namespace to set. - * - * @return $this - */ - public function setNamespace($namespace) - { - if ('global' !== $namespace - && 'default' !== $namespace - ) { - // Srip leading and trailing slash - $this->namespace = trim((string)$namespace, '\\'); - } else { - $this->namespace = ''; - } - return $this; - } - - /** - * Sets the namespace aliases, replacing all previous ones. - * - * @param array $namespace_aliases List of namespace aliases => Fully - * Qualified Namespace. - * - * @return $this - */ - public function setNamespaceAliases(array $namespace_aliases) - { - $this->namespace_aliases = array(); - foreach ($namespace_aliases as $alias => $fqnn) { - $this->setNamespaceAlias($alias, $fqnn); - } - return $this; - } - - /** - * Adds a namespace alias to the context. - * - * @param string $alias The alias name (the part after "as", or the last - * part of the Fully Qualified Namespace Name) to add. - * @param string $fqnn The Fully Qualified Namespace Name for this alias. - * Any form of leading/trailing slashes are accepted, but what will be - * stored is a name, prefixed with a slash, and no trailing slash. - * - * @return $this - */ - public function setNamespaceAlias($alias, $fqnn) - { - $this->namespace_aliases[$alias] = '\\' . trim((string)$fqnn, '\\'); - return $this; - } - - /** - * Sets a new Local Structural Element Name. - * - * Sets a new Local Structural Element Name. A local name also contains - * punctuation determining the kind of structural element (e.g. trailing "(" - * and ")" for functions and methods). - * - * @param string $lsen The new local name of a structural element. - * - * @return $this - */ - public function setLSEN($lsen) - { - $this->lsen = (string)$lsen; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php deleted file mode 100644 index cbd6b07ee..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php +++ /dev/null @@ -1,222 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; - -/** - * Parses a Description of a DocBlock or tag. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Description implements \Reflector -{ - /** @var string */ - protected $contents = ''; - - /** @var array The contents, as an array of strings and Tag objects. */ - protected $parsedContents = null; - - /** @var DocBlock The DocBlock which this description belongs to. */ - protected $docblock = null; - - /** - * Populates the fields of a description. - * - * @param string $content The description's conetnts. - * @param DocBlock $docblock The DocBlock which this description belongs to. - */ - public function __construct($content, DocBlock $docblock = null) - { - $this->setContent($content)->setDocBlock($docblock); - } - - /** - * Gets the text of this description. - * - * @return string - */ - public function getContents() - { - return $this->contents; - } - - /** - * Sets the text of this description. - * - * @param string $content The new text of this description. - * - * @return $this - */ - public function setContent($content) - { - $this->contents = trim($content); - - $this->parsedContents = null; - return $this; - } - - /** - * Returns the parsed text of this description. - * - * @return array An array of strings and tag objects, in the order they - * occur within the description. - */ - public function getParsedContents() - { - if (null === $this->parsedContents) { - $this->parsedContents = preg_split( - '/\{ - # "{@}" is not a valid inline tag. This ensures that - # we do not treat it as one, but treat it literally. - (?!@\}) - # We want to capture the whole tag line, but without the - # inline tag delimiters. - (\@ - # Match everything up to the next delimiter. - [^{}]* - # Nested inline tag content should not be captured, or - # it will appear in the result separately. - (?: - # Match nested inline tags. - (?: - # Because we did not catch the tag delimiters - # earlier, we must be explicit with them here. - # Notice that this also matches "{}", as a way - # to later introduce it as an escape sequence. - \{(?1)?\} - | - # Make sure we match hanging "{". - \{ - ) - # Match content after the nested inline tag. - [^{}]* - )* # If there are more inline tags, match them as well. - # We use "*" since there may not be any nested inline - # tags. - ) - \}/Sux', - $this->contents, - null, - PREG_SPLIT_DELIM_CAPTURE - ); - - $count = count($this->parsedContents); - for ($i=1; $i<$count; $i += 2) { - $this->parsedContents[$i] = Tag::createInstance( - $this->parsedContents[$i], - $this->docblock - ); - } - - //In order to allow "literal" inline tags, the otherwise invalid - //sequence "{@}" is changed to "@", and "{}" is changed to "}". - //See unit tests for examples. - for ($i=0; $i<$count; $i += 2) { - $this->parsedContents[$i] = str_replace( - array('{@}', '{}'), - array('@', '}'), - $this->parsedContents[$i] - ); - } - } - return $this->parsedContents; - } - - /** - * Return a formatted variant of the Long Description using MarkDown. - * - * @todo this should become a more intelligent piece of code where the - * configuration contains a setting what format long descriptions are. - * - * @codeCoverageIgnore Will be removed soon, in favor of adapters at - * PhpDocumentor itself that will process text in various formats. - * - * @return string - */ - public function getFormattedContents() - { - $result = $this->contents; - - // if the long description contains a plain HTML <code> element, surround - // it with a pre element. Please note that we explicitly used str_replace - // and not preg_replace to gain performance - if (strpos($result, '<code>') !== false) { - $result = str_replace( - array('<code>', "<code>\r\n", "<code>\n", "<code>\r", '</code>'), - array('<pre><code>', '<code>', '<code>', '<code>', '</code></pre>'), - $result - ); - } - - if (class_exists('dflydev\markdown\MarkdownExtraParser')) { - $markdown = new \dflydev\markdown\MarkdownExtraParser(); - $result = $markdown->transformMarkdown($result); - } - - return trim($result); - } - - /** - * Gets the docblock this tag belongs to. - * - * @return DocBlock The docblock this description belongs to. - */ - public function getDocBlock() - { - return $this->docblock; - } - - /** - * Sets the docblock this tag belongs to. - * - * @param DocBlock $docblock The new docblock this description belongs to. - * Setting NULL removes any association. - * - * @return $this - */ - public function setDocBlock(DocBlock $docblock = null) - { - $this->docblock = $docblock; - - return $this; - } - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection - * and implement it. - * - * @return void - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the exported information (we should use the export static method - * BUT this throws an exception at this point). - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public function __toString() - { - return 'Not yet implemented'; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php deleted file mode 100644 index 966ed44d7..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -/** - * The location a DocBlock occurs within a file. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Location -{ - /** @var int Line where the DocBlock text starts. */ - protected $lineNumber = 0; - - /** @var int Column where the DocBlock text starts. */ - protected $columnNumber = 0; - - public function __construct( - $lineNumber = 0, - $columnNumber = 0 - ) { - $this->setLineNumber($lineNumber)->setColumnNumber($columnNumber); - } - - /** - * @return int Line where the DocBlock text starts. - */ - public function getLineNumber() - { - return $this->lineNumber; - } - - /** - * - * @param type $lineNumber - * @return $this - */ - public function setLineNumber($lineNumber) - { - $this->lineNumber = (int)$lineNumber; - - return $this; - } - - /** - * @return int Column where the DocBlock text starts. - */ - public function getColumnNumber() - { - return $this->columnNumber; - } - - /** - * - * @param int $columnNumber - * @return $this - */ - public function setColumnNumber($columnNumber) - { - $this->columnNumber = (int)$columnNumber; - - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php deleted file mode 100644 index e32e813c7..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php +++ /dev/null @@ -1,379 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; - -/** - * Parses a tag definition for a DocBlock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Tag implements \Reflector -{ - /** - * PCRE regular expression matching a tag name. - */ - const REGEX_TAGNAME = '[\w\-\_\\\\]+'; - - /** @var string Name of the tag */ - protected $tag = ''; - - /** - * @var string|null Content of the tag. - * When set to NULL, it means it needs to be regenerated. - */ - protected $content = ''; - - /** @var string Description of the content of this tag */ - protected $description = ''; - - /** - * @var array|null The description, as an array of strings and Tag objects. - * When set to NULL, it means it needs to be regenerated. - */ - protected $parsedDescription = null; - - /** @var Location Location of the tag. */ - protected $location = null; - - /** @var DocBlock The DocBlock which this tag belongs to. */ - protected $docblock = null; - - /** - * @var array An array with a tag as a key, and an FQCN to a class that - * handles it as an array value. The class is expected to inherit this - * class. - */ - private static $tagHandlerMappings = array( - 'author' - => '\phpDocumentor\Reflection\DocBlock\Tag\AuthorTag', - 'covers' - => '\phpDocumentor\Reflection\DocBlock\Tag\CoversTag', - 'deprecated' - => '\phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag', - 'example' - => '\phpDocumentor\Reflection\DocBlock\Tag\ExampleTag', - 'link' - => '\phpDocumentor\Reflection\DocBlock\Tag\LinkTag', - 'method' - => '\phpDocumentor\Reflection\DocBlock\Tag\MethodTag', - 'param' - => '\phpDocumentor\Reflection\DocBlock\Tag\ParamTag', - 'property-read' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyReadTag', - 'property' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyTag', - 'property-write' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyWriteTag', - 'return' - => '\phpDocumentor\Reflection\DocBlock\Tag\ReturnTag', - 'see' - => '\phpDocumentor\Reflection\DocBlock\Tag\SeeTag', - 'since' - => '\phpDocumentor\Reflection\DocBlock\Tag\SinceTag', - 'source' - => '\phpDocumentor\Reflection\DocBlock\Tag\SourceTag', - 'throw' - => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', - 'throws' - => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', - 'uses' - => '\phpDocumentor\Reflection\DocBlock\Tag\UsesTag', - 'var' - => '\phpDocumentor\Reflection\DocBlock\Tag\VarTag', - 'version' - => '\phpDocumentor\Reflection\DocBlock\Tag\VersionTag' - ); - - /** - * Factory method responsible for instantiating the correct sub type. - * - * @param string $tag_line The text for this tag, including description. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. - * - * @throws \InvalidArgumentException if an invalid tag line was presented. - * - * @return static A new tag object. - */ - final public static function createInstance( - $tag_line, - DocBlock $docblock = null, - Location $location = null - ) { - if (!preg_match( - '/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', - $tag_line, - $matches - )) { - throw new \InvalidArgumentException( - 'Invalid tag_line detected: ' . $tag_line - ); - } - - $handler = __CLASS__; - if (isset(self::$tagHandlerMappings[$matches[1]])) { - $handler = self::$tagHandlerMappings[$matches[1]]; - } elseif (isset($docblock)) { - $tagName = (string)new Type\Collection( - array($matches[1]), - $docblock->getContext() - ); - - if (isset(self::$tagHandlerMappings[$tagName])) { - $handler = self::$tagHandlerMappings[$tagName]; - } - } - - return new $handler( - $matches[1], - isset($matches[2]) ? $matches[2] : '', - $docblock, - $location - ); - } - - /** - * Registers a handler for tags. - * - * Registers a handler for tags. The class specified is autoloaded if it's - * not available. It must inherit from this class. - * - * @param string $tag Name of tag to regiser a handler for. When - * registering a namespaced tag, the full name, along with a prefixing - * slash MUST be provided. - * @param string|null $handler FQCN of handler. Specifing NULL removes the - * handler for the specified tag, if any. - * - * @return bool TRUE on success, FALSE on failure. - */ - final public static function registerTagHandler($tag, $handler) - { - $tag = trim((string)$tag); - - if (null === $handler) { - unset(self::$tagHandlerMappings[$tag]); - return true; - } - - if ('' !== $tag - && class_exists($handler, true) - && is_subclass_of($handler, __CLASS__) - && !strpos($tag, '\\') //Accept no slash, and 1st slash at offset 0. - ) { - self::$tagHandlerMappings[$tag] = $handler; - return true; - } - - return false; - } - - /** - * Parses a tag and populates the member variables. - * - * @param string $name Name of the tag. - * @param string $content The contents of the given tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. - */ - public function __construct( - $name, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - $this - ->setName($name) - ->setContent($content) - ->setDocBlock($docblock) - ->setLocation($location); - } - - /** - * Gets the name of this tag. - * - * @return string The name of this tag. - */ - public function getName() - { - return $this->tag; - } - - /** - * Sets the name of this tag. - * - * @param string $name The new name of this tag. - * - * @return $this - * @throws \InvalidArgumentException When an invalid tag name is provided. - */ - public function setName($name) - { - if (!preg_match('/^' . self::REGEX_TAGNAME . '$/u', $name)) { - throw new \InvalidArgumentException( - 'Invalid tag name supplied: ' . $name - ); - } - - $this->tag = $name; - - return $this; - } - - /** - * Gets the content of this tag. - * - * @return string - */ - public function getContent() - { - if (null === $this->content) { - $this->content = $this->description; - } - - return $this->content; - } - - /** - * Sets the content of this tag. - * - * @param string $content The new content of this tag. - * - * @return $this - */ - public function setContent($content) - { - $this->setDescription($content); - $this->content = $content; - - return $this; - } - - /** - * Gets the description component of this tag. - * - * @return string - */ - public function getDescription() - { - return $this->description; - } - - /** - * Sets the description component of this tag. - * - * @param string $description The new description component of this tag. - * - * @return $this - */ - public function setDescription($description) - { - $this->content = null; - $this->parsedDescription = null; - $this->description = trim($description); - - return $this; - } - - /** - * Gets the parsed text of this description. - * - * @return array An array of strings and tag objects, in the order they - * occur within the description. - */ - public function getParsedDescription() - { - if (null === $this->parsedDescription) { - $description = new Description($this->description, $this->docblock); - $this->parsedDescription = $description->getParsedContents(); - } - return $this->parsedDescription; - } - - /** - * Gets the docblock this tag belongs to. - * - * @return DocBlock The docblock this tag belongs to. - */ - public function getDocBlock() - { - return $this->docblock; - } - - /** - * Sets the docblock this tag belongs to. - * - * @param DocBlock $docblock The new docblock this tag belongs to. Setting - * NULL removes any association. - * - * @return $this - */ - public function setDocBlock(DocBlock $docblock = null) - { - $this->docblock = $docblock; - - return $this; - } - - /** - * Gets the location of the tag. - * - * @return Location The tag's location. - */ - public function getLocation() - { - return $this->location; - } - - /** - * Sets the location of the tag. - * - * @param Location $location The new location of the tag. - * - * @return $this - */ - public function setLocation(Location $location = null) - { - $this->location = $location; - - return $this; - } - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection and implement it. - * - * @return void - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the exported information (we should use the export static method - * BUT this throws an exception at this point). - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public function __toString() - { - return 'Not yet implemented'; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php deleted file mode 100644 index bacf52ebe..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php +++ /dev/null @@ -1,131 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for an @author tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class AuthorTag extends Tag -{ - /** - * PCRE regular expression matching any valid value for the name component. - */ - const REGEX_AUTHOR_NAME = '[^\<]*'; - - /** - * PCRE regular expression matching any valid value for the email component. - */ - const REGEX_AUTHOR_EMAIL = '[^\>]*'; - - /** @var string The name of the author */ - protected $authorName = ''; - - /** @var string The email of the author */ - protected $authorEmail = ''; - - public function getContent() - { - if (null === $this->content) { - $this->content = $this->authorName; - if ('' != $this->authorEmail) { - $this->content .= "<{$this->authorEmail}>"; - } - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - if (preg_match( - '/^(' . self::REGEX_AUTHOR_NAME . - ')(\<(' . self::REGEX_AUTHOR_EMAIL . - ')\>)?$/u', - $this->description, - $matches - )) { - $this->authorName = trim($matches[1]); - if (isset($matches[3])) { - $this->authorEmail = trim($matches[3]); - } - } - - return $this; - } - - /** - * Gets the author's name. - * - * @return string The author's name. - */ - public function getAuthorName() - { - return $this->authorName; - } - - /** - * Sets the author's name. - * - * @param string $authorName The new author name. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setAuthorName($authorName) - { - $this->content = null; - $this->authorName - = preg_match('/^' . self::REGEX_AUTHOR_NAME . '$/u', $authorName) - ? $authorName : ''; - - return $this; - } - - /** - * Gets the author's email. - * - * @return string The author's email. - */ - public function getAuthorEmail() - { - return $this->authorEmail; - } - - /** - * Sets the author's email. - * - * @param string $authorEmail The new author email. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setAuthorEmail($authorEmail) - { - $this->authorEmail - = preg_match('/^' . self::REGEX_AUTHOR_EMAIL . '$/u', $authorEmail) - ? $authorEmail : ''; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php deleted file mode 100644 index bd31b56bf..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @covers tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class CoversTag extends SeeTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php deleted file mode 100644 index 7226316b7..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; - -/** - * Reflection class for a @deprecated tag in a Docblock. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DeprecatedTag extends VersionTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php deleted file mode 100644 index 9173de453..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php +++ /dev/null @@ -1,156 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @example tag in a Docblock. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ExampleTag extends SourceTag -{ - /** - * @var string Path to a file to use as an example. - * May also be an absolute URI. - */ - protected $filePath = ''; - - /** - * @var bool Whether the file path component represents an URI. - * This determines how the file portion appears at {@link getContent()}. - */ - protected $isURI = false; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $filePath = ''; - if ($this->isURI) { - if (false === strpos($this->filePath, ':')) { - $filePath = str_replace( - '%2F', - '/', - rawurlencode($this->filePath) - ); - } else { - $filePath = $this->filePath; - } - } else { - $filePath = '"' . $this->filePath . '"'; - } - - $this->content = $filePath . ' ' . $this->getContent(); - } - - return $this->content; - } - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - if (preg_match( - '/^ - # File component - (?: - # File path in quotes - \"([^\"]+)\" - | - # File URI - (\S+) - ) - # Remaining content (parsed by SourceTag) - (?:\s+(.*))? - $/sux', - $this->description, - $matches - )) { - if ('' !== $matches[1]) { - $this->setFilePath($matches[1]); - } else { - $this->setFileURI($matches[2]); - } - - if (isset($matches[3])) { - parent::setContent($matches[3]); - } else { - $this->setDescription(''); - } - $this->content = $content; - } - - return $this; - } - - /** - * Returns the file path. - * - * @return string Path to a file to use as an example. - * May also be an absolute URI. - */ - public function getFilePath() - { - return $this->filePath; - } - - /** - * Sets the file path. - * - * @param string $filePath The new file path to use for the example. - * - * @return $this - */ - public function setFilePath($filePath) - { - $this->isURI = false; - $this->filePath = trim($filePath); - - $this->content = null; - return $this; - } - - /** - * Sets the file path as an URI. - * - * This function is equivalent to {@link setFilePath()}, except that it - * convers an URI to a file path before that. - * - * There is no getFileURI(), as {@link getFilePath()} is compatible. - * - * @param type $uri The new file URI to use as an example. - */ - public function setFileURI($uri) - { - $this->isURI = true; - if (false === strpos($uri, ':')) { - //Relative URL - $this->filePath = rawurldecode( - str_replace(array('/', '\\'), '%2F', $uri) - ); - } else { - //Absolute URL or URI. - $this->filePath = $uri; - } - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php deleted file mode 100644 index f79f25dd8..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Ben Selby <benmatselby@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @link tag in a Docblock. - * - * @author Ben Selby <benmatselby@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class LinkTag extends Tag -{ - /** @var string */ - protected $link = ''; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->link} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - $parts = preg_split('/\s+/Su', $this->description, 2); - - $this->link = $parts[0]; - - $this->setDescription(isset($parts[1]) ? $parts[1] : $parts[0]); - - $this->content = $content; - return $this; - } - - /** - * Gets the link - * - * @return string - */ - public function getLink() - { - return $this->link; - } - - /** - * Sets the link - * - * @param string $link The link - * - * @return $this - */ - public function setLink($link) - { - $this->link = $link; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php deleted file mode 100644 index ec4694260..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @method in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class MethodTag extends ReturnTag -{ - - /** @var string */ - protected $method_name = ''; - - /** @var string */ - protected $arguments = ''; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = $this->type . - " {$this->method_name}({$this->arguments}) " . - $this->description; - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - // 1. none or more whitespace - // 2. optionally a word with underscores followed by whitespace : as - // type for the return value - // 3. then optionally a word with underscores followed by () and - // whitespace : as method name as used by phpDocumentor - // 4. then a word with underscores, followed by ( and any character - // until a ) and whitespace : as method name with signature - // 5. any remaining text : as description - if (preg_match( - '/^ - # Return type - (?: - ([\w\|_\\\\]+) - \s+ - )? - # Legacy method name (not captured) - (?: - [\w_]+\(\)\s+ - )? - # Method name - ([\w\|_\\\\]+) - # Arguments - \(([^\)]*)\) - \s* - # Description - (.*) - $/sux', - $this->description, - $matches - )) { - list( - , - $this->type, - $this->method_name, - $this->arguments, - $this->description - ) = $matches; - if (!$this->type) { - $this->type = 'void'; - } - $this->parsedDescription = null; - } else { - echo date('c') . ' ERR (3): @method contained invalid contents: ' - . $this->content . PHP_EOL; - } - - return $this; - } - - /** - * Sets the name of this method. - * - * @param string $method_name The name of the method. - * - * @return $this - */ - public function setMethodName($method_name) - { - $this->method_name = $method_name; - - $this->content = null; - return $this; - } - - /** - * Retrieves the method name. - * - * @return string - */ - public function getMethodName() - { - return $this->method_name; - } - - /** - * Sets the arguments for this method. - * - * @param string $arguments A comma-separated arguments line. - * - * @return void - */ - public function setArguments($arguments) - { - $this->arguments = $arguments; - - $this->content = null; - return $this; - } - - /** - * Returns an array containing each argument as array of type and name. - * - * Please note that the argument sub-array may only contain 1 element if no - * type was specified. - * - * @return string[] - */ - public function getArguments() - { - if (empty($this->arguments)) { - return array(); - } - - $arguments = explode(',', $this->arguments); - foreach ($arguments as $key => $value) { - $arguments[$key] = explode(' ', trim($value)); - } - - return $arguments; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php deleted file mode 100644 index f544a9b20..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @param tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ParamTag extends ReturnTag -{ - /** - * @var string - */ - protected $variableName = ''; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content - = "{$this->type} {$this->variableName} {$this->description}"; - } - return $this->content; - } - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - $parts = preg_split( - '/(\s+)/Su', - $this->description, - 3, - PREG_SPLIT_DELIM_CAPTURE - ); - - // if the first item that is encountered is not a variable; it is a type - if (isset($parts[0]) - && (strlen($parts[0]) > 0) - && ($parts[0][0] !== '$') - ) { - $this->type = array_shift($parts); - array_shift($parts); - } - - // if the next item starts with a $ it must be the variable name - if (isset($parts[0]) - && (strlen($parts[0]) > 0) - && ($parts[0][0] == '$') - ) { - $this->variableName = array_shift($parts); - array_shift($parts); - } - - $this->setDescription(implode('', $parts)); - - $this->content = $content; - return $this; - } - - /** - * Returns the variable's name. - * - * @return string - */ - public function getVariableName() - { - return $this->variableName; - } - - /** - * Sets the variable's name. - * - * @param string $name The new name for this variable. - * - * @return $this - */ - public function setVariableName($name) - { - $this->variableName = $name; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php deleted file mode 100644 index 33406026a..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property-read tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyReadTag extends PropertyTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php deleted file mode 100644 index 288ecff87..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyTag extends ParamTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php deleted file mode 100644 index ec4e866d4..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property-write tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyWriteTag extends PropertyTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php deleted file mode 100644 index 60fbd1d2f..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Type\Collection; - -/** - * Reflection class for a @return tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ReturnTag extends Tag -{ - /** @var string The raw type component. */ - protected $type = ''; - - /** @var Collection The parsed type component. */ - protected $types = null; - - /** - * {@inheritdoc} - */ - public function getCotnent() - { - if (null === $this->content) { - $this->content = "{$this->type} {$this->description}"; - } - - return $this->cotnent; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - - $parts = preg_split('/\s+/Su', $this->description, 2); - - // any output is considered a type - $this->type = $parts[0]; - - $this->setDescription(isset($parts[1]) ? $parts[1] : ''); - - $this->content = $content; - return $this; - } - - /** - * Returns the unique types of the variable. - * - * @return string[] - */ - public function getTypes() - { - return $this->getTypesCollection()->getArrayCopy(); - } - - /** - * Returns the type section of the variable. - * - * @return string - */ - public function getType() - { - return (string) $this->getTypesCollection(); - } - - /** - * Returns the type collection. - * - * @return void - */ - protected function getTypesCollection() - { - if (null === $this->types) { - $this->types = new Collection( - array($this->type), - $this->docblock ? $this->docblock->getContext() : null - ); - } - return $this->types; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php deleted file mode 100644 index 4f5f22ce1..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @see tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SeeTag extends Tag -{ - /** @var string */ - protected $refers = null; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->refers} {$this->description}"; - } - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - $parts = preg_split('/\s+/Su', $this->description, 2); - - // any output is considered a type - $this->refers = $parts[0]; - - $this->setDescription(isset($parts[1]) ? $parts[1] : ''); - - $this->content = $content; - return $this; - } - - /** - * Gets the structural element this tag refers to. - * - * @return string - */ - public function getReference() - { - return $this->refers; - } - - /** - * Sets the structural element this tag refers to. - * - * @param string $refers The new type this tag refers to. - * - * @return $this - */ - public function setReference($refers) - { - $this->refers = $refers; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php deleted file mode 100644 index ba009c447..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; - -/** - * Reflection class for a @since tag in a Docblock. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SinceTag extends VersionTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php deleted file mode 100644 index 3400220ea..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php +++ /dev/null @@ -1,137 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @source tag in a Docblock. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SourceTag extends Tag -{ - /** - * @var int The starting line, relative to the structural element's - * location. - */ - protected $startingLine = 1; - - /** - * @var int|null The number of lines, relative to the starting line. NULL - * means "to the end". - */ - protected $lineCount = null; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content - = "{$this->startingLine} {$this->lineCount} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - if (preg_match( - '/^ - # Starting line - ([1-9]\d*) - \s* - # Number of lines - (?: - ((?1)) - \s+ - )? - # Description - (.*) - $/sux', - $this->description, - $matches - )) { - $this->startingLine = (int)$matches[1]; - if (isset($matches[2]) && '' !== $matches[2]) { - $this->lineCount = (int)$matches[2]; - } - $this->setDescription($matches[3]); - $this->content = $content; - } - - return $this; - } - - /** - * Gets the starting line. - * - * @return int The starting line, relative to the structural element's - * location. - */ - public function getStartingLine() - { - return $this->startingLine; - } - - /** - * Sets the starting line. - * - * @param int $startingLine The new starting line, relative to the - * structural element's location. - * - * @return $this - */ - public function setStartingLine($startingLine) - { - $this->startingLine = $startingLine; - - $this->content = null; - return $this; - } - - /** - * Returns the number of lines. - * - * @return int|null The number of lines, relative to the starting line. NULL - * means "to the end". - */ - public function getLineCount() - { - return $this->lineCount; - } - - /** - * Sets the number of lines. - * - * @param int|null $lineCount The new number of lines, relative to the - * starting line. NULL means "to the end". - * - * @return $this - */ - public function setLineCount($lineCount) - { - $this->lineCount = $lineCount; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php deleted file mode 100644 index 58ee44a42..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @throws tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ThrowsTag extends ReturnTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php deleted file mode 100644 index da0d66381..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @uses tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class UsesTag extends SeeTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php deleted file mode 100644 index 236b2c8b0..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @var tag in a Docblock. - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VarTag extends ParamTag -{ -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php deleted file mode 100644 index 260f6984f..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php +++ /dev/null @@ -1,108 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @version tag in a Docblock. - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VersionTag extends Tag -{ - /** - * PCRE regular expression matching a version vector. - * Assumes the "x" modifier. - */ - const REGEX_VECTOR = '(?: - # Normal release vectors. - \d\S* - | - # VCS version vectors. Per PHPCS, they are expected to - # follow the form of the VCS name, followed by ":", followed - # by the version vector itself. - # By convention, popular VCSes like CVS, SVN and GIT use "$" - # around the actual version vector. - [^\s\:]+\:\s*\$[^\$]+\$ - )'; - - /** @var string The version vector. */ - protected $version = ''; - - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->version} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - - if (preg_match( - '/^ - # The version vector - (' . self::REGEX_VECTOR . ') - \s* - # The description - (.+)? - $/sux', - $this->description, - $matches - )) { - $this->version = $matches[1]; - $this->setDescription(isset($matches[2]) ? $matches[2] : ''); - $this->content = $content; - } - - return $this; - } - - /** - * Gets the version section of the tag. - * - * @return string The version section of the tag. - */ - public function getVersion() - { - return $this->version; - } - - /** - * Sets the version section of the tag. - * - * @param string $version The new version section of the tag. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setVersion($version) - { - $this->version - = preg_match('/^' . self::REGEX_VECTOR . '$/ux', $version) - ? $version - : ''; - - $this->content = null; - return $this; - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php deleted file mode 100644 index 90ead3ff4..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php -/** - * phpDocumentor - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Type; - -use phpDocumentor\Reflection\DocBlock\Context; - -/** - * Collection - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Collection extends \ArrayObject -{ - /** @var string Definition of the OR operator for types */ - const OPERATOR_OR = '|'; - - /** @var string Definition of the ARRAY operator for types */ - const OPERATOR_ARRAY = '[]'; - - /** @var string Definition of the NAMESPACE operator in PHP */ - const OPERATOR_NAMESPACE = '\\'; - - /** @var string[] List of recognized keywords */ - protected static $keywords = array( - 'string', 'int', 'integer', 'bool', 'boolean', 'float', 'double', - 'object', 'mixed', 'array', 'resource', 'void', 'null', 'scalar', - 'callback', 'callable', 'false', 'true', 'self', '$this', 'static' - ); - - /** - * Current invoking location. - * - * This is used to prepend to type with a relative location. - * May also be 'default' or 'global', in which case they are ignored. - * - * @var Context - */ - protected $context = null; - - /** - * Registers the namespace and aliases; uses that to add and expand the - * given types. - * - * @param string[] $types Array containing a list of types to add to this - * container. - * @param Context $location The current invoking location. - */ - public function __construct( - array $types = array(), - Context $context = null - ) { - $this->context = null === $context ? new Context() : $context; - - foreach ($types as $type) { - $this->add($type); - } - } - - /** - * Returns the current invoking location. - * - * @return Context - */ - public function getContext() - { - return $this->context; - } - - /** - * Adds a new type to the collection and expands it if it contains a - * relative namespace. - * - * If a class in the type contains a relative namespace than this collection - * will try to expand that into a FQCN. - * - * @param string $type A 'Type' as defined in the phpDocumentor - * documentation. - * - * @throws \InvalidArgumentException if a non-string argument is passed. - * - * @see http://phpdoc.org/docs/latest/for-users/types.html for the - * definition of a type. - * - * @return void - */ - public function add($type) - { - if (!is_string($type)) { - throw new \InvalidArgumentException( - 'A type should be represented by a string, received: ' - .var_export($type, true) - ); - } - - // separate the type by the OR operator - $type_parts = explode(self::OPERATOR_OR, $type); - foreach ($type_parts as $part) { - $expanded_type = $this->expand($part); - if ($expanded_type) { - $this[] = $expanded_type; - } - } - } - - /** - * Returns a string representation of the collection. - * - * @return string The resolved types across the collection, separated with - * {@link self::OPERATOR_OR}. - */ - public function __toString() - { - return implode(self::OPERATOR_OR, $this->getArrayCopy()); - } - - /** - * Analyzes the given type and returns the FQCN variant. - * - * When a type is provided this method checks whether it is not a keyword or - * Fully Qualified Class Name. If so it will use the given namespace and - * aliases to expand the type to a FQCN representation. - * - * This method only works as expected if the namespace and aliases are set; - * no dynamic reflection is being performed here. - * - * @param string $type The relative or absolute type. - * - * @uses getNamespace to determine with what to prefix the type name. - * @uses getNamespaceAliases to check whether the first part of the relative - * type name should not be replaced with another namespace. - * - * @return string - */ - protected function expand($type) - { - $type = trim($type); - if (!$type) { - return ''; - } - - if ($this->isTypeAnArray($type)) { - return $this->expand(substr($type, 0, -2)) . self::OPERATOR_ARRAY; - } - - if ($this->isRelativeType($type) && !$this->isTypeAKeyword($type)) { - $type_parts = explode(self::OPERATOR_NAMESPACE, $type, 2); - - $namespace_aliases = $this->context->getNamespaceAliases(); - // if the first segment is not an alias; prepend namespace name and - // return - if (!isset($namespace_aliases[$type_parts[0]])) { - $namespace = $this->context->getNamespace(); - if ('' !== $namespace) { - $namespace .= self::OPERATOR_NAMESPACE; - } - return self::OPERATOR_NAMESPACE . $namespace . $type; - } - - $type_parts[0] = $namespace_aliases[$type_parts[0]]; - $type = implode(self::OPERATOR_NAMESPACE, $type_parts); - } - - return $type; - } - - /** - * Detects whether the given type represents an array. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isTypeAnArray($type) - { - return substr($type, -2) === self::OPERATOR_ARRAY; - } - - /** - * Detects whether the given type represents a PHPDoc keyword. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isTypeAKeyword($type) - { - return in_array(strtolower($type), static::$keywords, true); - } - - /** - * Detects whether the given type represents a relative or absolute path. - * - * This method will detect keywords as being absolute; even though they are - * not preceeded by a namespace separator. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isRelativeType($type) - { - return ($type[0] !== self::OPERATOR_NAMESPACE) - || $this->isTypeAKeyword($type); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php deleted file mode 100644 index a6ca7b37e..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php +++ /dev/null @@ -1,245 +0,0 @@ -<?php -/** - * phpDocumentor Description Test - * - * PHP Version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Description - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DescriptionTest extends \PHPUnit_Framework_TestCase -{ - public function testConstruct() - { - $fixture = <<<LONGDESC -This is text for a description. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(1, $parsedContents); - $this->assertSame($fixture, $parsedContents[0]); - } - - public function testInlineTagParsing() - { - $fixture = <<<LONGDESC -This is text for a {@link http://phpdoc.org/ description} that uses inline -tags. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - $this->assertSame('This is text for a ', $parsedContents[0]); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag\LinkTag', - $parsedContents[1] - ); - $this->assertSame( - ' that uses inline -tags.', - $parsedContents[2] - ); - } - - public function testInlineTagAtStartParsing() - { - $fixture = <<<LONGDESC -{@link http://phpdoc.org/ This} is text for a description that uses inline -tags. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - - $this->assertSame('', $parsedContents[0]); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag\LinkTag', - $parsedContents[1] - ); - $this->assertSame( - ' is text for a description that uses inline -tags.', - $parsedContents[2] - ); - } - - public function testNestedInlineTagParsing() - { - $fixture = <<<LONGDESC -This is text for a description with {@internal inline tag with -{@link http://phpdoc.org another inline tag} in it}. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - - $this->assertSame( - 'This is text for a description with ', - $parsedContents[0] - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $parsedContents[1] - ); - $this->assertSame('.', $parsedContents[2]); - - $parsedDescription = $parsedContents[1]->getParsedDescription(); - $this->assertCount(3, $parsedDescription); - $this->assertSame("inline tag with\n", $parsedDescription[0]); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag\LinkTag', - $parsedDescription[1] - ); - $this->assertSame(' in it', $parsedDescription[2]); - } - - public function testLiteralOpeningDelimiter() - { - $fixture = <<<LONGDESC -This is text for a description containing { that is literal. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(1, $parsedContents); - $this->assertSame($fixture, $parsedContents[0]); - } - - public function testNestedLiteralOpeningDelimiter() - { - $fixture = <<<LONGDESC -This is text for a description containing {@internal inline tag that has { that -is literal}. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - $this->assertSame( - 'This is text for a description containing ', - $parsedContents[0] - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $parsedContents[1] - ); - $this->assertSame('.', $parsedContents[2]); - - $this->assertSame( - array('inline tag that has { that -is literal'), - $parsedContents[1]->getParsedDescription() - ); - } - - public function testLiteralClosingDelimiter() - { - $fixture = <<<LONGDESC -This is text for a description with {} that is not a tag. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(1, $parsedContents); - $this->assertSame( - 'This is text for a description with } that is not a tag.', - $parsedContents[0] - ); - } - - public function testNestedLiteralClosingDelimiter() - { - $fixture = <<<LONGDESC -This is text for a description with {@internal inline tag with {} that is not an -inline tag}. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - $this->assertSame( - 'This is text for a description with ', - $parsedContents[0] - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $parsedContents[1] - ); - $this->assertSame('.', $parsedContents[2]); - - $this->assertSame( - array('inline tag with } that is not an -inline tag'), - $parsedContents[1]->getParsedDescription() - ); - } - - public function testInlineTagEscapingSequence() - { - $fixture = <<<LONGDESC -This is text for a description with literal {{@}link}. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(1, $parsedContents); - $this->assertSame( - 'This is text for a description with literal {@link}.', - $parsedContents[0] - ); - } - - public function testNestedInlineTagEscapingSequence() - { - $fixture = <<<LONGDESC -This is text for a description with an {@internal inline tag with literal -{{@}link{} in it}. -LONGDESC; - $object = new Description($fixture); - $this->assertSame($fixture, $object->getContents()); - - $parsedContents = $object->getParsedContents(); - $this->assertCount(3, $parsedContents); - $this->assertSame( - 'This is text for a description with an ', - $parsedContents[0] - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $parsedContents[1] - ); - $this->assertSame('.', $parsedContents[2]); - - $this->assertSame( - array('inline tag with literal -{@link} in it'), - $parsedContents[1]->getParsedDescription() - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php deleted file mode 100644 index ff257aa19..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * phpDocumentor Covers Tag Test - * - * PHP version 5.3 - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\CoversTag - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class CoversTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\CoversTag can create - * a link for the covers doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exReference - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\CoversTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exReference - ) { - $tag = new CoversTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exReference, $tag->getReference()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exReference - return array( - array( - 'covers', - 'Foo::bar()', - 'Foo::bar()', - '', - 'Foo::bar()' - ), - array( - 'covers', - 'Foo::bar() Testing', - 'Foo::bar() Testing', - 'Testing', - 'Foo::bar()', - ), - array( - 'covers', - 'Foo::bar() Testing comments', - 'Foo::bar() Testing comments', - 'Testing comments', - 'Foo::bar()', - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php deleted file mode 100644 index 7a75e79ce..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * phpDocumentor Deprecated Tag Test - * - * PHP version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DeprecatedTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create - * a link for the @deprecated doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exDescription - * @param string $exVersion - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exVersion - ) { - $tag = new DeprecatedTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exVersion, $tag->getVersion()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exVersion - return array( - array( - 'deprecated', - '1.0 First release.', - '1.0 First release.', - 'First release.', - '1.0' - ), - array( - 'deprecated', - "1.0\nFirst release.", - "1.0\nFirst release.", - 'First release.', - '1.0' - ), - array( - 'deprecated', - "1.0\nFirst\nrelease.", - "1.0\nFirst\nrelease.", - "First\nrelease.", - '1.0' - ), - array( - 'deprecated', - 'Unfinished release', - 'Unfinished release', - 'Unfinished release', - '' - ), - array( - 'deprecated', - '1.0', - '1.0', - '', - '1.0' - ), - array( - 'deprecated', - 'GIT: $Id$', - 'GIT: $Id$', - '', - 'GIT: $Id$' - ), - array( - 'deprecated', - 'GIT: $Id$ Dev build', - 'GIT: $Id$ Dev build', - 'Dev build', - 'GIT: $Id$' - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php deleted file mode 100644 index 519a61b3a..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php +++ /dev/null @@ -1,203 +0,0 @@ -<?php -/** - * phpDocumentor Example Tag Test - * - * PHP version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ExampleTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\SourceTag can - * understand the @source DocBlock. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exStartingLine - * @param string $exLineCount - * @param string $exFilepath - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ExampleTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exStartingLine, - $exLineCount, - $exFilePath - ) { - $tag = new ExampleTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exStartingLine, $tag->getStartingLine()); - $this->assertEquals($exLineCount, $tag->getLineCount()); - $this->assertEquals($exFilePath, $tag->getFilePath()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, - // $content, - // $exContent, - // $exDescription, - // $exStartingLine, - // $exLineCount, - // $exFilePath - return array( - array( - 'example', - 'file.php', - 'file.php', - '', - 1, - null, - 'file.php' - ), - array( - 'example', - 'Testing comments', - 'Testing comments', - 'comments', - 1, - null, - 'Testing' - ), - array( - 'example', - 'file.php 2 Testing', - 'file.php 2 Testing', - 'Testing', - 2, - null, - 'file.php' - ), - array( - 'example', - 'file.php 2 3 Testing comments', - 'file.php 2 3 Testing comments', - 'Testing comments', - 2, - 3, - 'file.php' - ), - array( - 'example', - 'file.php 2 -1 Testing comments', - 'file.php 2 -1 Testing comments', - '-1 Testing comments', - 2, - null, - 'file.php' - ), - array( - 'example', - 'file.php -1 1 Testing comments', - 'file.php -1 1 Testing comments', - '-1 1 Testing comments', - 1, - null, - 'file.php' - ), - array( - 'example', - '"file with spaces.php" Testing comments', - '"file with spaces.php" Testing comments', - 'Testing comments', - 1, - null, - 'file with spaces.php' - ), - array( - 'example', - '"file with spaces.php" 2 Testing comments', - '"file with spaces.php" 2 Testing comments', - 'Testing comments', - 2, - null, - 'file with spaces.php' - ), - array( - 'example', - '"file with spaces.php" 2 3 Testing comments', - '"file with spaces.php" 2 3 Testing comments', - 'Testing comments', - 2, - 3, - 'file with spaces.php' - ), - array( - 'example', - '"file with spaces.php" 2 -3 Testing comments', - '"file with spaces.php" 2 -3 Testing comments', - '-3 Testing comments', - 2, - null, - 'file with spaces.php' - ), - array( - 'example', - '"file with spaces.php" -2 3 Testing comments', - '"file with spaces.php" -2 3 Testing comments', - '-2 3 Testing comments', - 1, - null, - 'file with spaces.php' - ), - array( - 'example', - 'file%20with%20spaces.php Testing comments', - 'file%20with%20spaces.php Testing comments', - 'Testing comments', - 1, - null, - 'file with spaces.php' - ), - array( - 'example', - 'folder/file%20with%20spaces.php Testing comments', - 'folder/file%20with%20spaces.php Testing comments', - 'Testing comments', - 1, - null, - 'folder/file with spaces.php' - ), - array( - 'example', - 'http://example.com/file%20with%20spaces.php Testing comments', - 'http://example.com/file%20with%20spaces.php Testing comments', - 'Testing comments', - 1, - null, - 'http://example.com/file%20with%20spaces.php' - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php deleted file mode 100644 index 0c64ed086..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php +++ /dev/null @@ -1,87 +0,0 @@ -<?php -/** - * phpDocumentor Link Tag Test - * - * PHP version 5.3 - * - * @author Ben Selby <benmatselby@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\LinkTag - * - * @author Ben Selby <benmatselby@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class LinkTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create - * a link for the @link doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exDescription - * @param string $exLink - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\LinkTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exLink - ) { - $tag = new LinkTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exLink, $tag->getLink()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exLink - return array( - array( - 'link', - 'http://www.phpdoc.org/', - 'http://www.phpdoc.org/', - 'http://www.phpdoc.org/', - 'http://www.phpdoc.org/' - ), - array( - 'link', - 'http://www.phpdoc.org/ Testing', - 'http://www.phpdoc.org/ Testing', - 'Testing', - 'http://www.phpdoc.org/' - ), - array( - 'link', - 'http://www.phpdoc.org/ Testing comments', - 'http://www.phpdoc.org/ Testing comments', - 'Testing comments', - 'http://www.phpdoc.org/' - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php deleted file mode 100644 index 72ccb783f..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php +++ /dev/null @@ -1,127 +0,0 @@ -<?php -/** - * phpDocumentor Method Tag Test - * - * PHP version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\MethodTag - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class MethodTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * @param string $signature The signature to test. - * @param bool $valid Whether the given signature is expected to - * be valid. - * @param string $expected_name The method name that is expected from this - * signature. - * @param string $expected_return The return type that is expected from this - * signature. - * @param bool $paramCount Number of parameters in the signature. - * @param string $description The short description mentioned in the - * signature. - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\MethodTag - * @dataProvider getTestSignatures - * - * @return void - */ - public function testConstruct( - $signature, - $valid, - $expected_name, - $expected_return, - $paramCount, - $description - ) { - ob_start(); - $tag = new MethodTag('method', $signature); - $stdout = ob_get_clean(); - - $this->assertSame( - $valid, - empty($stdout), - 'No error should have been output if the signature is valid' - ); - - if (!$valid) { - return; - } - - $this->assertEquals($expected_name, $tag->getMethodName()); - $this->assertEquals($expected_return, $tag->getType()); - $this->assertEquals($description, $tag->getDescription()); - $this->assertCount($paramCount, $tag->getArguments()); - } - - public function getTestSignatures() - { - return array( - array( - 'foo', - false, 'foo', '', 0, '' - ), - array( - 'foo()', - true, 'foo', 'void', 0, '' - ), - array( - 'foo() description', - true, 'foo', 'void', 0, 'description' - ), - array( - 'int foo()', - true, 'foo', 'int', 0, '' - ), - array( - 'int foo() description', - true, 'foo', 'int', 0, 'description' - ), - array( - 'int foo($a, $b)', - true, 'foo', 'int', 2, '' - ), - array( - 'int foo() foo(int $a, int $b)', - true, 'foo', 'int', 2, '' - ), - array( - 'int foo(int $a, int $b)', - true, 'foo', 'int', 2, '' - ), - array( - 'null|int foo(int $a, int $b)', - true, 'foo', 'null|int', 2, '' - ), - array( - 'int foo(null|int $a, int $b)', - true, 'foo', 'int', 2, '' - ), - array( - '\Exception foo() foo(Exception $a, Exception $b)', - true, 'foo', '\Exception', 2, '' - ), - array( - 'int foo() foo(Exception $a, Exception $b) description', - true, 'foo', 'int', 2, 'description' - ), - array( - 'int foo() foo(\Exception $a, \Exception $b) description', - true, 'foo', 'int', 2, 'description' - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php deleted file mode 100644 index 0e05382fa..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php +++ /dev/null @@ -1,118 +0,0 @@ -<?php -/** - * phpDocumentor Param tag test. - * - * PHP version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\ParamTag - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ParamTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ParamTag can - * understand the @param DocBlock. - * - * @param string $type - * @param string $content - * @param string $extractedType - * @param string $extractedTypes - * @param string $extractedVarName - * @param string $extractedDescription - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ParamTag - * @dataProvider provideDataForConstructor - * - * @return void - */ - public function testConstructorParsesInputsIntoCorrectFields( - $type, - $content, - $extractedType, - $extractedTypes, - $extractedVarName, - $extractedDescription - ) { - $tag = new ParamTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($extractedType, $tag->getType()); - $this->assertEquals($extractedTypes, $tag->getTypes()); - $this->assertEquals($extractedVarName, $tag->getVariableName()); - $this->assertEquals($extractedDescription, $tag->getDescription()); - } - - /** - * Data provider for testConstructorParsesInputsIntoCorrectFields() - * - * @return array - */ - public function provideDataForConstructor() - { - return array( - array('param', 'int', 'int', array('int'), '', ''), - array('param', '$bob', '', array(), '$bob', ''), - array( - 'param', - 'int Number of bobs', - 'int', - array('int'), - '', - 'Number of bobs' - ), - array( - 'param', - 'int $bob', - 'int', - array('int'), - '$bob', - '' - ), - array( - 'param', - 'int $bob Number of bobs', - 'int', - array('int'), - '$bob', - 'Number of bobs' - ), - array( - 'param', - "int Description \n on multiple lines", - 'int', - array('int'), - '', - "Description \n on multiple lines" - ), - array( - 'param', - "int \n\$bob Variable name on a new line", - 'int', - array('int'), - '$bob', - "Variable name on a new line" - ), - array( - 'param', - "\nint \$bob Type on a new line", - 'int', - array('int'), - '$bob', - "Type on a new line" - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php deleted file mode 100644 index 9e2aec0d1..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php +++ /dev/null @@ -1,102 +0,0 @@ -<?php -/** - * phpDocumentor Return tag test. - * - * PHP version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\ReturnTag - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ReturnTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag can - * understand the @return DocBlock. - * - * @param string $type - * @param string $content - * @param string $extractedType - * @param string $extractedTypes - * @param string $extractedDescription - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ReturnTag - * @dataProvider provideDataForConstructor - * - * @return void - */ - public function testConstructorParsesInputsIntoCorrectFields( - $type, - $content, - $extractedType, - $extractedTypes, - $extractedDescription - ) { - $tag = new ReturnTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($extractedType, $tag->getType()); - $this->assertEquals($extractedTypes, $tag->getTypes()); - $this->assertEquals($extractedDescription, $tag->getDescription()); - } - - /** - * Data provider for testConstructorParsesInputsIntoCorrectFields() - * - * @return array - */ - public function provideDataForConstructor() - { - return array( - array('return', '', '', array(), ''), - array('return', 'int', 'int', array('int'), ''), - array( - 'return', - 'int Number of Bobs', - 'int', - array('int'), - 'Number of Bobs' - ), - array( - 'return', - 'int|double Number of Bobs', - 'int|double', - array('int', 'double'), - 'Number of Bobs' - ), - array( - 'return', - "int Number of \n Bobs", - 'int', - array('int'), - "Number of \n Bobs" - ), - array( - 'return', - " int Number of Bobs", - 'int', - array('int'), - "Number of Bobs" - ), - array( - 'return', - "int\nNumber of Bobs", - 'int', - array('int'), - "Number of Bobs" - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php deleted file mode 100644 index 6829b0460..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * phpDocumentor See Tag Test - * - * PHP version 5.3 - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SeeTag - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SeeTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the phpDocumentor_Reflection_DocBlock_Tag_See can create a link - * for the @see doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exReference - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SeeTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exReference - ) { - $tag = new SeeTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exReference, $tag->getReference()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exReference - return array( - array( - 'see', - 'Foo::bar()', - 'Foo::bar()', - '', - 'Foo::bar()' - ), - array( - 'see', - 'Foo::bar() Testing', - 'Foo::bar() Testing', - 'Testing', - 'Foo::bar()', - ), - array( - 'see', - 'Foo::bar() Testing comments', - 'Foo::bar() Testing comments', - 'Testing comments', - 'Foo::bar()', - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php deleted file mode 100644 index 8caf25d1c..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * phpDocumentor Since Tag Test - * - * PHP version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SinceTag - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SinceTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create - * a link for the @since doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exDescription - * @param string $exVersion - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SinceTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exVersion - ) { - $tag = new SinceTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exVersion, $tag->getVersion()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exVersion - return array( - array( - 'since', - '1.0 First release.', - '1.0 First release.', - 'First release.', - '1.0' - ), - array( - 'since', - "1.0\nFirst release.", - "1.0\nFirst release.", - 'First release.', - '1.0' - ), - array( - 'since', - "1.0\nFirst\nrelease.", - "1.0\nFirst\nrelease.", - "First\nrelease.", - '1.0' - ), - array( - 'since', - 'Unfinished release', - 'Unfinished release', - 'Unfinished release', - '' - ), - array( - 'since', - '1.0', - '1.0', - '', - '1.0' - ), - array( - 'since', - 'GIT: $Id$', - 'GIT: $Id$', - '', - 'GIT: $Id$' - ), - array( - 'since', - 'GIT: $Id$ Dev build', - 'GIT: $Id$ Dev build', - 'Dev build', - 'GIT: $Id$' - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php deleted file mode 100644 index 2a40e0aa3..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * phpDocumentor Source Tag Test - * - * PHP version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\SourceTag - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SourceTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\SourceTag can - * understand the @source DocBlock. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exStartingLine - * @param string $exLineCount - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\SourceTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exStartingLine, - $exLineCount - ) { - $tag = new SourceTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exStartingLine, $tag->getStartingLine()); - $this->assertEquals($exLineCount, $tag->getLineCount()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exStartingLine, $exLineCount - return array( - array( - 'source', - '2', - '2', - '', - 2, - null - ), - array( - 'source', - 'Testing', - 'Testing', - 'Testing', - 1, - null - ), - array( - 'source', - '2 Testing', - '2 Testing', - 'Testing', - 2, - null - ), - array( - 'source', - '2 3 Testing comments', - '2 3 Testing comments', - 'Testing comments', - 2, - 3 - ), - array( - 'source', - '2 -1 Testing comments', - '2 -1 Testing comments', - '-1 Testing comments', - 2, - null - ), - array( - 'source', - '-1 1 Testing comments', - '-1 1 Testing comments', - '-1 1 Testing comments', - 1, - null - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php deleted file mode 100644 index 3c669d558..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php +++ /dev/null @@ -1,102 +0,0 @@ -<?php -/** - * phpDocumentor Throws tag test. - * - * PHP version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\ThrowsTag - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ThrowsTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag can - * understand the @throws DocBlock. - * - * @param string $type - * @param string $content - * @param string $extractedType - * @param string $extractedTypes - * @param string $extractedDescription - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag - * @dataProvider provideDataForConstructor - * - * @return void - */ - public function testConstructorParsesInputsIntoCorrectFields( - $type, - $content, - $extractedType, - $extractedTypes, - $extractedDescription - ) { - $tag = new ThrowsTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($extractedType, $tag->getType()); - $this->assertEquals($extractedTypes, $tag->getTypes()); - $this->assertEquals($extractedDescription, $tag->getDescription()); - } - - /** - * Data provider for testConstructorParsesInputsIntoCorrectFields() - * - * @return array - */ - public function provideDataForConstructor() - { - return array( - array('throws', '', '', array(), ''), - array('throws', 'int', 'int', array('int'), ''), - array( - 'throws', - 'int Number of Bobs', - 'int', - array('int'), - 'Number of Bobs' - ), - array( - 'throws', - 'int|double Number of Bobs', - 'int|double', - array('int', 'double'), - 'Number of Bobs' - ), - array( - 'throws', - "int Number of \n Bobs", - 'int', - array('int'), - "Number of \n Bobs" - ), - array( - 'throws', - " int Number of Bobs", - 'int', - array('int'), - "Number of Bobs" - ), - array( - 'throws', - "int\nNumber of Bobs", - 'int', - array('int'), - "Number of Bobs" - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php deleted file mode 100644 index 45868d73e..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php -/** - * phpDocumentor Uses Tag Test - * - * PHP version 5.3 - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\UsesTag - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class UsesTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\UsesTag can create - * a link for the @uses doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exReference - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\UsesTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exReference - ) { - $tag = new UsesTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exReference, $tag->getReference()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exReference - return array( - array( - 'uses', - 'Foo::bar()', - 'Foo::bar()', - '', - 'Foo::bar()' - ), - array( - 'uses', - 'Foo::bar() Testing', - 'Foo::bar() Testing', - 'Testing', - 'Foo::bar()', - ), - array( - 'uses', - 'Foo::bar() Testing comments', - 'Foo::bar() Testing comments', - 'Testing comments', - 'Foo::bar()', - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php deleted file mode 100644 index 9ae2aa5f7..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php -/** - * phpDocumentor Var Tag Test - * - * PHP version 5.3 - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VarTag - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VarTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can - * understand the @var doc block. - * - * @param string $type - * @param string $content - * @param string $exType - * @param string $exVariable - * @param string $exDescription - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\VarTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exType, - $exVariable, - $exDescription - ) { - $tag = new VarTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exType, $tag->getType()); - $this->assertEquals($exVariable, $tag->getVariableName()); - $this->assertEquals($exDescription, $tag->getDescription()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exType, $exVariable, $exDescription - return array( - array( - 'var', - 'int', - 'int', - '', - '' - ), - array( - 'var', - 'int $bob', - 'int', - '$bob', - '' - ), - array( - 'var', - 'int $bob Number of bobs', - 'int', - '$bob', - 'Number of bobs' - ), - array( - 'var', - '', - '', - '', - '' - ), - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php deleted file mode 100644 index e145386d4..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * phpDocumentor Version Tag Test - * - * PHP version 5.3 - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VersionTag - * - * @author Vasil Rangelov <boen.robot@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VersionTagTest extends \PHPUnit_Framework_TestCase -{ - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\LinkTag can create - * a link for the @version doc block. - * - * @param string $type - * @param string $content - * @param string $exContent - * @param string $exDescription - * @param string $exVersion - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag\VersionTag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exContent, - $exDescription, - $exVersion - ) { - $tag = new VersionTag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($exContent, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - $this->assertEquals($exVersion, $tag->getVersion()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exContent, $exDescription, $exVersion - return array( - array( - 'version', - '1.0 First release.', - '1.0 First release.', - 'First release.', - '1.0' - ), - array( - 'version', - "1.0\nFirst release.", - "1.0\nFirst release.", - 'First release.', - '1.0' - ), - array( - 'version', - "1.0\nFirst\nrelease.", - "1.0\nFirst\nrelease.", - "First\nrelease.", - '1.0' - ), - array( - 'version', - 'Unfinished release', - 'Unfinished release', - 'Unfinished release', - '' - ), - array( - 'version', - '1.0', - '1.0', - '', - '1.0' - ), - array( - 'version', - 'GIT: $Id$', - 'GIT: $Id$', - '', - 'GIT: $Id$' - ), - array( - 'version', - 'GIT: $Id$ Dev build', - 'GIT: $Id$ Dev build', - 'Dev build', - 'GIT: $Id$' - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php deleted file mode 100644 index 9e873ecb5..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php +++ /dev/null @@ -1,313 +0,0 @@ -<?php -/** - * phpDocumentor Var Tag Test - * - * PHP version 5.3 - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; -use phpDocumentor\Reflection\DocBlock\Context; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Tag\VarTag - * - * @author Daniel O'Connor <daniel.oconnor@gmail.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class TagTest extends \PHPUnit_Framework_TestCase -{ - - /** - * @expectedException \InvalidArgumentException - * - * @return void - */ - public function testInvalidTagLine() - { - Tag::createInstance('Invalid tag line'); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * - * @return void - */ - public function testTagHandlerUnregistration() - { - $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; - $tagPreUnreg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPreUnreg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreUnreg - ); - - Tag::registerTagHandler('var', null); - - $tagPostUnreg = Tag::createInstance('@var mixed'); - $this->assertNotInstanceOf( - $currentHandler, - $tagPostUnreg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostUnreg - ); - - Tag::registerTagHandler('var', $currentHandler); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * - * @return void - */ - public function testTagHandlerCorrectRegistration() - { - if (0 == ini_get('allow_url_include')) { - $this->markTestSkipped('"data" URIs for includes are required.'); - } - $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; - $tagPreReg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPreReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreReg - ); - - include 'data:text/plain;base64,'. base64_encode( -<<<TAG_HANDLER -<?php - class MyTagHandler extends \phpDocumentor\Reflection\DocBlock\Tag {} -TAG_HANDLER - ); - - $this->assertTrue(Tag::registerTagHandler('var', '\MyTagHandler')); - - $tagPostReg = Tag::createInstance('@var mixed'); - $this->assertNotInstanceOf( - $currentHandler, - $tagPostReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostReg - ); - $this->assertInstanceOf( - '\MyTagHandler', - $tagPostReg - ); - - $this->assertTrue(Tag::registerTagHandler('var', $currentHandler)); - } - - /** - * @depends testTagHandlerCorrectRegistration - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * @covers \phpDocumentor\Reflection\DocBlock\Tag::createInstance - * - * @return void - */ - public function testNamespacedTagHandlerCorrectRegistration() - { - $tagPreReg = Tag::createInstance('@T something'); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreReg - ); - $this->assertNotInstanceOf( - '\MyTagHandler', - $tagPreReg - ); - - $this->assertTrue( - Tag::registerTagHandler('\MyNamespace\MyTag', '\MyTagHandler') - ); - - $tagPostReg = Tag::createInstance( - '@T something', - new DocBlock( - '', - new Context('', array('T' => '\MyNamespace\MyTag')) - ) - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostReg - ); - $this->assertInstanceOf( - '\MyTagHandler', - $tagPostReg - ); - - $this->assertTrue( - Tag::registerTagHandler('\MyNamespace\MyTag', null) - ); - } - - /** - * @depends testTagHandlerCorrectRegistration - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * @covers \phpDocumentor\Reflection\DocBlock\Tag::createInstance - * - * @return void - */ - public function testNamespacedTagHandlerIncorrectRegistration() - { - $tagPreReg = Tag::createInstance('@T something'); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreReg - ); - $this->assertNotInstanceOf( - '\MyTagHandler', - $tagPreReg - ); - - $this->assertFalse( - Tag::registerTagHandler('MyNamespace\MyTag', '\MyTagHandler') - ); - - $tagPostReg = Tag::createInstance( - '@T something', - new DocBlock( - '', - new Context('', array('T' => '\MyNamespace\MyTag')) - ) - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostReg - ); - $this->assertNotInstanceOf( - '\MyTagHandler', - $tagPostReg - ); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * - * @return void - */ - public function testNonExistentTagHandlerRegistration() - { - $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; - $tagPreReg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPreReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreReg - ); - - $this->assertFalse(Tag::registerTagHandler('var', 'Non existent')); - - $tagPostReg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPostReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostReg - ); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock\Tag::registerTagHandler - * - * @return void - */ - public function testIncompatibleTagHandlerRegistration() - { - $currentHandler = __NAMESPACE__ . '\Tag\VarTag'; - $tagPreReg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPreReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPreReg - ); - - $this->assertFalse( - Tag::registerTagHandler('var', __NAMESPACE__ . '\TagTest') - ); - - $tagPostReg = Tag::createInstance('@var mixed'); - $this->assertInstanceOf( - $currentHandler, - $tagPostReg - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\Tag', - $tagPostReg - ); - } - - /** - * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can - * understand the @var doc block. - * - * @param string $type - * @param string $content - * @param string $exDescription - * - * @covers \phpDocumentor\Reflection\DocBlock\Tag - * @dataProvider provideDataForConstuctor - * - * @return void - */ - public function testConstructorParesInputsIntoCorrectFields( - $type, - $content, - $exDescription - ) { - $tag = new Tag($type, $content); - - $this->assertEquals($type, $tag->getName()); - $this->assertEquals($content, $tag->getContent()); - $this->assertEquals($exDescription, $tag->getDescription()); - } - - /** - * Data provider for testConstructorParesInputsIntoCorrectFields - * - * @return array - */ - public function provideDataForConstuctor() - { - // $type, $content, $exDescription - return array( - array( - 'unknown', - 'some content', - 'some content', - ), - array( - 'unknown', - '', - '', - ) - ); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php deleted file mode 100644 index 78c7306d6..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php +++ /dev/null @@ -1,195 +0,0 @@ -<?php -/** - * phpDocumentor Collection Test - * - * PHP version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Type; - -use phpDocumentor\Reflection\DocBlock\Context; - -/** - * Test class for \phpDocumentor\Reflection\DocBlock\Type\Collection - * - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class CollectionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::getContext - * - * @return void - */ - public function testConstruct() - { - $collection = new Collection(); - $this->assertCount(0, $collection); - $this->assertEquals('', $collection->getContext()->getNamespace()); - $this->assertCount(0, $collection->getContext()->getNamespaceAliases()); - } - - /** - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct - * - * @return void - */ - public function testConstructWithTypes() - { - $collection = new Collection(array('integer', 'string')); - $this->assertCount(2, $collection); - } - - /** - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct - * - * @return void - */ - public function testConstructWithNamespace() - { - $collection = new Collection(array(), new Context('\My\Space')); - $this->assertEquals('My\Space', $collection->getContext()->getNamespace()); - - $collection = new Collection(array(), new Context('My\Space')); - $this->assertEquals('My\Space', $collection->getContext()->getNamespace()); - - $collection = new Collection(array(), null); - $this->assertEquals('', $collection->getContext()->getNamespace()); - } - - /** - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct - * - * @return void - */ - public function testConstructWithNamespaceAliases() - { - $fixture = array('a' => 'b'); - $collection = new Collection(array(), new Context(null, $fixture)); - $this->assertEquals( - array('a' => '\b'), - $collection->getContext()->getNamespaceAliases() - ); - } - - /** - * @param string $fixture - * @param array $expected - * - * @dataProvider provideTypesToExpand - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add - * - * @return void - */ - public function testAdd($fixture, $expected) - { - $collection = new Collection( - array(), - new Context('\My\Space', array('Alias' => '\My\Space\Aliasing')) - ); - $collection->add($fixture); - - $this->assertSame($expected, $collection->getArrayCopy()); - } - - /** - * @param string $fixture - * @param array $expected - * - * @dataProvider provideTypesToExpandWithoutNamespace - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add - * - * @return void - */ - public function testAddWithoutNamespace($fixture, $expected) - { - $collection = new Collection( - array(), - new Context(null, array('Alias' => '\My\Space\Aliasing')) - ); - $collection->add($fixture); - - $this->assertSame($expected, $collection->getArrayCopy()); - } - - /** - * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add - * @expectedException InvalidArgumentException - * - * @return void - */ - public function testAddWithInvalidArgument() - { - $collection = new Collection(); - $collection->add(array()); - } - - /** - * Returns the types and their expected values to test the retrieval of - * types. - * - * @param string $method Name of the method consuming this data provider. - * @param string $namespace Name of the namespace to user as basis. - * - * @return string[] - */ - public function provideTypesToExpand($method, $namespace = '\My\Space\\') - { - return array( - array('', array()), - array(' ', array()), - array('int', array('int')), - array('int ', array('int')), - array('string', array('string')), - array('DocBlock', array($namespace.'DocBlock')), - array('DocBlock[]', array($namespace.'DocBlock[]')), - array(' DocBlock ', array($namespace.'DocBlock')), - array('\My\Space\DocBlock', array('\My\Space\DocBlock')), - array('Alias\DocBlock', array('\My\Space\Aliasing\DocBlock')), - array( - 'DocBlock|Tag', - array($namespace .'DocBlock', $namespace .'Tag') - ), - array( - 'DocBlock|null', - array($namespace.'DocBlock', 'null') - ), - array( - '\My\Space\DocBlock|Tag', - array('\My\Space\DocBlock', $namespace.'Tag') - ), - array( - 'DocBlock[]|null', - array($namespace.'DocBlock[]', 'null') - ), - array( - 'DocBlock[]|int[]', - array($namespace.'DocBlock[]', 'int[]') - ), - ); - } - - /** - * Returns the types and their expected values to test the retrieval of - * types when no namespace is available. - * - * @param string $method Name of the method consuming this data provider. - * - * @return string[] - */ - public function provideTypesToExpandWithoutNamespace($method) - { - return $this->provideTypesToExpand($method, '\\'); - } -} diff --git a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php b/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php deleted file mode 100644 index e87e3b943..000000000 --- a/WP-Parser/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php +++ /dev/null @@ -1,297 +0,0 @@ -<?php -/** - * phpDocumentor DocBlock Test - * - * PHP Version 5.3 - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Context; -use phpDocumentor\Reflection\DocBlock\Location; - -/** - * Test class for phpDocumentor\Reflection\DocBlock - * - * @author Mike van Riel <mike.vanriel@naenius.com> - * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DocBlockTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers \phpDocumentor\Reflection\DocBlock - * - * @return void - */ - public function testConstruct() - { - $fixture = <<<DOCBLOCK -/** - * This is a short description. - * - * This is a long description. - * - * @see \MyClass - * @return void - */ -DOCBLOCK; - $object = new DocBlock( - $fixture, - new Context('\MyNamespace', array('PHPDoc' => '\phpDocumentor')), - new Location(2) - ); - $this->assertEquals( - 'This is a short description.', - $object->getShortDescription() - ); - $this->assertEquals( - 'This is a long description.', - $object->getLongDescription()->getContents() - ); - $this->assertCount(2, $object->getTags()); - $this->assertTrue($object->hasTag('see')); - $this->assertTrue($object->hasTag('return')); - $this->assertFalse($object->hasTag('category')); - - $this->assertSame('MyNamespace', $object->getContext()->getNamespace()); - $this->assertSame( - array('PHPDoc' => '\phpDocumentor'), - $object->getContext()->getNamespaceAliases() - ); - $this->assertSame(2, $object->getLocation()->getLineNumber()); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock::splitDocBlock - * - * @return void - */ - public function testConstructWithTagsOnly() - { - $fixture = <<<DOCBLOCK -/** - * @see \MyClass - * @return void - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertEquals('', $object->getShortDescription()); - $this->assertEquals('', $object->getLongDescription()->getContents()); - $this->assertCount(2, $object->getTags()); - $this->assertTrue($object->hasTag('see')); - $this->assertTrue($object->hasTag('return')); - $this->assertFalse($object->hasTag('category')); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock::cleanInput - * - * @return void - */ - public function testConstructOneLiner() - { - $fixture = '/** Short description and nothing more. */'; - $object = new DocBlock($fixture); - $this->assertEquals( - 'Short description and nothing more.', - $object->getShortDescription() - ); - $this->assertEquals('', $object->getLongDescription()->getContents()); - $this->assertCount(0, $object->getTags()); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock::__construct - * - * @return void - */ - public function testConstructFromReflector() - { - $object = new DocBlock(new \ReflectionClass($this)); - $this->assertEquals( - 'Test class for phpDocumentor\Reflection\DocBlock', - $object->getShortDescription() - ); - $this->assertEquals('', $object->getLongDescription()->getContents()); - $this->assertCount(4, $object->getTags()); - $this->assertTrue($object->hasTag('author')); - $this->assertTrue($object->hasTag('copyright')); - $this->assertTrue($object->hasTag('license')); - $this->assertTrue($object->hasTag('link')); - $this->assertFalse($object->hasTag('category')); - } - - /** - * @expectedException \InvalidArgumentException - * - * @return void - */ - public function testExceptionOnInvalidObject() - { - new DocBlock($this); - } - - public function testDotSeperation() - { - $fixture = <<<DOCBLOCK -/** - * This is a short description. This is a long description. - * This is a continuation of the long description. - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertEquals( - 'This is a short description.', - $object->getShortDescription() - ); - $this->assertEquals( - "This is a long description.\nThis is a continuation of the long " - ."description.", - $object->getLongDescription()->getContents() - ); - } - - /** - * @covers \phpDocumentor\Reflection\DocBlock::parseTags - * @expectedException \LogicException - * - * @return void - */ - public function testInvalidTagBlock() - { - if (0 == ini_get('allow_url_include')) { - $this->markTestSkipped('"data" URIs for includes are required.'); - } - - include 'data:text/plain;base64,'. base64_encode( - <<<DOCBLOCK_EXTENSION -<?php -class MyReflectionDocBlock extends \phpDocumentor\Reflection\DocBlock { - protected function splitDocBlock(\$comment) { - return array('', '', 'Invalid tag block'); - } -} -DOCBLOCK_EXTENSION - ); - new \MyReflectionDocBlock(''); - - } - - public function testTagCaseSensitivity() - { - $fixture = <<<DOCBLOCK -/** - * This is a short description. - * - * This is a long description. - * - * @method null something() - * @Method({"GET", "POST"}) - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertEquals( - 'This is a short description.', - $object->getShortDescription() - ); - $this->assertEquals( - 'This is a long description.', - $object->getLongDescription()->getContents() - ); - $tags = $object->getTags(); - $this->assertCount(2, $tags); - $this->assertTrue($object->hasTag('method')); - $this->assertTrue($object->hasTag('Method')); - $this->assertInstanceOf( - __NAMESPACE__ . '\DocBlock\Tag\MethodTag', - $tags[0] - ); - $this->assertInstanceOf( - __NAMESPACE__ . '\DocBlock\Tag', - $tags[1] - ); - $this->assertNotInstanceOf( - __NAMESPACE__ . '\DocBlock\Tag\MethodTag', - $tags[1] - ); - } - - /** - * @depends testConstructFromReflector - * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName - * - * @return void - */ - public function testGetTagsByNameZeroAndOneMatch() - { - $object = new DocBlock(new \ReflectionClass($this)); - $this->assertEmpty($object->getTagsByName('category')); - $this->assertCount(1, $object->getTagsByName('author')); - } - - /** - * @depends testConstructWithTagsOnly - * @covers \phpDocumentor\Reflection\DocBlock::parseTags - * - * @return void - */ - public function testParseMultilineTag() - { - $fixture = <<<DOCBLOCK -/** - * @return void Content on - * multiple lines. - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertCount(1, $object->getTags()); - } - - /** - * @depends testConstructWithTagsOnly - * @covers \phpDocumentor\Reflection\DocBlock::parseTags - * - * @return void - */ - public function testParseMultilineTagWithLineBreaks() - { - $fixture = <<<DOCBLOCK -/** - * @return void Content on - * multiple lines. - * - * One more, after the break. - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertCount(1, $object->getTags()); - } - - /** - * @depends testConstructWithTagsOnly - * @covers \phpDocumentor\Reflection\DocBlock::getTagsByName - * - * @return void - */ - public function testGetTagsByNameMultipleMatch() - { - $fixture = <<<DOCBLOCK -/** - * @param string - * @param int - * @return void - */ -DOCBLOCK; - $object = new DocBlock($fixture); - $this->assertEmpty($object->getTagsByName('category')); - $this->assertCount(1, $object->getTagsByName('return')); - $this->assertCount(2, $object->getTagsByName('param')); - } -} diff --git a/cli.php b/cli.php index 0d8212e90..e2545137b 100644 --- a/cli.php +++ b/cli.php @@ -99,10 +99,8 @@ public function generate_and_import( $args, $assoc_args ) { * @see https://github.com/rmccue/WP-Parser/ */ protected function _load_libs() { - $path = dirname( __FILE__ ). '/WP-Parser/'; - spl_autoload_register( __CLASS__ . '::autoloader' ); - require_once "$path/lib/WP/runner.php"; + require_once __DIR__ . "/lib/WP/runner.php"; } public static function autoloader( $class ) { @@ -115,7 +113,7 @@ public static function autoloader( $class ) { $vendorDir . '/phpdocumentor/reflection/tests/mocks' ), 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', - 'WP' => __DIR__ . '/WP-Parser/lib', + 'WP' => __DIR__ . '/lib', 'PHPParser' => $vendorDir . '/nikic/php-parser/lib', ); diff --git a/WP-Parser/lib/WP/PrettyPrinter.php b/lib/WP/PrettyPrinter.php similarity index 100% rename from WP-Parser/lib/WP/PrettyPrinter.php rename to lib/WP/PrettyPrinter.php diff --git a/WP-Parser/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php similarity index 100% rename from WP-Parser/lib/WP/Reflection/FileReflector.php rename to lib/WP/Reflection/FileReflector.php diff --git a/WP-Parser/lib/WP/Reflection/HookReflector.php b/lib/WP/Reflection/HookReflector.php similarity index 100% rename from WP-Parser/lib/WP/Reflection/HookReflector.php rename to lib/WP/Reflection/HookReflector.php diff --git a/WP-Parser/lib/WP/runner.php b/lib/WP/runner.php similarity index 100% rename from WP-Parser/lib/WP/runner.php rename to lib/WP/runner.php From 0a80ff43516096d58ce6535ed8342f2fc8c80740 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 21:17:40 +1000 Subject: [PATCH 083/402] Only load the importer via the CLI --- plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index b00bef932..9c20ba906 100755 --- a/plugin.php +++ b/plugin.php @@ -9,10 +9,10 @@ namespace WPFuncRef; -require __DIR__ . '/importer.php'; require __DIR__ . '/template.php'; if ( defined('WP_CLI') && WP_CLI ) { + require __DIR__ . '/importer.php'; require __DIR__ . '/cli.php'; } From 323e9863f559bf54ba4ab900409fadd293cd7cd4 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 21:18:58 +1000 Subject: [PATCH 084/402] Use _once for require/include --- cli.php | 2 +- plugin.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cli.php b/cli.php index e2545137b..f5d53aba8 100644 --- a/cli.php +++ b/cli.php @@ -126,7 +126,7 @@ public static function autoloader( $class ) { $file = $path . DIRECTORY_SEPARATOR . str_replace( array( '_', '\\' ), DIRECTORY_SEPARATOR, $class ) . '.php'; if (file_exists($file)) - include $file; + include_once $file; } } } diff --git a/plugin.php b/plugin.php index 9c20ba906..27182ceb7 100755 --- a/plugin.php +++ b/plugin.php @@ -9,11 +9,11 @@ namespace WPFuncRef; -require __DIR__ . '/template.php'; +require_once __DIR__ . '/template.php'; if ( defined('WP_CLI') && WP_CLI ) { - require __DIR__ . '/importer.php'; - require __DIR__ . '/cli.php'; + require_once __DIR__ . '/importer.php'; + require_once __DIR__ . '/cli.php'; } add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); From 9236e8ab9348fb07b17a3edb2a8c7e940fc86dde Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Tue, 2 Jul 2013 22:05:34 +1000 Subject: [PATCH 085/402] Remove autopee for funcref posts --- plugin.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plugin.php b/plugin.php index 27182ceb7..eefc099fd 100755 --- a/plugin.php +++ b/plugin.php @@ -22,6 +22,8 @@ add_filter( 'wpfuncref_the_return_type', __NAMESPACE__ . '\\humanize_separator' ); add_filter( 'the_content', __NAMESPACE__ . '\\expand_content' ); +add_filter( 'the_content', __NAMESPACE__ . '\\autop_for_non_funcref' ); +remove_filter( 'the_content', 'wpautop' ); /** * Register the function and class post types @@ -158,4 +160,22 @@ function expand_content( $content ) { $after_content = apply_filters( 'wpfuncref_after_content', $after_content ); return $before_content . $content . $after_content; +} + +/** + * Re-enable autopee for the non-funcref posts + * + * We can't selectively filter the_content for wpautop, so we remove it and + * readd this to check instead. + * + * @param string $content Unfiltered content + * @return string Autopeed content + */ +function autop_for_non_funcref( $content ) { + $post = get_post(); + + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) + $content = wpautop( $content ); + + return $content; } \ No newline at end of file From 98d6065462718f38d95ff0af7417822fc219b3a8 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 7 Jul 2013 13:04:19 +0100 Subject: [PATCH 086/402] source-file taxonomy doesn't need to be hierarchical --- plugin.php | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin.php b/plugin.php index eefc099fd..1c9c0c14e 100755 --- a/plugin.php +++ b/plugin.php @@ -58,7 +58,6 @@ function register_post_types() { function register_taxonomies() { // Files register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( - 'hierarchical' => true, 'label' => __( 'Files', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'files' ), From 3099c2f3bfbc8b80f164232a2764d81be94f1f7e Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 7 Jul 2013 16:37:14 +0100 Subject: [PATCH 087/402] Make import_function() return the new post ID --- importer.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/importer.php b/importer.php index d1944b018..5d61ec5af 100755 --- a/importer.php +++ b/importer.php @@ -135,6 +135,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ * @param array $data Function * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @return bool|int Post ID of this function, false if any failure. */ public function import_function( array $data, $class_post_id = 0, $import_internal_functions = false ) { global $wpdb; @@ -147,7 +148,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern else WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); - return; + return false; } $is_new_post = true; @@ -177,7 +178,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern if ( ! $ID || is_wp_error( $ID ) ) { $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); - return; + return false; } // If the function has @since markup, assign the taxonomy @@ -225,6 +226,8 @@ public function import_function( array $data, $class_post_id = 0, $import_intern else WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); } + + return $ID; } /** From 7eb11c15a4ad7d6589e6e4fa0645f403a47ae0d2 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 7 Jul 2013 21:45:44 +0100 Subject: [PATCH 088/402] Refactor import_function and import_class to remove code duplication --- importer.php | 183 +++++++++++++++++++++------------------------------ 1 file changed, 76 insertions(+), 107 deletions(-) diff --git a/importer.php b/importer.php index 5d61ec5af..85ab994a4 100755 --- a/importer.php +++ b/importer.php @@ -79,9 +79,9 @@ public function __construct( array $args = array() ) { * * @param array $file * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked @internal will be imported. */ - public function import_file( array $file, $skip_sleep = false, $import_internal_functions = false ) { + public function import_file( array $file, $skip_sleep = false, $import_internal = false ) { // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); @@ -105,7 +105,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ $i = 0; foreach ( $file['functions'] as $function ) { - $this->import_function( $function, 0, $import_internal_functions ); + $this->import_function( $function, 0, $import_internal ); $i++; // Wait 3 seconds after every 10 items @@ -119,7 +119,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ $i = 0; foreach ( $file['classes'] as $class ) { - $this->import_class( $class, $import_internal_functions ); + $this->import_class( $class, $import_internal ); $i++; // Wait 3 seconds after every 10 items @@ -134,17 +134,63 @@ public function import_file( array $file, $skip_sleep = false, $import_internal_ * * @param array $data Function * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. * @return bool|int Post ID of this function, false if any failure. */ - public function import_function( array $data, $class_post_id = 0, $import_internal_functions = false ) { + public function import_function( array $data, $class_post_id = 0, $import_internal = false ) { + return $this->import_item( $data, $class_post_id, $import_internal ); + } + + /** + * Create a post for a class + * + * @param array $data Class + * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * @return bool|int Post ID of this function, false if any failure. + */ + protected function import_class( array $data, $import_internal = false ) { + global $wpdb; + + // Insert this class + $class_id = $this->import_item( $data, 0, $import_internal, array( 'post_type' => $this->post_type_class ) ); + if ( ! $class_id ) + return false; + + // Set class-specific meta + update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $class_id, '_wpapi_static', (bool) $data['static'] ); + update_post_meta( $class_id, '_wpapi_visibility', $data['visibility'] ); + + // Now add the methods + foreach ( $data['methods'] as $method ) + $this->import_item( $method, $class_id, $import_internal ); + + return $class_id; + } + + /** + * Create a post for an item (a class or a function). + * + * Anything that needs to be dealt identically for functions or methods should go in this function. + * Anything more specific should go in either import_function() or import_class() as appropriate. + * + * @param array $data Data + * @param int $class_post_id Optional; post ID of the class this item belongs to. Defaults to zero (not a method). + * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked @internal will be imported. + * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). + * @return bool|int Post ID of this item, false if any failure. + */ + public function import_item( array $data, $class_post_id = 0, $import_internal = false, array $arg_overrides = array() ) { global $wpdb; - // Don't import functions marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_internal_functions && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + // Don't import items marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); + if ( $post_data['post_type'] === $this->post_type_class ) + WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); + elseif ( $class_post_id ) + WP_CLI::line( sprintf( "\t\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); @@ -153,7 +199,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern $is_new_post = true; $slug = sanitize_title( $data['name'] ); - $post_data = array( + $post_data = wp_parse_args( $arg_overrides, array( 'post_content' => $data['doc']['long_description'], 'post_excerpt' => $data['doc']['description'], 'post_name' => $slug, @@ -161,10 +207,10 @@ public function import_function( array $data, $class_post_id = 0, $import_intern 'post_status' => 'publish', 'post_title' => $data['name'], 'post_type' => $this->post_type_function, - ); + ) ); // Look for an existing post for this function - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $this->post_type_function, (int) $class_post_id ) ); + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $class_post_id ) ); // Insert/update the function post if ( ! empty( $existing_post_id ) ) { @@ -177,7 +223,14 @@ public function import_function( array $data, $class_post_id = 0, $import_intern } if ( ! $ID || is_wp_error( $ID ) ) { - $this->errors[] = sprintf( 'Problem inserting/updating post for function "%1$s": %2$s', $data['name'], $ID->get_error_message() ); + + if ( $post_data['post_type'] === $this->post_type_class ) + $this->errors[] = sprintf( "\tProblem inserting/updating post for class \"%1\$s\"", $data['name'], $ID->get_error_message() ); + elseif ( $class_post_id ) + $this->errors[] = sprintf( "\t\tProblem inserting/updating post for method \"%1\$s\"", $data['name'], $ID->get_error_message() ); + else + $this->errors[] = sprintf( "\tProblem inserting/updating post for function \"%1\$s\"", $data['name'], $ID->get_error_message() ); + return false; } @@ -196,7 +249,7 @@ public function import_function( array $data, $class_post_id = 0, $import_intern if ( ! is_wp_error( $since_term ) ) wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); else - WP_CLI::warning( "Cannot set @since term: " . $since_term->get_error_message() ); + WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } // Set other taxonomy and post meta to use in the theme template @@ -206,108 +259,24 @@ public function import_function( array $data, $class_post_id = 0, $import_intern update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); - if ( $class_post_id ) { - update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $ID, '_wpapi_static', (bool) $data['static'] ); - update_post_meta( $ID, '_wpapi_visibility', $data['visibility'] ); - } - // Everything worked! Woo hoo! if ( $is_new_post ) { - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tImported method \"%1\$s\"", $data['name'] ) ); + if ( $post_data['post_type'] === $this->post_type_class ) + WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); + elseif ( $class_post_id ) + WP_CLI::line( sprintf( "\t\tImported method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); } else { - if ( $class_post_id ) - WP_CLI::line( sprintf( "\tUpdated method \"%1\$s\"", $data['name'] ) ); + if ( $post_data['post_type'] === $this->post_type_class ) + WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); + elseif ( $class_post_id ) + WP_CLI::line( sprintf( "\t\tUpdated method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); } return $ID; } - - /** - * Create a post for a class - * - * @param array $data Class - * @param bool $import_internal_classes Optional; defaults to false. If true, functions marked @internal will be imported. - */ - protected function import_class( array $data, $import_internal_classes = false ) { - global $wpdb; - - // Don't import classes marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_internal_classes && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); - return; - } - - $is_new_post = true; - $slug = sanitize_title( $data['name'] ); - $post_data = array( - 'post_content' => $data['doc']['long_description'], - 'post_excerpt' => $data['doc']['description'], - 'post_name' => $slug, - 'post_status' => 'publish', - 'post_title' => $data['name'], - 'post_type' => $this->post_type_class, - ); - - // Look for an existing post for this class - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s LIMIT 1", $slug, $this->post_type_class ) ); - - // Insert/update the function post - if ( ! empty( $existing_post_id ) ) { - $is_new_post = false; - $post_data['ID'] = (int) $existing_post_id; - $ID = wp_update_post( $post_data, true ); - - } else { - $ID = wp_insert_post( $post_data, true ); - } - - if ( ! $ID || is_wp_error( $ID ) ) { - $this->errors[] = sprintf( 'Problem inserting/updating post for class "%1$s": %2$s', $data['name'], $ID->get_error_message() ); - return; - } - - // If the function has @since markup, assign the taxonomy - $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); - if ( ! empty( $since_version ) ) { - - $since_version = array_shift( $since_version ); - $since_version = $since_version['content']; - $since_term = term_exists( $since_version, $this->taxonomy_since_version ); - - if ( ! $since_term ) - $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); - - // Assign the tax item to the post - if ( ! is_wp_error( $since_term ) ) - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); - else - WP_CLI::warning( "Cannot set @since term: " . $since_term->get_error_message() ); - } - - // Set taxonomy and post meta to use in the theme template - wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); - - update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); - update_post_meta( $ID, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $ID, '_wpapi_abstract', (bool) $data['abstract'] ); - - // Everything worked! Woo hoo! - if ( $is_new_post ) - WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); - else - WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - - // Now add this class' methods - foreach ( $data['methods'] as $method ) - $this->import_function( $method, $ID ); - } } \ No newline at end of file From 808a1c493df114ee38aaabd75a4a9aab1f8d7128 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Mon, 8 Jul 2013 14:14:57 +0100 Subject: [PATCH 089/402] Improve comments in import_item() --- importer.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/importer.php b/importer.php index 85ab994a4..b75f248fa 100755 --- a/importer.php +++ b/importer.php @@ -19,7 +19,7 @@ class Importer { public $taxonomy_file; /** - * Taxonomy name for a function's @since tag + * Taxonomy name for an item's @since tag * * @var string */ @@ -209,10 +209,10 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = 'post_type' => $this->post_type_function, ) ); - // Look for an existing post for this function + // Look for an existing post for this item $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $class_post_id ) ); - // Insert/update the function post + // Insert/update the item post if ( ! empty( $existing_post_id ) ) { $is_new_post = false; $post_data['ID'] = (int) $existing_post_id; @@ -234,7 +234,7 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = return false; } - // If the function has @since markup, assign the taxonomy + // If the item has @since markup, assign the taxonomy $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); if ( ! empty( $since_version ) ) { From f48627a30c978016e023c5f3e9997e6c322bd267 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Wed, 10 Jul 2013 00:23:27 +0100 Subject: [PATCH 090/402] Remove JSON_PRETTY_PRINT as this requires PHP 5.4+ --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index f5d53aba8..b498c4801 100644 --- a/cli.php +++ b/cli.php @@ -161,7 +161,7 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { $output = parse_files( $files, $path ); if ( $format == 'json' ) - $output = json_encode( $output, JSON_PRETTY_PRINT ); + $output = json_encode( $output ); return $output; } From 91dee3f9506952ac9866c8a9d9290044423dd809 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Wed, 10 Jul 2013 00:23:55 +0100 Subject: [PATCH 091/402] Change default export file extension from XML to JSON --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index b498c4801..b082b2154 100644 --- a/cli.php +++ b/cli.php @@ -20,7 +20,7 @@ public function generate( $args ) { list( $directory, $output_file ) = $args; if ( empty( $output_file ) ) - $output_file = 'phpdoc.xml'; + $output_file = 'phpdoc.json'; $directory = realpath( $directory ); $this->_load_libs(); From 3b8b9b14f87e0bfebed58746a01334ef53dfd721 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 11:00:51 +0100 Subject: [PATCH 092/402] Add file-level phpDoc to export. --- lib/WP/runner.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 896de9853..63f23dbcd 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -33,6 +33,7 @@ function parse_files($files, $root) { // TODO proper exporter $out = array( + 'file' => export_docblock( $file ), 'path' => str_replace( DIRECTORY_SEPARATOR, '/', $file->getFilename() ), ); From de5f177a171d7528a578516fc0c2133ef1cd2040 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 19:50:54 +0100 Subject: [PATCH 093/402] De-duplicate code when checking for taxonomies --- cli.php | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/cli.php b/cli.php index b082b2154..b1f655284 100644 --- a/cli.php +++ b/cli.php @@ -199,18 +199,12 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna exit; } - // Sanity check -- does the file taxonomy exist? - if ( ! taxonomy_exists( $importer->taxonomy_file ) ) { + // Sanity check -- do the required taxonomies exist? + if ( ! taxonomy_exists( $importer->taxonomy_file ) || ! taxonomy_exists( $importer->taxonomy_since_version ) || ! taxonomy_exists( $importer->taxonomy_package ) ) { WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); exit; } - // Sanity check -- does the @since taxonomy exist? - if ( ! taxonomy_exists( $importer->taxonomy_since_version ) ) { - WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_since_version ) ); - exit; - } - foreach ( $data as $file ) { WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); $file_number++; From 8d50922a8ab9d7f7894915d4e83c090c2782d1fe Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 19:52:47 +0100 Subject: [PATCH 094/402] Update phpdoc for $taxonomy_package property --- importer.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/importer.php b/importer.php index b75f248fa..b4715b0b1 100755 --- a/importer.php +++ b/importer.php @@ -25,6 +25,13 @@ class Importer { */ public $taxonomy_since_version; + /** + * Taxonomy name for an item's @package/@subpackage tags + * + * @var string + */ + public $taxonomy_package; + /** * Post type name for functions * @@ -39,7 +46,6 @@ class Importer { */ public $post_type_class; - public $taxonomy_package; // todo public $post_type_hook; // todo /** From fa4304c074139fde6d8f1e4e0fdec48a0a857fef Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 19:53:16 +0100 Subject: [PATCH 095/402] Set up name for package taxonomy in Importer constrictor --- importer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/importer.php b/importer.php index b4715b0b1..2cee5dd2f 100755 --- a/importer.php +++ b/importer.php @@ -72,6 +72,7 @@ public function __construct( array $args = array() ) { 'post_type_class' => 'wpapi-class', 'post_type_function' => 'wpapi-function', 'taxonomy_file' => 'wpapi-source-file', + 'taxonomy_package' => 'wpapi-package', 'taxonomy_since_version' => 'wpapi-since', ) ); From f647d9295002515dfbb242e8eb7c4e03d7af92aa Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 19:56:45 +0100 Subject: [PATCH 096/402] Switch importer->file_term_id property into an array for general use Gives a handy store for general file meta for use elsewhere. --- importer.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/importer.php b/importer.php index 2cee5dd2f..827a3925d 100755 --- a/importer.php +++ b/importer.php @@ -49,11 +49,11 @@ class Importer { public $post_type_hook; // todo /** - * Stores a reference to the current file's term in the file taxonomy + * Handy store for meta about the current item being imported * - * @var string + * @var array */ - public $file_term_id; + public $file_meta = array(); /** * @var array Human-readable errors @@ -105,7 +105,10 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); } - $this->file_term_id = $term['name']; + // Store file meta for later use + $this->file_meta = array( + 'term_id' => $term['name'], // File's term item in the file taxonomy + } // Functions if ( ! empty( $file['functions'] ) ) { @@ -259,9 +262,9 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } - // Set other taxonomy and post meta to use in the theme template - wp_set_object_terms( $ID, $this->file_term_id, $this->taxonomy_file ); + // Set other taxonomy and post meta to use in the theme templates + wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); From 461703149944b8d8a39be89cf16945cfbb825c97 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 14 Jul 2013 19:57:38 +0100 Subject: [PATCH 097/402] Add file docblock to file_meta Will be used later to fetch file-scope docblock tags --- importer.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/importer.php b/importer.php index 827a3925d..ec810a16e 100755 --- a/importer.php +++ b/importer.php @@ -107,7 +107,8 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // Store file meta for later use $this->file_meta = array( - 'term_id' => $term['name'], // File's term item in the file taxonomy + 'docblock' => $file['file'], // File docblock + 'term_id' => $term['name'], // File's term item in the file taxonomy } // Functions From 55af7a866fe56830b4118d5d07c9ae2680144127 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Thu, 18 Jul 2013 21:22:09 +0100 Subject: [PATCH 098/402] Fix silly typo. Antiprops @paulgibbs --- importer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/importer.php b/importer.php index ec810a16e..b6e36e96e 100755 --- a/importer.php +++ b/importer.php @@ -109,7 +109,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $this->file_meta = array( 'docblock' => $file['file'], // File docblock 'term_id' => $term['name'], // File's term item in the file taxonomy - } + ); // Functions if ( ! empty( $file['functions'] ) ) { From c87f9e584c51eade77bce53557ae17ee1184f961 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Fri, 19 Jul 2013 20:44:49 +0100 Subject: [PATCH 099/402] Workaround for a WP core bug where hierarchial taxonomy caches are not being cleared --- cli.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cli.php b/cli.php index b1f655284..585ec2f3d 100644 --- a/cli.php +++ b/cli.php @@ -212,6 +212,15 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna $importer->import_file( $file, $skip_sleep, $import_internal_functions ); } + /** + * Workaround for a WP core bug where hierarchial taxonomy caches are not being cleared + * + * https://core.trac.wordpress.org/ticket/14485 + * http://wordpress.stackexchange.com/questions/8357/inserting-terms-in-an-hierarchical-taxonomy + */ + delete_option( "{$importer->taxonomy_package}_children" ); + delete_option( "{$importer->taxonomy_since_version}_children" ); + // Start counting again wp_defer_term_counting( false ); wp_defer_comment_counting( false ); From 0da6ec6fa9b2b2d249ea5d5fb765ffb0768bfa06 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Fri, 19 Jul 2013 20:45:50 +0100 Subject: [PATCH 100/402] Add items to package taxonomy during import --- importer.php | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/importer.php b/importer.php index b6e36e96e..2f6742c3f 100755 --- a/importer.php +++ b/importer.php @@ -263,6 +263,52 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } + $packages = array( + 'main' => wp_list_filter( $data['doc']['tags'], array( 'name' => 'package' ) ), + 'sub' => wp_list_filter( $data['doc']['tags'], array( 'name' => 'subpackage' ) ), + ); + + // If the @package/@subpackage is not set by the individual function or class, get it from the file scope + if ( empty( $packages['main'] ) ) + $packages['main'] = wp_list_filter( $this->file_meta['docblock']['tags'], array( 'name' => 'package' ) ); + + if ( empty( $packages['sub'] ) ) + $packages['sub'] = wp_list_filter( $this->file_meta['docblock']['tags'], array( 'name' => 'subpackage' ) ); + + $main_package_id = false; + $package_term_args = array(); + + // If the item has any @package/@subpackage markup (or has inherited it from file scope), assign the taxonomy. + foreach ( $packages as $pack_name => $pack_value ) { + if ( empty( $pack_value ) ) + continue; + + $pack_value = array_shift( $pack_value ); + $pack_value = $pack_value['content']; + + // Set the parent term_id to look for, as the package taxonomy is hierarchical. + if ( $pack_name === 'sub' && is_int( $main_package_id ) ) + $package_term_args = array( 'parent' => $main_package_id ); + else + $package_term_args = array( 'parent' => 0 ); + + // If the package doesn't already exist in the taxonomy, add it + $package_term = term_exists( $pack_value, $this->taxonomy_package, $package_term_args['parent'] ); + if ( ! $package_term ) + $package_term = wp_insert_term( $pack_value, $this->taxonomy_package, $package_term_args ); + + if ( $pack_name === 'main' && $main_package_id === false && ! is_wp_error( $package_term ) ) + $main_package_id = (int) $package_term['term_id']; + + // Assign the tax item to the post + if ( ! is_wp_error( $package_term ) ) + wp_set_object_terms( $ID, (int) $package_term['term_id'], $this->taxonomy_package ); + + elseif ( is_int( $main_package_id ) ) + WP_CLI::warning( "\tCannot set @subpackage term: " . $package_term->get_error_message() ); + else + WP_CLI::warning( "\tCannot set @package term: " . $package_term->get_error_message() ); + } // Set other taxonomy and post meta to use in the theme templates wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); From 620e655a46f65a0dca4a27128b705a5ba9e77d91 Mon Sep 17 00:00:00 2001 From: Paul Gibbs <paul@byotos.com> Date: Sun, 21 Jul 2013 20:09:33 +0100 Subject: [PATCH 101/402] Set better rewrite slugs for package and since taxonomies. --- plugin.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin.php b/plugin.php index 1c9c0c14e..7d2641d4a 100755 --- a/plugin.php +++ b/plugin.php @@ -70,6 +70,7 @@ function register_taxonomies() { 'hierarchical' => true, 'label' => '@package', 'public' => true, + 'rewrite' => array( 'slug' => 'package' ), 'sort' => false, 'update_count_callback' => '_update_post_term_count', ) ); @@ -79,6 +80,7 @@ function register_taxonomies() { 'hierarchical' => true, 'label' => __( '@since', 'wpfuncref' ), 'public' => true, + 'rewrite' => array( 'slug' => 'since' ), 'sort' => false, 'update_count_callback' => '_update_post_term_count', ) ); From f1244a7ae68f11d316f7cbd4809e7a71a3d87ae8 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Tue, 23 Jul 2013 11:24:42 +0100 Subject: [PATCH 102/402] Retrieve type and variable information from docblock tags --- lib/WP/runner.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 63f23dbcd..8b1053611 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -109,10 +109,15 @@ function export_docblock($element) { 'tags' => array(), ); foreach ($docblock->getTags() as $tag) { - $output['tags'][] = array( + $t = array( 'name' => $tag->getName(), - 'content' => $tag->getContent(), + 'content' => $tag->getDescription(), ); + if (method_exists($tag, 'getTypes')) + $t['types'] = $tag->getTypes(); + if (method_exists($tag, 'getVariableName')) + $t['variable'] = $tag->getVariableName(); + $output['tags'][] = $t; } return $output; @@ -185,4 +190,4 @@ function export_methods(array $methods) { $out[] = $meth; } return $out; -} \ No newline at end of file +} From c5f909c74a845e0671598c24f1ddf8bfb9e358b7 Mon Sep 17 00:00:00 2001 From: Eric Lewis <eric.andrew.lewis@gmail.com> Date: Sun, 28 Jul 2013 20:24:35 -0400 Subject: [PATCH 103/402] Add version support --- lib/WP/runner.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 8b1053611..275fabd3b 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -117,6 +117,8 @@ function export_docblock($element) { $t['types'] = $tag->getTypes(); if (method_exists($tag, 'getVariableName')) $t['variable'] = $tag->getVariableName(); + if ( method_exists( $tag, 'getVersion' ) ) + $t['content'] = $tag->getVersion(); $output['tags'][] = $t; } From 6b0a60d713235b354a34559a2c95716a2cd00014 Mon Sep 17 00:00:00 2001 From: Eric Lewis <eric.andrew.lewis@gmail.com> Date: Sun, 28 Jul 2013 20:34:05 -0400 Subject: [PATCH 104/402] More exact respect for the @since docblock --- lib/WP/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 275fabd3b..f4692afde 100755 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -117,7 +117,7 @@ function export_docblock($element) { $t['types'] = $tag->getTypes(); if (method_exists($tag, 'getVariableName')) $t['variable'] = $tag->getVariableName(); - if ( method_exists( $tag, 'getVersion' ) ) + if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) $t['content'] = $tag->getVersion(); $output['tags'][] = $t; } From 02c00f6724d9b20df7ab198735e364850cde6c80 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 11 Aug 2013 14:16:53 +0100 Subject: [PATCH 105/402] Pick up filter docblock by copying it from the assignment node If filters are documented like this: /** * A filter with some exciting documentation */ $foo = apply_filters( 'filter', $foo ); then PHP-Parser associates the docblock with the assignment expression instead of the function call. This means that the documentation isn't actually retrieved by the hook reflector. So, tweak the node visitor to check for assignment expressions that have docblock and a filter as a subnode. The docblock can then be copied to the subnode. --- lib/WP/Reflection/FileReflector.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index f782ebe07..7e371510f 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -54,6 +54,14 @@ public function enterNode(PHPParser_Node $node) { $this->getLocation()->hooks[] = $hook; } break; + + // Associate filter documentation with the Expr_FuncCall node instead of + // the Expr_Assign node so that it's picked up by the hook reflector + case 'Expr_Assign': + if (($docblock = $node->getDocComment()) && $this->isFilter($node->expr)) { + $node->expr->setAttribute('comments', array($docblock)); + } + break; } } From d9471095f8bac7f21c587647be4fd3119609b4f5 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 15 Aug 2013 19:32:57 +0100 Subject: [PATCH 106/402] Remove unnecessary executable permissions. --- README.md | 0 importer.php | 0 lib/WP/PrettyPrinter.php | 0 lib/WP/runner.php | 0 plugin.php | 0 template.php | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 README.md mode change 100755 => 100644 importer.php mode change 100755 => 100644 lib/WP/PrettyPrinter.php mode change 100755 => 100644 lib/WP/runner.php mode change 100755 => 100644 plugin.php mode change 100755 => 100644 template.php diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/importer.php b/importer.php old mode 100755 new mode 100644 diff --git a/lib/WP/PrettyPrinter.php b/lib/WP/PrettyPrinter.php old mode 100755 new mode 100644 diff --git a/lib/WP/runner.php b/lib/WP/runner.php old mode 100755 new mode 100644 diff --git a/plugin.php b/plugin.php old mode 100755 new mode 100644 diff --git a/template.php b/template.php old mode 100755 new mode 100644 From c8fc258259f2ed1c581700ad40038a2df05eeff1 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Thu, 15 Aug 2013 20:32:33 +0100 Subject: [PATCH 107/402] Fix use of json_decode() so arrays are passed to import_file(). When using the `import' command it is necessary to decode JSON objects from the input file into associative arrays as this is the format expected by the importer. --- cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.php b/cli.php index 585ec2f3d..0f4e9e772 100644 --- a/cli.php +++ b/cli.php @@ -60,7 +60,7 @@ public function import( $args, $assoc_args ) { exit; } - $phpdoc = json_decode( $phpdoc ); + $phpdoc = json_decode( $phpdoc, true ); if ( is_null( $phpdoc ) ) { WP_CLI::error( sprintf( "JSON in %1\$s can't be decoded :(", $file ) ); exit; From 108a9574c38de2910ec040715eca6c15917f40b4 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 16 Aug 2013 10:35:31 +0100 Subject: [PATCH 108/402] More robust hook documentation retrieval strategy. --- lib/WP/Reflection/FileReflector.php | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index 7e371510f..15ee2624c 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -25,6 +25,13 @@ class WP_Reflection_FileReflector extends FileReflector { */ protected $location = array(); + /** + * Last DocBlock associated with a non-documentable element. + * + * @var PHPParser_Comment_Doc + */ + protected $last_doc = null; + public function enterNode(PHPParser_Node $node) { parent::enterNode($node); @@ -50,18 +57,20 @@ public function enterNode(PHPParser_Node $node) { // Parse out hook definitions and add them to the current location case 'Expr_FuncCall': if ($this->isFilter($node)) { + if ($this->last_doc && !$node->getDocComment()) { + $node->setAttribute('comments', array($this->last_doc)); + $this->last_doc = null; + } $hook = new WP_Reflection_HookReflector($node, $this->context); $this->getLocation()->hooks[] = $hook; } break; + } - // Associate filter documentation with the Expr_FuncCall node instead of - // the Expr_Assign node so that it's picked up by the hook reflector - case 'Expr_Assign': - if (($docblock = $node->getDocComment()) && $this->isFilter($node->expr)) { - $node->expr->setAttribute('comments', array($docblock)); - } - break; + // Pick up DocBlock from non-documentable elements so that it can be assigned + // to the next hook if necessary. + if (!$this->isNodeDocumentable($node) && ($docblock = $node->getDocComment())) { + $this->last_doc = $docblock; } } @@ -118,4 +127,10 @@ protected function findMethodReflector($class, PHPParser_Node_Stmt_ClassMethod $ return $found; } + + protected function isNodeDocumentable(PHPParser_Node $node) { + return parent::isNodeDocumentable($node) + || ($node instanceof PHPParser_Node_Expr_FuncCall + && $this->isFilter($node)); + } } From c170f6fc7b102724607aa8e530fe23db954a20fb Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Fri, 16 Aug 2013 15:19:38 +0100 Subject: [PATCH 109/402] Use parsed type information for arguments and return correctly PR #22 changed behaviour by parsing type and variable information from PHPDoc before it is inserted into the database. Therefore, the templating code needed to be updated to remove its on-the-fly parsing. --- plugin.php | 13 ++++---- template.php | 84 +++++++++++++++++----------------------------------- 2 files changed, 35 insertions(+), 62 deletions(-) diff --git a/plugin.php b/plugin.php index 7d2641d4a..fe22c512b 100644 --- a/plugin.php +++ b/plugin.php @@ -106,10 +106,13 @@ function make_args_safe( $args ) { foreach ( $args as &$arg ) { foreach ( $arg as &$value ) { - - // Loop through all elements of the $args array, and apply our set of filters to them. foreach ( $filters as $filter_function ) - $value = call_user_func( $filter_function, $value ); + if ( is_array( $value ) ) { + foreach ( $value as &$v ) + $v = call_user_func( $filter_function, $v ); + } else { + $value = call_user_func( $filter_function, $value ); + } } } @@ -147,7 +150,7 @@ function expand_content( $content ) { $args = wpfuncref_get_the_arguments(); foreach ( $args as $arg ) { $after_content .= '<div class="wpfuncref-arg">'; - $after_content .= '<h4><code><span class="type">' . $arg['type'] . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; + $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; $after_content .= wpautop( $arg['desc'], false ); $after_content .= '</div>'; } @@ -179,4 +182,4 @@ function autop_for_non_funcref( $content ) { $content = wpautop( $content ); return $content; -} \ No newline at end of file +} diff --git a/template.php b/template.php index 9f5f8f66a..97870c60c 100644 --- a/template.php +++ b/template.php @@ -1,25 +1,20 @@ <?php /** - * Get the current function's return type + * Get the current function's return types * - * @return string + * @return array */ function wpfuncref_return_type() { $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $return_type = wp_list_filter( $function_data, array( 'name' => 'return' ) ); if ( ! empty( $return_type ) ) { - // Grab the description from the return type $return_type = array_shift( $return_type ); - $return_type = $return_type['content']; - $parts = explode( ' ', $return_type ); - $return_type = $parts[0]; - - + $return_type = $return_type['types']; } else { - $return_type = 'void'; + $return_type = array( 'void' ); } return apply_filters( 'wpfuncref_the_return_type', $return_type ); @@ -31,7 +26,7 @@ function wpfuncref_return_type() { * @see wpfuncref_return_type */ function wpfuncref_the_return_type() { - echo wpfuncref_return_type(); + echo implode( '|', wpfuncref_return_type() ); } /** @@ -44,19 +39,9 @@ function wpfuncref_return_desc() { $return_desc = wp_list_filter( $function_data, array( 'name' => 'return' ) ); if ( ! empty( $return_desc ) ) { - // Grab the description from the return type $return_desc = array_shift( $return_desc ); $return_desc = $return_desc['content']; - $parts = explode( ' ', $return_desc ); - - // This handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". - if ( count( $parts ) > 1 ) - $return_desc = ': ' . implode( ' ', array_slice( $parts, 1 ) ); - else - $return_desc = ''; - - } else { $return_desc = ''; } @@ -92,12 +77,9 @@ function wpfuncref_is_function_deprecated() { } /** - * Return the current function's arguments. Template tag function for the function post type. - * - * The default value stuff is messy because ['arguments'] doesn't contain information from ['doc']['tags'][x]['name' == 'param']. + * Return the current function's arguments. * * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) - * @see https://github.com/rmccue/WP-Parser/issues/4 */ function wpfuncref_get_the_arguments() { $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); @@ -105,42 +87,30 @@ function wpfuncref_get_the_arguments() { $params = wp_list_filter( $function_data, array( 'name' => 'param' ) ); $return_args = array(); - if ( ! empty( $params ) ) { - foreach ( $params as $param ) { + if ( ! empty( $args_data ) ) { + foreach ( $args_data as $arg ) { + $param_tag = wp_list_filter( $params, array( 'variable' => $arg['name'] ) ); + $param_tag = array_shift( $param_tag ); - // Split the string: "[bool] [$launch_missles] Fire the rockets" - $parts = explode( ' ', $param['content'] ); - - $return_desc = ''; - $return_type = $parts[0]; - - // The substr handles where the parser had found something like "array Posts" when the PHPDoc looks like "@return array Posts". - if ( count( $parts ) > 2 ) - $return_desc = implode( ' ', array_slice( $parts, 2 ) ); - - // Assemble data for this parameter - $arg = array( - 'desc' => $return_desc, - 'name' => $parts[1], - 'type' => $return_type, + $param = array( + 'name' => $arg['name'], ); - // Maybe add default value - $param_default_value = wp_list_filter( $args_data, array( 'name' => $parts[1] ) ); - if ( ! empty( $param_default_value ) ) { - $param_default_value = array_shift( $param_default_value ); - $param_default_value = $param_default_value['default']; - - if ( ! is_null( $param_default_value ) ) - $arg['default_value'] = $param_default_value; - } + if ( ! empty( $arg['default'] ) ) + $param['default_value'] = $arg['default']; - $return_args[] = $arg; - } + if ( ! empty( $arg['type'] ) ) + $param['types'] = array( $arg['type'] ); + else if ( ! empty( $param_tag['types'] ) ) + $param['types'] = $param_tag['types']; + else + $param['types'] = array(); + if ( ! empty( $param_tag['content'] ) ) + $param['desc'] = $param_tag['content']; - } else { - $return_args = array(); + $return_args[] = $param; + } } return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); @@ -159,7 +129,7 @@ function wpfuncref_prototype() { $friendly_args = array(); $args = wpfuncref_get_the_arguments(); foreach ( $args as $arg ) { - $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', $arg['type'], $arg['name'] ); + $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); if ( !empty( $arg['default_value'] ) ) $friendly .= ' <span class="default"> = <span class="value">' . $arg['default_value'] . '</span></span>'; @@ -169,7 +139,7 @@ function wpfuncref_prototype() { $name = get_the_title(); - $prototype = sprintf( '<p class="wpfuncref-prototype"><code><span class="type">%s</span> %s ( %s )</code></p>', $type, $name, $friendly_args ); + $prototype = sprintf( '<p class="wpfuncref-prototype"><code><span class="type">%s</span> %s ( %s )</code></p>', implode( '|', $type ), $name, $friendly_args ); return apply_filters( 'wpfuncref_prototype', $prototype ); } @@ -207,4 +177,4 @@ function wpfuncref_source_link() { } return $trac_url; -} \ No newline at end of file +} From 9785a562f1ad21b5316d2196dd90ed98e669266c Mon Sep 17 00:00:00 2001 From: Eric Lewis <eric@webdevstudios.com> Date: Wed, 7 Aug 2013 23:32:45 -0400 Subject: [PATCH 110/402] First pass at importing hook documentation --- importer.php | 60 +++++++++++++++++++++++++++++++++++++---------- lib/WP/runner.php | 7 +++--- plugin.php | 19 +++++++++++---- 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/importer.php b/importer.php index 2f6742c3f..90312283c 100644 --- a/importer.php +++ b/importer.php @@ -46,7 +46,12 @@ class Importer { */ public $post_type_class; - public $post_type_hook; // todo + /** + * Post type name for hooks + * + * @var string + */ + public $post_type_hook; /** * Handy store for meta about the current item being imported @@ -71,6 +76,7 @@ public function __construct( array $args = array() ) { $r = wp_parse_args( $args, array( 'post_type_class' => 'wpapi-class', 'post_type_function' => 'wpapi-function', + 'post_type_hook' => 'wpapi-hook', 'taxonomy_file' => 'wpapi-source-file', 'taxonomy_package' => 'wpapi-package', 'taxonomy_since_version' => 'wpapi-since', @@ -138,18 +144,46 @@ public function import_file( array $file, $skip_sleep = false, $import_internal sleep( 3 ); } } + + if ( ! empty( $file['hooks'] ) ) { + $i = 0; + + foreach ( $file['hooks'] as $hook ) { + $this->import_hook( $hook, 0, $import_internal ); + $i++; + + // Wait 3 seconds after every 10 items + if ( ! $skip_sleep && $i % 10 == 0 ) + sleep( 3 ); + } + } } /** * Create a post for a function * * @param array $data Function - * @param int $class_post_id Optional; post ID of the class this method belongs to. Defaults to zero (not a method). + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. * @return bool|int Post ID of this function, false if any failure. */ - public function import_function( array $data, $class_post_id = 0, $import_internal = false ) { - return $this->import_item( $data, $class_post_id, $import_internal ); + public function import_function( array $data, $parent_post_id = 0, $import_internal = false ) { + $function_id = $this->import_item( $data, $parent_post_id, $import_internal ); + + foreach ( $data['hooks'] as $hook ) + $this->import_hook( $hook, $function_id, $import_internal ); + } + + /** + * Create a post for a hook + * + * @param array $data Hook + * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, hooks marked @internal will be imported. + * @return bool|int Post ID of this hook, false if any failure. + */ + public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { + return $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); } /** @@ -187,12 +221,12 @@ protected function import_class( array $data, $import_internal = false ) { * Anything more specific should go in either import_function() or import_class() as appropriate. * * @param array $data Data - * @param int $class_post_id Optional; post ID of the class this item belongs to. Defaults to zero (not a method). + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked @internal will be imported. * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). * @return bool|int Post ID of this item, false if any failure. */ - public function import_item( array $data, $class_post_id = 0, $import_internal = false, array $arg_overrides = array() ) { + public function import_item( array $data, $parent_post_id = 0, $import_internal = false, array $arg_overrides = array() ) { global $wpdb; // Don't import items marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 @@ -200,7 +234,7 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = if ( $post_data['post_type'] === $this->post_type_class ) WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); - elseif ( $class_post_id ) + elseif ( $parent_post_id ) WP_CLI::line( sprintf( "\t\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); @@ -214,14 +248,14 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = 'post_content' => $data['doc']['long_description'], 'post_excerpt' => $data['doc']['description'], 'post_name' => $slug, - 'post_parent' => (int) $class_post_id, + 'post_parent' => (int) $parent_post_id, 'post_status' => 'publish', 'post_title' => $data['name'], 'post_type' => $this->post_type_function, ) ); // Look for an existing post for this item - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $class_post_id ) ); + $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $parent_post_id ) ); // Insert/update the item post if ( ! empty( $existing_post_id ) ) { @@ -237,7 +271,7 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = if ( $post_data['post_type'] === $this->post_type_class ) $this->errors[] = sprintf( "\tProblem inserting/updating post for class \"%1\$s\"", $data['name'], $ID->get_error_message() ); - elseif ( $class_post_id ) + elseif ( $parent_post_id ) $this->errors[] = sprintf( "\t\tProblem inserting/updating post for method \"%1\$s\"", $data['name'], $ID->get_error_message() ); else $this->errors[] = sprintf( "\tProblem inserting/updating post for function \"%1\$s\"", $data['name'], $ID->get_error_message() ); @@ -320,7 +354,7 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = if ( $is_new_post ) { if ( $post_data['post_type'] === $this->post_type_class ) WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); - elseif ( $class_post_id ) + elseif ( $parent_post_id ) WP_CLI::line( sprintf( "\t\tImported method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); @@ -328,7 +362,7 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = } else { if ( $post_data['post_type'] === $this->post_type_class ) WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - elseif ( $class_post_id ) + elseif ( $parent_post_id ) WP_CLI::line( sprintf( "\t\tUpdated method \"%1\$s\"", $data['name'] ) ); else WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); @@ -336,4 +370,4 @@ public function import_item( array $data, $class_post_id = 0, $import_internal = return $ID; } -} \ No newline at end of file +} diff --git a/lib/WP/runner.php b/lib/WP/runner.php index f4692afde..42a56d0f1 100644 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -53,9 +53,8 @@ function parse_files($files, $root) { ); } - $hooks = export_hooks($file->hooks); - if (!empty($hooks)) - $out['hooks'] = $hooks; + if (!empty($file->hooks)) + $out['hooks'] = export_hooks($file->hooks); foreach ($file->getFunctions() as $function) { $func = array( @@ -63,6 +62,7 @@ function parse_files($files, $root) { 'line' => $function->getLineNumber(), 'arguments' => export_arguments($function->getArguments()), 'doc' => export_docblock($function), + 'hooks' => array(), ); if (!empty($function->hooks)) @@ -133,6 +133,7 @@ function export_hooks(array $hooks) { 'line' => $hook->getLineNumber(), 'type' => $hook->getType(), 'arguments' => implode(', ', $hook->getArgs()), + 'doc' => export_docblock($hook), ); } return $out; diff --git a/plugin.php b/plugin.php index fe22c512b..6d8d33740 100644 --- a/plugin.php +++ b/plugin.php @@ -50,6 +50,17 @@ function register_post_types() { 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), 'taxonomies' => array( 'wpapi-source-file' ), ) ); + + // Hooks + register_post_type( 'wpapi-hook', array( + 'has_archive' => true, + 'hierarchical' => false, + 'label' => __( 'Hooks', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'hooks' ), + 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), + 'taxonomies' => array( 'wpapi-source-file' ), + ) ); } /** @@ -57,7 +68,7 @@ function register_post_types() { */ function register_taxonomies() { // Files - register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function' ), array( + register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( 'label' => __( 'Files', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'files' ), @@ -66,7 +77,7 @@ function register_taxonomies() { ) ); // Package - register_taxonomy( 'wpapi-package', array( 'wpapi-class', 'wpapi-function' ), array( + register_taxonomy( 'wpapi-package', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( 'hierarchical' => true, 'label' => '@package', 'public' => true, @@ -76,7 +87,7 @@ function register_taxonomies() { ) ); // @since - register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function' ), array( + register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( 'hierarchical' => true, 'label' => __( '@since', 'wpfuncref' ), 'public' => true, @@ -138,7 +149,7 @@ function humanize_separator( $type ) { function expand_content( $content ) { $post = get_post(); - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) return $content; $before_content = wpfuncref_prototype(); From c1b1dec2f1b319834a7e2a6b07f06d546a0fa63c Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 18 Aug 2013 11:15:08 +0100 Subject: [PATCH 111/402] Taxonomy associations are handled during taxonomy registration --- plugin.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugin.php b/plugin.php index 6d8d33740..0a9992591 100644 --- a/plugin.php +++ b/plugin.php @@ -37,7 +37,6 @@ function register_post_types() { 'public' => true, 'rewrite' => array( 'slug' => 'functions' ), 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), - 'taxonomies' => array( 'wpapi-source-file' ), ) ); // Classes @@ -48,7 +47,6 @@ function register_post_types() { 'public' => true, 'rewrite' => array( 'slug' => 'classes' ), 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), - 'taxonomies' => array( 'wpapi-source-file' ), ) ); // Hooks @@ -59,7 +57,6 @@ function register_post_types() { 'public' => true, 'rewrite' => array( 'slug' => 'hooks' ), 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), - 'taxonomies' => array( 'wpapi-source-file' ), ) ); } From c628479422c2dbc9131fbaa0f285c72fdd96ccfd Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 18 Aug 2013 11:18:43 +0100 Subject: [PATCH 112/402] Functions are not hierarchical Methods (which are stored as functions) have a post_parent, but not of the same type so we should handle this is a custom fashion (just like bbPress for example). Removes `hierarchical => false` as this is the default. --- plugin.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/plugin.php b/plugin.php index 0a9992591..2d73a4e7b 100644 --- a/plugin.php +++ b/plugin.php @@ -29,34 +29,40 @@ * Register the function and class post types */ function register_post_types() { + $supports = array( + 'comments', + 'custom-fields', + 'editor', + 'excerpt', + 'revisions', + 'title', + ); + // Functions register_post_type( 'wpapi-function', array( 'has_archive' => true, - 'hierarchical' => true, 'label' => __( 'Functions', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'functions' ), - 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'page-attributes', 'revisions', 'title' ), + 'supports' => $supports, ) ); // Classes register_post_type( 'wpapi-class', array( 'has_archive' => true, - 'hierarchical' => false, 'label' => __( 'Classes', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'classes' ), - 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), + 'supports' => $supports, ) ); // Hooks register_post_type( 'wpapi-hook', array( 'has_archive' => true, - 'hierarchical' => false, 'label' => __( 'Hooks', 'wpfuncref' ), 'public' => true, 'rewrite' => array( 'slug' => 'hooks' ), - 'supports' => array( 'comments', 'custom-fields', 'editor', 'excerpt', 'revisions', 'title' ), + 'supports' => $supports, ) ); } From d40104142eb99782a6b97612d77d3aef222dcabc Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 18 Aug 2013 11:32:13 +0100 Subject: [PATCH 113/402] Improve rewrite rules: * Remove feeds and static front * Plural archive URLs, singular item URLs --- plugin.php | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/plugin.php b/plugin.php index 2d73a4e7b..2ab7c2339 100644 --- a/plugin.php +++ b/plugin.php @@ -40,29 +40,41 @@ function register_post_types() { // Functions register_post_type( 'wpapi-function', array( - 'has_archive' => true, - 'label' => __( 'Functions', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'functions' ), - 'supports' => $supports, + 'has_archive' => 'functions', + 'label' => __( 'Functions', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'function', + 'with_front' => false, + ), + 'supports' => $supports, ) ); // Classes register_post_type( 'wpapi-class', array( - 'has_archive' => true, - 'label' => __( 'Classes', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'classes' ), - 'supports' => $supports, + 'has_archive' => 'classes', + 'label' => __( 'Classes', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'class', + 'with_front' => false, + ), + 'supports' => $supports, ) ); // Hooks register_post_type( 'wpapi-hook', array( - 'has_archive' => true, - 'label' => __( 'Hooks', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'hooks' ), - 'supports' => $supports, + 'has_archive' => 'hooks', + 'label' => __( 'Hooks', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'hook', + 'with_front' => false, + ), + 'supports' => $supports, ) ); } From 003e6ff484126ad6f52888ee0cc37bbae3ed8711 Mon Sep 17 00:00:00 2001 From: Jon Cave <jon@joncave.co.uk> Date: Sun, 18 Aug 2013 14:34:47 +0100 Subject: [PATCH 114/402] Better method URLs: /method/:class/:method/ Method post_names are now namespaced with the method's class. This allows the method permalink to easily include the class name and it prevents issues with duplicated method names. --- importer.php | 5 ++++- plugin.php | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/importer.php b/importer.php index 90312283c..f25f8f88d 100644 --- a/importer.php +++ b/importer.php @@ -208,8 +208,11 @@ protected function import_class( array $data, $import_internal = false ) { update_post_meta( $class_id, '_wpapi_visibility', $data['visibility'] ); // Now add the methods - foreach ( $data['methods'] as $method ) + foreach ( $data['methods'] as $method ) { + // Namespace method names with the class name + $method['name'] = $data['name'] . '-' . $method['name']; $this->import_item( $method, $class_id, $import_internal ); + } return $class_id; } diff --git a/plugin.php b/plugin.php index 2ab7c2339..6d88fffb2 100644 --- a/plugin.php +++ b/plugin.php @@ -51,6 +51,9 @@ function register_post_types() { 'supports' => $supports, ) ); + // Methods + add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-function&name=$matches[1]-$matches[2]', 'top' ); + // Classes register_post_type( 'wpapi-class', array( 'has_archive' => 'classes', @@ -112,6 +115,16 @@ function register_taxonomies() { ) ); } +function method_permalink( $link, $post ) { + if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) + return $link; + + list( $class, $method ) = explode( '-', $post->post_name ); + $link = home_url( user_trailingslashit( "method/$class/$method" ) ); + return $link; +} +add_filter( 'post_type_link', __NAMESPACE__ . '\\method_permalink', 10, 2 ); + /** * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. * From 7a1b11baa8d6afc0a12ecc4bfa0963a414395d28 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 14 Feb 2014 15:53:27 -0500 Subject: [PATCH 115/402] Give correct messages when importing/updating a hook --- importer.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/importer.php b/importer.php index f25f8f88d..9976c8c0f 100644 --- a/importer.php +++ b/importer.php @@ -357,6 +357,12 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( $is_new_post ) { if ( $post_data['post_type'] === $this->post_type_class ) WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); + elseif ( $post_data['post_type'] === $this->post_type_hook ) + if ( $parent_post_id ) { + WP_CLI::line( sprintf( "\t\tImported hook \"%1\$s\"", $data['name'] ) ); + } else { + WP_CLI::line( sprintf( "\tImported hook \"%1\$s\"", $data['name'] ) ); + } elseif ( $parent_post_id ) WP_CLI::line( sprintf( "\t\tImported method \"%1\$s\"", $data['name'] ) ); else @@ -365,6 +371,12 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } else { if ( $post_data['post_type'] === $this->post_type_class ) WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); + elseif ( $post_data['post_type'] === $this->post_type_hook ) + if ( $parent_post_id ) { + WP_CLI::line( sprintf( "\t\tUpdated hook \"%1\$s\"", $data['name'] ) ); + } else { + WP_CLI::line( sprintf( "\tUpdated hook \"%1\$s\"", $data['name'] ) ); + } elseif ( $parent_post_id ) WP_CLI::line( sprintf( "\t\tUpdated method \"%1\$s\"", $data['name'] ) ); else From 8a550920a75935c9ae16c7d08e61a225d2449623 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 14 Feb 2014 16:59:05 -0500 Subject: [PATCH 116/402] Fix an undefined offset notice when using the generate command When running `wp funcref generate <directory>`, an undefined offset notice is being generated, because the optional `<output-file>` argument is being treated as if it is required. --- cli.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cli.php b/cli.php index 0f4e9e772..e1631fe90 100644 --- a/cli.php +++ b/cli.php @@ -17,10 +17,12 @@ class Command extends WP_CLI_Command { * @synopsis <directory> [<output_file>] */ public function generate( $args ) { - list( $directory, $output_file ) = $args; + $directory = $args[0]; - if ( empty( $output_file ) ) - $output_file = 'phpdoc.json'; + $output_file = 'phpdoc.json'; + if ( ! empty( $args[1] ) ) { + $output_file = $args[1]; + } $directory = realpath( $directory ); $this->_load_libs(); From ee6b2e2022c130b73357b40008f274a2c678a2ef Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 24 Feb 2014 20:37:51 +0200 Subject: [PATCH 117/402] Brutally removed submodules. --- .gitmodules | 12 ------------ vendor/dflydev/markdown | 1 - vendor/nikic/php-parser | 1 - vendor/phpdocumentor/reflection | 1 - vendor/phpdocumentor/reflection-docblock | 1 - 5 files changed, 16 deletions(-) delete mode 160000 vendor/dflydev/markdown delete mode 160000 vendor/nikic/php-parser delete mode 160000 vendor/phpdocumentor/reflection delete mode 160000 vendor/phpdocumentor/reflection-docblock diff --git a/.gitmodules b/.gitmodules index 3567b7974..e69de29bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +0,0 @@ -[submodule "vendor/phpdocumentor/reflection"] - path = vendor/phpdocumentor/reflection - url = git@github.com:phpDocumentor/Reflection.git -[submodule "vendor/phpdocumentor/reflection-docblock"] - path = vendor/phpdocumentor/reflection-docblock - url = git@github.com:phpDocumentor/ReflectionDocBlock.git -[submodule "vendor/dflydev/markdown"] - path = vendor/dflydev/markdown - url = git@github.com:dflydev/dflydev-markdown.git -[submodule "vendor/nikic/php-parser"] - path = vendor/nikic/php-parser - url = git@github.com:nikic/PHP-Parser.git diff --git a/vendor/dflydev/markdown b/vendor/dflydev/markdown deleted file mode 160000 index 11f8faa2d..000000000 --- a/vendor/dflydev/markdown +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11f8faa2d17f717a038b4d372abd22a6ac4a15dc diff --git a/vendor/nikic/php-parser b/vendor/nikic/php-parser deleted file mode 160000 index 5ccf6196d..000000000 --- a/vendor/nikic/php-parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5ccf6196d6925e66568e3b8460c262e9512e4b92 diff --git a/vendor/phpdocumentor/reflection b/vendor/phpdocumentor/reflection deleted file mode 160000 index 0e613ee01..000000000 --- a/vendor/phpdocumentor/reflection +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0e613ee01ec62cf894223914921f56fecb4f7a8f diff --git a/vendor/phpdocumentor/reflection-docblock b/vendor/phpdocumentor/reflection-docblock deleted file mode 160000 index 6d705c1a0..000000000 --- a/vendor/phpdocumentor/reflection-docblock +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d705c1a0f9e2a6d73d2e9ec0e538b9dfaf4315f From 1aa2b1b7ed2fde5bc0cc067ee06c3503573de43b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 24 Feb 2014 21:13:58 +0200 Subject: [PATCH 118/402] Reintroduced composer.json --- .gitignore | 2 ++ .gitmodules | 0 composer.json | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 .gitignore delete mode 100644 .gitmodules create mode 100644 composer.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..88e99d50d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29bb..000000000 diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..3b181625f --- /dev/null +++ b/composer.json @@ -0,0 +1,28 @@ +{ + "name" : "rmccue/wp-parser", + "description": "Static code parser for WordPress source.", + "keywords" : ["wordpress"], + "type" : "wordpress-plugin", + "homepage" : "https://github.com/rmccue/WP-Parser", + "authors" : [ + { + "name" : "Ryan McCue", + "homepage": "http://ryanmccue.info" + } + ], + "support" : { + "issues": "https://github.com/rmccue/WP-Parser/issues", + "source": "https://github.com/rmccue/WP-Parser" + }, + "require" : { + "php" : ">=5.3.3", + "composer/installers" : "~1.0", + "phpdocumentor/reflection": "~1.0", + "erusev/parsedown" : "~0.9" + }, + "autoload" : { + "psr-0": { + "WP": "lib/" + } + } +} \ No newline at end of file From 44c4d7871bfcc20412b23bc8b4f271ff3afed14c Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 24 Feb 2014 23:47:18 +0200 Subject: [PATCH 119/402] Made filters consistent with function names. Fixes #33 --- template.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/template.php b/template.php index 97870c60c..13410ac86 100644 --- a/template.php +++ b/template.php @@ -17,7 +17,7 @@ function wpfuncref_return_type() { $return_type = array( 'void' ); } - return apply_filters( 'wpfuncref_the_return_type', $return_type ); + return apply_filters( 'wpfuncref_return_type', $return_type ); } /** @@ -46,7 +46,7 @@ function wpfuncref_return_desc() { $return_desc = ''; } - return apply_filters( 'wpfuncref_the_return_desc', $return_desc ); + return apply_filters( 'wpfuncref_return_desc', $return_desc ); } /** From 315706f1ca52a2c4a69e58b9f8646811131c908d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 24 Feb 2014 16:54:51 -0500 Subject: [PATCH 120/402] Clean up the hook message indenting conditionals --- importer.php | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/importer.php b/importer.php index 9976c8c0f..6846d7bb4 100644 --- a/importer.php +++ b/importer.php @@ -355,32 +355,27 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Everything worked! Woo hoo! if ( $is_new_post ) { - if ( $post_data['post_type'] === $this->post_type_class ) + if ( $post_data['post_type'] === $this->post_type_class ) { WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); - elseif ( $post_data['post_type'] === $this->post_type_hook ) - if ( $parent_post_id ) { - WP_CLI::line( sprintf( "\t\tImported hook \"%1\$s\"", $data['name'] ) ); - } else { - WP_CLI::line( sprintf( "\tImported hook \"%1\$s\"", $data['name'] ) ); - } - elseif ( $parent_post_id ) + } elseif ( $post_data['post_type'] === $this->post_type_hook ) { + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + WP_CLI::line( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); + } elseif ( $parent_post_id ) { WP_CLI::line( sprintf( "\t\tImported method \"%1\$s\"", $data['name'] ) ); - else + } else { WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); - + } } else { - if ( $post_data['post_type'] === $this->post_type_class ) + if ( $post_data['post_type'] === $this->post_type_class ) { WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - elseif ( $post_data['post_type'] === $this->post_type_hook ) - if ( $parent_post_id ) { - WP_CLI::line( sprintf( "\t\tUpdated hook \"%1\$s\"", $data['name'] ) ); - } else { - WP_CLI::line( sprintf( "\tUpdated hook \"%1\$s\"", $data['name'] ) ); - } - elseif ( $parent_post_id ) + } elseif ( $post_data['post_type'] === $this->post_type_hook ) { + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + WP_CLI::line( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); + } elseif ( $parent_post_id ) { WP_CLI::line( sprintf( "\t\tUpdated method \"%1\$s\"", $data['name'] ) ); - else + } else { WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); + } } return $ID; From 7ce567f26b396a4898bb7cdd7edc642b8f2f5a0b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 26 Feb 2014 22:40:33 +0200 Subject: [PATCH 121/402] Added license to composer.json --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 3b181625f..9ae82bd92 100644 --- a/composer.json +++ b/composer.json @@ -4,6 +4,7 @@ "keywords" : ["wordpress"], "type" : "wordpress-plugin", "homepage" : "https://github.com/rmccue/WP-Parser", + "license" : "GPL-2.0+", "authors" : [ { "name" : "Ryan McCue", From 36c94359f3418ae71781b1be621483a9227a2da1 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 26 Feb 2014 22:51:57 +0200 Subject: [PATCH 122/402] Removed custom autoloader in favor of composer one. --- cli.php | 42 ------------------------------------------ plugin.php | 5 +++++ 2 files changed, 5 insertions(+), 42 deletions(-) diff --git a/cli.php b/cli.php index e1631fe90..f8f1f038c 100644 --- a/cli.php +++ b/cli.php @@ -25,7 +25,6 @@ public function generate( $args ) { } $directory = realpath( $directory ); - $this->_load_libs(); WP_CLI::line(); // Get data from the PHPDoc @@ -49,7 +48,6 @@ public function generate( $args ) { */ public function import( $args, $assoc_args ) { list( $file ) = $args; - $this->_load_libs(); WP_CLI::line(); // Get the data from the <file>, and check it's valid. @@ -87,52 +85,12 @@ public function generate_and_import( $args, $assoc_args ) { exit; } - $this->_load_libs(); WP_CLI::line(); // Import data $this->_do_import( $this->_get_phpdoc_data( $directory, 'array' ), isset( $assoc_args['quick'] ), isset( $assoc_args['import-internal'] ) ); } - - /** - * Loads required libraries from WP-Parser project - * - * @see https://github.com/rmccue/WP-Parser/ - */ - protected function _load_libs() { - spl_autoload_register( __CLASS__ . '::autoloader' ); - require_once __DIR__ . "/lib/WP/runner.php"; - } - - public static function autoloader( $class ) { - $vendorDir = __DIR__ . '/vendor'; - $map = array( - 'phpDocumentor' => array( - $vendorDir . '/phpdocumentor/reflection-docblock/src', - $vendorDir . '/phpdocumentor/reflection/src', - $vendorDir . '/phpdocumentor/reflection/tests/unit', - $vendorDir . '/phpdocumentor/reflection/tests/mocks' - ), - 'dflydev\\markdown' => $vendorDir . '/dflydev/markdown/src', - 'WP' => __DIR__ . '/lib', - 'PHPParser' => $vendorDir . '/nikic/php-parser/lib', - ); - - foreach ( $map as $prefix => $paths ) { - foreach ( (array) $paths as $path ) { - if ( strpos( $class, $prefix ) !== 0 ) { - continue; - } - - $file = $path . DIRECTORY_SEPARATOR . str_replace( array( '_', '\\' ), DIRECTORY_SEPARATOR, $class ) . '.php'; - - if (file_exists($file)) - include_once $file; - } - } - } - /** * Generate the data from the PHPDoc markup. * diff --git a/plugin.php b/plugin.php index 6d88fffb2..d3ec9a8ff 100644 --- a/plugin.php +++ b/plugin.php @@ -9,6 +9,11 @@ namespace WPFuncRef; +if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { + require __DIR__ . '/vendor/autoload.php'; +} + +require_once __DIR__ . '/lib/WP/runner.php'; require_once __DIR__ . '/template.php'; if ( defined('WP_CLI') && WP_CLI ) { From fc2c8c83e1a661df949f5212d775956b3bf550ab Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 26 Feb 2014 22:56:22 +0200 Subject: [PATCH 123/402] Documented user argument in readme and code. --- README.md | 2 +- cli.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ce49e8926..a7f3d84e2 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Note: ensure the plugin is enabled first. In your site's directory: - $ wp funcref generate-and-import /path/to/source/code + $ wp funcref generate-and-import /path/to/source/code --user=<id|login> ## Displaying in your theme By default, your theme will use the built-in content. This content is generated diff --git a/cli.php b/cli.php index f8f1f038c..619d9468e 100644 --- a/cli.php +++ b/cli.php @@ -74,7 +74,7 @@ public function import( $args, $assoc_args ) { * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * * @subcommand generate-and-import - * @synopsis <directory> [--quick] [--import-internal] + * @synopsis <directory> [--quick] [--import-internal] [--user] */ public function generate_and_import( $args, $assoc_args ) { list( $directory ) = $args; From b936f3d52eeaa077c82a0a52b9b7225847563ecc Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 26 Feb 2014 22:59:20 +0200 Subject: [PATCH 124/402] Added Composer to requirements in readme and quick note on setup. Finally fixes #31 --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index a7f3d84e2..aedd94fd2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ # WP Function Reference ## Requirements * PHP 5.3+ +* [Composer](https://getcomposer.org/) * [WP CLI](http://wp-cli.org/) +After cloning from Git set up dependencies via: + + composer install --no-dev + ## Running Note: ensure the plugin is enabled first. From 7825bc7d5442f2cd12358906d96b0097432bebd8 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Thu, 27 Feb 2014 19:49:47 +0200 Subject: [PATCH 125/402] Added parent call in leaveNode to fix missing functions/classes in results. See #55 --- lib/WP/Reflection/FileReflector.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/WP/Reflection/FileReflector.php b/lib/WP/Reflection/FileReflector.php index 15ee2624c..726ad2bbb 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/WP/Reflection/FileReflector.php @@ -75,6 +75,9 @@ public function enterNode(PHPParser_Node $node) { } public function leaveNode(PHPParser_Node $node) { + + parent::leaveNode( $node ); + switch ($node->getType()) { case 'Stmt_Class': case 'Stmt_ClassMethod': From 9354af42735bfe4497b2bd4837b3cf4486010d89 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Thu, 27 Feb 2014 19:50:50 +0200 Subject: [PATCH 126/402] Commented out isFinal calls for properties since no longer defined upstream (?) --- lib/WP/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index 42a56d0f1..a8e3e5e49 100644 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -158,7 +158,7 @@ function export_properties(array $properties) { 'name' => $property->getName(), 'line' => $property->getLineNumber(), 'default' => $property->getDefault(), - 'final' => $property->isFinal(), +// 'final' => $property->isFinal(), 'static' => $property->isStatic(), 'visibililty' => $property->getVisibility(), ); From fec73be0e48c3ac741df97379441d3787cdfb966 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 21:46:50 +0200 Subject: [PATCH 127/402] Renamed namespace to WP_Parser. --- README.md | 5 +++-- cli.php | 2 +- importer.php | 2 +- plugin.php | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index aedd94fd2..061d872b1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# WP Function Reference +# WP Parser + ## Requirements * PHP 5.3+ * [Composer](https://getcomposer.org/) @@ -22,4 +23,4 @@ on the fly by the `expand_content` function. To use your own theming instead, simply add the following to your `functions.php`: - remove_filter( 'the_content', 'WPFuncRef\\expand_content' ); + remove_filter( 'the_content', 'WP_Parser\\expand_content' ); diff --git a/cli.php b/cli.php index 619d9468e..9ec2a977d 100644 --- a/cli.php +++ b/cli.php @@ -1,6 +1,6 @@ <?php -namespace WPFuncRef; +namespace WP_Parser; use phpDocumentor\Reflection\FileReflector; use WP_CLI; diff --git a/importer.php b/importer.php index 6846d7bb4..30890ffeb 100644 --- a/importer.php +++ b/importer.php @@ -1,6 +1,6 @@ <?php -namespace WPFuncRef; +namespace WP_Parser; use WP_CLI; diff --git a/plugin.php b/plugin.php index d3ec9a8ff..f3c048cdf 100644 --- a/plugin.php +++ b/plugin.php @@ -7,7 +7,7 @@ * Version: 1.0 */ -namespace WPFuncRef; +namespace WP_Parser; if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { require __DIR__ . '/vendor/autoload.php'; From 7d2982df9eb9782a11a3fdb9eec7415bd5967faa Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 21:48:45 +0200 Subject: [PATCH 128/402] Changed autoload type to classmap. --- composer.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 9ae82bd92..11da96fc5 100644 --- a/composer.json +++ b/composer.json @@ -22,8 +22,6 @@ "erusev/parsedown" : "~0.9" }, "autoload" : { - "psr-0": { - "WP": "lib/" - } + "classmap": ["lib"] } } \ No newline at end of file From 5806cafdb772fa17b76ebb77c60b1fcbe4c07512 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 21:51:26 +0200 Subject: [PATCH 129/402] Moved importer class to lib. --- importer.php => lib/class-importer.php | 2 -- plugin.php | 1 - 2 files changed, 3 deletions(-) rename importer.php => lib/class-importer.php (99%) diff --git a/importer.php b/lib/class-importer.php similarity index 99% rename from importer.php rename to lib/class-importer.php index 30890ffeb..cb8f2456b 100644 --- a/importer.php +++ b/lib/class-importer.php @@ -6,8 +6,6 @@ /** * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. - * - * Based on the Importer class from https://github.com/rmccue/WP-Parser/ */ class Importer { diff --git a/plugin.php b/plugin.php index f3c048cdf..c7217cacf 100644 --- a/plugin.php +++ b/plugin.php @@ -17,7 +17,6 @@ require_once __DIR__ . '/template.php'; if ( defined('WP_CLI') && WP_CLI ) { - require_once __DIR__ . '/importer.php'; require_once __DIR__ . '/cli.php'; } From eb816f379cca996e41fd2cfada253395a1f7fabe Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 21:53:33 +0200 Subject: [PATCH 130/402] Moved command class to lib. --- cli.php => lib/class-command.php | 3 --- plugin.php | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) rename cli.php => lib/class-command.php (98%) diff --git a/cli.php b/lib/class-command.php similarity index 98% rename from cli.php rename to lib/class-command.php index 9ec2a977d..8d5fa8cfb 100644 --- a/cli.php +++ b/lib/class-command.php @@ -2,7 +2,6 @@ namespace WP_Parser; -use phpDocumentor\Reflection\FileReflector; use WP_CLI; use WP_CLI_Command; @@ -197,5 +196,3 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna WP_CLI::line(); } } - -WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); diff --git a/plugin.php b/plugin.php index c7217cacf..f7de742b5 100644 --- a/plugin.php +++ b/plugin.php @@ -16,8 +16,8 @@ require_once __DIR__ . '/lib/WP/runner.php'; require_once __DIR__ . '/template.php'; -if ( defined('WP_CLI') && WP_CLI ) { - require_once __DIR__ . '/cli.php'; +if ( defined( 'WP_CLI' ) && WP_CLI ) { + \WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); } add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); From b1a56ee042a54907901fe60173543b2f17746669 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 22:09:52 +0200 Subject: [PATCH 131/402] Renamed, namespaced, and moved file reflector. --- lib/WP/runner.php | 4 +- ...Reflector.php => class-file-reflector.php} | 80 ++++++++++--------- 2 files changed, 46 insertions(+), 38 deletions(-) rename lib/{WP/Reflection/FileReflector.php => class-file-reflector.php} (50%) diff --git a/lib/WP/runner.php b/lib/WP/runner.php index a8e3e5e49..1ec638484 100644 --- a/lib/WP/runner.php +++ b/lib/WP/runner.php @@ -1,5 +1,7 @@ <?php +use WP_Parser\File_Reflector; + function get_wp_files($directory) { $iterableFiles = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($directory) @@ -24,7 +26,7 @@ function parse_files($files, $root) { $output = array(); foreach ($files as $filename) { - $file = new WP_Reflection_FileReflector($filename); + $file = new File_Reflector($filename); $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); $file->setFilename($path); diff --git a/lib/WP/Reflection/FileReflector.php b/lib/class-file-reflector.php similarity index 50% rename from lib/WP/Reflection/FileReflector.php rename to lib/class-file-reflector.php index 726ad2bbb..8ef2639e5 100644 --- a/lib/WP/Reflection/FileReflector.php +++ b/lib/class-file-reflector.php @@ -1,5 +1,7 @@ <?php +namespace WP_Parser; + use phpDocumentor\Reflection; use phpDocumentor\Reflection\FileReflector; @@ -9,11 +11,11 @@ * Extends the FileReflector from phpDocumentor to parse out WordPress * hooks and note function relationships. */ -class WP_Reflection_FileReflector extends FileReflector { +class File_Reflector extends FileReflector { /** * List of hooks defined in global scope in this file. * - * @var WP_Reflection_HookReflector[] + * @var \WP_Reflection_HookReflector[] */ public $hooks = array(); @@ -21,47 +23,47 @@ class WP_Reflection_FileReflector extends FileReflector { * Stack of classes/methods/functions currently being parsed. * * @see WP_Reflection_FileReflector::getLocation() - * @var phpDocumentor\Reflection\BaseReflector[] + * @var \phpDocumentor\Reflection\BaseReflector[] */ protected $location = array(); /** * Last DocBlock associated with a non-documentable element. * - * @var PHPParser_Comment_Doc + * @var \PHPParser_Comment_Doc */ protected $last_doc = null; - public function enterNode(PHPParser_Node $node) { - parent::enterNode($node); + public function enterNode( \PHPParser_Node $node ) { + parent::enterNode( $node ); - switch ($node->getType()) { + switch ( $node->getType() ) { // Add classes, functions, and methods to the current location stack case 'Stmt_Class': - array_push($this->location, end($this->classes)); + array_push( $this->location, end( $this->classes ) ); break; case 'Stmt_Function': - array_push($this->location, end($this->functions)); + array_push( $this->location, end( $this->functions ) ); break; case 'Stmt_ClassMethod': - $method = $this->findMethodReflector($this->getLocation(), $node); - if ($method) { - array_push($this->location, $method); + $method = $this->findMethodReflector( $this->getLocation(), $node ); + if ( $method ) { + array_push( $this->location, $method ); } else { // Repeat the current location so that leaveNode() doesn't // pop it off - array_push($this->location, $this->getLocation()); + array_push( $this->location, $this->getLocation() ); } break; // Parse out hook definitions and add them to the current location case 'Expr_FuncCall': - if ($this->isFilter($node)) { - if ($this->last_doc && !$node->getDocComment()) { - $node->setAttribute('comments', array($this->last_doc)); + if ( $this->isFilter( $node ) ) { + if ( $this->last_doc && ! $node->getDocComment() ) { + $node->setAttribute( 'comments', array( $this->last_doc ) ); $this->last_doc = null; } - $hook = new WP_Reflection_HookReflector($node, $this->context); + $hook = new \WP_Reflection_HookReflector( $node, $this->context ); $this->getLocation()->hooks[] = $hook; } break; @@ -69,55 +71,59 @@ public function enterNode(PHPParser_Node $node) { // Pick up DocBlock from non-documentable elements so that it can be assigned // to the next hook if necessary. - if (!$this->isNodeDocumentable($node) && ($docblock = $node->getDocComment())) { + if ( ! $this->isNodeDocumentable( $node ) && ( $docblock = $node->getDocComment() ) ) { $this->last_doc = $docblock; } } - public function leaveNode(PHPParser_Node $node) { + public function leaveNode( \PHPParser_Node $node ) { parent::leaveNode( $node ); - switch ($node->getType()) { + switch ( $node->getType() ) { case 'Stmt_Class': case 'Stmt_ClassMethod': case 'Stmt_Function': case 'Stmt_Interface': - array_pop($this->location); + array_pop( $this->location ); break; } } - protected function isFilter(PHPParser_Node $node) { + protected function isFilter( \PHPParser_Node $node ) { // Ignore variable functions - if ($node->name->getType() !== 'Name') + if ( $node->name->getType() !== 'Name' ) { return false; + } $calling = (string) $node->name; + return ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' ); } protected function getLocation() { - return empty($this->location) ? $this : end($this->location); + return empty( $this->location ) ? $this : end( $this->location ); } /** * Find the MethodReflector in a ClassReflector that matches the * given Stmt_ClassMethod node. * - * @param phpDocumentor\Reflection\ClassReflector $class Class to search in - * @param PHPParser_Node_Stmt_ClassMethod $node AST node to match with - * @return phpDocumentor\Reflection\MethodReflector|bool + * @param \phpDocumentor\Reflection\ClassReflector $class Class to search in + * @param \PHPParser_Node_Stmt_ClassMethod $node AST node to match with + * + * @return \phpDocumentor\Reflection\MethodReflector|bool */ - protected function findMethodReflector($class, PHPParser_Node_Stmt_ClassMethod $node) { - if (!$class instanceof Reflection\ClassReflector) + protected function findMethodReflector( $class, \PHPParser_Node_Stmt_ClassMethod $node ) { + if ( ! $class instanceof Reflection\ClassReflector ) { return false; + } - $found = false; - $method = new Reflection\ClassReflector\MethodReflector($node, $this->context); + $found = false; + $method = new Reflection\ClassReflector\MethodReflector( $node, $this->context ); - foreach ($class->getMethods() as $poss_method) { - if ($method->getName() === $poss_method->getName() + foreach ( $class->getMethods() as $poss_method ) { + if ( $method->getName() === $poss_method->getName() && $method->getVisibility() === $poss_method->getVisibility() && $method->isAbstract() === $poss_method->isAbstract() && $method->isStatic() === $poss_method->isStatic() @@ -131,9 +137,9 @@ protected function findMethodReflector($class, PHPParser_Node_Stmt_ClassMethod $ return $found; } - protected function isNodeDocumentable(PHPParser_Node $node) { - return parent::isNodeDocumentable($node) - || ($node instanceof PHPParser_Node_Expr_FuncCall - && $this->isFilter($node)); + protected function isNodeDocumentable( \PHPParser_Node $node ) { + return parent::isNodeDocumentable( $node ) + || ( $node instanceof \PHPParser_Node_Expr_FuncCall + && $this->isFilter( $node ) ); } } From 8f4ebda46d6feadf5be512a0beaab60a4067069f Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 22:12:43 +0200 Subject: [PATCH 132/402] Renamed, namespaced, and moved hook reflector. --- lib/class-file-reflector.php | 4 ++-- ...Reflector.php => class-hook-reflector.php} | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) rename lib/{WP/Reflection/HookReflector.php => class-hook-reflector.php} (64%) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 8ef2639e5..6cfcb5b0e 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -15,7 +15,7 @@ class File_Reflector extends FileReflector { /** * List of hooks defined in global scope in this file. * - * @var \WP_Reflection_HookReflector[] + * @var \WP_Parser\Hook_Reflector[] */ public $hooks = array(); @@ -63,7 +63,7 @@ public function enterNode( \PHPParser_Node $node ) { $node->setAttribute( 'comments', array( $this->last_doc ) ); $this->last_doc = null; } - $hook = new \WP_Reflection_HookReflector( $node, $this->context ); + $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); $this->getLocation()->hooks[] = $hook; } break; diff --git a/lib/WP/Reflection/HookReflector.php b/lib/class-hook-reflector.php similarity index 64% rename from lib/WP/Reflection/HookReflector.php rename to lib/class-hook-reflector.php index a63607c9d..e357cc883 100644 --- a/lib/WP/Reflection/HookReflector.php +++ b/lib/class-hook-reflector.php @@ -1,16 +1,21 @@ <?php +namespace WP_Parser; + use phpDocumentor\Reflection\BaseReflector; +use PHPParser_PrettyPrinter_Default; +use WP_PrettyPrinter; + +class Hook_Reflector extends BaseReflector { -class WP_Reflection_HookReflector extends BaseReflector { public function getName() { - $name = ''; + $name = ''; $filter = $this->node->args[0]->value; - switch ($filter->getType()) { + switch ( $filter->getType() ) { case 'Expr_Concat': case 'Scalar_Encapsed': $printer = new PHPParser_PrettyPrinter_Default; - $name = $printer->prettyPrintExpr($filter); + $name = $printer->prettyPrintExpr( $filter ); break; case 'Scalar_String': $name = "'" . $filter->value . "'"; @@ -26,7 +31,7 @@ public function getShortName() { public function getType() { $type = 'filter'; - switch ((string) $this->node->name) { + switch ( (string) $this->node->name ) { case 'do_action': $type = 'action'; break; @@ -40,13 +45,14 @@ public function getType() { public function getArgs() { $printer = new WP_PrettyPrinter; - $args = array(); - foreach ($this->node->args as $arg) { - $args[] = $printer->prettyPrintArg($arg); + $args = array(); + foreach ( $this->node->args as $arg ) { + $args[] = $printer->prettyPrintArg( $arg ); } // Skip the filter name - array_shift($args); + array_shift( $args ); + return $args; } } From d748e17034f9136c23fdc1d1a272105b8eddb433 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 22:19:10 +0200 Subject: [PATCH 133/402] Renamed, namespaced, and moved pretty printer. --- lib/WP/PrettyPrinter.php | 14 -------------- lib/class-hook-reflector.php | 4 ++-- lib/class-pretty-printer.php | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 16 deletions(-) delete mode 100644 lib/WP/PrettyPrinter.php create mode 100644 lib/class-pretty-printer.php diff --git a/lib/WP/PrettyPrinter.php b/lib/WP/PrettyPrinter.php deleted file mode 100644 index 74b6daeac..000000000 --- a/lib/WP/PrettyPrinter.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -class WP_PrettyPrinter extends PHPParser_PrettyPrinter_Default { - /** - * Pretty prints an argument. - * - * @param PHPParser_Node_Arg $node Expression argument - * - * @return string Pretty printed argument - */ - public function prettyPrintArg(PHPParser_Node_Arg $node) { - return str_replace("\n" . $this->noIndentToken, "\n", $this->p($node)); - } -} diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index e357cc883..580b7311c 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -4,7 +4,7 @@ use phpDocumentor\Reflection\BaseReflector; use PHPParser_PrettyPrinter_Default; -use WP_PrettyPrinter; +use WP_Parser\Pretty_Printer; class Hook_Reflector extends BaseReflector { @@ -44,7 +44,7 @@ public function getType() { } public function getArgs() { - $printer = new WP_PrettyPrinter; + $printer = new Pretty_Printer; $args = array(); foreach ( $this->node->args as $arg ) { $args[] = $printer->prettyPrintArg( $arg ); diff --git a/lib/class-pretty-printer.php b/lib/class-pretty-printer.php new file mode 100644 index 000000000..112f88a0a --- /dev/null +++ b/lib/class-pretty-printer.php @@ -0,0 +1,18 @@ +<?php + +namespace WP_Parser; +use PHPParser_Node_Arg; +use PHPParser_PrettyPrinter_Default; + +class Pretty_Printer extends PHPParser_PrettyPrinter_Default { + /** + * Pretty prints an argument. + * + * @param PHPParser_Node_Arg $node Expression argument + * + * @return string Pretty printed argument + */ + public function prettyPrintArg( PHPParser_Node_Arg $node ) { + return str_replace( "\n" . $this->noIndentToken, "\n", $this->p( $node ) ); + } +} From 6fb97c93a32fcb8c2b78118ba54ef8ad4c9e906c Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Fri, 28 Feb 2014 22:31:21 +0200 Subject: [PATCH 134/402] Moved function files to lib and included in autoload. --- composer.json | 3 ++- lib/{WP => }/runner.php | 0 template.php => lib/template.php | 0 plugin.php | 3 --- 4 files changed, 2 insertions(+), 4 deletions(-) rename lib/{WP => }/runner.php (100%) rename template.php => lib/template.php (100%) diff --git a/composer.json b/composer.json index 11da96fc5..6671a9194 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "erusev/parsedown" : "~0.9" }, "autoload" : { - "classmap": ["lib"] + "classmap": ["lib"], + "files" : ["lib/runner.php", "lib/template.php"] } } \ No newline at end of file diff --git a/lib/WP/runner.php b/lib/runner.php similarity index 100% rename from lib/WP/runner.php rename to lib/runner.php diff --git a/template.php b/lib/template.php similarity index 100% rename from template.php rename to lib/template.php diff --git a/plugin.php b/plugin.php index f7de742b5..31237d04b 100644 --- a/plugin.php +++ b/plugin.php @@ -13,9 +13,6 @@ require __DIR__ . '/vendor/autoload.php'; } -require_once __DIR__ . '/lib/WP/runner.php'; -require_once __DIR__ . '/template.php'; - if ( defined( 'WP_CLI' ) && WP_CLI ) { \WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); } From d21b451c2c506cf426785b4a367219aa14fdc340 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 2 Mar 2014 22:59:54 +0200 Subject: [PATCH 135/402] Formatted to coding style. --- lib/class-command.php | 26 ++++-- lib/class-hook-reflector.php | 2 +- lib/class-importer.php | 167 +++++++++++++++++++-------------- lib/class-pretty-printer.php | 1 + lib/runner.php | 175 +++++++++++++++++++---------------- lib/template.php | 30 +++--- plugin.php | 170 +++++++++++++++++++++------------- 7 files changed, 338 insertions(+), 233 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 8d5fa8cfb..376116cef 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -19,6 +19,7 @@ public function generate( $args ) { $directory = $args[0]; $output_file = 'phpdoc.json'; + if ( ! empty( $args[1] ) ) { $output_file = $args[1]; } @@ -31,6 +32,7 @@ public function generate( $args ) { // Write to $output_file $error = ! file_put_contents( $output_file, $json ); + if ( $error ) { WP_CLI::error( sprintf( 'Problem writing %1$s bytes of data to %2$s', strlen( $json ), $output_file ) ); exit; @@ -51,8 +53,10 @@ public function import( $args, $assoc_args ) { // Get the data from the <file>, and check it's valid. $phpdoc = false; - if ( is_readable( $file ) ) + + if ( is_readable( $file ) ) { $phpdoc = file_get_contents( $file ); + } if ( ! $phpdoc ) { WP_CLI::error( sprintf( "Can't read %1\$s. Does the file exist?", $file ) ); @@ -73,7 +77,7 @@ public function import( $args, $assoc_args ) { * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * * @subcommand generate-and-import - * @synopsis <directory> [--quick] [--import-internal] [--user] + * @synopsis <directory> [--quick] [--import-internal] [--user] */ public function generate_and_import( $args, $assoc_args ) { list( $directory ) = $args; @@ -93,8 +97,9 @@ public function generate_and_import( $args, $assoc_args ) { /** * Generate the data from the PHPDoc markup. * - * @param string $path Directory to scan for PHPDoc + * @param string $path Directory to scan for PHPDoc * @param string $format Optional. What format the data is returned in: [json*|array]. + * * @return string */ protected function _get_phpdoc_data( $path, $format = 'json' ) { @@ -119,8 +124,9 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { // Extract PHPDoc $output = parse_files( $files, $path ); - if ( $format == 'json' ) + if ( $format == 'json' ) { $output = json_encode( $output ); + } return $output; } @@ -129,8 +135,8 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * Import the PHPDoc $data into WordPress posts and taxonomies * * @param array $data - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ protected function _do_import( array $data, $skip_sleep = false, $import_internal_functions = false ) { @@ -165,8 +171,8 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } foreach ( $data as $file ) { - WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ) , number_format_i18n( $num_of_files ) ) ); - $file_number++; + WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ) ) ); + $file_number ++; $importer->import_file( $file, $skip_sleep, $import_internal_functions ); } @@ -189,8 +195,10 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } else { WP_CLI::line( 'Import complete, but some errors were found:' ); - foreach ( $importer->errors as $error ) + + foreach ( $importer->errors as $error ) { WP_CLI::warning( $error ); + } } WP_CLI::line(); diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 580b7311c..13815d508 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -4,13 +4,13 @@ use phpDocumentor\Reflection\BaseReflector; use PHPParser_PrettyPrinter_Default; -use WP_Parser\Pretty_Printer; class Hook_Reflector extends BaseReflector { public function getName() { $name = ''; $filter = $this->node->args[0]->value; + switch ( $filter->getType() ) { case 'Expr_Concat': case 'Scalar_Encapsed': diff --git a/lib/class-importer.php b/lib/class-importer.php index cb8f2456b..f1cb0cd7e 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -71,14 +71,17 @@ class Importer { */ public function __construct( array $args = array() ) { - $r = wp_parse_args( $args, array( - 'post_type_class' => 'wpapi-class', - 'post_type_function' => 'wpapi-function', - 'post_type_hook' => 'wpapi-hook', - 'taxonomy_file' => 'wpapi-source-file', - 'taxonomy_package' => 'wpapi-package', - 'taxonomy_since_version' => 'wpapi-since', - ) ); + $r = wp_parse_args( + $args, + array( + 'post_type_class' => 'wpapi-class', + 'post_type_function' => 'wpapi-function', + 'post_type_hook' => 'wpapi-hook', + 'taxonomy_file' => 'wpapi-source-file', + 'taxonomy_package' => 'wpapi-package', + 'taxonomy_since_version' => 'wpapi-since', + ) + ); foreach ( $r as $property_name => $value ) { $this->{$property_name} = $value; @@ -89,19 +92,22 @@ public function __construct( array $args = array() ) { * For a specific file, go through and import the file, functions, and classes. * * @param array $file - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked @internal will be imported. + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked @internal will be imported. */ public function import_file( array $file, $skip_sleep = false, $import_internal = false ) { // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + if ( ! $term ) { $term = wp_insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); + if ( is_wp_error( $term ) ) { $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); + return; } @@ -111,8 +117,8 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // Store file meta for later use $this->file_meta = array( - 'docblock' => $file['file'], // File docblock - 'term_id' => $term['name'], // File's term item in the file taxonomy + 'docblock' => $file['file'], // File docblock + 'term_id' => $term['name'], // File's term item in the file taxonomy ); // Functions @@ -121,11 +127,12 @@ public function import_file( array $file, $skip_sleep = false, $import_internal foreach ( $file['functions'] as $function ) { $this->import_function( $function, 0, $import_internal ); - $i++; + $i ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) + if ( ! $skip_sleep && $i % 10 == 0 ) { sleep( 3 ); + } } } @@ -135,11 +142,12 @@ public function import_file( array $file, $skip_sleep = false, $import_internal foreach ( $file['classes'] as $class ) { $this->import_class( $class, $import_internal ); - $i++; + $i ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) + if ( ! $skip_sleep && $i % 10 == 0 ) { sleep( 3 ); + } } } @@ -148,11 +156,12 @@ public function import_file( array $file, $skip_sleep = false, $import_internal foreach ( $file['hooks'] as $hook ) { $this->import_hook( $hook, 0, $import_internal ); - $i++; + $i ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) + if ( ! $skip_sleep && $i % 10 == 0 ) { sleep( 3 ); + } } } } @@ -160,24 +169,27 @@ public function import_file( array $file, $skip_sleep = false, $import_internal /** * Create a post for a function * - * @param array $data Function - * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * @param array $data Function + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * * @return bool|int Post ID of this function, false if any failure. */ public function import_function( array $data, $parent_post_id = 0, $import_internal = false ) { $function_id = $this->import_item( $data, $parent_post_id, $import_internal ); - foreach ( $data['hooks'] as $hook ) + foreach ( $data['hooks'] as $hook ) { $this->import_hook( $hook, $function_id, $import_internal ); + } } /** * Create a post for a hook * - * @param array $data Hook - * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, hooks marked @internal will be imported. + * @param array $data Hook + * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, hooks marked @internal will be imported. + * * @return bool|int Post ID of this hook, false if any failure. */ public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { @@ -187,23 +199,25 @@ public function import_hook( array $data, $parent_post_id = 0, $import_internal /** * Create a post for a class * - * @param array $data Class - * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * @param array $data Class + * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * * @return bool|int Post ID of this function, false if any failure. */ protected function import_class( array $data, $import_internal = false ) { - global $wpdb; // Insert this class $class_id = $this->import_item( $data, 0, $import_internal, array( 'post_type' => $this->post_type_class ) ); - if ( ! $class_id ) + + if ( ! $class_id ) { return false; + } // Set class-specific meta - update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $class_id, '_wpapi_static', (bool) $data['static'] ); - update_post_meta( $class_id, '_wpapi_visibility', $data['visibility'] ); + update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $class_id, '_wpapi_static', (bool) $data['static'] ); + update_post_meta( $class_id, '_wpapi_visibility', $data['visibility'] ); // Now add the methods foreach ( $data['methods'] as $method ) { @@ -221,39 +235,46 @@ protected function import_class( array $data, $import_internal = false ) { * Anything that needs to be dealt identically for functions or methods should go in this function. * Anything more specific should go in either import_function() or import_class() as appropriate. * - * @param array $data Data - * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked @internal will be imported. - * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). + * @param array $data Data + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked @internal will be imported. + * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). + * * @return bool|int Post ID of this item, false if any failure. */ public function import_item( array $data, $parent_post_id = 0, $import_internal = false, array $arg_overrides = array() ) { + + /** @var \wpdb $wpdb */ global $wpdb; // Don't import items marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - if ( $post_data['post_type'] === $this->post_type_class ) + if ( $post_data['post_type'] === $this->post_type_class ) { WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); - elseif ( $parent_post_id ) + } elseif ( $parent_post_id ) { WP_CLI::line( sprintf( "\t\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); - else + } else { WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); + } return false; } $is_new_post = true; $slug = sanitize_title( $data['name'] ); - $post_data = wp_parse_args( $arg_overrides, array( - 'post_content' => $data['doc']['long_description'], - 'post_excerpt' => $data['doc']['description'], - 'post_name' => $slug, - 'post_parent' => (int) $parent_post_id, - 'post_status' => 'publish', - 'post_title' => $data['name'], - 'post_type' => $this->post_type_function, - ) ); + $post_data = wp_parse_args( + $arg_overrides, + array( + 'post_content' => $data['doc']['long_description'], + 'post_excerpt' => $data['doc']['description'], + 'post_name' => $slug, + 'post_parent' => (int) $parent_post_id, + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_function, + ) + ); // Look for an existing post for this item $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $parent_post_id ) ); @@ -270,12 +291,13 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( ! $ID || is_wp_error( $ID ) ) { - if ( $post_data['post_type'] === $this->post_type_class ) + if ( $post_data['post_type'] === $this->post_type_class ) { $this->errors[] = sprintf( "\tProblem inserting/updating post for class \"%1\$s\"", $data['name'], $ID->get_error_message() ); - elseif ( $parent_post_id ) + } elseif ( $parent_post_id ) { $this->errors[] = sprintf( "\t\tProblem inserting/updating post for method \"%1\$s\"", $data['name'], $ID->get_error_message() ); - else + } else { $this->errors[] = sprintf( "\tProblem inserting/updating post for function \"%1\$s\"", $data['name'], $ID->get_error_message() ); + } return false; } @@ -288,14 +310,16 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $since_version = $since_version['content']; $since_term = term_exists( $since_version, $this->taxonomy_since_version ); - if ( ! $since_term ) + if ( ! $since_term ) { $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); + } // Assign the tax item to the post - if ( ! is_wp_error( $since_term ) ) + if ( ! is_wp_error( $since_term ) ) { wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); - else + } else { WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); + } } $packages = array( @@ -304,52 +328,59 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal ); // If the @package/@subpackage is not set by the individual function or class, get it from the file scope - if ( empty( $packages['main'] ) ) + if ( empty( $packages['main'] ) ) { $packages['main'] = wp_list_filter( $this->file_meta['docblock']['tags'], array( 'name' => 'package' ) ); + } - if ( empty( $packages['sub'] ) ) + if ( empty( $packages['sub'] ) ) { $packages['sub'] = wp_list_filter( $this->file_meta['docblock']['tags'], array( 'name' => 'subpackage' ) ); + } $main_package_id = false; $package_term_args = array(); // If the item has any @package/@subpackage markup (or has inherited it from file scope), assign the taxonomy. foreach ( $packages as $pack_name => $pack_value ) { - if ( empty( $pack_value ) ) + + if ( empty( $pack_value ) ) { continue; + } $pack_value = array_shift( $pack_value ); $pack_value = $pack_value['content']; // Set the parent term_id to look for, as the package taxonomy is hierarchical. - if ( $pack_name === 'sub' && is_int( $main_package_id ) ) + if ( $pack_name === 'sub' && is_int( $main_package_id ) ) { $package_term_args = array( 'parent' => $main_package_id ); - else + } else { $package_term_args = array( 'parent' => 0 ); + } // If the package doesn't already exist in the taxonomy, add it $package_term = term_exists( $pack_value, $this->taxonomy_package, $package_term_args['parent'] ); - if ( ! $package_term ) + if ( ! $package_term ) { $package_term = wp_insert_term( $pack_value, $this->taxonomy_package, $package_term_args ); + } - if ( $pack_name === 'main' && $main_package_id === false && ! is_wp_error( $package_term ) ) + if ( $pack_name === 'main' && $main_package_id === false && ! is_wp_error( $package_term ) ) { $main_package_id = (int) $package_term['term_id']; + } // Assign the tax item to the post - if ( ! is_wp_error( $package_term ) ) + if ( ! is_wp_error( $package_term ) ) { wp_set_object_terms( $ID, (int) $package_term['term_id'], $this->taxonomy_package ); - - elseif ( is_int( $main_package_id ) ) + } elseif ( is_int( $main_package_id ) ) { WP_CLI::warning( "\tCannot set @subpackage term: " . $package_term->get_error_message() ); - else + } else { WP_CLI::warning( "\tCannot set @package term: " . $package_term->get_error_message() ); + } } // Set other taxonomy and post meta to use in the theme templates wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); - update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); + update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); // Everything worked! Woo hoo! if ( $is_new_post ) { diff --git a/lib/class-pretty-printer.php b/lib/class-pretty-printer.php index 112f88a0a..dea55532a 100644 --- a/lib/class-pretty-printer.php +++ b/lib/class-pretty-printer.php @@ -1,6 +1,7 @@ <?php namespace WP_Parser; + use PHPParser_Node_Arg; use PHPParser_PrettyPrinter_Default; diff --git a/lib/runner.php b/lib/runner.php index 1ec638484..acb0cae93 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -2,44 +2,45 @@ use WP_Parser\File_Reflector; -function get_wp_files($directory) { - $iterableFiles = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($directory) +function get_wp_files( $directory ) { + $iterableFiles = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( $directory ) ); - $files = array(); + $files = array(); + try { - foreach( $iterableFiles as $file ) { - if ($file->getExtension() !== 'php') + foreach ( $iterableFiles as $file ) { + if ( $file->getExtension() !== 'php' ) { continue; + } $files[] = $file->getPathname(); } - } - catch (UnexpectedValueException $e) { - printf("Directory [%s] contained a directory we can not recurse into", $directory); + } catch ( UnexpectedValueException $e ) { + printf( 'Directory [%s] contained a directory we can not recurse into', $directory ); } return $files; } -function parse_files($files, $root) { +function parse_files( $files, $root ) { $output = array(); - foreach ($files as $filename) { - $file = new File_Reflector($filename); + foreach ( $files as $filename ) { + $file = new File_Reflector( $filename ); - $path = ltrim(substr($filename, strlen($root)), DIRECTORY_SEPARATOR); - $file->setFilename($path); + $path = ltrim( substr( $filename, strlen( $root ) ), DIRECTORY_SEPARATOR ); + $file->setFilename( $path ); $file->process(); // TODO proper exporter $out = array( - 'file' => export_docblock( $file ), + 'file' => export_docblock( $file ), 'path' => str_replace( DIRECTORY_SEPARATOR, '/', $file->getFilename() ), ); - foreach ($file->getIncludes() as $include) { + foreach ( $file->getIncludes() as $include ) { $out['includes'][] = array( 'name' => $include->getName(), 'line' => $include->getLineNumber(), @@ -47,43 +48,45 @@ function parse_files($files, $root) { ); } - foreach ($file->getConstants() as $constant) { + foreach ( $file->getConstants() as $constant ) { $out['constants'][] = array( - 'name' => $constant->getShortName(), - 'line' => $constant->getLineNumber(), + 'name' => $constant->getShortName(), + 'line' => $constant->getLineNumber(), 'value' => $constant->getValue(), ); } - if (!empty($file->hooks)) - $out['hooks'] = export_hooks($file->hooks); + if ( ! empty( $file->hooks ) ) { + $out['hooks'] = export_hooks( $file->hooks ); + } - foreach ($file->getFunctions() as $function) { + foreach ( $file->getFunctions() as $function ) { $func = array( - 'name' => $function->getShortName(), - 'line' => $function->getLineNumber(), - 'arguments' => export_arguments($function->getArguments()), - 'doc' => export_docblock($function), - 'hooks' => array(), + 'name' => $function->getShortName(), + 'line' => $function->getLineNumber(), + 'arguments' => export_arguments( $function->getArguments() ), + 'doc' => export_docblock( $function ), + 'hooks' => array(), ); - if (!empty($function->hooks)) - $func['hooks'] = export_hooks($function->hooks); + if ( ! empty( $function->hooks ) ) { + $func['hooks'] = export_hooks( $function->hooks ); + } $out['functions'][] = $func; } - foreach ($file->getClasses() as $class) { + foreach ( $file->getClasses() as $class ) { $cl = array( - 'name' => $class->getShortName(), - 'line' => $class->getLineNumber(), - 'final' => $class->isFinal(), - 'abstract' => $class->isAbstract(), - 'extends' => $class->getParentClass(), + 'name' => $class->getShortName(), + 'line' => $class->getLineNumber(), + 'final' => $class->isFinal(), + 'abstract' => $class->isAbstract(), + 'extends' => $class->getParentClass(), 'implements' => $class->getInterfaces(), - 'properties' => export_properties($class->getProperties()), - 'methods' => export_methods($class->getMethods()), - 'doc' => export_docblock($class), + 'properties' => export_properties( $class->getProperties() ), + 'methods' => export_methods( $class->getMethods() ), + 'doc' => export_docblock( $class ), ); $out['classes'][] = $cl; @@ -95,104 +98,118 @@ function parse_files($files, $root) { return $output; } -function export_docblock($element) { +function export_docblock( $element ) { $docblock = $element->getDocBlock(); - if (!$docblock) { + if ( ! $docblock ) { return array( - 'description' => '', + 'description' => '', 'long_description' => '', - 'tags' => array(), + 'tags' => array(), ); } $output = array( - 'description' => $docblock->getShortDescription(), + 'description' => $docblock->getShortDescription(), 'long_description' => $docblock->getLongDescription()->getFormattedContents(), - 'tags' => array(), + 'tags' => array(), ); - foreach ($docblock->getTags() as $tag) { + + foreach ( $docblock->getTags() as $tag ) { $t = array( - 'name' => $tag->getName(), + 'name' => $tag->getName(), 'content' => $tag->getDescription(), ); - if (method_exists($tag, 'getTypes')) + if ( method_exists( $tag, 'getTypes' ) ) { $t['types'] = $tag->getTypes(); - if (method_exists($tag, 'getVariableName')) + } + if ( method_exists( $tag, 'getVariableName' ) ) { $t['variable'] = $tag->getVariableName(); - if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) + } + if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { $t['content'] = $tag->getVersion(); + } $output['tags'][] = $t; } return $output; } -function export_hooks(array $hooks) { +function export_hooks( array $hooks ) { $out = array(); - foreach ($hooks as $hook) { + + foreach ( $hooks as $hook ) { $out[] = array( - 'name' => $hook->getName(), - 'line' => $hook->getLineNumber(), - 'type' => $hook->getType(), - 'arguments' => implode(', ', $hook->getArgs()), - 'doc' => export_docblock($hook), + 'name' => $hook->getName(), + 'line' => $hook->getLineNumber(), + 'type' => $hook->getType(), + 'arguments' => implode( ', ', $hook->getArgs() ), + 'doc' => export_docblock( $hook ), ); } + return $out; } -function export_arguments(array $arguments) { +function export_arguments( array $arguments ) { $output = array(); - foreach ($arguments as $argument) { + + foreach ( $arguments as $argument ) { $output[] = array( - 'name' => $argument->getName(), + 'name' => $argument->getName(), 'default' => $argument->getDefault(), - 'type' => $argument->getType(), + 'type' => $argument->getType(), ); } + return $output; } -function export_properties(array $properties) { +function export_properties( array $properties ) { $out = array(); - foreach ($properties as $property) { + + foreach ( $properties as $property ) { $prop = array( - 'name' => $property->getName(), - 'line' => $property->getLineNumber(), - 'default' => $property->getDefault(), + 'name' => $property->getName(), + 'line' => $property->getLineNumber(), + 'default' => $property->getDefault(), // 'final' => $property->isFinal(), - 'static' => $property->isStatic(), + 'static' => $property->isStatic(), 'visibililty' => $property->getVisibility(), ); - $docblock = export_docblock($property); - if ($docblock) + $docblock = export_docblock( $property ); + if ( $docblock ) { $prop['doc'] = $docblock; + } $out[] = $prop; } + return $out; } -function export_methods(array $methods) { +function export_methods( array $methods ) { $out = array(); - foreach ($methods as $method) { + + foreach ( $methods as $method ) { $meth = array( - 'name' => $method->getShortName(), - 'line' => $method->getLineNumber(), - 'final' => $method->isFinal(), - 'abstract' => $method->isAbstract(), - 'static' => $method->isStatic(), + 'name' => $method->getShortName(), + 'line' => $method->getLineNumber(), + 'final' => $method->isFinal(), + 'abstract' => $method->isAbstract(), + 'static' => $method->isStatic(), 'visibility' => $method->getVisibility(), - 'arguments' => export_arguments($method->getArguments()), - 'doc' => export_docblock($method), + 'arguments' => export_arguments( $method->getArguments() ), + 'doc' => export_docblock( $method ), ); - if (!empty($method->hooks)) - $meth['hooks'] = export_hooks($method->hooks); + if ( ! empty( $method->hooks ) ) { + $meth['hooks'] = export_hooks( $method->hooks ); + } $out[] = $meth; } + return $out; } diff --git a/lib/template.php b/lib/template.php index 13410ac86..9a675578f 100644 --- a/lib/template.php +++ b/lib/template.php @@ -63,6 +63,7 @@ function wpfuncref_the_return_desc() { */ function wpfuncref_arguments_have_default_values() { $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_args', true ), array( 'name' => 'default' ) ); + return apply_filters( 'wpfuncref_arguments_have_default_values', ! empty( $retval ) ); } @@ -73,6 +74,7 @@ function wpfuncref_arguments_have_default_values() { */ function wpfuncref_is_function_deprecated() { $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_tags', true ), array( 'name' => 'deprecated' ) ); + return apply_filters( 'wpfuncref_is_function_deprecated', ! empty( $retval ) ); } @@ -85,7 +87,8 @@ function wpfuncref_get_the_arguments() { $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $params = wp_list_filter( $function_data, array( 'name' => 'param' ) ); - $return_args = array(); + + $return_args = array(); if ( ! empty( $args_data ) ) { foreach ( $args_data as $arg ) { @@ -96,18 +99,21 @@ function wpfuncref_get_the_arguments() { 'name' => $arg['name'], ); - if ( ! empty( $arg['default'] ) ) + if ( ! empty( $arg['default'] ) ) { $param['default_value'] = $arg['default']; + } - if ( ! empty( $arg['type'] ) ) + if ( ! empty( $arg['type'] ) ) { $param['types'] = array( $arg['type'] ); - else if ( ! empty( $param_tag['types'] ) ) + } else if ( ! empty( $param_tag['types'] ) ) { $param['types'] = $param_tag['types']; - else + } else { $param['types'] = array(); + } - if ( ! empty( $param_tag['content'] ) ) + if ( ! empty( $param_tag['content'] ) ) { $param['desc'] = $param_tag['content']; + } $return_args[] = $param; } @@ -127,11 +133,12 @@ function wpfuncref_prototype() { $type = wpfuncref_return_type(); $friendly_args = array(); - $args = wpfuncref_get_the_arguments(); + $args = wpfuncref_get_the_arguments(); foreach ( $args as $arg ) { $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); - if ( !empty( $arg['default_value'] ) ) + if ( ! empty( $arg['default_value'] ) ) { $friendly .= ' <span class="default"> = <span class="value">' . $arg['default_value'] . '</span></span>'; + } $friendly_args[] = $friendly; } @@ -161,14 +168,15 @@ function wpfuncref_the_prototype() { */ function wpfuncref_source_link() { $trac_url = apply_filters( 'wpfuncref_source_link_base', false ); - if ( empty( $trac_url ) ) + if ( empty( $trac_url ) ) { return ''; + } // Find the current post in the wpapi-source-file term $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); if ( ! empty( $term ) && ! is_wp_error( $term ) ) { - $term = array_shift( $term ); - $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); + $term = array_shift( $term ); + $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); // The format here takes the base URL, the term name, and the line number $format = apply_filters( 'wpfuncref_source_link_format', '%s%s#L%d' ); diff --git a/plugin.php b/plugin.php index 31237d04b..9b6df2944 100644 --- a/plugin.php +++ b/plugin.php @@ -4,7 +4,7 @@ * Description: Create a function reference site powered by WordPress * Author: Ryan McCue and Paul Gibbs * Plugin URI: https://github.com/rmccue/WP-Parser - * Version: 1.0 + * Version: */ namespace WP_Parser; @@ -30,6 +30,7 @@ * Register the function and class post types */ function register_post_types() { + $supports = array( 'comments', 'custom-fields', @@ -40,46 +41,55 @@ function register_post_types() { ); // Functions - register_post_type( 'wpapi-function', array( - 'has_archive' => 'functions', - 'label' => __( 'Functions', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'function', - 'with_front' => false, - ), - 'supports' => $supports, - ) ); + register_post_type( + 'wpapi-function', + array( + 'has_archive' => 'functions', + 'label' => __( 'Functions', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'function', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); // Methods add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-function&name=$matches[1]-$matches[2]', 'top' ); // Classes - register_post_type( 'wpapi-class', array( - 'has_archive' => 'classes', - 'label' => __( 'Classes', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'class', - 'with_front' => false, - ), - 'supports' => $supports, - ) ); + register_post_type( + 'wpapi-class', + array( + 'has_archive' => 'classes', + 'label' => __( 'Classes', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'class', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); // Hooks - register_post_type( 'wpapi-hook', array( - 'has_archive' => 'hooks', - 'label' => __( 'Hooks', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'hook', - 'with_front' => false, - ), - 'supports' => $supports, - ) ); + register_post_type( + 'wpapi-hook', + array( + 'has_archive' => 'hooks', + 'label' => __( 'Hooks', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'hook', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); } /** @@ -87,53 +97,70 @@ function register_post_types() { */ function register_taxonomies() { // Files - register_taxonomy( 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( - 'label' => __( 'Files', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'files' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) ); + register_taxonomy( + 'wpapi-source-file', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'label' => __( 'Files', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'files' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); // Package - register_taxonomy( 'wpapi-package', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( - 'hierarchical' => true, - 'label' => '@package', - 'public' => true, - 'rewrite' => array( 'slug' => 'package' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) ); + register_taxonomy( + 'wpapi-package', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => '@package', + 'public' => true, + 'rewrite' => array( 'slug' => 'package' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); // @since - register_taxonomy( 'wpapi-since', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( - 'hierarchical' => true, - 'label' => __( '@since', 'wpfuncref' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'since' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) ); + register_taxonomy( + 'wpapi-since', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => __( '@since', 'wpfuncref' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'since' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); } function method_permalink( $link, $post ) { - if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) + + if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) { return $link; + } list( $class, $method ) = explode( '-', $post->post_name ); $link = home_url( user_trailingslashit( "method/$class/$method" ) ); + return $link; } + add_filter( 'post_type_link', __NAMESPACE__ . '\\method_permalink', 10, 2 ); /** * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. * * @param array $args Parameter arguments to make safe - * @param array Filtered arguments + * * @return array */ function make_args_safe( $args ) { + $filters = array( 'wp_filter_kses', 'make_clickable', @@ -146,13 +173,15 @@ function make_args_safe( $args ) { foreach ( $args as &$arg ) { foreach ( $arg as &$value ) { - foreach ( $filters as $filter_function ) + foreach ( $filters as $filter_function ) { if ( is_array( $value ) ) { - foreach ( $value as &$v ) + foreach ( $value as &$v ) { $v = call_user_func( $filter_function, $v ); + } } else { $value = call_user_func( $filter_function, $value ); } + } } } @@ -163,6 +192,7 @@ function make_args_safe( $args ) { * Replace separators with a more readable version * * @param string $type Variable type + * * @return string */ function humanize_separator( $type ) { @@ -173,35 +203,43 @@ function humanize_separator( $type ) { * Extend the post's content with function reference pieces * * @param string $content Unfiltered content + * * @return string Content with Function reference pieces added */ function expand_content( $content ) { $post = get_post(); - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { return $content; + } $before_content = wpfuncref_prototype(); + $before_content .= '<p class="wpfuncref-description">' . get_the_excerpt() . '</p>'; $before_content .= '<div class="wpfuncref-longdesc">'; $after_content = '</div>'; + $after_content .= '<div class="wpfuncref-arguments"><h3>Arguments</h3>'; $args = wpfuncref_get_the_arguments(); + foreach ( $args as $arg ) { $after_content .= '<div class="wpfuncref-arg">'; $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; $after_content .= wpautop( $arg['desc'], false ); $after_content .= '</div>'; } + $after_content .= '</div>'; $source = wpfuncref_source_link(); - if ( $source ) + + if ( $source ) { $after_content .= '<a href="' . $source . '">Source</a>'; + } $before_content = apply_filters( 'wpfuncref_before_content', $before_content ); - $after_content = apply_filters( 'wpfuncref_after_content', $after_content ); + $after_content = apply_filters( 'wpfuncref_after_content', $after_content ); return $before_content . $content . $after_content; } @@ -213,13 +251,15 @@ function expand_content( $content ) { * readd this to check instead. * * @param string $content Unfiltered content + * * @return string Autopeed content */ function autop_for_non_funcref( $content ) { $post = get_post(); - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) { $content = wpautop( $content ); + } return $content; } From 94ba6184bd990e491b27f895c3579416fd3f0024 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 2 Mar 2014 23:20:15 +0200 Subject: [PATCH 136/402] Namespaces and normalized function definitions. --- lib/runner.php | 2 +- lib/template.php | 56 +++++++++++++++++++++++++----------------------- plugin.php | 6 +++--- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/lib/runner.php b/lib/runner.php index acb0cae93..0ffe22343 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -1,6 +1,6 @@ <?php -use WP_Parser\File_Reflector; +namespace WP_Parser; function get_wp_files( $directory ) { $iterableFiles = new RecursiveIteratorIterator( diff --git a/lib/template.php b/lib/template.php index 9a675578f..d3d6d8df4 100644 --- a/lib/template.php +++ b/lib/template.php @@ -1,11 +1,13 @@ <?php +namespace WP_Parser; + /** * Get the current function's return types * * @return array */ -function wpfuncref_return_type() { +function get_return_type() { $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $return_type = wp_list_filter( $function_data, array( 'name' => 'return' ) ); @@ -17,16 +19,16 @@ function wpfuncref_return_type() { $return_type = array( 'void' ); } - return apply_filters( 'wpfuncref_return_type', $return_type ); + return apply_filters( 'wp_parser_return_type', $return_type ); } /** * Print the current function's return type * - * @see wpfuncref_return_type + * @see return_type */ -function wpfuncref_the_return_type() { - echo implode( '|', wpfuncref_return_type() ); +function the_return_type() { + echo implode( '|', get_return_type() ); } /** @@ -34,7 +36,7 @@ function wpfuncref_the_return_type() { * * @return string */ -function wpfuncref_return_desc() { +function get_return_desc() { $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $return_desc = wp_list_filter( $function_data, array( 'name' => 'return' ) ); @@ -46,14 +48,14 @@ function wpfuncref_return_desc() { $return_desc = ''; } - return apply_filters( 'wpfuncref_return_desc', $return_desc ); + return apply_filters( 'wp_parser_return_desc', $return_desc ); } /** * Print the current function's return description */ -function wpfuncref_the_return_desc() { - echo wpfuncref_return_desc(); +function the_return_desc() { + echo get_return_desc(); } /** @@ -61,10 +63,10 @@ function wpfuncref_the_return_desc() { * * @return bool */ -function wpfuncref_arguments_have_default_values() { +function arguments_have_default_values() { $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_args', true ), array( 'name' => 'default' ) ); - return apply_filters( 'wpfuncref_arguments_have_default_values', ! empty( $retval ) ); + return apply_filters( 'wp_parser_arguments_have_default_values', ! empty( $retval ) ); } /** @@ -72,10 +74,10 @@ function wpfuncref_arguments_have_default_values() { * * @return bool */ -function wpfuncref_is_function_deprecated() { +function is_function_deprecated() { $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_tags', true ), array( 'name' => 'deprecated' ) ); - return apply_filters( 'wpfuncref_is_function_deprecated', ! empty( $retval ) ); + return apply_filters( 'wp_parser_is_function_deprecated', ! empty( $retval ) ); } /** @@ -83,7 +85,7 @@ function wpfuncref_is_function_deprecated() { * * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) */ -function wpfuncref_get_the_arguments() { +function get_arguments() { $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); $params = wp_list_filter( $function_data, array( 'name' => 'param' ) ); @@ -119,21 +121,21 @@ function wpfuncref_get_the_arguments() { } } - return apply_filters( 'wpfuncref_get_the_arguments', $return_args ); + return apply_filters( 'wp_parser_get_arguments', $return_args ); } /** * Retrieve the function's prototype as HTML * - * Use the wpfuncref_prototype filter to change the content of this. + * Use the wp_parser_prototype filter to change the content of this. * * @return string Prototype HTML */ -function wpfuncref_prototype() { - $type = wpfuncref_return_type(); +function get_prototype() { + $type = get_return_type(); $friendly_args = array(); - $args = wpfuncref_get_the_arguments(); + $args = get_arguments(); foreach ( $args as $arg ) { $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); if ( ! empty( $arg['default_value'] ) ) { @@ -146,18 +148,18 @@ function wpfuncref_prototype() { $name = get_the_title(); - $prototype = sprintf( '<p class="wpfuncref-prototype"><code><span class="type">%s</span> %s ( %s )</code></p>', implode( '|', $type ), $name, $friendly_args ); + $prototype = sprintf( '<p class="wp-parser-prototype"><code><span class="type">%s</span> %s ( %s )</code></p>', implode( '|', $type ), $name, $friendly_args ); - return apply_filters( 'wpfuncref_prototype', $prototype ); + return apply_filters( 'wp_parser_prototype', $prototype ); } /** * Print the function's prototype * - * @see wpfuncref_prototype + * @see get_prototype */ -function wpfuncref_the_prototype() { - echo wpfuncref_prototype(); +function the_prototype() { + echo get_prototype(); } @@ -166,8 +168,8 @@ function wpfuncref_the_prototype() { * * @return string */ -function wpfuncref_source_link() { - $trac_url = apply_filters( 'wpfuncref_source_link_base', false ); +function get_source_link() { + $trac_url = apply_filters( 'wp_parser_source_link_base', false ); if ( empty( $trac_url ) ) { return ''; } @@ -179,7 +181,7 @@ function wpfuncref_source_link() { $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); // The format here takes the base URL, the term name, and the line number - $format = apply_filters( 'wpfuncref_source_link_format', '%s%s#L%d' ); + $format = apply_filters( 'wp_parser_source_link_format', '%s%s#L%d' ); // Link to the specific file name and the line number on trac $trac_url = sprintf( $format, $trac_url, $term->name, $line_num ); } diff --git a/plugin.php b/plugin.php index 9b6df2944..7f1b4efa5 100644 --- a/plugin.php +++ b/plugin.php @@ -213,7 +213,7 @@ function expand_content( $content ) { return $content; } - $before_content = wpfuncref_prototype(); + $before_content = get_prototype(); $before_content .= '<p class="wpfuncref-description">' . get_the_excerpt() . '</p>'; $before_content .= '<div class="wpfuncref-longdesc">'; @@ -221,7 +221,7 @@ function expand_content( $content ) { $after_content = '</div>'; $after_content .= '<div class="wpfuncref-arguments"><h3>Arguments</h3>'; - $args = wpfuncref_get_the_arguments(); + $args = get_arguments(); foreach ( $args as $arg ) { $after_content .= '<div class="wpfuncref-arg">'; @@ -232,7 +232,7 @@ function expand_content( $content ) { $after_content .= '</div>'; - $source = wpfuncref_source_link(); + $source = get_source_link(); if ( $source ) { $after_content .= '<a href="' . $source . '">Source</a>'; From f9b59decb2e8a1bfbe3546f06d0ddb5e21641065 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 2 Mar 2014 23:20:31 +0200 Subject: [PATCH 137/402] Updated text domain. --- plugin.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin.php b/plugin.php index 7f1b4efa5..3223e901b 100644 --- a/plugin.php +++ b/plugin.php @@ -45,7 +45,7 @@ function register_post_types() { 'wpapi-function', array( 'has_archive' => 'functions', - 'label' => __( 'Functions', 'wpfuncref' ), + 'label' => __( 'Functions', 'wp-parser' ), 'public' => true, 'rewrite' => array( 'feeds' => false, @@ -64,7 +64,7 @@ function register_post_types() { 'wpapi-class', array( 'has_archive' => 'classes', - 'label' => __( 'Classes', 'wpfuncref' ), + 'label' => __( 'Classes', 'wp-parser' ), 'public' => true, 'rewrite' => array( 'feeds' => false, @@ -80,7 +80,7 @@ function register_post_types() { 'wpapi-hook', array( 'has_archive' => 'hooks', - 'label' => __( 'Hooks', 'wpfuncref' ), + 'label' => __( 'Hooks', 'wp-parser' ), 'public' => true, 'rewrite' => array( 'feeds' => false, @@ -101,7 +101,7 @@ function register_taxonomies() { 'wpapi-source-file', array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( - 'label' => __( 'Files', 'wpfuncref' ), + 'label' => __( 'Files', 'wp-parser' ), 'public' => true, 'rewrite' => array( 'slug' => 'files' ), 'sort' => false, @@ -129,7 +129,7 @@ function register_taxonomies() { array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), array( 'hierarchical' => true, - 'label' => __( '@since', 'wpfuncref' ), + 'label' => __( '@since', 'wp-parser' ), 'public' => true, 'rewrite' => array( 'slug' => 'since' ), 'sort' => false, @@ -196,7 +196,7 @@ function make_args_safe( $args ) { * @return string */ function humanize_separator( $type ) { - return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wpfuncref' ) . '</span>', $type ); + return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); } /** From ff89c30a06b40e6de0c96c84af335d0771a2cc68 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 11:22:59 -0500 Subject: [PATCH 138/402] Export hook arguments as an array and display them properly Formerly: #51 Fixes #50 --- lib/runner.php | 2 +- lib/template.php | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ plugin.php | 13 +++++++-- 3 files changed, 83 insertions(+), 3 deletions(-) diff --git a/lib/runner.php b/lib/runner.php index 0ffe22343..c80b5557b 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -142,7 +142,7 @@ function export_hooks( array $hooks ) { 'name' => $hook->getName(), 'line' => $hook->getLineNumber(), 'type' => $hook->getType(), - 'arguments' => implode( ', ', $hook->getArgs() ), + 'arguments' => $hook->getArgs(), 'doc' => export_docblock( $hook ), ); } diff --git a/lib/template.php b/lib/template.php index d3d6d8df4..8bc5aa0dc 100644 --- a/lib/template.php +++ b/lib/template.php @@ -124,6 +124,51 @@ function get_arguments() { return apply_filters( 'wp_parser_get_arguments', $return_args ); } +/** + * Return the current hook's arguments. + * + * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) + */ +function get_hook_arguments() { + $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); + $hook_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $params = wp_list_filter( $hook_data, array( 'name' => 'param' ) ); + + $return_args = array(); +//var_log( $params ); + if ( ! empty( $args_data ) ) { + foreach ( $args_data as $arg ) { + $param_tag = array_shift( $params ); + + $param = array(); + + if ( ! empty( $param_tag['variable'] ) ) { + $param['name'] = $param_tag['variable']; + } elseif ( strpos( $arg, '$' ) === 0 ) { + $param['name'] = $arg; + } else { + $param['name'] = '$(unnamed)'; + } + + if ( ! empty( $param_tag['types'] ) ) { + $param['types'] = $param_tag['types']; + } else { + $param['types'] = array(); + } + + if ( ! empty( $param_tag['content'] ) ) { + $param['desc'] = $param_tag['content']; + } + + $param['value'] = $arg; + + $return_args[] = $param; + } + } + + return apply_filters( 'wp_parser_get_hook_arguments', $return_args ); +} + /** * Retrieve the function's prototype as HTML * @@ -162,6 +207,32 @@ function the_prototype() { echo get_prototype(); } +/** + * Retrieve the hook's prototype as HTML. + * + * Use the wp_parser_hook_prototype filter to change the content of this. + * + * @return string Prototype HTML + */ +function get_hook_prototype() { + $friendly_args = array(); + $args = get_hook_arguments(); + foreach ( $args as $arg ) { + $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); + if ( ! empty( $arg['value'] ) && strpos( $arg['value'], '$' ) !== 0 ) { + $friendly .= ' <span class="default"> = <span class="value">' . $arg['value'] . '</span></span>'; + } + + $friendly_args[] = $friendly; + } + $friendly_args = implode( ', ', $friendly_args ); + + $name = get_the_title(); + + $prototype = sprintf( '<p class="wp-parser-prototype"><code> %s ( %s )</code></p>', $name, $friendly_args ); + + return apply_filters( 'wp_parser_hook_prototype', $prototype ); +} /** * Returns the URL to the current function on the bbP/BP trac. diff --git a/plugin.php b/plugin.php index 3223e901b..0b9b61f94 100644 --- a/plugin.php +++ b/plugin.php @@ -213,7 +213,11 @@ function expand_content( $content ) { return $content; } - $before_content = get_prototype(); + if ( 'wpapi-hook' === $post->post_type ) { + $before_content = get_hook_prototype(); + } else { + $before_content = get_prototype(); + } $before_content .= '<p class="wpfuncref-description">' . get_the_excerpt() . '</p>'; $before_content .= '<div class="wpfuncref-longdesc">'; @@ -221,7 +225,12 @@ function expand_content( $content ) { $after_content = '</div>'; $after_content .= '<div class="wpfuncref-arguments"><h3>Arguments</h3>'; - $args = get_arguments(); + + if ( 'wpapi-hook' === $post->post_type ) { + $args = get_hook_arguments(); + } else { + $args = get_arguments(); + } foreach ( $args as $arg ) { $after_content .= '<div class="wpfuncref-arg">'; From 25c65f7068cf3565e3ff6e23e0b6d48ac7628db0 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 11:29:48 -0500 Subject: [PATCH 139/402] Remove debugging code --- lib/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/template.php b/lib/template.php index 8bc5aa0dc..277d832bd 100644 --- a/lib/template.php +++ b/lib/template.php @@ -135,7 +135,7 @@ function get_hook_arguments() { $params = wp_list_filter( $hook_data, array( 'name' => 'param' ) ); $return_args = array(); -//var_log( $params ); + if ( ! empty( $args_data ) ) { foreach ( $args_data as $arg ) { $param_tag = array_shift( $params ); From a4ddbd6749bb560ccfee13ea27bbb759dafa81d0 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 11:33:16 -0500 Subject: [PATCH 140/402] Fix hook importing --- lib/class-file-reflector.php | 124 +++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 50 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 6cfcb5b0e..58ce6d2e3 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -19,10 +19,24 @@ class File_Reflector extends FileReflector { */ public $hooks = array(); + /** + * List of hooks defined in the current node scope. + * + * @var \WP_Parser\Hook_Reflector[] + */ + protected $hooks_queue = array(); + + /** + * List of hooks defined in the current class scope, indexed by method. + * + * @var \WP_Parser\Hook_Reflector[] + */ + protected $method_hooks_queue = array(); + /** * Stack of classes/methods/functions currently being parsed. * - * @see WP_Reflection_FileReflector::getLocation() + * @see \WP_Parser\FileReflector::getLocation() * @var \phpDocumentor\Reflection\BaseReflector[] */ protected $location = array(); @@ -34,37 +48,52 @@ class File_Reflector extends FileReflector { */ protected $last_doc = null; + /** + * Add hooks to the queue and update the node stack when we enter a node. + * + * If we are entering a class, function or method, we push it to the location + * stack. This is just so that we know whether we are in the file scope or not, + * so that hooks in the main file scope can be added to the file. + * + * We also check function calls to see if there are any actions or hooks. If + * there are, they are added to the file's hooks if in the global scope, or if + * we are in a function/method, they are added to the queue. They will be + * assinged to the function by leaveNode(). + * + * Finally, we pick up any docblocks for nodes that usually aren't documentable, + * so they can be assigned to the hooks to which they may belong. + */ public function enterNode( \PHPParser_Node $node ) { parent::enterNode( $node ); switch ( $node->getType() ) { // Add classes, functions, and methods to the current location stack case 'Stmt_Class': - array_push( $this->location, end( $this->classes ) ); - break; case 'Stmt_Function': - array_push( $this->location, end( $this->functions ) ); - break; case 'Stmt_ClassMethod': - $method = $this->findMethodReflector( $this->getLocation(), $node ); - if ( $method ) { - array_push( $this->location, $method ); - } else { - // Repeat the current location so that leaveNode() doesn't - // pop it off - array_push( $this->location, $this->getLocation() ); - } + array_push( $this->location, $node ); break; - // Parse out hook definitions and add them to the current location + // Parse out hook definitions and add them to the queue. case 'Expr_FuncCall': if ( $this->isFilter( $node ) ) { if ( $this->last_doc && ! $node->getDocComment() ) { $node->setAttribute( 'comments', array( $this->last_doc ) ); $this->last_doc = null; } - $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); - $this->getLocation()->hooks[] = $hook; + + $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); + + /* + * If the hook is in the global scope, add it to the file's + * hooks. Otherwise, add it to the queue so it can be added to + * the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->hooks[] = $hook; + } else { + $this->hooks_queue[] = $hook; + } } break; } @@ -76,15 +105,42 @@ public function enterNode( \PHPParser_Node $node ) { } } + /** + * Assign queued hooks to functions and update the node stack on leaving a node. + * + * We can now access the function/method reflectors, so we can assign any queued + * hooks to them. The reflector for a node isn't created until the node is left. + */ public function leaveNode( \PHPParser_Node $node ) { parent::leaveNode( $node ); switch ( $node->getType() ) { case 'Stmt_Class': - case 'Stmt_ClassMethod': + $class = end( $this->classes ); + if ( ! empty( $this->method_hooks_queue ) ) { + foreach ( $class->getMethods() as $method ) { + if ( isset( $this->method_hooks_queue[ $method->getName() ] ) ) { + $method->hooks = $this->method_hooks_queue[ $method->getName() ]; + } + } + } + + $this->method_hooks_queue = array(); + array_pop( $this->location ); + break; + case 'Stmt_Function': - case 'Stmt_Interface': + end( $this->functions )->hooks = $this->hooks_queue; + $this->hooks_queue = array(); + array_pop( $this->location ); + break; + + case 'Stmt_ClassMethod': + if ( ! empty( $this->hooks_queue ) ) { + $this->method_hooks_queue[ $node->name ] = $this->hooks_queue; + $this->hooks_queue = array(); + } array_pop( $this->location ); break; } @@ -105,38 +161,6 @@ protected function getLocation() { return empty( $this->location ) ? $this : end( $this->location ); } - /** - * Find the MethodReflector in a ClassReflector that matches the - * given Stmt_ClassMethod node. - * - * @param \phpDocumentor\Reflection\ClassReflector $class Class to search in - * @param \PHPParser_Node_Stmt_ClassMethod $node AST node to match with - * - * @return \phpDocumentor\Reflection\MethodReflector|bool - */ - protected function findMethodReflector( $class, \PHPParser_Node_Stmt_ClassMethod $node ) { - if ( ! $class instanceof Reflection\ClassReflector ) { - return false; - } - - $found = false; - $method = new Reflection\ClassReflector\MethodReflector( $node, $this->context ); - - foreach ( $class->getMethods() as $poss_method ) { - if ( $method->getName() === $poss_method->getName() - && $method->getVisibility() === $poss_method->getVisibility() - && $method->isAbstract() === $poss_method->isAbstract() - && $method->isStatic() === $poss_method->isStatic() - && $method->isFinal() === $poss_method->isFinal() - ) { - $found = $poss_method; - break; - } - } - - return $found; - } - protected function isNodeDocumentable( \PHPParser_Node $node ) { return parent::isNodeDocumentable( $node ) || ( $node instanceof \PHPParser_Node_Expr_FuncCall From 57a64ee814c2cfdc46ffd948248bfa69169dd446 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 11:45:16 -0500 Subject: [PATCH 141/402] Avoid an undefined index notice in expand_content() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The argument description is only available if it is documented with one. That isn’t always the case. --- plugin.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index 3223e901b..ba24b35fb 100644 --- a/plugin.php +++ b/plugin.php @@ -226,7 +226,9 @@ function expand_content( $content ) { foreach ( $args as $arg ) { $after_content .= '<div class="wpfuncref-arg">'; $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; - $after_content .= wpautop( $arg['desc'], false ); + if ( ! empty( $arg['desc'] ) ) { + $after_content .= wpautop( $arg['desc'], false ); + } $after_content .= '</div>'; } From 20b07d6175f4329d7ab7913f6991c1e51d6548e1 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 14:52:13 -0500 Subject: [PATCH 142/402] Add the hook type as metadata when importing a hook Fixes #58 --- lib/class-importer.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index f1cb0cd7e..43241c3c2 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -193,7 +193,15 @@ public function import_function( array $data, $parent_post_id = 0, $import_inter * @return bool|int Post ID of this hook, false if any failure. */ public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { - return $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); + $hook_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); + + if ( ! $hook_id ) { + return false; + } + + update_post_meta( $hook_id, '_wpapi_hook_type', $data['type'] ); + + return $hook_id; } /** From 82389a69d445c99309669fc03b4c509452154782 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:01:55 -0500 Subject: [PATCH 143/402] Don't attempt to save 'arguments' metadata for classes See #41 --- lib/class-importer.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index f1cb0cd7e..2f2c1f214 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -378,7 +378,9 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Set other taxonomy and post meta to use in the theme templates wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); - update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + if ( $post_data['post_type'] !== $this->post_type_class ) { + update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + } update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); From 979d569a0129a325e4e450d4aecfca883a7ba387 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:17:44 -0500 Subject: [PATCH 144/402] Introduce import_method() to import method data An attempt was being made to add some method metadata to the class, which was causing undefined index notices. This moves that out into the new `import_method()` method. Fixes #41 Formerly: #62 (importing hooks within methods; may be closed) --- lib/class-importer.php | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 2f2c1f214..792236418 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -216,19 +216,52 @@ protected function import_class( array $data, $import_internal = false ) { // Set class-specific meta update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $class_id, '_wpapi_static', (bool) $data['static'] ); - update_post_meta( $class_id, '_wpapi_visibility', $data['visibility'] ); // Now add the methods foreach ( $data['methods'] as $method ) { // Namespace method names with the class name $method['name'] = $data['name'] . '-' . $method['name']; - $this->import_item( $method, $class_id, $import_internal ); + $this->import_method( $method, $class_id, $import_internal ); } return $class_id; } + /** + * Create a post for a class method. + * + * @param array $data Method. + * @param int $parent_post_id Optional; post ID of the parent (class) this + * method belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, functions + * marked `@internal` will be imported. + * @return bool|int Post ID of this function, false if any failure. + */ + protected function import_method( array $data, $parent_post_id = 0, $import_internal = false ) { + + // Insert this method. + $method_id = $this->import_item( $data, $parent_post_id, $import_internal ); + + if ( ! $method_id ) { + return false; + } + + // Set method-specific meta. + update_post_meta( $method_id, '_wpapi_final', (bool) $data['final'] ); + update_post_meta( $method_id, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $method_id, '_wpapi_static', (bool) $data['static'] ); + update_post_meta( $method_id, '_wpapi_visibility', $data['visibility'] ); + + // Now add the hooks. + if ( ! empty( $data['hooks'] ) ) { + foreach ( $data['hooks'] as $hook ) { + $this->import_hook( $hook, $method_id, $import_internal ); + } + } + + return $method_id; + } + /** * Create a post for an item (a class or a function). * From e3fa08b52d447c7602c8c41e1538598a5290dbe8 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:20:54 -0500 Subject: [PATCH 145/402] Import more class data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We export ‘extends’, ‘implements’, and ‘properties’, but we weren’t importing them. --- lib/class-importer.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 792236418..09ccae733 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -216,6 +216,9 @@ protected function import_class( array $data, $import_internal = false ) { // Set class-specific meta update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); + update_post_meta( $class_id, '_wpapi_extends', $data['extends'] ); + update_post_meta( $class_id, '_wpapi_implements', $data['implements'] ); + update_post_meta( $class_id, '_wpapi_properties', $data['properties'] ); // Now add the methods foreach ( $data['methods'] as $method ) { From 305923617a12d5e89e2de914cfea4af6c8ba8371 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:44:55 -0500 Subject: [PATCH 146/402] Don't add back wpautop() for the hook post type Fixes #39 --- plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index ba24b35fb..dd7a3e108 100644 --- a/plugin.php +++ b/plugin.php @@ -259,7 +259,7 @@ function expand_content( $content ) { function autop_for_non_funcref( $content ) { $post = get_post(); - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' ) { + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { $content = wpautop( $content ); } From 71fada986b452c46c46a8ebf8c33ebb9ddb019ee Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:51:06 -0500 Subject: [PATCH 147/402] Check that the hook post type exists before importing There were already sanity checks for the class and function post types and for the taxonomies, but not for the hooks post type. --- lib/class-command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index 376116cef..eb1d33cd9 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -159,7 +159,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna $importer = new Importer; // Sanity check -- do the required post types exist? - if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) ) { + if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) || ! post_type_exists( $importer->post_type_hook ) ) { WP_CLI::error( sprintf( 'Missing post type; check that "%1$s" and "%2$s" are registered.', $importer->post_type_class, $importer->post_type_function ) ); exit; } From c2536117e1eb1c5c33d2ad67d0c76652851038b5 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 15:55:03 -0500 Subject: [PATCH 148/402] Add the hook post type to the error message too --- lib/class-command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index eb1d33cd9..dd1fff560 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -160,7 +160,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna // Sanity check -- do the required post types exist? if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) || ! post_type_exists( $importer->post_type_hook ) ) { - WP_CLI::error( sprintf( 'Missing post type; check that "%1$s" and "%2$s" are registered.', $importer->post_type_class, $importer->post_type_function ) ); + WP_CLI::error( sprintf( 'Missing post type; check that "%1$s", "%2$s", and "%3$s" are registered.', $importer->post_type_class, $importer->post_type_function, $importer->post_type_hook ) ); exit; } From 02a0c62efa68ac68f878ea4e12d128a96897feb4 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 3 Mar 2014 17:41:46 -0500 Subject: [PATCH 149/402] Update filter prefixes to wp_parser in plugin.php --- plugin.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin.php b/plugin.php index ba24b35fb..7ad8d3021 100644 --- a/plugin.php +++ b/plugin.php @@ -19,8 +19,8 @@ add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); -add_filter( 'wpfuncref_get_the_arguments', __NAMESPACE__ . '\\make_args_safe' ); -add_filter( 'wpfuncref_the_return_type', __NAMESPACE__ . '\\humanize_separator' ); +add_filter( 'wp_parser_get_arguments', __NAMESPACE__ . '\\make_args_safe' ); +add_filter( 'wp_parser_return_type', __NAMESPACE__ . '\\humanize_separator' ); add_filter( 'the_content', __NAMESPACE__ . '\\expand_content' ); add_filter( 'the_content', __NAMESPACE__ . '\\autop_for_non_funcref' ); @@ -185,7 +185,7 @@ function make_args_safe( $args ) { } } - return apply_filters( 'wpfuncref_make_args_safe', $args ); + return apply_filters( 'wp_parser_make_args_safe', $args ); } /** @@ -240,8 +240,8 @@ function expand_content( $content ) { $after_content .= '<a href="' . $source . '">Source</a>'; } - $before_content = apply_filters( 'wpfuncref_before_content', $before_content ); - $after_content = apply_filters( 'wpfuncref_after_content', $after_content ); + $before_content = apply_filters( 'wp_parser_before_content', $before_content ); + $after_content = apply_filters( 'wp_parser_after_content', $after_content ); return $before_content . $content . $after_content; } From eafcc33bf919e5cb9df32e50642db464e1a07eda Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Tue, 4 Mar 2014 01:21:50 +0200 Subject: [PATCH 150/402] Surrounded internal tag mentions in inline docs with backticks. --- lib/class-importer.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index f1cb0cd7e..6aee4139f 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -93,7 +93,7 @@ public function __construct( array $args = array() ) { * * @param array $file * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked `@internal` will be imported. */ public function import_file( array $file, $skip_sleep = false, $import_internal = false ) { @@ -171,7 +171,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal * * @param array $data Function * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions marked `@internal` will be imported. * * @return bool|int Post ID of this function, false if any failure. */ @@ -188,7 +188,7 @@ public function import_function( array $data, $parent_post_id = 0, $import_inter * * @param array $data Hook * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, hooks marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, hooks marked `@internal` will be imported. * * @return bool|int Post ID of this hook, false if any failure. */ @@ -200,7 +200,7 @@ public function import_hook( array $data, $parent_post_id = 0, $import_internal * Create a post for a class * * @param array $data Class - * @param bool $import_internal Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions marked `@internal` will be imported. * * @return bool|int Post ID of this function, false if any failure. */ @@ -237,7 +237,7 @@ protected function import_class( array $data, $import_internal = false ) { * * @param array $data Data * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked @internal will be imported. + * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). * * @return bool|int Post ID of this item, false if any failure. @@ -247,7 +247,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal /** @var \wpdb $wpdb */ global $wpdb; - // Don't import items marked @internal unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + // Don't import items marked `@internal` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { if ( $post_data['post_type'] === $this->post_type_class ) { From 84119cd0b3d2542f760f8153376fc09ad0053891 Mon Sep 17 00:00:00 2001 From: Siobhan McKeown <siobhan.mckeown@gmail.com> Date: Tue, 4 Mar 2014 22:17:27 +0700 Subject: [PATCH 151/402] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 061d872b1..d4a2a0190 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # WP Parser +WP-Parser is the parser for creating the new code reference at (developer.wordpress.org)[http://developer.wordpress.org/reference]. + +We are currently looking for contributors to help us complete the work on the parser. + +There is a guide to developing for developer.wordpress.org in the [WordPress documentation handbook](http://make.wordpress.org/docs/handbook/projects/devhub/) + ## Requirements * PHP 5.3+ * [Composer](https://getcomposer.org/) From ab3390a9fb9dbc6c59d014a5c85e9c49de102250 Mon Sep 17 00:00:00 2001 From: Siobhan McKeown <siobhan.mckeown@gmail.com> Date: Tue, 4 Mar 2014 22:18:05 +0700 Subject: [PATCH 152/402] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4a2a0190..d101e6da7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WP Parser -WP-Parser is the parser for creating the new code reference at (developer.wordpress.org)[http://developer.wordpress.org/reference]. +WP-Parser is the parser for creating the new code reference at [developer.wordpress.org](http://developer.wordpress.org/reference). It parses the inline documentation and produces custom post types in WordPress. We are currently looking for contributors to help us complete the work on the parser. From 0a1c72ff1d8cb5194da608fe0470f80e02d6d474 Mon Sep 17 00:00:00 2001 From: Gary Jones <GaryJones@users.noreply.github.com> Date: Wed, 5 Mar 2014 04:07:10 +0000 Subject: [PATCH 153/402] Update README.md Be specific about what it actually produces. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d101e6da7..d90fa89ac 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WP Parser -WP-Parser is the parser for creating the new code reference at [developer.wordpress.org](http://developer.wordpress.org/reference). It parses the inline documentation and produces custom post types in WordPress. +WP-Parser is the parser for creating the new code reference at [developer.wordpress.org](http://developer.wordpress.org/reference). It parses the inline documentation and produces custom post type entries in WordPress. We are currently looking for contributors to help us complete the work on the parser. From 5ff8aa11340eca5a013d7f3e6d764cc7287771ef Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Wed, 5 Mar 2014 17:50:44 -0500 Subject: [PATCH 154/402] Export the structural element a doc tag refers to Fixes #35 --- lib/runner.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/runner.php b/lib/runner.php index 0ffe22343..17cdf8492 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -125,6 +125,9 @@ function export_docblock( $element ) { if ( method_exists( $tag, 'getVariableName' ) ) { $t['variable'] = $tag->getVariableName(); } + if ( method_exists( $tag, 'getReference' ) ) { + $t['refers'] = $tag->getReference(); + } if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { $t['content'] = $tag->getVersion(); } From 841a4261c1a8eed2be7b057fc45b4452f41e374b Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 6 Mar 2014 14:37:17 -0500 Subject: [PATCH 155/402] Fix a fatal error when generating from a directory Fixes #73 --- lib/runner.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/runner.php b/lib/runner.php index 0ffe22343..94acd5b5b 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -3,8 +3,8 @@ namespace WP_Parser; function get_wp_files( $directory ) { - $iterableFiles = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator( $directory ) + $iterableFiles = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator( $directory ) ); $files = array(); @@ -16,7 +16,7 @@ function get_wp_files( $directory ) { $files[] = $file->getPathname(); } - } catch ( UnexpectedValueException $e ) { + } catch ( \UnexpectedValueException $e ) { printf( 'Directory [%s] contained a directory we can not recurse into', $directory ); } From ef79e14b5d0e2a1b635bd05c908ff44d0835e3fd Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 6 Mar 2014 17:35:56 -0500 Subject: [PATCH 156/402] Export the ending line number for structural elements Fixes #12 --- lib/runner.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/runner.php b/lib/runner.php index 94acd5b5b..242def8fd 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -64,6 +64,7 @@ function parse_files( $files, $root ) { $func = array( 'name' => $function->getShortName(), 'line' => $function->getLineNumber(), + 'end_line' => $function->getNode()->getAttribute( 'endLine' ), 'arguments' => export_arguments( $function->getArguments() ), 'doc' => export_docblock( $function ), 'hooks' => array(), @@ -80,6 +81,7 @@ function parse_files( $files, $root ) { $cl = array( 'name' => $class->getShortName(), 'line' => $class->getLineNumber(), + 'end_line' => $class->getNode()->getAttribute( 'endLine' ), 'final' => $class->isFinal(), 'abstract' => $class->isAbstract(), 'extends' => $class->getParentClass(), @@ -141,6 +143,7 @@ function export_hooks( array $hooks ) { $out[] = array( 'name' => $hook->getName(), 'line' => $hook->getLineNumber(), + 'end_line' => $hook->getNode()->getAttribute( 'endLine' ), 'type' => $hook->getType(), 'arguments' => implode( ', ', $hook->getArgs() ), 'doc' => export_docblock( $hook ), @@ -171,6 +174,7 @@ function export_properties( array $properties ) { $prop = array( 'name' => $property->getName(), 'line' => $property->getLineNumber(), + 'end_line' => $property->getNode()->getAttribute( 'endLine' ), 'default' => $property->getDefault(), // 'final' => $property->isFinal(), 'static' => $property->isStatic(), @@ -196,6 +200,7 @@ function export_methods( array $methods ) { $meth = array( 'name' => $method->getShortName(), 'line' => $method->getLineNumber(), + 'end_line' => $method->getNode()->getAttribute( 'endLine' ), 'final' => $method->isFinal(), 'abstract' => $method->isAbstract(), 'static' => $method->isStatic(), From 78c99cf296f10337067ad1f58f417a0e346edbe3 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 7 Mar 2014 16:38:09 -0500 Subject: [PATCH 157/402] apply_filters_ref_array() is a hook function Fixes #54 --- lib/class-file-reflector.php | 2 +- lib/class-hook-reflector.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 58ce6d2e3..f57a68c02 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -154,7 +154,7 @@ protected function isFilter( \PHPParser_Node $node ) { $calling = (string) $node->name; - return ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' ); + return ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' || $calling === 'apply_filters_ref_array' ); } protected function getLocation() { diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 13815d508..f31466823 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -38,6 +38,9 @@ public function getType() { case 'do_action_ref_array': $type = 'action_reference'; break; + case 'apply_filters_ref_array': + $type = 'filter_reference'; + break; } return $type; From e48b2facb72251d5cdaf729ada2f5ee9f85ec37f Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 7 Mar 2014 17:10:47 -0500 Subject: [PATCH 158/402] Export hook names no matter what kind of expression they are Fixes #44 --- lib/class-hook-reflector.php | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index f31466823..73ed2eb7f 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -8,21 +8,8 @@ class Hook_Reflector extends BaseReflector { public function getName() { - $name = ''; - $filter = $this->node->args[0]->value; - - switch ( $filter->getType() ) { - case 'Expr_Concat': - case 'Scalar_Encapsed': - $printer = new PHPParser_PrettyPrinter_Default; - $name = $printer->prettyPrintExpr( $filter ); - break; - case 'Scalar_String': - $name = "'" . $filter->value . "'"; - break; - } - - return $name ? $name : false; + $printer = new PHPParser_PrettyPrinter_Default; + return $printer->prettyPrintExpr( $this->node->args[0]->value ); } public function getShortName() { From 6b7a74703e46dbf2c5a867622567d1ae553552b5 Mon Sep 17 00:00:00 2001 From: GaryJones <gary@garyjones.co.uk> Date: Sat, 8 Mar 2014 12:32:13 +0000 Subject: [PATCH 159/402] Refactor isFilter return statement. --- lib/class-file-reflector.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index f57a68c02..6222dc9e5 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -154,7 +154,14 @@ protected function isFilter( \PHPParser_Node $node ) { $calling = (string) $node->name; - return ( $calling === 'apply_filters' || $calling === 'do_action' || $calling === 'do_action_ref_array' || $calling === 'apply_filters_ref_array' ); + $functions = array( + 'apply_filters', + 'apply_filters_ref_array', + 'do_action', + 'do_action_ref_array', + ); + + return in_array( $calling, $functions ); } protected function getLocation() { From b6994144c6218b4f9c2837e33cd4f3570bc21349 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 22:07:03 +0200 Subject: [PATCH 160/402] Updated classes in markup to wp-parser prefix. --- plugin.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin.php b/plugin.php index 525555cd1..88d933edf 100644 --- a/plugin.php +++ b/plugin.php @@ -219,12 +219,12 @@ function expand_content( $content ) { $before_content = get_prototype(); } - $before_content .= '<p class="wpfuncref-description">' . get_the_excerpt() . '</p>'; - $before_content .= '<div class="wpfuncref-longdesc">'; + $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; + $before_content .= '<div class="wp-parser-longdesc">'; $after_content = '</div>'; - $after_content .= '<div class="wpfuncref-arguments"><h3>Arguments</h3>'; + $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; if ( 'wpapi-hook' === $post->post_type ) { $args = get_hook_arguments(); @@ -233,7 +233,7 @@ function expand_content( $content ) { } foreach ( $args as $arg ) { - $after_content .= '<div class="wpfuncref-arg">'; + $after_content .= '<div class="wp-parser-arg">'; $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; if ( ! empty( $arg['desc'] ) ) { $after_content .= wpautop( $arg['desc'], false ); From 022ea592d1c208aabdd95245fb7b923c9d2187bd Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 22:21:58 +0200 Subject: [PATCH 161/402] Moved load process into a class. --- lib/class-plugin.php | 269 +++++++++++++++++++++++++++++++++++++++++++ plugin.php | 266 +----------------------------------------- 2 files changed, 272 insertions(+), 263 deletions(-) create mode 100644 lib/class-plugin.php diff --git a/lib/class-plugin.php b/lib/class-plugin.php new file mode 100644 index 000000000..3097c96b4 --- /dev/null +++ b/lib/class-plugin.php @@ -0,0 +1,269 @@ +<?php +namespace WP_Parser; + +class Plugin { + + public function on_load() { + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + \WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); + } + + add_action( 'init', array( $this, 'register_post_types' ) ); + add_action( 'init', array( $this, 'register_taxonomies' ) ); + add_filter( 'wp_parser_get_arguments', array( $this, 'make_args_safe' ) ); + add_filter( 'wp_parser_return_type', array( $this, 'humanize_separator' ) ); + + add_filter( 'the_content', array( $this, 'expand_content' ) ); + add_filter( 'the_content', array( $this, 'autop_for_non_funcref' ) ); + remove_filter( 'the_content', 'wpautop' ); + add_filter( 'post_type_link', array( $this, 'method_permalink' ), 10, 2 ); + } + + /** + * Register the function and class post types + */ + function register_post_types() { + + $supports = array( + 'comments', + 'custom-fields', + 'editor', + 'excerpt', + 'revisions', + 'title', + ); + + // Functions + register_post_type( + 'wpapi-function', + array( + 'has_archive' => 'functions', + 'label' => __( 'Functions', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'function', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + + // Methods + add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-function&name=$matches[1]-$matches[2]', 'top' ); + + // Classes + register_post_type( + 'wpapi-class', + array( + 'has_archive' => 'classes', + 'label' => __( 'Classes', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'class', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + + // Hooks + register_post_type( + 'wpapi-hook', + array( + 'has_archive' => 'hooks', + 'label' => __( 'Hooks', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'hook', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + } + + /** + * Register the file and @since taxonomies + */ + function register_taxonomies() { + // Files + register_taxonomy( + 'wpapi-source-file', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'label' => __( 'Files', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'files' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + + // Package + register_taxonomy( + 'wpapi-package', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => '@package', + 'public' => true, + 'rewrite' => array( 'slug' => 'package' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + + // @since + register_taxonomy( + 'wpapi-since', + array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => __( '@since', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'since' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + } + + function method_permalink( $link, $post ) { + + if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) { + return $link; + } + + list( $class, $method ) = explode( '-', $post->post_name ); + $link = home_url( user_trailingslashit( "method/$class/$method" ) ); + + return $link; + } + + /** + * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. + * + * @param array $args Parameter arguments to make safe + * + * @return array + */ + function make_args_safe( $args ) { + + $filters = array( + 'wp_filter_kses', + 'make_clickable', + 'force_balance_tags', + 'wptexturize', + 'convert_smilies', + 'convert_chars', + 'stripslashes_deep', + ); + + foreach ( $args as &$arg ) { + foreach ( $arg as &$value ) { + foreach ( $filters as $filter_function ) { + if ( is_array( $value ) ) { + foreach ( $value as &$v ) { + $v = call_user_func( $filter_function, $v ); + } + } else { + $value = call_user_func( $filter_function, $value ); + } + } + } + } + + return apply_filters( 'wp_parser_make_args_safe', $args ); + } + + /** + * Replace separators with a more readable version + * + * @param string $type Variable type + * + * @return string + */ + function humanize_separator( $type ) { + return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); + } + + /** + * Extend the post's content with function reference pieces + * + * @param string $content Unfiltered content + * + * @return string Content with Function reference pieces added + */ + function expand_content( $content ) { + $post = get_post(); + + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + return $content; + } + + if ( 'wpapi-hook' === $post->post_type ) { + $before_content = get_hook_prototype(); + } else { + $before_content = get_prototype(); + } + + $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; + $before_content .= '<div class="wp-parser-longdesc">'; + + $after_content = '</div>'; + + $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; + + if ( 'wpapi-hook' === $post->post_type ) { + $args = get_hook_arguments(); + } else { + $args = get_arguments(); + } + + foreach ( $args as $arg ) { + $after_content .= '<div class="wp-parser-arg">'; + $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; + if ( ! empty( $arg['desc'] ) ) { + $after_content .= wpautop( $arg['desc'], false ); + } + $after_content .= '</div>'; + } + + $after_content .= '</div>'; + + $source = get_source_link(); + + if ( $source ) { + $after_content .= '<a href="' . $source . '">Source</a>'; + } + + $before_content = apply_filters( 'wp_parser_before_content', $before_content ); + $after_content = apply_filters( 'wp_parser_after_content', $after_content ); + + return $before_content . $content . $after_content; + } + + /** + * Re-enable autopee for the non-funcref posts + * + * We can't selectively filter the_content for wpautop, so we remove it and + * readd this to check instead. + * + * @param string $content Unfiltered content + * + * @return string Autopeed content + */ + function autop_for_non_funcref( $content ) { + $post = get_post(); + + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + $content = wpautop( $content ); + } + + return $content; + } +} diff --git a/plugin.php b/plugin.php index 88d933edf..5d90bd82f 100644 --- a/plugin.php +++ b/plugin.php @@ -7,270 +7,10 @@ * Version: */ -namespace WP_Parser; - if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { require __DIR__ . '/vendor/autoload.php'; } -if ( defined( 'WP_CLI' ) && WP_CLI ) { - \WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); -} - -add_action( 'init', __NAMESPACE__ . '\\register_post_types' ); -add_action( 'init', __NAMESPACE__ . '\\register_taxonomies' ); -add_filter( 'wp_parser_get_arguments', __NAMESPACE__ . '\\make_args_safe' ); -add_filter( 'wp_parser_return_type', __NAMESPACE__ . '\\humanize_separator' ); - -add_filter( 'the_content', __NAMESPACE__ . '\\expand_content' ); -add_filter( 'the_content', __NAMESPACE__ . '\\autop_for_non_funcref' ); -remove_filter( 'the_content', 'wpautop' ); - -/** - * Register the function and class post types - */ -function register_post_types() { - - $supports = array( - 'comments', - 'custom-fields', - 'editor', - 'excerpt', - 'revisions', - 'title', - ); - - // Functions - register_post_type( - 'wpapi-function', - array( - 'has_archive' => 'functions', - 'label' => __( 'Functions', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'function', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); - - // Methods - add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-function&name=$matches[1]-$matches[2]', 'top' ); - - // Classes - register_post_type( - 'wpapi-class', - array( - 'has_archive' => 'classes', - 'label' => __( 'Classes', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'class', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); - - // Hooks - register_post_type( - 'wpapi-hook', - array( - 'has_archive' => 'hooks', - 'label' => __( 'Hooks', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'hook', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); -} - -/** - * Register the file and @since taxonomies - */ -function register_taxonomies() { - // Files - register_taxonomy( - 'wpapi-source-file', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), - array( - 'label' => __( 'Files', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'files' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); - - // Package - register_taxonomy( - 'wpapi-package', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), - array( - 'hierarchical' => true, - 'label' => '@package', - 'public' => true, - 'rewrite' => array( 'slug' => 'package' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); - - // @since - register_taxonomy( - 'wpapi-since', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), - array( - 'hierarchical' => true, - 'label' => __( '@since', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'since' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); -} - -function method_permalink( $link, $post ) { - - if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) { - return $link; - } - - list( $class, $method ) = explode( '-', $post->post_name ); - $link = home_url( user_trailingslashit( "method/$class/$method" ) ); - - return $link; -} - -add_filter( 'post_type_link', __NAMESPACE__ . '\\method_permalink', 10, 2 ); - -/** - * Raw phpDoc could potentially introduce unsafe markup into the HTML, so we sanitise it here. - * - * @param array $args Parameter arguments to make safe - * - * @return array - */ -function make_args_safe( $args ) { - - $filters = array( - 'wp_filter_kses', - 'make_clickable', - 'force_balance_tags', - 'wptexturize', - 'convert_smilies', - 'convert_chars', - 'stripslashes_deep', - ); - - foreach ( $args as &$arg ) { - foreach ( $arg as &$value ) { - foreach ( $filters as $filter_function ) { - if ( is_array( $value ) ) { - foreach ( $value as &$v ) { - $v = call_user_func( $filter_function, $v ); - } - } else { - $value = call_user_func( $filter_function, $value ); - } - } - } - } - - return apply_filters( 'wp_parser_make_args_safe', $args ); -} - -/** - * Replace separators with a more readable version - * - * @param string $type Variable type - * - * @return string - */ -function humanize_separator( $type ) { - return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); -} - -/** - * Extend the post's content with function reference pieces - * - * @param string $content Unfiltered content - * - * @return string Content with Function reference pieces added - */ -function expand_content( $content ) { - $post = get_post(); - - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { - return $content; - } - - if ( 'wpapi-hook' === $post->post_type ) { - $before_content = get_hook_prototype(); - } else { - $before_content = get_prototype(); - } - - $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; - $before_content .= '<div class="wp-parser-longdesc">'; - - $after_content = '</div>'; - - $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; - - if ( 'wpapi-hook' === $post->post_type ) { - $args = get_hook_arguments(); - } else { - $args = get_arguments(); - } - - foreach ( $args as $arg ) { - $after_content .= '<div class="wp-parser-arg">'; - $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; - if ( ! empty( $arg['desc'] ) ) { - $after_content .= wpautop( $arg['desc'], false ); - } - $after_content .= '</div>'; - } - - $after_content .= '</div>'; - - $source = get_source_link(); - - if ( $source ) { - $after_content .= '<a href="' . $source . '">Source</a>'; - } - - $before_content = apply_filters( 'wp_parser_before_content', $before_content ); - $after_content = apply_filters( 'wp_parser_after_content', $after_content ); - - return $before_content . $content . $after_content; -} - -/** - * Re-enable autopee for the non-funcref posts - * - * We can't selectively filter the_content for wpautop, so we remove it and - * readd this to check instead. - * - * @param string $content Unfiltered content - * - * @return string Autopeed content - */ -function autop_for_non_funcref( $content ) { - $post = get_post(); - - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { - $content = wpautop( $content ); - } - - return $content; -} +global $wp_parser; +$wp_parser = new WP_Parser\Plugin(); +$wp_parser->on_load(); From 1b91c5e428180393dcf6fb28d20d090a4ef4f47a Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 22:35:07 +0200 Subject: [PATCH 162/402] Marked functions in plugin class public. --- lib/class-plugin.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 3097c96b4..32d262d3d 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -23,7 +23,7 @@ public function on_load() { /** * Register the function and class post types */ - function register_post_types() { + public function register_post_types() { $supports = array( 'comments', @@ -89,7 +89,7 @@ function register_post_types() { /** * Register the file and @since taxonomies */ - function register_taxonomies() { + public function register_taxonomies() { // Files register_taxonomy( 'wpapi-source-file', @@ -132,7 +132,7 @@ function register_taxonomies() { ); } - function method_permalink( $link, $post ) { + public function method_permalink( $link, $post ) { if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) { return $link; @@ -151,7 +151,7 @@ function method_permalink( $link, $post ) { * * @return array */ - function make_args_safe( $args ) { + public function make_args_safe( $args ) { $filters = array( 'wp_filter_kses', @@ -187,7 +187,7 @@ function make_args_safe( $args ) { * * @return string */ - function humanize_separator( $type ) { + public function humanize_separator( $type ) { return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); } @@ -198,7 +198,7 @@ function humanize_separator( $type ) { * * @return string Content with Function reference pieces added */ - function expand_content( $content ) { + public function expand_content( $content ) { $post = get_post(); if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { @@ -257,7 +257,7 @@ function expand_content( $content ) { * * @return string Autopeed content */ - function autop_for_non_funcref( $content ) { + public function autop_for_non_funcref( $content ) { $post = get_post(); if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { From 2064abc76945e0851a2d580ec5254cc6450e523b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 22:35:32 +0200 Subject: [PATCH 163/402] Updated info in readme about unhooking expand content. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d90fa89ac..f4f244033 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,7 @@ on the fly by the `expand_content` function. To use your own theming instead, simply add the following to your `functions.php`: - remove_filter( 'the_content', 'WP_Parser\\expand_content' ); +```php + global $wp_parser; + remove_filter( 'the_content', array( $wp_parser, 'expand_content' ) ); +``` \ No newline at end of file From 8fccdbe10c6edce376457188517a2c03e4f1ab39 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 22:36:54 +0200 Subject: [PATCH 164/402] Renamed wp-cli commands for consistency with new structure. --- README.md | 2 +- lib/class-command.php | 6 +++--- lib/class-plugin.php | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f4f244033..48fb7e209 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Note: ensure the plugin is enabled first. In your site's directory: - $ wp funcref generate-and-import /path/to/source/code --user=<id|login> + $ wp parser create /path/to/source/code --user=<id|login> ## Displaying in your theme By default, your theme will use the built-in content. This content is generated diff --git a/lib/class-command.php b/lib/class-command.php index dd1fff560..1f74f8f15 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -15,7 +15,7 @@ class Command extends WP_CLI_Command { * * @synopsis <directory> [<output_file>] */ - public function generate( $args ) { + public function export( $args ) { $directory = $args[0]; $output_file = 'phpdoc.json'; @@ -76,10 +76,10 @@ public function import( $args, $assoc_args ) { /** * Generate JSON containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * - * @subcommand generate-and-import + * @subcommand create * @synopsis <directory> [--quick] [--import-internal] [--user] */ - public function generate_and_import( $args, $assoc_args ) { + public function create( $args, $assoc_args ) { list( $directory ) = $args; $directory = realpath( $directory ); diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 32d262d3d..40357c178 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -6,7 +6,7 @@ class Plugin { public function on_load() { if ( defined( 'WP_CLI' ) && WP_CLI ) { - \WP_CLI::add_command( 'funcref', __NAMESPACE__ . '\\Command' ); + \WP_CLI::add_command( 'parser', __NAMESPACE__ . '\\Command' ); } add_action( 'init', array( $this, 'register_post_types' ) ); From 9acb54488f3232b94ed7ca333be6926ee2633d2c Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 22 Mar 2014 23:28:56 +0200 Subject: [PATCH 165/402] Added checks for meaningful $post, resolves #83 (borked) --- lib/class-plugin.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 40357c178..bf1fc5798 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -201,6 +201,10 @@ public function humanize_separator( $type ) { public function expand_content( $content ) { $post = get_post(); + if ( empty( $post ) ) { + return $content; + } + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { return $content; } @@ -260,6 +264,10 @@ public function expand_content( $content ) { public function autop_for_non_funcref( $content ) { $post = get_post(); + if ( empty( $post ) ) { + return $content; + } + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { $content = wpautop( $content ); } From 5a78d5e834c6ed7d139f034537e3487f47245ee1 Mon Sep 17 00:00:00 2001 From: Ryan McCue <me@ryanmccue.info> Date: Sun, 23 Mar 2014 12:36:17 +1000 Subject: [PATCH 166/402] Add Rarst to contributors header and link to GitHub --- plugin.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index 5d90bd82f..ca5e80e22 100644 --- a/plugin.php +++ b/plugin.php @@ -2,7 +2,8 @@ /** * Plugin Name: WP Parser * Description: Create a function reference site powered by WordPress - * Author: Ryan McCue and Paul Gibbs + * Author: Ryan McCue, Paul Gibbs, Andrey "Rarst" Savchenko and Contributors + * Author URI: https://github.com/rmccue/WP-Parser/graphs/contributors * Plugin URI: https://github.com/rmccue/WP-Parser * Version: */ From 133eda2b5c5bad163d4c31d476d133e5d665cbc6 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 24 Mar 2014 17:31:46 -0400 Subject: [PATCH 167/402] Export the names of the functions used in each element See #79 --- lib/class-file-reflector.php | 67 ++++++++++++++++++--------- lib/class-function-call-reflector.php | 42 +++++++++++++++++ lib/runner.php | 52 ++++++++++++++++++--- 3 files changed, 133 insertions(+), 28 deletions(-) create mode 100644 lib/class-function-call-reflector.php diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 6222dc9e5..3ad71820e 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -13,25 +13,28 @@ */ class File_Reflector extends FileReflector { /** - * List of hooks defined in global scope in this file. + * List of elements used in global scope in this file, indexed by element type. * - * @var \WP_Parser\Hook_Reflector[] + * @var array { + * @type \WP_Parser\Hook_Reflector[] $hooks The action and filters. + * @type \WP_Parser\Function_Call_Reflector[] $functions The functions called. + * } */ - public $hooks = array(); + public $uses = array(); /** - * List of hooks defined in the current node scope. + * List of elements used in the current node scope, indexed by element type. * - * @var \WP_Parser\Hook_Reflector[] + * @var array {@see \WP_Parser\File_Reflector::$uses} */ - protected $hooks_queue = array(); + protected $uses_queue = array(); /** - * List of hooks defined in the current class scope, indexed by method. + * List of elements used in the current class scope, indexed by method. * - * @var \WP_Parser\Hook_Reflector[] + * @var array[][] {@see \WP_Parser\File_Reflector::$uses} */ - protected $method_hooks_queue = array(); + protected $method_uses_queue = array(); /** * Stack of classes/methods/functions currently being parsed. @@ -58,7 +61,9 @@ class File_Reflector extends FileReflector { * We also check function calls to see if there are any actions or hooks. If * there are, they are added to the file's hooks if in the global scope, or if * we are in a function/method, they are added to the queue. They will be - * assinged to the function by leaveNode(). + * assinged to the function by leaveNode(). We also check for any other function + * calls and treat them similarly, so that we can export a list of functions + * used by each element. * * Finally, we pick up any docblocks for nodes that usually aren't documentable, * so they can be assigned to the hooks to which they may belong. @@ -74,8 +79,21 @@ public function enterNode( \PHPParser_Node $node ) { array_push( $this->location, $node ); break; - // Parse out hook definitions and add them to the queue. + // Parse out hook definitions and function calls and add them to the queue. case 'Expr_FuncCall': + $function = new \WP_Parser\Function_Call_Reflector( $node, $this->context ); + + /* + * If the function call is in the global scope, add it to the + * file's function calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['functions'][] = $function; + } else { + $this->uses_queue['functions'][] = $function; + } + if ( $this->isFilter( $node ) ) { if ( $this->last_doc && ! $node->getDocComment() ) { $node->setAttribute( 'comments', array( $this->last_doc ) ); @@ -90,9 +108,9 @@ public function enterNode( \PHPParser_Node $node ) { * the correct node when we leave it. */ if ( $this === $this->getLocation() ) { - $this->hooks[] = $hook; + $this->uses['hooks'][] = $hook; } else { - $this->hooks_queue[] = $hook; + $this->uses_queue['hooks'][] = $hook; } } break; @@ -118,29 +136,34 @@ public function leaveNode( \PHPParser_Node $node ) { switch ( $node->getType() ) { case 'Stmt_Class': $class = end( $this->classes ); - if ( ! empty( $this->method_hooks_queue ) ) { + if ( ! empty( $this->method_uses_queue ) ) { foreach ( $class->getMethods() as $method ) { - if ( isset( $this->method_hooks_queue[ $method->getName() ] ) ) { - $method->hooks = $this->method_hooks_queue[ $method->getName() ]; + if ( isset( $this->method_uses_queue[ $method->getName() ] ) ) { + $method->uses = $this->method_uses_queue[ $method->getName() ]; } } } - $this->method_hooks_queue = array(); + $this->method_uses_queue = array(); array_pop( $this->location ); break; case 'Stmt_Function': - end( $this->functions )->hooks = $this->hooks_queue; - $this->hooks_queue = array(); + end( $this->functions )->uses = $this->uses_queue; + $this->uses_queue = array(); array_pop( $this->location ); break; case 'Stmt_ClassMethod': - if ( ! empty( $this->hooks_queue ) ) { - $this->method_hooks_queue[ $node->name ] = $this->hooks_queue; - $this->hooks_queue = array(); + /* + * Store the list of elements used by this method in the queue. We'll + * assign them to the method upon leaving the class (see above). + */ + if ( ! empty( $this->uses_queue ) ) { + $this->method_uses_queue[ $node->name ] = $this->uses_queue; + $this->uses_queue = array(); } + array_pop( $this->location ); break; } diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php new file mode 100644 index 000000000..ccd90f426 --- /dev/null +++ b/lib/class-function-call-reflector.php @@ -0,0 +1,42 @@ +<?php + +/** + * A reflection class for a function call. + */ + +namespace WP_Parser; + +use phpDocumentor\Reflection\BaseReflector; +use phpDocumentor\Reflection\DocBlock\Context; + +/** + * A reflection of a function call expression. + */ +class Function_Call_Reflector extends BaseReflector { + + /** + * Initializes the reflector using the function statement object of + * PHP-Parser. + * + * @param \PHPParser_Node_Expr_FuncCall $node Function object + * coming from PHP-Parser. + * @param \phpDocumentor\Reflection\DocBlock\Context $context The context in + * which the node occurs. + */ + public function __construct( \PHPParser_Node_Expr $node, Context $context ) { + parent::__construct( $node, $context ); + } + + /** + * Returns the name for this Reflector instance. + * + * @return string + */ + public function getName() { + if (isset($this->node->namespacedName)) { + return '\\'.implode('\\', $this->node->namespacedName->parts); + } + + return (string) $this->getShortName(); + } +} diff --git a/lib/runner.php b/lib/runner.php index 67f45927d..40a969f69 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -40,6 +40,10 @@ function parse_files( $files, $root ) { 'path' => str_replace( DIRECTORY_SEPARATOR, '/', $file->getFilename() ), ); + if ( ! empty( $file->uses ) ) { + $out['uses'] = export_uses( $file->uses ); + } + foreach ( $file->getIncludes() as $include ) { $out['includes'][] = array( 'name' => $include->getName(), @@ -56,8 +60,8 @@ function parse_files( $files, $root ) { ); } - if ( ! empty( $file->hooks ) ) { - $out['hooks'] = export_hooks( $file->hooks ); + if ( ! empty( $file->uses['hooks'] ) ) { + $out['hooks'] = export_hooks( $file->uses['hooks'] ); } foreach ( $file->getFunctions() as $function ) { @@ -70,8 +74,12 @@ function parse_files( $files, $root ) { 'hooks' => array(), ); - if ( ! empty( $function->hooks ) ) { - $func['hooks'] = export_hooks( $function->hooks ); + if ( ! empty( $function->uses ) ) { + $func['uses'] = export_uses( $function->uses ); + + if ( ! empty( $function->uses['hooks'] ) ) { + $func['hooks'] = export_hooks( $function->uses['hooks'] ); + } } $out['functions'][] = $func; @@ -212,8 +220,12 @@ function export_methods( array $methods ) { 'doc' => export_docblock( $method ), ); - if ( ! empty( $method->hooks ) ) { - $meth['hooks'] = export_hooks( $method->hooks ); + if ( ! empty( $method->uses ) ) { + $meth['uses'] = export_uses( $method->uses ); + + if ( ! empty( $method->uses['hooks'] ) ) { + $meth['hooks'] = export_hooks( $method->uses['hooks'] ); + } } $out[] = $meth; @@ -221,3 +233,31 @@ function export_methods( array $methods ) { return $out; } + +/** + * Export the list of elements used by a file or structure. + * + * @param array $uses { + * @type Function_Call_Reflector[] $functions The functions called. + * } + * + * @return array + */ +function export_uses( array $uses ) { + $out = array(); + + // Ignore hooks here, they are exported separately. + unset( $uses['hooks'] ); + + foreach ( $uses as $type => $used_elements ) { + foreach ( $used_elements as $element ) { + $out[ $type ][] = array( + 'name' => $element->getName(), + 'line' => $element->getLineNumber(), + 'end_line' => $element->getNode()->getAttribute( 'endLine' ), + ); + } + } + + return $out; +} From 7386ac30546aa771c48d2cebb2f7c56a12be7136 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 25 Mar 2014 11:11:53 -0400 Subject: [PATCH 168/402] Fix a typo s/assinged/assigned/ --- lib/class-file-reflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 3ad71820e..e43a3e5a4 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -61,7 +61,7 @@ class File_Reflector extends FileReflector { * We also check function calls to see if there are any actions or hooks. If * there are, they are added to the file's hooks if in the global scope, or if * we are in a function/method, they are added to the queue. They will be - * assinged to the function by leaveNode(). We also check for any other function + * assigned to the function by leaveNode(). We also check for any other function * calls and treat them similarly, so that we can export a list of functions * used by each element. * From 14b1271a6aa8576f1258b84e7692d4da6471f345 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 30 Mar 2014 16:20:06 -0400 Subject: [PATCH 169/402] Remove a redundant class constructor --- lib/class-function-call-reflector.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php index ccd90f426..9cf8dd313 100644 --- a/lib/class-function-call-reflector.php +++ b/lib/class-function-call-reflector.php @@ -14,19 +14,6 @@ */ class Function_Call_Reflector extends BaseReflector { - /** - * Initializes the reflector using the function statement object of - * PHP-Parser. - * - * @param \PHPParser_Node_Expr_FuncCall $node Function object - * coming from PHP-Parser. - * @param \phpDocumentor\Reflection\DocBlock\Context $context The context in - * which the node occurs. - */ - public function __construct( \PHPParser_Node_Expr $node, Context $context ) { - parent::__construct( $node, $context ); - } - /** * Returns the name for this Reflector instance. * From 602ff734c1e3ff2a2b426f52cf0cef2476c709a8 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 30 Mar 2014 17:28:32 -0400 Subject: [PATCH 170/402] Add a separate post type for methods See #46 --- lib/class-importer.php | 104 +++++++++++++++++++++++++++++------------ lib/class-plugin.php | 28 ++++++++--- 2 files changed, 94 insertions(+), 38 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 4573a7a37..3a0fec87f 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -44,6 +44,13 @@ class Importer { */ public $post_type_class; + /** + * Post type name for methods + * + * @var string + */ + public $post_type_method; + /** * Post type name for hooks * @@ -75,6 +82,7 @@ public function __construct( array $args = array() ) { $args, array( 'post_type_class' => 'wpapi-class', + 'post_type_method' => 'wpapi-method', 'post_type_function' => 'wpapi-function', 'post_type_hook' => 'wpapi-hook', 'taxonomy_file' => 'wpapi-source-file', @@ -251,7 +259,7 @@ protected function import_class( array $data, $import_internal = false ) { protected function import_method( array $data, $parent_post_id = 0, $import_internal = false ) { // Insert this method. - $method_id = $this->import_item( $data, $parent_post_id, $import_internal ); + $method_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_method ) ); if ( ! $method_id ) { return false; @@ -294,12 +302,22 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Don't import items marked `@internal` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { - if ( $post_data['post_type'] === $this->post_type_class ) { - WP_CLI::line( sprintf( "\tSkipped importing @internal class \"%1\$s\"", $data['name'] ) ); - } elseif ( $parent_post_id ) { - WP_CLI::line( sprintf( "\t\tSkipped importing @internal method \"%1\$s\"", $data['name'] ) ); - } else { - WP_CLI::line( sprintf( "\tSkipped importing @internal function \"%1\$s\"", $data['name'] ) ); + switch ( $post_data['post_type'] ) { + case $this->post_type_class: + WP_CLI::line( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_method: + WP_CLI::line( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_hook: + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + WP_CLI::line( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); + break; + + default: + WP_CLI::line( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); } return false; @@ -335,12 +353,22 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( ! $ID || is_wp_error( $ID ) ) { - if ( $post_data['post_type'] === $this->post_type_class ) { - $this->errors[] = sprintf( "\tProblem inserting/updating post for class \"%1\$s\"", $data['name'], $ID->get_error_message() ); - } elseif ( $parent_post_id ) { - $this->errors[] = sprintf( "\t\tProblem inserting/updating post for method \"%1\$s\"", $data['name'], $ID->get_error_message() ); - } else { - $this->errors[] = sprintf( "\tProblem inserting/updating post for function \"%1\$s\"", $data['name'], $ID->get_error_message() ); + switch ( $post_data['post_type'] ) { + case $this->post_type_class: + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for class "%1$s"', $data['name'], $ID->get_error_message() ); + break; + + case $this->post_type_method: + $this->errors[] = "\t\t" . sprintf( 'Problem inserting/updating post for method "%1$s"', $data['name'], $ID->get_error_message() ); + break; + + case $this->post_type_hook: + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + $this->errors[] = $indent . sprintf( 'Problem inserting/updating post for hook "%1$s"', $data['name'], $ID->get_error_message() ); + break; + + default: + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for function "%1$s"', $data['name'], $ID->get_error_message() ); } return false; @@ -430,26 +458,40 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Everything worked! Woo hoo! if ( $is_new_post ) { - if ( $post_data['post_type'] === $this->post_type_class ) { - WP_CLI::line( sprintf( "\tImported class \"%1\$s\"", $data['name'] ) ); - } elseif ( $post_data['post_type'] === $this->post_type_hook ) { - $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::line( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); - } elseif ( $parent_post_id ) { - WP_CLI::line( sprintf( "\t\tImported method \"%1\$s\"", $data['name'] ) ); - } else { - WP_CLI::line( sprintf( "\tImported function \"%1\$s\"", $data['name'] ) ); + switch ( $post_data['post_type'] ) { + case $this->post_type_class: + WP_CLI::line( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_hook: + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + WP_CLI::line( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_method: + WP_CLI::line( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); + break; + + default: + WP_CLI::line( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); } } else { - if ( $post_data['post_type'] === $this->post_type_class ) { - WP_CLI::line( sprintf( "\tUpdated class \"%1\$s\"", $data['name'] ) ); - } elseif ( $post_data['post_type'] === $this->post_type_hook ) { - $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::line( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); - } elseif ( $parent_post_id ) { - WP_CLI::line( sprintf( "\t\tUpdated method \"%1\$s\"", $data['name'] ) ); - } else { - WP_CLI::line( sprintf( "\tUpdated function \"%1\$s\"", $data['name'] ) ); + switch ( $post_data['post_type'] ) { + case $this->post_type_class: + WP_CLI::line( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_hook: + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + WP_CLI::line( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); + break; + + case $this->post_type_method: + WP_CLI::line( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); + break; + + default: + WP_CLI::line( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); } } diff --git a/lib/class-plugin.php b/lib/class-plugin.php index bf1fc5798..db65b0666 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -51,7 +51,21 @@ public function register_post_types() { ); // Methods - add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-function&name=$matches[1]-$matches[2]', 'top' ); + add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-method&name=$matches[1]-$matches[2]', 'top' ); + register_post_type( + 'wpapi-method', + array( + 'has_archive' => 'methods', + 'label' => __( 'Methods', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'method', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); // Classes register_post_type( @@ -93,7 +107,7 @@ public function register_taxonomies() { // Files register_taxonomy( 'wpapi-source-file', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), array( 'label' => __( 'Files', 'wp-parser' ), 'public' => true, @@ -106,7 +120,7 @@ public function register_taxonomies() { // Package register_taxonomy( 'wpapi-package', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), array( 'hierarchical' => true, 'label' => '@package', @@ -120,7 +134,7 @@ public function register_taxonomies() { // @since register_taxonomy( 'wpapi-since', - array( 'wpapi-class', 'wpapi-function', 'wpapi-hook' ), + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), array( 'hierarchical' => true, 'label' => __( '@since', 'wp-parser' ), @@ -134,7 +148,7 @@ public function register_taxonomies() { public function method_permalink( $link, $post ) { - if ( $post->post_type !== 'wpapi-function' || $post->post_parent == 0 ) { + if ( $post->post_type !== 'wpapi-method' || $post->post_parent == 0 ) { return $link; } @@ -205,7 +219,7 @@ public function expand_content( $content ) { return $content; } - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { return $content; } @@ -268,7 +282,7 @@ public function autop_for_non_funcref( $content ) { return $content; } - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { $content = wpautop( $content ); } From c0a977fd310ba0eae20b0189cb240deeddb183bc Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 7 Apr 2014 18:13:16 -0400 Subject: [PATCH 171/402] Avoid duplicate entries for multi-use hooks Check against the post title instead of the post slug. (Thanks @GaryJones) Fixes #42 --- lib/class-importer.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 3a0fec87f..e3d0cfaa7 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -339,7 +339,14 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal ); // Look for an existing post for this item - $existing_post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", $slug, $post_data['post_type'], (int) $parent_post_id ) ); + $existing_post_id = $wpdb->get_var( + $wpdb->prepare( + "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = %s AND post_parent = %d LIMIT 1", + $data['name'], + $post_data['post_type'], + (int) $parent_post_id + ) + ); // Insert/update the item post if ( ! empty( $existing_post_id ) ) { From d3af70f4105be795378e368b071c1dab67cae9d4 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 8 Apr 2014 09:18:20 -0400 Subject: [PATCH 172/402] Import ending line numbers See #12, #75 --- lib/class-importer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 3a0fec87f..f06e735ba 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -454,6 +454,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); } update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); + update_post_meta( $ID, '_wpapi_end_line_num', $data['end_line'] ); update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); // Everything worked! Woo hoo! From aeb048012edee3ce024535ba7f2bcdd5f1123e17 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Tue, 8 Apr 2014 20:15:32 +0300 Subject: [PATCH 173/402] Bumping minimum PHP version due to SplFileInfo::getExtension() See #90 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 6671a9194..158a51acf 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "source": "https://github.com/rmccue/WP-Parser" }, "require" : { - "php" : ">=5.3.3", + "php" : ">=5.3.6", "composer/installers" : "~1.0", "phpdocumentor/reflection": "~1.0", "erusev/parsedown" : "~0.9" From 84c8c082a39e09b38db5ef5e0f0ee6428c5b2e1d Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 18:02:23 +0300 Subject: [PATCH 174/402] Made minimum PHP version more specific in readme text. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48fb7e209..e6ebab1a3 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ We are currently looking for contributors to help us complete the work on the pa There is a guide to developing for developer.wordpress.org in the [WordPress documentation handbook](http://make.wordpress.org/docs/handbook/projects/devhub/) ## Requirements -* PHP 5.3+ +* PHP 5.3.6+ * [Composer](https://getcomposer.org/) * [WP CLI](http://wp-cli.org/) From 62aa1ddf79934da66ce5b490f341af534006dd89 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 18:03:00 +0300 Subject: [PATCH 175/402] Updated readme install instructions for single step composer install. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e6ebab1a3..02a970e18 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ There is a guide to developing for developer.wordpress.org in the [WordPress doc * [Composer](https://getcomposer.org/) * [WP CLI](http://wp-cli.org/) -After cloning from Git set up dependencies via: +Install via Composer into your WordPress plugins directory: - composer install --no-dev + composer create-project rmccue/wp-parser:dev-master --no-dev ## Running Note: ensure the plugin is enabled first. From c39507c1c0b58ebf453233d6171d83bd6ccfef94 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 18:59:12 +0300 Subject: [PATCH 176/402] Removed content filters. --- lib/class-plugin.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index db65b0666..2091ff23c 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -14,9 +14,6 @@ public function on_load() { add_filter( 'wp_parser_get_arguments', array( $this, 'make_args_safe' ) ); add_filter( 'wp_parser_return_type', array( $this, 'humanize_separator' ) ); - add_filter( 'the_content', array( $this, 'expand_content' ) ); - add_filter( 'the_content', array( $this, 'autop_for_non_funcref' ) ); - remove_filter( 'the_content', 'wpautop' ); add_filter( 'post_type_link', array( $this, 'method_permalink' ), 10, 2 ); } From 3b9eb30fd4c27021aabd6944d27109dca9732e3e Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 19:00:40 +0300 Subject: [PATCH 177/402] Moved content expansion into template tag. --- lib/class-plugin.php | 60 -------------------------------------------- lib/template.php | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 60 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 2091ff23c..ed5704cf2 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -202,66 +202,6 @@ public function humanize_separator( $type ) { return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); } - /** - * Extend the post's content with function reference pieces - * - * @param string $content Unfiltered content - * - * @return string Content with Function reference pieces added - */ - public function expand_content( $content ) { - $post = get_post(); - - if ( empty( $post ) ) { - return $content; - } - - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { - return $content; - } - - if ( 'wpapi-hook' === $post->post_type ) { - $before_content = get_hook_prototype(); - } else { - $before_content = get_prototype(); - } - - $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; - $before_content .= '<div class="wp-parser-longdesc">'; - - $after_content = '</div>'; - - $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; - - if ( 'wpapi-hook' === $post->post_type ) { - $args = get_hook_arguments(); - } else { - $args = get_arguments(); - } - - foreach ( $args as $arg ) { - $after_content .= '<div class="wp-parser-arg">'; - $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; - if ( ! empty( $arg['desc'] ) ) { - $after_content .= wpautop( $arg['desc'], false ); - } - $after_content .= '</div>'; - } - - $after_content .= '</div>'; - - $source = get_source_link(); - - if ( $source ) { - $after_content .= '<a href="' . $source . '">Source</a>'; - } - - $before_content = apply_filters( 'wp_parser_before_content', $before_content ); - $after_content = apply_filters( 'wp_parser_after_content', $after_content ); - - return $before_content . $content . $after_content; - } - /** * Re-enable autopee for the non-funcref posts * diff --git a/lib/template.php b/lib/template.php index 277d832bd..8b77495ee 100644 --- a/lib/template.php +++ b/lib/template.php @@ -2,6 +2,60 @@ namespace WP_Parser; +/** + * Parser post's content with function reference pieces. + */ +function the_content() { + + $post = get_post(); + $content = get_the_content(); + + if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + return $content; + } + + if ( 'wpapi-hook' === $post->post_type ) { + $before_content = get_hook_prototype(); + } else { + $before_content = get_prototype(); + } + + $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; + $before_content .= '<div class="wp-parser-longdesc">'; + + $after_content = '</div>'; + + $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; + + if ( 'wpapi-hook' === $post->post_type ) { + $args = get_hook_arguments(); + } else { + $args = get_arguments(); + } + + foreach ( $args as $arg ) { + $after_content .= '<div class="wp-parser-arg">'; + $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; + if ( ! empty( $arg['desc'] ) ) { + $after_content .= wpautop( $arg['desc'], false ); + } + $after_content .= '</div>'; + } + + $after_content .= '</div>'; + + $source = get_source_link(); + + if ( $source ) { + $after_content .= '<a href="' . $source . '">Source</a>'; + } + + $before_content = apply_filters( 'wp_parser_before_content', $before_content ); + $after_content = apply_filters( 'wp_parser_after_content', $after_content ); + + echo $before_content . $content . $after_content; +} + /** * Get the current function's return types * From 6c991c9fb09013ade43ef964450e9d98934db4c1 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 19:01:27 +0300 Subject: [PATCH 178/402] Removed autop hackery. --- lib/class-plugin.php | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index ed5704cf2..c27ceefc3 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -201,28 +201,4 @@ public function make_args_safe( $args ) { public function humanize_separator( $type ) { return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); } - - /** - * Re-enable autopee for the non-funcref posts - * - * We can't selectively filter the_content for wpautop, so we remove it and - * readd this to check instead. - * - * @param string $content Unfiltered content - * - * @return string Autopeed content - */ - public function autop_for_non_funcref( $content ) { - $post = get_post(); - - if ( empty( $post ) ) { - return $content; - } - - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { - $content = wpautop( $content ); - } - - return $content; - } } From 3cc3ce6b628c5773cae14397e83509a0fd6e3d30 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 19:55:23 +0300 Subject: [PATCH 179/402] Removed outdated theme integration instructions from readme. --- README.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/README.md b/README.md index 02a970e18..e6fae12b5 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,3 @@ Note: ensure the plugin is enabled first. In your site's directory: $ wp parser create /path/to/source/code --user=<id|login> - -## Displaying in your theme -By default, your theme will use the built-in content. This content is generated -on the fly by the `expand_content` function. - -To use your own theming instead, simply add the following to -your `functions.php`: - -```php - global $wp_parser; - remove_filter( 'the_content', array( $wp_parser, 'expand_content' ) ); -``` \ No newline at end of file From 7306d3116aab48cdfc24ae95cab6bfbf15ecd55c Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 20:39:33 +0300 Subject: [PATCH 180/402] Moved registrations to later priority. --- lib/class-plugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index c27ceefc3..89fe1c722 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -9,8 +9,8 @@ public function on_load() { \WP_CLI::add_command( 'parser', __NAMESPACE__ . '\\Command' ); } - add_action( 'init', array( $this, 'register_post_types' ) ); - add_action( 'init', array( $this, 'register_taxonomies' ) ); + add_action( 'init', array( $this, 'register_post_types' ), 11 ); + add_action( 'init', array( $this, 'register_taxonomies' ), 11 ); add_filter( 'wp_parser_get_arguments', array( $this, 'make_args_safe' ) ); add_filter( 'wp_parser_return_type', array( $this, 'humanize_separator' ) ); From b13d915abbee30c6855a2e2c7c7c700916b28f10 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 20:40:23 +0300 Subject: [PATCH 181/402] Made CPT registrations conditional. --- lib/class-plugin.php | 133 +++++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 61 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 89fe1c722..aa8ea189c 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -31,70 +31,81 @@ public function register_post_types() { 'title', ); - // Functions - register_post_type( - 'wpapi-function', - array( - 'has_archive' => 'functions', - 'label' => __( 'Functions', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'function', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); + if ( ! post_type_exists( 'wpapi-function' ) ) { + + register_post_type( + 'wpapi-function', + array( + 'has_archive' => 'functions', + 'label' => __( 'Functions', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'function', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + } - // Methods - add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-method&name=$matches[1]-$matches[2]', 'top' ); - register_post_type( - 'wpapi-method', - array( - 'has_archive' => 'methods', - 'label' => __( 'Methods', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'method', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); - // Classes - register_post_type( - 'wpapi-class', - array( - 'has_archive' => 'classes', - 'label' => __( 'Classes', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'class', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); + if ( ! post_type_exists( 'wpapi-method' ) ) { + + add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-method&name=$matches[1]-$matches[2]', 'top' ); + + register_post_type( + 'wpapi-method', + array( + 'has_archive' => 'methods', + 'label' => __( 'Methods', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'method', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + } - // Hooks - register_post_type( - 'wpapi-hook', - array( - 'has_archive' => 'hooks', - 'label' => __( 'Hooks', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( - 'feeds' => false, - 'slug' => 'hook', - 'with_front' => false, - ), - 'supports' => $supports, - ) - ); + + if ( ! post_type_exists( 'wpapi-class' ) ) { + + register_post_type( + 'wpapi-class', + array( + 'has_archive' => 'classes', + 'label' => __( 'Classes', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'class', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + } + + if ( ! post_type_exists( 'wpapi-hook' ) ) { + + register_post_type( + 'wpapi-hook', + array( + 'has_archive' => 'hooks', + 'label' => __( 'Hooks', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( + 'feeds' => false, + 'slug' => 'hook', + 'with_front' => false, + ), + 'supports' => $supports, + ) + ); + } } /** From a2aa6c39a380f370ff4d371b398a2771837b785b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 20:40:47 +0300 Subject: [PATCH 182/402] Made taxonomy registrations conditional. --- lib/class-plugin.php | 84 ++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index aa8ea189c..dda3ff255 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -112,46 +112,54 @@ public function register_post_types() { * Register the file and @since taxonomies */ public function register_taxonomies() { - // Files - register_taxonomy( - 'wpapi-source-file', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), - array( - 'label' => __( 'Files', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'files' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); - // Package - register_taxonomy( - 'wpapi-package', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), - array( - 'hierarchical' => true, - 'label' => '@package', - 'public' => true, - 'rewrite' => array( 'slug' => 'package' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); - // @since - register_taxonomy( - 'wpapi-since', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), - array( - 'hierarchical' => true, - 'label' => __( '@since', 'wp-parser' ), - 'public' => true, - 'rewrite' => array( 'slug' => 'since' ), - 'sort' => false, - 'update_count_callback' => '_update_post_term_count', - ) - ); + if ( ! taxonomy_exists( 'wpapi-source-file' ) ) { + + register_taxonomy( + 'wpapi-source-file', + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + array( + 'label' => __( 'Files', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'files' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + } + + if ( ! taxonomy_exists( 'wpapi-package' ) ) { + + register_taxonomy( + 'wpapi-package', + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => '@package', + 'public' => true, + 'rewrite' => array( 'slug' => 'package' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + } + + if ( ! taxonomy_exists( 'wpapi-since' ) ) { + + register_taxonomy( + 'wpapi-since', + array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + array( + 'hierarchical' => true, + 'label' => __( '@since', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'since' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + } } public function method_permalink( $link, $post ) { From ca53a0ef232229bb7e244ce6ad85359a3e498a67 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 20 Apr 2014 20:42:06 +0300 Subject: [PATCH 183/402] Abstracted taxonomy object types into single variable. --- lib/class-plugin.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index dda3ff255..18228ac29 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -113,12 +113,13 @@ public function register_post_types() { */ public function register_taxonomies() { + $object_types = array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ); if ( ! taxonomy_exists( 'wpapi-source-file' ) ) { register_taxonomy( 'wpapi-source-file', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + $object_types, array( 'label' => __( 'Files', 'wp-parser' ), 'public' => true, @@ -133,7 +134,7 @@ public function register_taxonomies() { register_taxonomy( 'wpapi-package', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + $object_types, array( 'hierarchical' => true, 'label' => '@package', @@ -149,7 +150,7 @@ public function register_taxonomies() { register_taxonomy( 'wpapi-since', - array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ), + $object_types, array( 'hierarchical' => true, 'label' => __( '@since', 'wp-parser' ), From 0be5ee6ffd0f2543ceef4acd70e29ab52cf7931b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 21 Apr 2014 23:45:58 +0300 Subject: [PATCH 184/402] Changed CPT and taxonomy names to use wp-parser prefix. Fixes #96 --- lib/class-importer.php | 42 +++++++++++++++++++++--------------------- lib/class-plugin.php | 36 ++++++++++++++++++------------------ lib/template.php | 28 ++++++++++++++-------------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index e3b4b5276..1422b8b60 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -81,13 +81,13 @@ public function __construct( array $args = array() ) { $r = wp_parse_args( $args, array( - 'post_type_class' => 'wpapi-class', - 'post_type_method' => 'wpapi-method', - 'post_type_function' => 'wpapi-function', - 'post_type_hook' => 'wpapi-hook', - 'taxonomy_file' => 'wpapi-source-file', - 'taxonomy_package' => 'wpapi-package', - 'taxonomy_since_version' => 'wpapi-since', + 'post_type_class' => 'wp-parser-class', + 'post_type_method' => 'wp-parser-method', + 'post_type_function' => 'wp-parser-function', + 'post_type_hook' => 'wp-parser-hook', + 'taxonomy_file' => 'wp-parser-source-file', + 'taxonomy_package' => 'wp-parser-package', + 'taxonomy_since_version' => 'wp-parser-since', ) ); @@ -207,7 +207,7 @@ public function import_hook( array $data, $parent_post_id = 0, $import_internal return false; } - update_post_meta( $hook_id, '_wpapi_hook_type', $data['type'] ); + update_post_meta( $hook_id, '_wp-parser_hook_type', $data['type'] ); return $hook_id; } @@ -230,11 +230,11 @@ protected function import_class( array $data, $import_internal = false ) { } // Set class-specific meta - update_post_meta( $class_id, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $class_id, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $class_id, '_wpapi_extends', $data['extends'] ); - update_post_meta( $class_id, '_wpapi_implements', $data['implements'] ); - update_post_meta( $class_id, '_wpapi_properties', $data['properties'] ); + update_post_meta( $class_id, '_wp-parser_final', (bool) $data['final'] ); + update_post_meta( $class_id, '_wp-parser_abstract', (bool) $data['abstract'] ); + update_post_meta( $class_id, '_wp-parser_extends', $data['extends'] ); + update_post_meta( $class_id, '_wp-parser_implements', $data['implements'] ); + update_post_meta( $class_id, '_wp-parser_properties', $data['properties'] ); // Now add the methods foreach ( $data['methods'] as $method ) { @@ -266,10 +266,10 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte } // Set method-specific meta. - update_post_meta( $method_id, '_wpapi_final', (bool) $data['final'] ); - update_post_meta( $method_id, '_wpapi_abstract', (bool) $data['abstract'] ); - update_post_meta( $method_id, '_wpapi_static', (bool) $data['static'] ); - update_post_meta( $method_id, '_wpapi_visibility', $data['visibility'] ); + update_post_meta( $method_id, '_wp-parser_final', (bool) $data['final'] ); + update_post_meta( $method_id, '_wp-parser_abstract', (bool) $data['abstract'] ); + update_post_meta( $method_id, '_wp-parser_static', (bool) $data['static'] ); + update_post_meta( $method_id, '_wp-parser_visibility', $data['visibility'] ); // Now add the hooks. if ( ! empty( $data['hooks'] ) ) { @@ -458,11 +458,11 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Set other taxonomy and post meta to use in the theme templates wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); if ( $post_data['post_type'] !== $this->post_type_class ) { - update_post_meta( $ID, '_wpapi_args', $data['arguments'] ); + update_post_meta( $ID, '_wp-parser_args', $data['arguments'] ); } - update_post_meta( $ID, '_wpapi_line_num', $data['line'] ); - update_post_meta( $ID, '_wpapi_end_line_num', $data['end_line'] ); - update_post_meta( $ID, '_wpapi_tags', $data['doc']['tags'] ); + update_post_meta( $ID, '_wp-parser_line_num', $data['line'] ); + update_post_meta( $ID, '_wp-parser_end_line_num', $data['end_line'] ); + update_post_meta( $ID, '_wp-parser_tags', $data['doc']['tags'] ); // Everything worked! Woo hoo! if ( $is_new_post ) { diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 18228ac29..0c5cc7eff 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -31,10 +31,10 @@ public function register_post_types() { 'title', ); - if ( ! post_type_exists( 'wpapi-function' ) ) { + if ( ! post_type_exists( 'wp-parser-function' ) ) { register_post_type( - 'wpapi-function', + 'wp-parser-function', array( 'has_archive' => 'functions', 'label' => __( 'Functions', 'wp-parser' ), @@ -50,12 +50,12 @@ public function register_post_types() { } - if ( ! post_type_exists( 'wpapi-method' ) ) { + if ( ! post_type_exists( 'wp-parser-method' ) ) { - add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wpapi-method&name=$matches[1]-$matches[2]', 'top' ); + add_rewrite_rule( 'method/([^/]+)/([^/]+)/?$', 'index.php?post_type=wp-parser-method&name=$matches[1]-$matches[2]', 'top' ); register_post_type( - 'wpapi-method', + 'wp-parser-method', array( 'has_archive' => 'methods', 'label' => __( 'Methods', 'wp-parser' ), @@ -71,10 +71,10 @@ public function register_post_types() { } - if ( ! post_type_exists( 'wpapi-class' ) ) { + if ( ! post_type_exists( 'wp-parser-class' ) ) { register_post_type( - 'wpapi-class', + 'wp-parser-class', array( 'has_archive' => 'classes', 'label' => __( 'Classes', 'wp-parser' ), @@ -89,10 +89,10 @@ public function register_post_types() { ); } - if ( ! post_type_exists( 'wpapi-hook' ) ) { + if ( ! post_type_exists( 'wp-parser-hook' ) ) { register_post_type( - 'wpapi-hook', + 'wp-parser-hook', array( 'has_archive' => 'hooks', 'label' => __( 'Hooks', 'wp-parser' ), @@ -113,12 +113,12 @@ public function register_post_types() { */ public function register_taxonomies() { - $object_types = array( 'wpapi-class', 'wpapi-method', 'wpapi-function', 'wpapi-hook' ); + $object_types = array( 'wp-parser-class', 'wp-parser-method', 'wp-parser-function', 'wp-parser-hook' ); - if ( ! taxonomy_exists( 'wpapi-source-file' ) ) { + if ( ! taxonomy_exists( 'wp-parser-source-file' ) ) { register_taxonomy( - 'wpapi-source-file', + 'wp-parser-source-file', $object_types, array( 'label' => __( 'Files', 'wp-parser' ), @@ -130,10 +130,10 @@ public function register_taxonomies() { ); } - if ( ! taxonomy_exists( 'wpapi-package' ) ) { + if ( ! taxonomy_exists( 'wp-parser-package' ) ) { register_taxonomy( - 'wpapi-package', + 'wp-parser-package', $object_types, array( 'hierarchical' => true, @@ -146,10 +146,10 @@ public function register_taxonomies() { ); } - if ( ! taxonomy_exists( 'wpapi-since' ) ) { + if ( ! taxonomy_exists( 'wp-parser-since' ) ) { register_taxonomy( - 'wpapi-since', + 'wp-parser-since', $object_types, array( 'hierarchical' => true, @@ -165,7 +165,7 @@ public function register_taxonomies() { public function method_permalink( $link, $post ) { - if ( $post->post_type !== 'wpapi-method' || $post->post_parent == 0 ) { + if ( $post->post_type !== 'wp-parser-method' || $post->post_parent == 0 ) { return $link; } @@ -219,6 +219,6 @@ public function make_args_safe( $args ) { * @return string */ public function humanize_separator( $type ) { - return str_replace( '|', '<span class="wpapi-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); + return str_replace( '|', '<span class="wp-parser-item-type-or">' . _x( ' or ', 'separator', 'wp-parser' ) . '</span>', $type ); } } diff --git a/lib/template.php b/lib/template.php index 8b77495ee..868597e4a 100644 --- a/lib/template.php +++ b/lib/template.php @@ -10,11 +10,11 @@ function the_content() { $post = get_post(); $content = get_the_content(); - if ( $post->post_type !== 'wpapi-class' && $post->post_type !== 'wpapi-method' && $post->post_type !== 'wpapi-function' && $post->post_type !== 'wpapi-hook' ) { + if ( $post->post_type !== 'wp-parser-class' && $post->post_type !== 'wp-parser-method' && $post->post_type !== 'wp-parser-function' && $post->post_type !== 'wp-parser-hook' ) { return $content; } - if ( 'wpapi-hook' === $post->post_type ) { + if ( 'wp-parser-hook' === $post->post_type ) { $before_content = get_hook_prototype(); } else { $before_content = get_prototype(); @@ -27,7 +27,7 @@ function the_content() { $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; - if ( 'wpapi-hook' === $post->post_type ) { + if ( 'wp-parser-hook' === $post->post_type ) { $args = get_hook_arguments(); } else { $args = get_arguments(); @@ -62,7 +62,7 @@ function the_content() { * @return array */ function get_return_type() { - $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $function_data = get_post_meta( get_the_ID(), '_wp-parser_tags', true ); $return_type = wp_list_filter( $function_data, array( 'name' => 'return' ) ); if ( ! empty( $return_type ) ) { @@ -91,7 +91,7 @@ function the_return_type() { * @return string */ function get_return_desc() { - $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $function_data = get_post_meta( get_the_ID(), '_wp-parser_tags', true ); $return_desc = wp_list_filter( $function_data, array( 'name' => 'return' ) ); if ( ! empty( $return_desc ) ) { @@ -118,7 +118,7 @@ function the_return_desc() { * @return bool */ function arguments_have_default_values() { - $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_args', true ), array( 'name' => 'default' ) ); + $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_args', true ), array( 'name' => 'default' ) ); return apply_filters( 'wp_parser_arguments_have_default_values', ! empty( $retval ) ); } @@ -129,7 +129,7 @@ function arguments_have_default_values() { * @return bool */ function is_function_deprecated() { - $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wpapi_tags', true ), array( 'name' => 'deprecated' ) ); + $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_tags', true ), array( 'name' => 'deprecated' ) ); return apply_filters( 'wp_parser_is_function_deprecated', ! empty( $retval ) ); } @@ -140,8 +140,8 @@ function is_function_deprecated() { * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) */ function get_arguments() { - $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); - $function_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $args_data = get_post_meta( get_the_ID(), '_wp-parser_args', true ); + $function_data = get_post_meta( get_the_ID(), '_wp-parser_tags', true ); $params = wp_list_filter( $function_data, array( 'name' => 'param' ) ); $return_args = array(); @@ -184,8 +184,8 @@ function get_arguments() { * @return array array( [0] => array( 'name' => '', 'type' => '', 'desc' => '' ), ... ) */ function get_hook_arguments() { - $args_data = get_post_meta( get_the_ID(), '_wpapi_args', true ); - $hook_data = get_post_meta( get_the_ID(), '_wpapi_tags', true ); + $args_data = get_post_meta( get_the_ID(), '_wp-parser_args', true ); + $hook_data = get_post_meta( get_the_ID(), '_wp-parser_tags', true ); $params = wp_list_filter( $hook_data, array( 'name' => 'param' ) ); $return_args = array(); @@ -299,11 +299,11 @@ function get_source_link() { return ''; } - // Find the current post in the wpapi-source-file term - $term = get_the_terms( get_the_ID(), 'wpapi-source-file' ); + // Find the current post in the wp-parser-source-file term + $term = get_the_terms( get_the_ID(), 'wp-parser-source-file' ); if ( ! empty( $term ) && ! is_wp_error( $term ) ) { $term = array_shift( $term ); - $line_num = (int) get_post_meta( get_the_ID(), '_wpapi_line_num', true ); + $line_num = (int) get_post_meta( get_the_ID(), '_wp-parser_line_num', true ); // The format here takes the base URL, the term name, and the line number $format = apply_filters( 'wp_parser_source_link_format', '%s%s#L%d' ); From e9bb7a71c6e86a7b5c6ea70aeddeeef1ad339e69 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 23 Apr 2014 00:31:31 +0300 Subject: [PATCH 185/402] Handled edge cases with function calls not by name. Fixes #97 --- lib/class-function-call-reflector.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php index 9cf8dd313..a296a5fd6 100644 --- a/lib/class-function-call-reflector.php +++ b/lib/class-function-call-reflector.php @@ -7,7 +7,6 @@ namespace WP_Parser; use phpDocumentor\Reflection\BaseReflector; -use phpDocumentor\Reflection\DocBlock\Context; /** * A reflection of a function call expression. @@ -24,6 +23,24 @@ public function getName() { return '\\'.implode('\\', $this->node->namespacedName->parts); } - return (string) $this->getShortName(); + $shortName = $this->getShortName(); + + if ( ! is_a( $shortName, 'PHPParser_Node_Name' ) ) { + + /** @var \PHPParser_Node_Expr_ArrayDimFetch $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_ArrayDimFetch' ) ) { + $var = $shortName->var->name; + $dim = $shortName->dim->name->parts[0]; + + return "\${$var}[{$dim}]"; + } + + /** @var \PHPParser_Node_Expr_Variable $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_Variable' ) ) { + return $shortName->name; + } + } + + return (string) $shortName; } } From ce357acb46be354c43d56b4fb926b84025054db1 Mon Sep 17 00:00:00 2001 From: Otto <otto@ottodestruct.com> Date: Wed, 23 Apr 2014 12:15:48 -0500 Subject: [PATCH 186/402] Fix warning for @since's that have no version number --- lib/runner.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index 40a969f69..82bf12e71 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -139,7 +139,10 @@ function export_docblock( $element ) { $t['refers'] = $tag->getReference(); } if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { - $t['content'] = $tag->getVersion(); + $version = $tag->getVersion(); + if ( !empty( $version ) ) { + $t['content'] = $version; + } } $output['tags'][] = $t; } From c8651a25a26ac5bc811370831f2f98f29fdaffc4 Mon Sep 17 00:00:00 2001 From: Otto <otto@ottodestruct.com> Date: Wed, 23 Apr 2014 17:04:43 -0500 Subject: [PATCH 187/402] Optionally quiet down the output abit Change ::line's to ::log so that I can use --quiet to shut that thing the hell up --- lib/class-importer.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 1422b8b60..5a11dbdc6 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -304,20 +304,20 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::line( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::line( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::line( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); + WP_CLI::log( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); break; default: - WP_CLI::line( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); } return false; @@ -468,38 +468,38 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( $is_new_post ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::line( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::line( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); + WP_CLI::log( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::line( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); break; default: - WP_CLI::line( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); } } else { switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::line( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::line( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); + WP_CLI::log( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::line( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); break; default: - WP_CLI::line( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); + WP_CLI::log( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); } } From e55999fb39275ce28a55bf1797c0f616abe85ef4 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:27:05 +0000 Subject: [PATCH 188/402] Performance: Suspend cache invalidation. Track queries, time. Fire actions to allow for environment-specific adjustments like sending DB reads to masters, autocommit=0, etc. --- lib/class-command.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/class-command.php b/lib/class-command.php index 1f74f8f15..0d71117e5 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -139,6 +139,10 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ protected function _do_import( array $data, $skip_sleep = false, $import_internal_functions = false ) { + global $wpdb; + + $time_start = microtime(true); + $num_queries = $wpdb->num_queries; // Make sure a current user is set if ( ! wp_get_current_user()->exists() ) { @@ -151,7 +155,10 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna $file_number = 1; $num_of_files = count( $data ); + do_action( 'wp_parser_starting_import' ); + // Defer term counting for performance + wp_suspend_cache_invalidation( true ); wp_defer_term_counting( true ); wp_defer_comment_counting( true ); @@ -188,8 +195,17 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna // Start counting again wp_defer_term_counting( false ); + wp_suspend_cache_invalidation( false ); + wp_cache_flush(); wp_defer_comment_counting( false ); + do_action( 'wp_parser_ending_import' ); + + $time_end = microtime(true); + $time = $time_end - $time_start; + + WP_CLI::line( 'Time: '.$time ); + WP_CLI::line( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); if ( empty( $importer->errors ) ) { WP_CLI::success( 'Import complete!' ); From d185130b90041aa95e8d7df5a669985f040246b0 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:28:30 +0000 Subject: [PATCH 189/402] Add filename being processed to line output. --- lib/class-command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index 0d71117e5..d7a123e92 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -178,7 +178,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } foreach ( $data as $file ) { - WP_CLI::line( sprintf( 'Processing file %1$s of %2$s.', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ) ) ); + WP_CLI::line( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); $file_number ++; $importer->import_file( $file, $skip_sleep, $import_internal_functions ); From 05b013dc695a46501f18bdebce2f7a0bc02752fb Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:29:28 +0000 Subject: [PATCH 190/402] Skip duplicate and undocumented hooks. --- lib/class-importer.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 5a11dbdc6..066eb50dc 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -201,6 +201,14 @@ public function import_function( array $data, $parent_post_id = 0, $import_inter * @return bool|int Post ID of this hook, false if any failure. */ public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { + if ( 0 === strpos( $data['doc']['description'], 'This action is documented in' ) ) { + return false; + } elseif ( 0 === strpos( $data['doc']['description'], 'This filter is documented in' ) ) { + return false; + } elseif ( '' === $data['doc']['description'] && '' === $data['doc']['long_description'] ) { + return false; + } + $hook_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); if ( ! $hook_id ) { From 310e8742389d57cd6c6593b2db52b5d5b989bab6 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:29:53 +0000 Subject: [PATCH 191/402] Use :: as a class::method delimiter. --- lib/class-importer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 066eb50dc..3749cdd8e 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -247,7 +247,7 @@ protected function import_class( array $data, $import_internal = false ) { // Now add the methods foreach ( $data['methods'] as $method ) { // Namespace method names with the class name - $method['name'] = $data['name'] . '-' . $method['name']; + $method['name'] = $data['name'] . '::' . $method['name']; $this->import_method( $method, $class_id, $import_internal ); } From 7ed46b4bd732e9d7f18af04452cb8f81c7d5578c Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:30:40 +0000 Subject: [PATCH 192/402] Ignore items with @ignore tags. --- lib/class-importer.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 3749cdd8e..31a24acf0 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -331,6 +331,10 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return false; } + if ( wp_list_filter( $data['doc']['tags'], array( 'name' => 'ignore' ) ) ) { + return false; + } + $is_new_post = true; $slug = sanitize_title( $data['name'] ); $post_data = wp_parse_args( From 57f6ce001e6b75a653540537705809ce5c9abd80 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:31:25 +0000 Subject: [PATCH 193/402] Avoid queries with update_post_meta(). Non-strings fail the test in update_metadata() where get_metadata() is used to see if an update is needed. --- lib/class-importer.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 31a24acf0..3f28bdb35 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -238,8 +238,8 @@ protected function import_class( array $data, $import_internal = false ) { } // Set class-specific meta - update_post_meta( $class_id, '_wp-parser_final', (bool) $data['final'] ); - update_post_meta( $class_id, '_wp-parser_abstract', (bool) $data['abstract'] ); + update_post_meta( $class_id, '_wp-parser_final', (string) $data['final'] ); + update_post_meta( $class_id, '_wp-parser_abstract', (string) $data['abstract'] ); update_post_meta( $class_id, '_wp-parser_extends', $data['extends'] ); update_post_meta( $class_id, '_wp-parser_implements', $data['implements'] ); update_post_meta( $class_id, '_wp-parser_properties', $data['properties'] ); @@ -274,9 +274,9 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte } // Set method-specific meta. - update_post_meta( $method_id, '_wp-parser_final', (bool) $data['final'] ); - update_post_meta( $method_id, '_wp-parser_abstract', (bool) $data['abstract'] ); - update_post_meta( $method_id, '_wp-parser_static', (bool) $data['static'] ); + update_post_meta( $method_id, '_wp-parser_final', (string) $data['final'] ); + update_post_meta( $method_id, '_wp-parser_abstract', (string) $data['abstract'] ); + update_post_meta( $method_id, '_wp-parser_static', (string) $data['static'] ); update_post_meta( $method_id, '_wp-parser_visibility', $data['visibility'] ); // Now add the hooks. From af34f24b0402bf8cfa9962205ec66000652a195b Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:33:37 +0000 Subject: [PATCH 194/402] Use the indexed slug field to find existing items. --- lib/class-importer.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 3f28bdb35..8a6158056 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -352,9 +352,9 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Look for an existing post for this item $existing_post_id = $wpdb->get_var( - $wpdb->prepare( - "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = %s AND post_parent = %d LIMIT 1", - $data['name'], + $q = $wpdb->prepare( + "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", + $slug, $post_data['post_type'], (int) $parent_post_id ) From 6b0f533a200053daf9ad6d313fe1d44e2e09156c Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:34:48 +0000 Subject: [PATCH 195/402] Add insert_term method to simplify/reduce queries. --- lib/class-importer.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 8a6158056..a1053ca52 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -70,6 +70,10 @@ class Importer { */ public $errors = array(); + /** + * @var array Cached items of inserted terms + */ + protected $inserted_terms = array(); /** * Constructor. Sets up post type/taxonomy names. @@ -96,6 +100,23 @@ public function __construct( array $args = array() ) { } } + protected function insert_term( $term, $taxonomy, $args = array() ) { + if ( isset( $this->inserted_terms[ $taxonomy ][ $term ] ) ) { + return $this->inserted_terms[ $taxonomy ][ $term ]; + } + + $parent = isset( $args['parent'] ) ? $args['parent'] : 0; + if ( ! $inserted_term = term_exists( $term, $taxonomy, $parent ) ) { + $inserted_term = wp_insert_term( $term, $taxonomy, $args ); + } + + if ( ! is_wp_error( $inserted_term ) ) { + $this->inserted_terms[ $taxonomy ][ $term ] = $inserted_term; + } + + return $inserted_term; + } + /** * For a specific file, go through and import the file, functions, and classes. * From 9c1f3d49d21ce2bd055756d2fc50d2d7ab5a03ed Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:37:25 +0000 Subject: [PATCH 196/402] Remove transition post callbacks for performance. --- lib/class-command.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/class-command.php b/lib/class-command.php index d7a123e92..e7f3722f7 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -162,6 +162,10 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna wp_defer_term_counting( true ); wp_defer_comment_counting( true ); + // Remove actions for performance + remove_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10 ); + remove_action( 'transition_post_status', '__clear_multi_author_cache', 10 ); + // Run the importer $importer = new Importer; From 18303328d5e7f1713bfda12dfcfbbe9436e6bfb2 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:38:41 +0000 Subject: [PATCH 197/402] Avoid unnecessary post update calls (part 1). --- lib/class-importer.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index a1053ca52..5ae924b25 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -384,12 +384,15 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Insert/update the item post if ( ! empty( $existing_post_id ) ) { $is_new_post = false; - $post_data['ID'] = (int) $existing_post_id; - $ID = wp_update_post( $post_data, true ); - + $ID = $post_data['ID'] = (int) $existing_post_id; + $post_needed_update = array_diff_assoc( sanitize_post( $post_data, 'db' ), get_post( $existing_post_id, ARRAY_A, 'db' ) ); + if ( $post_needed_update ) { + $ID = wp_update_post( wp_slash( $post_data ), true ); + } } else { - $ID = wp_insert_post( $post_data, true ); + $ID = wp_insert_post( wp_slash( $post_data ), true ); } + $anything_updated = array(); if ( ! $ID || is_wp_error( $ID ) ) { From f0ab2b0dc194c2dde13d6e7ebe09bd4da48d4143 Mon Sep 17 00:00:00 2001 From: Andrew Nacin <nacin@wordpress.org> Date: Thu, 24 Apr 2014 20:43:47 +0000 Subject: [PATCH 198/402] Avoid boatloads of term and post queries. Simplify and centralize term creation to avoid repeated term_exists(). Watch for changes to terms and meta before deciding whether to update the post. (Updating the post bumps post_modified, which we do want, but don't want on every import.) Also fixes package/subpackage assignments which were overwriting each other. --- lib/class-importer.php | 71 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 5ae924b25..a56c5a53e 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -128,26 +128,18 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); - $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); - if ( ! $term ) { + $term = $this->insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); - $term = wp_insert_term( $file['path'], $this->taxonomy_file, array( 'slug' => $slug ) ); - - if ( is_wp_error( $term ) ) { - $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); - - return; - } - - // Grab the full term object - $term = get_term_by( 'slug', $slug, $this->taxonomy_file, ARRAY_A ); + if ( is_wp_error( $term ) ) { + $this->errors[] = sprintf( 'Problem creating file tax item "%1$s" for %2$s: %3$s', $slug, $file['path'], $term->get_error_message() ); + return; } // Store file meta for later use $this->file_meta = array( 'docblock' => $file['file'], // File docblock - 'term_id' => $term['name'], // File's term item in the file taxonomy + 'term_id' => $file['path'], // Term name in the file taxonomy is the file name ); // Functions @@ -423,15 +415,16 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $since_version = array_shift( $since_version ); $since_version = $since_version['content']; - $since_term = term_exists( $since_version, $this->taxonomy_since_version ); - if ( ! $since_term ) { - $since_term = wp_insert_term( $since_version, $this->taxonomy_since_version ); - } + $since_term = $this->insert_term( $since_version, $this->taxonomy_since_version ); // Assign the tax item to the post if ( ! is_wp_error( $since_term ) ) { + $added_term_relationship = did_action( 'added_term_relationship' ); wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); + if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { + $anything_updated[] = true; + } } else { WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } @@ -452,7 +445,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } $main_package_id = false; - $package_term_args = array(); + $package_term_ids = array(); // If the item has any @package/@subpackage markup (or has inherited it from file scope), assign the taxonomy. foreach ( $packages as $pack_name => $pack_value ) { @@ -472,33 +465,45 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } // If the package doesn't already exist in the taxonomy, add it - $package_term = term_exists( $pack_value, $this->taxonomy_package, $package_term_args['parent'] ); - if ( ! $package_term ) { - $package_term = wp_insert_term( $pack_value, $this->taxonomy_package, $package_term_args ); - } + $package_term = $this->insert_term( $pack_value, $this->taxonomy_package, $package_term_args ); + $package_term_ids[] = (int) $package_term['term_id']; if ( $pack_name === 'main' && $main_package_id === false && ! is_wp_error( $package_term ) ) { $main_package_id = (int) $package_term['term_id']; } - // Assign the tax item to the post - if ( ! is_wp_error( $package_term ) ) { - wp_set_object_terms( $ID, (int) $package_term['term_id'], $this->taxonomy_package ); - } elseif ( is_int( $main_package_id ) ) { - WP_CLI::warning( "\tCannot set @subpackage term: " . $package_term->get_error_message() ); - } else { - WP_CLI::warning( "\tCannot set @package term: " . $package_term->get_error_message() ); + if ( is_wp_error( $package_term ) ) { + if ( is_int( $main_package_id ) ) { + WP_CLI::warning( "\tCannot create @subpackage term: " . $package_term->get_error_message() ); + } else { + WP_CLI::warning( "\tCannot create @package term: " . $package_term->get_error_message() ); + } } } + $added_term_relationship = did_action( 'added_term_relationship' ); + wp_set_object_terms( $ID, $package_term_ids, $this->taxonomy_package ); + if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { + $anything_updated[] = true; + } // Set other taxonomy and post meta to use in the theme templates + $added_item = did_action( 'added_term_relationship' ); wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); + if ( did_action( 'added_term_relationship' ) > $added_item ) { + $anything_updated[] = true; + } + if ( $post_data['post_type'] !== $this->post_type_class ) { - update_post_meta( $ID, '_wp-parser_args', $data['arguments'] ); + $anything_updated[] = update_post_meta( $ID, '_wp-parser_args', $data['arguments'] ); + } + $anything_updated[] = update_post_meta( $ID, '_wp-parser_line_num', (string) $data['line'] ); + $anything_updated[] = update_post_meta( $ID, '_wp-parser_end_line_num', (string) $data['end_line'] ); + $anything_updated[] = update_post_meta( $ID, '_wp-parser_tags', $data['doc']['tags'] ); + + // If the post didn't need to be updated, but meta or tax changed, update it to bump last modified. + if ( ! $is_new_post && ! $post_needed_update && array_filter( $anything_updated ) ) { + wp_update_post( wp_slash( $post_data ), true ); } - update_post_meta( $ID, '_wp-parser_line_num', $data['line'] ); - update_post_meta( $ID, '_wp-parser_end_line_num', $data['end_line'] ); - update_post_meta( $ID, '_wp-parser_tags', $data['doc']['tags'] ); // Everything worked! Woo hoo! if ( $is_new_post ) { From c8154f845088f89758d8f43cc37afa3fd17ffccc Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Fri, 9 May 2014 12:33:09 +0200 Subject: [PATCH 199/402] php notices and method slug Fixes php notices (WP_DEBUG): Notice: Undefined offset: 1 in /srv/www/wp-parser/public/wp-content/plugins/wp-parser/lib/class-plugin. php on line 172 Notice: Undefined variable: post_data in /srv/www/wp-parser/public/wp-content/plugins/wp-parser/lib/class-importe r.php on line 326 Replaces double colons in method slugs with a dash before sanitize_title() is used. --- lib/class-importer.php | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index a56c5a53e..c35a5c2d2 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -320,6 +320,22 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal /** @var \wpdb $wpdb */ global $wpdb; + $is_new_post = true; + $slug = sanitize_title( str_replace( '::', '-', $data['name'] ) ); + + $post_data = wp_parse_args( + $arg_overrides, + array( + 'post_content' => $data['doc']['long_description'], + 'post_excerpt' => $data['doc']['description'], + 'post_name' => $slug, + 'post_parent' => (int) $parent_post_id, + 'post_status' => 'publish', + 'post_title' => $data['name'], + 'post_type' => $this->post_type_function, + ) + ); + // Don't import items marked `@internal` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { @@ -348,21 +364,6 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return false; } - $is_new_post = true; - $slug = sanitize_title( $data['name'] ); - $post_data = wp_parse_args( - $arg_overrides, - array( - 'post_content' => $data['doc']['long_description'], - 'post_excerpt' => $data['doc']['description'], - 'post_name' => $slug, - 'post_parent' => (int) $parent_post_id, - 'post_status' => 'publish', - 'post_title' => $data['name'], - 'post_type' => $this->post_type_function, - ) - ); - // Look for an existing post for this item $existing_post_id = $wpdb->get_var( $q = $wpdb->prepare( From 13d6ed33208b63997c81da8156ea6fa44c385f51 Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Tue, 20 May 2014 16:03:03 +0200 Subject: [PATCH 200/402] Import WP version --- lib/class-command.php | 4 +++- lib/class-importer.php | 34 ++++++++++++++++++++++++++++++++-- lib/runner.php | 1 + 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index e7f3722f7..6df8b053d 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -166,6 +166,8 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna remove_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10 ); remove_action( 'transition_post_status', '__clear_multi_author_cache', 10 ); + delete_option('wp_parser_imported_wp_version'); + // Run the importer $importer = new Importer; @@ -207,7 +209,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna $time_end = microtime(true); $time = $time_end - $time_start; - + WP_CLI::line( 'Time: '.$time ); WP_CLI::line( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); if ( empty( $importer->errors ) ) { diff --git a/lib/class-importer.php b/lib/class-importer.php index c35a5c2d2..6fbd5c14f 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -185,6 +185,10 @@ public function import_file( array $file, $skip_sleep = false, $import_internal } } } + + if ( 'wp-includes/version.php' === $file['path'] ) { + $this->import_version( $file ); + } } /** @@ -302,6 +306,32 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte return $method_id; } + /** + * Updates the 'wp_parser_imported_wp_version' option with the version from wp-includes/version.php. + * + * @param array $data Data + */ + function import_version( $data ) { + + $version_path = $data['root'] . '/' . $data['path']; + + if( !is_readable( $version_path ) ) { + return; + } + + // version.php should not contain functions, classes or hooks. + if ( 0 < count( array_filter( array( $data[ 'functions' ], $data[ 'classes' ], $data[ 'hooks' ] ) ) ) ) { + return; + } + + include $version_path; + + if ( isset( $wp_version ) && $wp_version ) { + update_option( 'wp_parser_imported_wp_version', $wp_version ); + WP_CLI::log( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); + } + } + /** * Create a post for an item (a class or a function). * @@ -322,7 +352,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $is_new_post = true; $slug = sanitize_title( str_replace( '::', '-', $data['name'] ) ); - + $post_data = wp_parse_args( $arg_overrides, array( @@ -547,4 +577,4 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return $ID; } -} +} \ No newline at end of file diff --git a/lib/runner.php b/lib/runner.php index 82bf12e71..4b0681973 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -38,6 +38,7 @@ function parse_files( $files, $root ) { $out = array( 'file' => export_docblock( $file ), 'path' => str_replace( DIRECTORY_SEPARATOR, '/', $file->getFilename() ), + 'root' => $root, ); if ( ! empty( $file->uses ) ) { From be479b22bf6e2d12197cfb13cc214dc0b5b8aec2 Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Tue, 20 May 2014 16:18:39 +0200 Subject: [PATCH 201/402] import WP version function --- lib/class-importer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 6fbd5c14f..70392321b 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -311,7 +311,7 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte * * @param array $data Data */ - function import_version( $data ) { + protected function import_version( $data ) { $version_path = $data['root'] . '/' . $data['path']; From d7c3813be6d15889b1359b3f9ff71c3f0cf715ab Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Fri, 23 May 2014 14:38:36 +0200 Subject: [PATCH 202/402] update parsed data after import --- lib/class-command.php | 22 +++++++++++++++++++++- lib/class-importer.php | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 6df8b053d..671aa14d1 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -166,7 +166,8 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna remove_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10 ); remove_action( 'transition_post_status', '__clear_multi_author_cache', 10 ); - delete_option('wp_parser_imported_wp_version'); + delete_option( 'wp_parser_imported_wp_version' ); + delete_option( 'wp_parser_root_import_dir' ); // Run the importer $importer = new Importer; @@ -183,11 +184,30 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna exit; } + $root = ''; foreach ( $data as $file ) { WP_CLI::line( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); $file_number ++; $importer->import_file( $file, $skip_sleep, $import_internal_functions ); + + if ( empty( $root ) && ( isset( $file['root'] ) && $file['root'] ) ) { + $root = $file['root']; + } + } + + if( ! empty( $root ) ) { + update_option( 'wp_parser_root_import_dir', $root ); + WP_CLI::line( 'Updated option wp_parser_root_import_dir: ' . $root ); + } + + $last_import = time(); + update_option( 'wp_parser_last_import', $last_import ); + WP_CLI::line( 'Updated option wp_parser_last_import: ' . $last_import ); + + $wp_version = get_option( 'wp_parser_imported_wp_version' ); + if( $wp_version ) { + WP_CLI::line( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); } /** diff --git a/lib/class-importer.php b/lib/class-importer.php index 70392321b..e4e8b7825 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -320,7 +320,7 @@ protected function import_version( $data ) { } // version.php should not contain functions, classes or hooks. - if ( 0 < count( array_filter( array( $data[ 'functions' ], $data[ 'classes' ], $data[ 'hooks' ] ) ) ) ) { + if ( isset( $data['functions'] ) || isset ( $data['classes'] ) || isset( $data['hooks'] ) ) { return; } From 34af64128bd26569dd4347a2fdf199c83dc662b5 Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Fri, 23 May 2014 16:54:46 +0200 Subject: [PATCH 203/402] updated date format for output --- lib/class-command.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index 671aa14d1..0cc83f438 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -202,8 +202,10 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } $last_import = time(); + $import_date = date_i18n( get_option('date_format'), $last_import ); + $import_time = date_i18n( get_option('time_format'), $last_import ); update_option( 'wp_parser_last_import', $last_import ); - WP_CLI::line( 'Updated option wp_parser_last_import: ' . $last_import ); + WP_CLI::line( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); $wp_version = get_option( 'wp_parser_imported_wp_version' ); if( $wp_version ) { From 8c216b163574f5fa0a61a2eccc9b7bdba71c452b Mon Sep 17 00:00:00 2001 From: Peter Chester <peter@tri.be> Date: Thu, 19 Jun 2014 10:50:02 -0700 Subject: [PATCH 204/402] Add wp_parser_pre_import_item filter --- lib/class-importer.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index e4e8b7825..0a321a05a 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -394,6 +394,21 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return false; } + /** + * Filter item data for a prospective import item + * + * @param array $data Data + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. + * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). + * + * @return array|bool Returns the filtered $data array. Returning an empty array or false will bail out of the creation of this item. + */ + $data = apply_filters( 'wp_parser_pre_import_item', $data, $parent_post_id, $import_internal, $arg_overrides ); + if ( empty( $data ) ) { + return false; + } + // Look for an existing post for this item $existing_post_id = $wpdb->get_var( $q = $wpdb->prepare( From 8cb440b3fa1d8ade1f2a4653ebce03baa7ddd1c6 Mon Sep 17 00:00:00 2001 From: Peter Chester <peter@tri.be> Date: Thu, 19 Jun 2014 10:50:15 -0700 Subject: [PATCH 205/402] Add wp_parser_post_import_item action --- lib/class-importer.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index 0a321a05a..d73a8ed20 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -590,6 +590,14 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } } + /** + * Action at the end of importing an item. + * + * @param int $ID Optional; post ID of the inserted or updated item. + * @param array $data Data + */ + do_action( 'wp_parser_post_import_item', $ID, $data ); + return $ID; } } \ No newline at end of file From 3728803a3d150b67005446203a86e31c80b84721 Mon Sep 17 00:00:00 2001 From: Peter Chester <peter@tri.be> Date: Tue, 24 Jun 2014 14:25:44 -0700 Subject: [PATCH 206/402] Replace $data pre filter with a short-circuit filter. --- lib/class-importer.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index d73a8ed20..05e32afd6 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -395,19 +395,18 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } /** - * Filter item data for a prospective import item + * Filter whether to proceed with adding/updating a prospective import item. * + * Returning a falsey value to the filter will short-circuit addition of the import item. + * + * @param bool $display Whether to proceed with adding/updating the import item. Default true. * @param array $data Data * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. - * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). - * - * @return array|bool Returns the filtered $data array. Returning an empty array or false will bail out of the creation of this item. + * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). */ - $data = apply_filters( 'wp_parser_pre_import_item', $data, $parent_post_id, $import_internal, $arg_overrides ); - if ( empty( $data ) ) { - return false; - } + if ( ! apply_filters( 'wp_parser_pre_import_item', true, $data, $parent_post_id, $import_internal, $arg_overrides ) ) + return; // Look for an existing post for this item $existing_post_id = $wpdb->get_var( From 2baa624f416941c8292b9f71bb9cbba481bbccc7 Mon Sep 17 00:00:00 2001 From: Peter Chester <peter@tri.be> Date: Fri, 27 Jun 2014 13:38:46 -0700 Subject: [PATCH 207/402] Rename wp_parser_post_import_item filter to wp_parser_import_item to avoid 'post' ambiguity. --- lib/class-importer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 05e32afd6..d811721e9 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -592,10 +592,10 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal /** * Action at the end of importing an item. * - * @param int $ID Optional; post ID of the inserted or updated item. + * @param int $ID Optional; post ID of the inserted or updated item. * @param array $data Data */ - do_action( 'wp_parser_post_import_item', $ID, $data ); + do_action( 'wp_parser_import_item', $ID, $data ); return $ID; } From ca631728fb269ab59ad2afe4192af06477d5b507 Mon Sep 17 00:00:00 2001 From: Paul Clark <pdclark@pdclark.com> Date: Mon, 30 Jun 2014 02:03:13 -0800 Subject: [PATCH 208/402] Add scribu/posts-to-posts to composer.json minimum-stability set to "dev" because posts-to-posts requires scribu/scb-framework as dev-master. Dependency fails to load if parent project is not set to allow development branches. Repository for posts-to-posts added manually because composer doesn't find it on its own. Path for posts-to-posts manually set because type "wordpress-plugin" causes it to be installed in a wp-content directory created within this plugin directory. Fixes #112 --- composer.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 158a51acf..5a67c8104 100644 --- a/composer.json +++ b/composer.json @@ -15,14 +15,24 @@ "issues": "https://github.com/rmccue/WP-Parser/issues", "source": "https://github.com/rmccue/WP-Parser" }, + "minimum-stability": "dev", "require" : { "php" : ">=5.3.6", "composer/installers" : "~1.0", "phpdocumentor/reflection": "~1.0", - "erusev/parsedown" : "~0.9" + "erusev/parsedown" : "~0.9", + "scribu/posts-to-posts" : "dev-master" }, "autoload" : { "classmap": ["lib"], "files" : ["lib/runner.php", "lib/template.php"] + }, + "repositories": [ + { "type": "vcs", "url": "https://github.com/scribu/wp-posts-to-posts.git" } + ], + "extra": { + "installer-paths": { + "vendor/scribu/posts-to-posts": ["scribu/posts-to-posts"] + } } -} \ No newline at end of file +} From b7e6f152ca999733b37472b1329517b6461425d8 Mon Sep 17 00:00:00 2001 From: Paul Clark <pdclark@pdclark.com> Date: Mon, 30 Jun 2014 02:56:35 -0800 Subject: [PATCH 209/402] Register post relationships. Connect functions to functions. * Requires posts-to-posts vendor library if not loaded as a plugin. * Registers post relationships * Extends import to create relationships between plugins. To-do: * Connect functions to methods and hooks: "uses" arrays don't appear to be populating for either of these * Connect Methods to methods and hooks * Clear wp_p2p and wp_p2p_meta tables of previously imported relationships before running import. For now, the tables should be manually cleared. Fixes #112 --- lib/class-importer.php | 4 +- lib/class-plugin.php | 7 + lib/class-relationships.php | 260 ++++++++++++++++++++++++++++++++++++ 3 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 lib/class-relationships.php diff --git a/lib/class-importer.php b/lib/class-importer.php index d811721e9..ffc224cd0 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -308,7 +308,7 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte /** * Updates the 'wp_parser_imported_wp_version' option with the version from wp-includes/version.php. - * + * * @param array $data Data */ protected function import_version( $data ) { @@ -595,7 +595,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal * @param int $ID Optional; post ID of the inserted or updated item. * @param array $data Data */ - do_action( 'wp_parser_import_item', $ID, $data ); + do_action( 'wp_parser_import_item', $ID, $data, $post_data ); return $ID; } diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 0c5cc7eff..944a7b40f 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -3,12 +3,19 @@ class Plugin { + /** + * @var WP_Parser\Relationships + */ + var $relationships; + public function on_load() { if ( defined( 'WP_CLI' ) && WP_CLI ) { \WP_CLI::add_command( 'parser', __NAMESPACE__ . '\\Command' ); } + $this->relationships = new Relationships; + add_action( 'init', array( $this, 'register_post_types' ), 11 ); add_action( 'init', array( $this, 'register_taxonomies' ), 11 ); add_filter( 'wp_parser_get_arguments', array( $this, 'make_args_safe' ) ); diff --git a/lib/class-relationships.php b/lib/class-relationships.php new file mode 100644 index 000000000..e8e133fff --- /dev/null +++ b/lib/class-relationships.php @@ -0,0 +1,260 @@ +<?php + +namespace WP_Parser; + +use WP_CLI; + +class Relationships { + + /** + * @var array Post types we're setting relationships between + */ + var $post_types; + + /** + * @var array Map of post slugs to post ids. + */ + var $slugs_to_ids = array(); + + /** + * Map of how post IDs relate to one another. + * + * array( + * $from_type => array( + * $from_id => array( + * $to_type => array( + * $to_slug => $to_id + * ) + * ) + * ) + * ) + * + * @var array + */ + var $relationships = array(); + + public function __construct() { + add_action( 'plugins_loaded', array( $this, 'require_posts_to_posts' ) ); + add_action( 'p2p_init', array( $this, 'register_post_relationships' ) ); + + add_action( 'wp_parser_import_item', array( $this, 'import_item' ), 10, 3 ); + add_action( 'wp_parser_starting_import', array( $this, 'wp_parser_starting_import' ) ); + add_action( 'wp_parser_ending_import', array( $this, 'wp_parser_ending_import' ) ); + } + + /** + * Load the posts2posts from the composer package if it is not loaded already. + */ + public function require_posts_to_posts() { + if ( ! function_exists( 'p2p_register_connection_type' ) ) { + require dirname( __DIR__ ) . '/vendor/scribu/posts-to-posts/posts-to-posts.php'; + } + } + + /** + * Set up relationships using Posts to Posts plugin. + * + * Default settings for p2p_register_connection_type: + * 'cardinality' => 'many-to-many' + * 'reciprocal' => false + * + * @link https://github.com/scribu/wp-posts-to-posts/wiki/p2p_register_connection_type + */ + public function register_post_relationships() { + + // Functions <--> Functions + p2p_register_connection_type( array( + 'name' => 'functions_to_functions', + 'from' => 'wp-parser-function', + 'to' => 'wp-parser-function', + 'self_connections' => 'true', + 'title' => array( 'from' => 'Uses Functions', 'to' => 'Used by Functions' ), + ) ); + + // Functions --> Methods + p2p_register_connection_type( array( + 'name' => 'functions_to_methods', + 'from' => 'wp-parser-function', + 'to' => 'wp-parser-method', + 'title' => array( 'from' => 'Uses Methods', 'to' => 'Used by Functions' ), + ) ); + + // Functions <--> Hooks + p2p_register_connection_type( array( + 'name' => 'functions_to_hooks', + 'from' => 'wp-parser-function', + 'to' => 'wp-parser-hook', + 'title' => array( 'from' => 'Uses Hooks', 'to' => 'Used by Functions' ), + ) ); + + // Methods <--> Methods + p2p_register_connection_type( array( + 'name' => 'methods_to_methods', + 'from' => 'wp-parser-method', + 'to' => 'wp-parser-method', + 'title' => array( 'from' => 'Uses Methods', 'to' => 'Used by Methods' ), + ) ); + + // Hooks <--> Methods + p2p_register_connection_type( array( + 'name' => 'methods_to_hooks', + 'from' => 'wp-parser-method', + 'to' => 'wp-parser-hook', + 'title' => array( 'from' => 'Used by Methods', 'to' => 'Uses Hooks' ), + ) ); + } + + /** + * Bring Importer post types into this class. + * Runs at import start. + */ + public function wp_parser_starting_import() { + $importer = new Importer; + + $this->post_types = array( + 'hook' => $importer->post_type_hook, + 'method' => $importer->post_type_method, + 'function' => $importer->post_type_function, + ); + } + + /** + * As each item imports, build an array mapping it's post_type->slug to it's post ID. + * These will be used to associate post IDs to each other without doing an additional + * database query to map each post's slug to its ID. + * + * @param int $ID Post ID of item just imported. + * @param array $data Parser data + * @param array $post_data Post data + */ + public function import_item( $ID, $data, $post_data ) { + + $from_type = $post_data['post_type']; + $slug = $post_data['post_name']; + + $this->slugs_to_ids[ $from_type ][ $slug ] = $ID; + + // Build Relationships: Functions + if ( $this->post_types['function'] == $from_type ) { + + // Functions to Functions + $to_type = $this->post_types['function']; + foreach ( (array) @$data['uses']['functions'] as $to_function ) { + $to_function_slug = $this->name_to_slug( $to_function['name'] ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_function_slug; + } + + // Functions to Methods + $to_type = $this->post_types['method']; + foreach ( (array) @$data['uses']['methods'] as $to_method ) { + $to_method_slug = $this->name_to_slug( $to_method['name'] ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_method_slug; + } + + // Functions to Hooks + $to_type = $this->post_types['hook']; + foreach ( (array) @$data['uses']['hooks'] as $to_hook ) { + $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; + } + } + + } + + /** + * After import has run, go back and connect all the posts. + */ + public function wp_parser_ending_import() { + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + WP_CLI::line( 'Setting up relationships...' ); + } + + // Iterate over post types being related FROM: functions, methods, and hooks + foreach ( $this->post_types as $from_type ) { + // Iterate over relationships for each post type + foreach ( (array) @$this->relationships[ $from_type ] as $from_id => $to_types ) { + + // Iterate over slugs for each post type being related TO + foreach ( $to_types as $to_type => $to_slugs ) { + // Convert slugs to IDs. + $this->relationships[ $from_type ][ $from_id ][ $to_type ] = $this->get_ids_for_slugs( $to_slugs, $this->slugs_to_ids[ $from_type ] ); + } + + } + } + + // Repeat loop over post_types and relationships now that all slugs have been mapped to IDs + foreach ( $this->post_types as $from_type ) { + foreach ( (array) @$this->relationships[ $from_type ] as $from_id => $to_types ) { + + // Connect Functions + if ( $from_type == $this->post_types['function'] ) { + + foreach ( $to_types as $to_type => $to_slugs ) { + // ...to Functions + if ( $this->post_types['function'] == $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'functions_to_functions' )->connect( $from_id, $to_id, array( 'date' => current_time( 'mysql' ) ) ); + } + } + } + // ...to Methods + if ( $this->post_types['method'] == $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'functions_to_methods' )->connect( $from_id, $to_id, array( 'date' => current_time( 'mysql' ) ) ); + } + } + } + // ...to Hooks + if ( $this->post_types['hook'] == $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'functions_to_hooks' )->connect( $from_id, $to_id, array( 'date' => current_time( 'mysql' ) ) ); + } + } + } + } + } + + } + } + + } + + /** + * Convert a method, function, or hook name to a post slug. + * + * @see WP_Parser\Importer::import_item() + * @param string $name Method, function, or hook name + * @return string Post slug + */ + public function name_to_slug( $name ) { + return sanitize_title( str_replace( '::', '-', $name ) ); + } + + /** + * Convert a post slug to an array( 'slug' => id ) + * Ignores slugs that are not found in $slugs_to_ids + * + * @param array $slugs Array of post slugs. + * @param array $slugs_to_ids Map of slugs to IDs. + * @return array + */ + public function get_ids_for_slugs( array $slugs, array $slugs_to_ids ) { + $slugs_with_ids = array(); + + foreach ( $slugs as $index => $slug ) { + if ( array_key_exists( $slug, $slugs_to_ids ) ) { + $slugs_with_ids[ $slug ] = $slugs_to_ids[ $slug ]; + } + } + + return $slugs_with_ids; + } +} \ No newline at end of file From 46310ff2bfac861ba9283f5929915bb1c471fd98 Mon Sep 17 00:00:00 2001 From: Paul Clark <pdclark@pdclark.com> Date: Mon, 30 Jun 2014 07:44:21 -0800 Subject: [PATCH 210/402] Move wp_parser_ending_import action to before counting is turned back on and caches are cleared. --- lib/class-command.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 0cc83f438..0a07ad803 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -221,14 +221,14 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna delete_option( "{$importer->taxonomy_package}_children" ); delete_option( "{$importer->taxonomy_since_version}_children" ); + do_action( 'wp_parser_ending_import' ); + // Start counting again wp_defer_term_counting( false ); wp_suspend_cache_invalidation( false ); wp_cache_flush(); wp_defer_comment_counting( false ); - do_action( 'wp_parser_ending_import' ); - $time_end = microtime(true); $time = $time_end - $time_start; From f6fa14b0f21245c64755c02b8f9761fed098e057 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Tue, 12 Aug 2014 16:14:37 -0600 Subject: [PATCH 211/402] Allow filtering of the post data just prior to an item import. --- lib/class-importer.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index d811721e9..83a7f2948 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -418,6 +418,14 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal ) ); + /** + * Filter an import item's post data before it is updated or inserted. + * + * @param array $post_data Array of post data. + * @param string|null $existing_post_id ID if the post already exists, null otherwise. + */ + $post_data = apply_filters( 'wp_parser_import_item_post_data', $post_data, $existing_post_id ); + // Insert/update the item post if ( ! empty( $existing_post_id ) ) { $is_new_post = false; From 9468e40a5ba274b3fd87b9a8a584bc24a8d63f2e Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 17:56:38 -0400 Subject: [PATCH 212/402] Parse method use See #120 --- lib/class-file-reflector.php | 42 ++++++++++++++++++ lib/class-method-call-reflector.php | 50 ++++++++++++++++++++++ lib/class-static-method-call-reflector.php | 34 +++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 lib/class-method-call-reflector.php create mode 100644 lib/class-static-method-call-reflector.php diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index e43a3e5a4..f84e9891c 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -114,6 +114,38 @@ public function enterNode( \PHPParser_Node $node ) { } } break; + + // Parse out method calls, so we can export where methods are used. + case 'Expr_MethodCall': + $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + + /* + * If the method call is in the global scope, add it to the + * file's method calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['methods'][] = $method; + } else { + $this->uses_queue['methods'][] = $method; + } + break; + + // Parse out method calls, so we can export where methods are used. + case 'Expr_StaticCall': + $method = new \WP_Parser\Static_Method_Call_Reflector( $node, $this->context ); + + /* + * If the method call is in the global scope, add it to the + * file's method calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['methods'][] = $method; + } else { + $this->uses_queue['methods'][] = $method; + } + break; } // Pick up DocBlock from non-documentable elements so that it can be assigned @@ -139,6 +171,16 @@ public function leaveNode( \PHPParser_Node $node ) { if ( ! empty( $this->method_uses_queue ) ) { foreach ( $class->getMethods() as $method ) { if ( isset( $this->method_uses_queue[ $method->getName() ] ) ) { + if ( isset( $this->method_uses_queue[ $method->getName() ]['methods'] ) ) { + /* + * For methods used in a class, set the class on the method call. + * That allows us to later get the correct class name for $this, self, parent. + */ + foreach ( $this->method_uses_queue[ $method->getName() ]['methods'] as $method_call ) { + $method_call->set_class( $class ); + } + } + $method->uses = $this->method_uses_queue[ $method->getName() ]; } } diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php new file mode 100644 index 000000000..44fda6ff2 --- /dev/null +++ b/lib/class-method-call-reflector.php @@ -0,0 +1,50 @@ +<?php + +/** + * A reflection class for a method call. + */ + +namespace WP_Parser; + +use phpDocumentor\Reflection\BaseReflector; + +/** + * A reflection of a method call expression. + */ +class Method_Call_Reflector extends BaseReflector { + + /** + * The class that this method was called in, if it was called in a class. + * + * @var \phpDocumentor\Reflection\ClassReflector|false + */ + protected $called_in_class = false; + + /** + * Returns the name for this Reflector instance. + * + * @return string[] Index 0 is the calling instance, 1 is the method name. + */ + public function getName() { + $name = $this->getShortName(); + + $printer = new Pretty_Printer; + $caller = $printer->prettyPrintExpr( $this->node->var ); + + if ( $this->called_in_class && '$this' === $caller ) { + $caller = $this->called_in_class->getShortName(); + } + + return array( $caller, $name ); + } + + /** + * Set the class that this method was called within. + * + * @param \phpDocumentor\Reflection\ClassReflector $class + */ + public function set_class( \phpDocumentor\Reflection\ClassReflector $class ) { + + $this->called_in_class = $class; + } +} diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php new file mode 100644 index 000000000..b4610caaa --- /dev/null +++ b/lib/class-static-method-call-reflector.php @@ -0,0 +1,34 @@ +<?php + +/** + * A reflection class for a method call. + */ + +namespace WP_Parser; + +use phpDocumentor\Reflection\BaseReflector; + +/** + * A reflection of a method call expression. + */ +class Static_Method_Call_Reflector extends Method_Call_Reflector { + + /** + * Returns the name for this Reflector instance. + * + * @return string[] Index 0 is the class name, 1 is the method name. + */ + public function getName() { + $class = $this->node->class->parts[0]; + + if ( $this->called_in_class ) { + if ( 'self' === $class ) { + $class = $this->called_in_class->getShortName(); + } elseif ( 'parent' === $class ) { + $class = $this->called_in_class->getNode()->extends; + } + } + + return array( $class, $this->getShortName() ); + } +} From 28ad82965850eb8a9b84196efedd0662970d9342 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:12:06 -0400 Subject: [PATCH 213/402] Add PHPUnit test framework See #52 --- phpunit.xml.dist | 11 ++ tests/phpunit/includes/bootstrap.php | 8 ++ tests/phpunit/includes/export-testcase.php | 148 +++++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 phpunit.xml.dist create mode 100644 tests/phpunit/includes/bootstrap.php create mode 100644 tests/phpunit/includes/export-testcase.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 000000000..9dba2ed60 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,11 @@ +<phpunit + bootstrap="tests/phpunit/includes/bootstrap.php" + backupGlobals="false" + colors="true" + > + <testsuites> + <testsuite> + <directory suffix=".php">tests/phpunit/tests/</directory> + </testsuite> + </testsuites> +</phpunit> diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php new file mode 100644 index 000000000..1c6ce469c --- /dev/null +++ b/tests/phpunit/includes/bootstrap.php @@ -0,0 +1,8 @@ +<?php + +include( __DIR__ . '/../../../vendor/autoload.php' ); +include( __DIR__ . '/export-testcase.php' ); + +// TODO remove when these get autoloaded. +include( __DIR__ . '/../../../lib/class-method-call-reflector.php' ); +include( __DIR__ . '/../../../lib/class-static-method-call-reflector.php' ); diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php new file mode 100644 index 000000000..6ebd44e09 --- /dev/null +++ b/tests/phpunit/includes/export-testcase.php @@ -0,0 +1,148 @@ +<?php + +/** + * A parent test case class for the data export tests. + */ + +namespace WP_Parser\Tests; + +/** + * Parent test case for data export tests. + */ +class Export_UnitTestCase extends \PHPUnit_Framework_TestCase { + + /** + * The exported data. + * + * @var string + */ + protected static $export_data; + + /** + * Parse the file for the current testcase. + */ + protected function parse_file() { + + $file = ( new \ReflectionClass( $this ) )->getFileName(); + $file = rtrim( $file, 'php' ) . 'inc'; + $path = dirname( $file ); + + $export_data = \WP_Parser\parse_files( array( $file ), $path ); + + self::$export_data = $export_data[0]; + } + + /** + * Parse the file to get teh exported data before the first test. + */ + public function setUp() { + + parent::setUp(); + + if ( ! self::$export_data ) { + $this->parse_file(); + } + } + + /** + * Assert that an entity uses another entity. + * + * @param array $entity The exported entity data. + * @param string $type The type of thing that this entity should use. + * @param array $used The expcted data for the thing the entity should use. + */ + protected function assertEntityUses( $entity, $type, $used ) { + + $this->assertArrayHasKey( 'uses', $entity ); + $this->assertArrayHasKey( $type, $entity['uses'] ); + + $found = false; + foreach ( $entity['uses'][ $type ] as $exported_used ) { + if ( $exported_used['line'] == $used['line'] ) { + $this->assertEquals( $used, $exported_used ); + return; + } + } + + $this->markTestFailed( "No matching {$type} used by {$entity['name']}." ); + } + + /** + * Assert that a file uses an method. + * + * @param array $method The expected export data for the method. + */ + protected function assertFileUsesMethod( $method ) { + + $this->assertEntityUses( self::$export_data, 'methods', $method ); + } + + /** + * Assert that a function uses a method. + * + * @param string $function_name The name of the function that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertFunctionUsesMethod( $function_name, $method ) { + + $function_data = $this->find_entity_data_in( + self::$export_data + , 'functions' + , $function_name + ); + + $this->assertInternalType( 'array', $function_data ); + $this->assertEntityUses( $function_data, 'methods', $method ); + } + + /** + * Assert that a method uses a method. + * + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertMethodUsesMethod( $class_name, $method_name, $method ) { + + $class_data = $this->find_entity_data_in( + self::$export_data + , 'classes' + , $class_name + ); + + $this->assertInternalType( 'array', $class_data ); + + $method_data = $this->find_entity_data_in( + $class_data + , 'methods' + , $method_name + ); + + $this->assertInternalType( 'array', $method_data ); + $this->assertEntityUses( $method_data, 'methods', $method ); + } + + /** + * Find the exported data for an entity. + * + * @param array $data The data to search in. + * @param string $type The type of entity. + * @param string $entity The name of the function. + * + * @return array|false The data for the entity, or false if it couldn't be found. + */ + protected function find_entity_data_in( $data, $type, $entity_name ) { + + if ( empty( $data[ $type ] ) ) { + return false; + } + + foreach ( $data[ $type ] as $entity ) { + if ( $entity['name'] === $entity_name ) { + return $entity; + } + } + + return false; + } +} From 53349eacd12df619a0cd5bd63df3282b923cfaee Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:12:44 -0400 Subject: [PATCH 214/402] Add tests for exporting methods See #52, #121 --- tests/phpunit/tests/export/methods.inc | 21 ++++++ tests/phpunit/tests/export/methods.php | 99 ++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 tests/phpunit/tests/export/methods.inc create mode 100644 tests/phpunit/tests/export/methods.php diff --git a/tests/phpunit/tests/export/methods.inc b/tests/phpunit/tests/export/methods.inc new file mode 100644 index 000000000..e7a164578 --- /dev/null +++ b/tests/phpunit/tests/export/methods.inc @@ -0,0 +1,21 @@ +<?php + +My_Class::static_method( $var ); + +$wpdb->update( $table, $data, $where ); + +function test() { + Another_Class::another_method(); + + get_class()->call_method(); +} + +class My_Class extends Parent_Class { + + static function static_method() { + Another_Class::do_static_stuff(); + self::do_stuff(); + $this->go(); + parent::do_parental_stuff(); + } +} diff --git a/tests/phpunit/tests/export/methods.php b/tests/phpunit/tests/export/methods.php new file mode 100644 index 000000000..ffbb06d64 --- /dev/null +++ b/tests/phpunit/tests/export/methods.php @@ -0,0 +1,99 @@ +<?php + +/** + * A test case for + */ + +namespace WP_Parser\Tests; + +/** + * Test that + */ +class Methods extends Export_UnitTestCase { + + /** + * Test that static method use is exported. + */ + public function test_static_methods() { + + $this->assertFileUsesMethod( + array( + 'name' => array( 'My_Class', 'static_method' ), + 'line' => 3, + 'end_line' => 3, + ) + ); + + $this->assertFunctionUsesMethod( + 'test' + , array( + 'name' => array( 'Another_Class', 'another_method' ), + 'line' => 8, + 'end_line' => 8, + ) + ); + + $this->assertMethodUsesMethod( + 'My_Class' + , 'static_method' + , array( + 'name' => array( 'Another_Class', 'do_static_stuff' ), + 'line' => 16, + 'end_line' => 16, + ) + ); + + $this->assertMethodUsesMethod( + 'My_Class' + , 'static_method' + , array( + 'name' => array( 'My_Class', 'do_stuff' ), + 'line' => 17, + 'end_line' => 17, + ) + ); + + $this->assertMethodUsesMethod( + 'My_Class' + , 'static_method' + , array( + 'name' => array( 'Parent_Class', 'do_parental_stuff' ), + 'line' => 19, + 'end_line' => 19, + ) + ); + } + + /** + * Test that instance method use is exported. + */ + public function test_instance_methods() { + + $this->assertFileUsesMethod( + array( + 'name' => array( '$wpdb', 'update' ), + 'line' => 5, + 'end_line' => 5, + ) + ); + + $this->assertFunctionUsesMethod( + 'test' + , array( + 'name' => array( 'get_class()', 'call_method' ), + 'line' => 10, + 'end_line' => 10, + ) + ); + + $this->assertMethodUsesMethod( + 'My_Class' + , 'static_method' + , array( + 'name' => array( 'My_Class', 'go' ), + 'line' => 18, + 'end_line' => 18, + ) + ); + } +} From 3ce4786b68ca567fd88e395236975ea18189cba8 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:13:02 -0400 Subject: [PATCH 215/402] Add .travis.yml See #52 --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..88563c979 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: php +php: + - 5.5 + - 5.4 + - 5.3 + - hhvm \ No newline at end of file From a687e9e71478c28809621c6a445d7efaa6c6488d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:19:44 -0400 Subject: [PATCH 216/402] Travis CI: install dependencies See #52 --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 88563c979..da8263796 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,6 @@ php: - 5.5 - 5.4 - 5.3 - - hhvm \ No newline at end of file + - hhvm + +install: composer install --no-dev \ No newline at end of file From 9e1166499d6c6933e7c7c2c5a7019221db651a07 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:26:51 -0400 Subject: [PATCH 217/402] Move method use tests and improve docs See #52 --- tests/phpunit/tests/export/{ => uses}/methods.inc | 0 tests/phpunit/tests/export/{ => uses}/methods.php | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename tests/phpunit/tests/export/{ => uses}/methods.inc (100%) rename tests/phpunit/tests/export/{ => uses}/methods.php (92%) diff --git a/tests/phpunit/tests/export/methods.inc b/tests/phpunit/tests/export/uses/methods.inc similarity index 100% rename from tests/phpunit/tests/export/methods.inc rename to tests/phpunit/tests/export/uses/methods.inc diff --git a/tests/phpunit/tests/export/methods.php b/tests/phpunit/tests/export/uses/methods.php similarity index 92% rename from tests/phpunit/tests/export/methods.php rename to tests/phpunit/tests/export/uses/methods.php index ffbb06d64..5013d63fa 100644 --- a/tests/phpunit/tests/export/methods.php +++ b/tests/phpunit/tests/export/uses/methods.php @@ -1,15 +1,15 @@ <?php /** - * A test case for + * A test case for exporting method use. */ namespace WP_Parser\Tests; /** - * Test that + * Test that module use is exported correctly. */ -class Methods extends Export_UnitTestCase { +class Export_Method_Use extends Export_UnitTestCase { /** * Test that static method use is exported. From b378eb121699cb960cc40317b209d9982dccad5d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 22 Aug 2014 18:28:27 -0400 Subject: [PATCH 218/402] Fix PHP 5.3 syntax error --- tests/phpunit/includes/export-testcase.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 6ebd44e09..c87515660 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -23,7 +23,8 @@ class Export_UnitTestCase extends \PHPUnit_Framework_TestCase { */ protected function parse_file() { - $file = ( new \ReflectionClass( $this ) )->getFileName(); + $class_reflector = new \ReflectionClass( $this ); + $file = $class_reflector->getFileName(); $file = rtrim( $file, 'php' ) . 'inc'; $path = dirname( $file ); From 9e18724e6eb413f4f163f8b2660a30afeaf40719 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 23 Aug 2014 09:39:21 -0400 Subject: [PATCH 219/402] Remove line breaks from docblocks See #114 --- lib/runner.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/runner.php b/lib/runner.php index 4b0681973..bdc727cbd 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -120,15 +120,15 @@ function export_docblock( $element ) { } $output = array( - 'description' => $docblock->getShortDescription(), - 'long_description' => $docblock->getLongDescription()->getFormattedContents(), + 'description' => str_replace( "\n", ' ', $docblock->getShortDescription() ), + 'long_description' => str_replace( "\n", ' ', $docblock->getLongDescription()->getFormattedContents() ), 'tags' => array(), ); foreach ( $docblock->getTags() as $tag ) { $t = array( 'name' => $tag->getName(), - 'content' => $tag->getDescription(), + 'content' => str_replace( "\n", ' ', $tag->getDescription() ), ); if ( method_exists( $tag, 'getTypes' ) ) { $t['types'] = $tag->getTypes(); From 4ca01e69651ce442ac16ec4d48d93ccaae8138e0 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 23 Aug 2014 09:38:36 -0400 Subject: [PATCH 220/402] Make $export_data non-static Otherwise it persists between tests. --- tests/phpunit/includes/export-testcase.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index c87515660..20113b599 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -16,7 +16,7 @@ class Export_UnitTestCase extends \PHPUnit_Framework_TestCase { * * @var string */ - protected static $export_data; + protected $export_data; /** * Parse the file for the current testcase. @@ -30,17 +30,17 @@ protected function parse_file() { $export_data = \WP_Parser\parse_files( array( $file ), $path ); - self::$export_data = $export_data[0]; + $this->export_data = $export_data[0]; } /** - * Parse the file to get teh exported data before the first test. + * Parse the file to get the exported data before the first test. */ public function setUp() { parent::setUp(); - if ( ! self::$export_data ) { + if ( ! $this->export_data ) { $this->parse_file(); } } @@ -75,7 +75,7 @@ protected function assertEntityUses( $entity, $type, $used ) { */ protected function assertFileUsesMethod( $method ) { - $this->assertEntityUses( self::$export_data, 'methods', $method ); + $this->assertEntityUses( $this->export_data, 'methods', $method ); } /** @@ -87,7 +87,7 @@ protected function assertFileUsesMethod( $method ) { protected function assertFunctionUsesMethod( $function_name, $method ) { $function_data = $this->find_entity_data_in( - self::$export_data + $this->export_data , 'functions' , $function_name ); @@ -106,7 +106,7 @@ protected function assertFunctionUsesMethod( $function_name, $method ) { protected function assertMethodUsesMethod( $class_name, $method_name, $method ) { $class_data = $this->find_entity_data_in( - self::$export_data + $this->export_data , 'classes' , $class_name ); From 16f0c395699060397c72a90929e2f2fdb32a40e5 Mon Sep 17 00:00:00 2001 From: Gary Jones <GaryJones@users.noreply.github.com> Date: Mon, 25 Aug 2014 14:09:09 +0100 Subject: [PATCH 221/402] Make plugin headers translatable WordPress makes plugin headers translatable, if the Text Domain header is present. --- plugin.php | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin.php b/plugin.php index ca5e80e22..a9def109f 100644 --- a/plugin.php +++ b/plugin.php @@ -6,6 +6,7 @@ * Author URI: https://github.com/rmccue/WP-Parser/graphs/contributors * Plugin URI: https://github.com/rmccue/WP-Parser * Version: + * Text Domain wp-parser */ if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { From 9ffdb5825eef9482c326d8e24152f483c4d9a9eb Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 23 Aug 2014 09:39:43 -0400 Subject: [PATCH 222/402] Unit tests for #114 --- tests/phpunit/tests/export/docblocks.inc | 64 ++++++++++++++++++++++++ tests/phpunit/tests/export/docblocks.php | 24 +++++++++ 2 files changed, 88 insertions(+) create mode 100644 tests/phpunit/tests/export/docblocks.inc create mode 100644 tests/phpunit/tests/export/docblocks.php diff --git a/tests/phpunit/tests/export/docblocks.inc b/tests/phpunit/tests/export/docblocks.inc new file mode 100644 index 000000000..3e0e8b5c5 --- /dev/null +++ b/tests/phpunit/tests/export/docblocks.inc @@ -0,0 +1,64 @@ +<?php + +/** + * This is the file-level docblock summary. + * + * This is the file-level docblock description, which may span multiple lines. In + * fact, this one does. It spans more than two full lines, continuing on to the + * third line. + * + * @since 1.5.0 + */ + +/** + * This is a function docblock. + * + * This function is just a test, but we've added this description anyway. + * + * @since 2.6.0 + * + * @param string $var A string value. + * @param int $num A number. + * + * @return bool Whether the function was called correctly. + */ +function test_func( $var, $num ) { + + // In real life, there *might* be more stuff in here. + return true; +} + +/** + * This is a class docblock. + * + * This is the more wordy description: This is a comment with two *'s at the start, + * which means that it is a doc comment. Docblock comments are comment blocks used + * to document code. This one documents the Test_Class class. + * + * @since 3.5.2 + */ +class Test_Class { + + /** + * This is a docblock for a class property. + * + * @since 3.0.0 + * + * @var string + */ + public $a_string; + + /** + * This is a method docblock. + * + * @since 4.5.0 + * + * @param mixed $var A parameter. + * @param array $arr Another parameter. + * + * @return mixed The first param. + */ + public function test_method( $var, $arr ) { + return $var; + } +} diff --git a/tests/phpunit/tests/export/docblocks.php b/tests/phpunit/tests/export/docblocks.php new file mode 100644 index 000000000..7bcd6b0fe --- /dev/null +++ b/tests/phpunit/tests/export/docblocks.php @@ -0,0 +1,24 @@ +<?php + +/** + * A test case for exporting docblocks. + */ + +namespace WP_Parser\Tests; +include( '/Users/johngrimes/plugins/jds-dev-tools.php' );// TODO +/** + * Test that docblocks are exported correctly. + */ +class Export_Docblocks extends Export_UnitTestCase { + + /** + * Test that line breaks are removed when the description is exported. + */ + public function test_linebreaks_removed() { + + $this->assertStringMatchesFormat( + '%s' + , $this->export_data['classes'][0]['doc']['long_description'] + ); + } +} From d5805847867fc929296e3b17df24212af2b9798f Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 25 Aug 2014 17:08:39 -0400 Subject: [PATCH 223/402] Cross-platform line-break removal See #114 --- lib/runner.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/runner.php b/lib/runner.php index bdc727cbd..bb6f8f175 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -120,15 +120,15 @@ function export_docblock( $element ) { } $output = array( - 'description' => str_replace( "\n", ' ', $docblock->getShortDescription() ), - 'long_description' => str_replace( "\n", ' ', $docblock->getLongDescription()->getFormattedContents() ), + 'description' => preg_replace( '/[\n\r]+/', ' ', $docblock->getShortDescription() ), + 'long_description' => preg_replace( '/[\n\r]+/', ' ', $docblock->getLongDescription()->getFormattedContents() ), 'tags' => array(), ); foreach ( $docblock->getTags() as $tag ) { $t = array( 'name' => $tag->getName(), - 'content' => str_replace( "\n", ' ', $tag->getDescription() ), + 'content' => preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ), ); if ( method_exists( $tag, 'getTypes' ) ) { $t['types'] = $tag->getTypes(); From 8448be234e2a36188e1ccfda7741a6b186e91df4 Mon Sep 17 00:00:00 2001 From: Gary Jones <GaryJones@users.noreply.github.com> Date: Tue, 26 Aug 2014 08:49:18 +0100 Subject: [PATCH 224/402] Add missing semi-colon in Text Domain header --- plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index a9def109f..63c593adc 100644 --- a/plugin.php +++ b/plugin.php @@ -6,7 +6,7 @@ * Author URI: https://github.com/rmccue/WP-Parser/graphs/contributors * Plugin URI: https://github.com/rmccue/WP-Parser * Version: - * Text Domain wp-parser + * Text Domain: wp-parser */ if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { From 1aa063501a663b810c1cfea534cc6c72b8ad1ebd Mon Sep 17 00:00:00 2001 From: Otto <otto@ottodestruct.com> Date: Thu, 24 Apr 2014 15:58:23 -0500 Subject: [PATCH 225/402] Hook name cleanup Cleanup the hook names before returning them. Removes quote marks, converts concatenated hooks into {$variable} style hooks. Not perfect, just works for most current cases. --- lib/class-hook-reflector.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 73ed2eb7f..550644725 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -9,7 +9,28 @@ class Hook_Reflector extends BaseReflector { public function getName() { $printer = new PHPParser_PrettyPrinter_Default; - return $printer->prettyPrintExpr( $this->node->args[0]->value ); + return $this->cleanupName( $printer->prettyPrintExpr( $this->node->args[0]->value ) ); + } + + private function cleanupName( $name ) { + $m = array(); + + // quotes on both ends of a string + if ( preg_match( '/^[\'"]([^\'"]*)[\'"]$/', $name, $m ) ) { + return $m[1]; + } + + // two concatenated things, last one of them a variable + if ( preg_match( '/^[\'"]([^\'"]*)[\'"]\s*\.\s*(\$[^\s]*)$/', $name, $m ) ) { + return $m[1].'{'.$m[2].'}'; + } + + // two concatenated things, first one of them a variable + if ( preg_match( '/^(\$[^\s]*)\s*\.\s*[\'"]([^\'"]*)[\'"]$/', $name, $m ) ) { + return '{'.$m[1].'}'.$m[2]; + } + + return $name; } public function getShortName() { From d84fc4d44727952a704dcd949b0d2fe7f4f6619a Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 28 Aug 2014 17:13:12 -0400 Subject: [PATCH 226/402] Combine regexes for standardizing hook names See #102 --- lib/class-hook-reflector.php | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 550644725..977926d27 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -11,23 +11,18 @@ public function getName() { $printer = new PHPParser_PrettyPrinter_Default; return $this->cleanupName( $printer->prettyPrintExpr( $this->node->args[0]->value ) ); } - + private function cleanupName( $name ) { $m = array(); - + // quotes on both ends of a string if ( preg_match( '/^[\'"]([^\'"]*)[\'"]$/', $name, $m ) ) { return $m[1]; } - + // two concatenated things, last one of them a variable - if ( preg_match( '/^[\'"]([^\'"]*)[\'"]\s*\.\s*(\$[^\s]*)$/', $name, $m ) ) { - return $m[1].'{'.$m[2].'}'; - } - - // two concatenated things, first one of them a variable - if ( preg_match( '/^(\$[^\s]*)\s*\.\s*[\'"]([^\'"]*)[\'"]$/', $name, $m ) ) { - return '{'.$m[1].'}'.$m[2]; + if ( preg_match( '/(?:[\'"]([^\'"]*)[\'"]\s*\.\s*)?(\$[^\s]*)(?:\s*\.\s*[\'"]([^\'"]*)[\'"])?/', $name, $m ) ) { + return $m[1].'{'.$m[2].'}'.$m[3]; } return $name; From e36b18ff96b18c5accbf4f725151c2c6d02c457d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 28 Aug 2014 17:13:48 -0400 Subject: [PATCH 227/402] Add unit tests for hook name standardization See #102 --- tests/phpunit/includes/export-testcase.php | 35 +++++++++++++++++++ tests/phpunit/tests/export/hooks.inc | 7 ++++ tests/phpunit/tests/export/hooks.php | 39 ++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 tests/phpunit/tests/export/hooks.inc create mode 100644 tests/phpunit/tests/export/hooks.php diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 20113b599..3ae6ab370 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -45,6 +45,41 @@ public function setUp() { } } + /** + * Assert that an entity contains another entity. + * + * @param array $entity The exported entity data. + * @param string $type The type of thing that this entity should contain. + * @param array $expected The expcted data for the thing the entity should contain. + */ + protected function assertEntityContains( $entity, $type, $expected ) { + + $this->assertArrayHasKey( $type, $entity ); + + $found = false; + foreach ( $entity[ $type ] as $exported ) { + if ( $exported['line'] == $expected['line'] ) { + foreach ( $expected as $key => $expected_value ) { + $this->assertEquals( $expected_value, $exported[ $key ] ); + } + + return; + } + } + + $this->markTestFailed( "No matching {$type} contained by {$entity['name']}." ); + } + + /** + * Assert that a file contains the declaration of a hook. + * + * @param array $hook The expected export data for the hook. + */ + protected function assertFileContainsHook( $hook ) { + + $this->assertEntityContains( $this->export_data, 'hooks', $hook ); + } + /** * Assert that an entity uses another entity. * diff --git a/tests/phpunit/tests/export/hooks.inc b/tests/phpunit/tests/export/hooks.inc new file mode 100644 index 000000000..3cc11f46f --- /dev/null +++ b/tests/phpunit/tests/export/hooks.inc @@ -0,0 +1,7 @@ +<?php + +do_action( 'plain_action' ); +do_action( "action_with_double_quotes" ); +do_action( $variable . '-action' ); +do_action( "another-{$variable}-action" ); +do_action( 'hook_' . $object->property . '_pre' ); diff --git a/tests/phpunit/tests/export/hooks.php b/tests/phpunit/tests/export/hooks.php new file mode 100644 index 000000000..adf4ef8e0 --- /dev/null +++ b/tests/phpunit/tests/export/hooks.php @@ -0,0 +1,39 @@ +<?php + +/** + * A test case for hook exporting. + */ + +namespace WP_Parser\Tests; + +/** + * Test that hooks are exported correctly. + */ +class Export_Hooks extends Export_UnitTestCase { + + /** + * Test that hook names are standardized on export. + */ + public function test_hook_names_standardized() { + + $this->assertFileContainsHook( + array( 'name' => 'plain_action', 'line' => 3 ) + ); + + $this->assertFileContainsHook( + array( 'name' => 'action_with_double_quotes', 'line' => 4 ) + ); + + $this->assertFileContainsHook( + array( 'name' => '{$variable}-action', 'line' => 5 ) + ); + + $this->assertFileContainsHook( + array( 'name' => 'another-{$variable}-action', 'line' => 6 ) + ); + + $this->assertFileContainsHook( + array( 'name' => 'hook_{$object->property}_pre', 'line' => 7 ) + ); + } +} From 7f0c77255a322dfd145b3fd165556418f3153666 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 28 Aug 2014 17:16:27 -0400 Subject: [PATCH 228/402] Remove unneeded includes from unit tests --- tests/phpunit/includes/bootstrap.php | 4 ---- tests/phpunit/tests/export/docblocks.php | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index 1c6ce469c..abc4d802d 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -2,7 +2,3 @@ include( __DIR__ . '/../../../vendor/autoload.php' ); include( __DIR__ . '/export-testcase.php' ); - -// TODO remove when these get autoloaded. -include( __DIR__ . '/../../../lib/class-method-call-reflector.php' ); -include( __DIR__ . '/../../../lib/class-static-method-call-reflector.php' ); diff --git a/tests/phpunit/tests/export/docblocks.php b/tests/phpunit/tests/export/docblocks.php index 7bcd6b0fe..852538924 100644 --- a/tests/phpunit/tests/export/docblocks.php +++ b/tests/phpunit/tests/export/docblocks.php @@ -5,7 +5,7 @@ */ namespace WP_Parser\Tests; -include( '/Users/johngrimes/plugins/jds-dev-tools.php' );// TODO + /** * Test that docblocks are exported correctly. */ From dd2e8cd16dd8c60c6b6a944ba05642aded0e282b Mon Sep 17 00:00:00 2001 From: Peter Chester <peter@tri.be> Date: Thu, 4 Sep 2014 17:02:04 -0700 Subject: [PATCH 229/402] Add a filter to allow bypassing of file imports --- lib/class-importer.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/class-importer.php b/lib/class-importer.php index d811721e9..1a47065ad 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -126,6 +126,17 @@ protected function insert_term( $term, $taxonomy, $args = array() ) { */ public function import_file( array $file, $skip_sleep = false, $import_internal = false ) { + /** + * Filter whether to proceed with importing a prospective file. + * + * Returning a falsey value to the filter will short-circuit processing of the import file. + * + * @param bool $display Whether to proceed with importing the file. Default true. + * @param array $file File data + */ + if ( ! apply_filters( 'wp_parser_pre_import_file', true, $file ) ) + return; + // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); From 7bda6112937446ac304335a4c72c699c5fba41b0 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 5 Sep 2014 17:21:11 -0400 Subject: [PATCH 230/402] Don't pick up docblocks from Name nodes See #128 --- lib/class-file-reflector.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index f84e9891c..65167a025 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -149,8 +149,13 @@ public function enterNode( \PHPParser_Node $node ) { } // Pick up DocBlock from non-documentable elements so that it can be assigned - // to the next hook if necessary. - if ( ! $this->isNodeDocumentable( $node ) && ( $docblock = $node->getDocComment() ) ) { + // to the next hook if necessary. We don't do this for name nodes, since even + // though they aren't documentable, they still carry the docblock from their + // corresponding class/constant/function/etc. that they are the name of. If + // we don't ignnore them, we'll end up picking up docblocks that are already + // associated with a named element, and so aren't really from a non- + // documentable element after all. + if ( ! $this->isNodeDocumentable( $node ) && 'Name' !== $node->getType() && ( $docblock = $node->getDocComment() ) ) { $this->last_doc = $docblock; } } From b78c367c849a5ad028d629b781fcd7de170a841d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 5 Sep 2014 17:21:39 -0400 Subject: [PATCH 231/402] Expanded docblock export tests See #128 --- tests/phpunit/includes/export-testcase.php | 95 ++++++++++++++++ tests/phpunit/tests/export/docblocks.inc | 26 +++++ tests/phpunit/tests/export/docblocks.php | 121 +++++++++++++++++++++ 3 files changed, 242 insertions(+) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 3ae6ab370..7b42736f7 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -158,6 +158,101 @@ protected function assertMethodUsesMethod( $class_name, $method_name, $method ) $this->assertEntityUses( $method_data, 'methods', $method ); } + /** + * Assert that an entity has a docblock. + * + * @param array $entity The exported entity data. + * @param array $docs The expcted data for the entity's docblock. + * @param string $doc_key The key in the entity array that should hold the docs. + */ + protected function assertEntityHasDocs( $entity, $docs, $doc_key = 'doc' ) { + + $this->assertArrayHasKey( $doc_key, $entity ); + + $found = false; + foreach ( $docs as $key => $expected_value ) { + $this->assertEquals( $expected_value, $entity[ $doc_key ][ $key ] ); + } + } + + /** + * Assert that a file has a docblock. + * + * @param array $docs The expected data for the file's docblock. + */ + protected function assertFileHasDocs( $docs ) { + + $this->assertEntityHasDocs( $this->export_data, $docs, 'file' ); + } + + /** + * Assert that a function has a docblock. + * + * @param array $func The function name. + * @param array $docs The expected data for the function's docblock. + */ + protected function assertFunctionHasDocs( $func, $docs ) { + + $func = $this->find_entity_data_in( $this->export_data, 'functions', $func ); + $this->assertEntityHasDocs( $func, $docs ); + } + + /** + * Assert that a class has a docblock. + * + * @param array $class The class name. + * @param array $docs The expected data for the class's docblock. + */ + protected function assertClassHasDocs( $class, $docs ) { + + $class = $this->find_entity_data_in( $this->export_data, 'classes', $class ); + $this->assertEntityHasDocs( $class, $docs ); + } + + /** + * Assert that a method has a docblock. + * + * @param string $class The name of the class that the method is used in. + * @param string $method The method name. + * @param array $docs The expected data for the methods's docblock. + */ + protected function assertMethodHasDocs( $class, $method, $docs ) { + + $class = $this->find_entity_data_in( $this->export_data, 'classes', $class ); + $this->assertInternalType( 'array', $class ); + + $method = $this->find_entity_data_in( $class, 'methods', $method ); + $this->assertEntityHasDocs( $method, $docs ); + } + + /** + * Assert that a property has a docblock. + * + * @param string $class The name of the class that the method is used in. + * @param string $property The property name. + * @param array $docs The expected data for the property's docblock. + */ + protected function assertPropertyHasDocs( $class, $property, $docs ) { + + $class = $this->find_entity_data_in( $this->export_data, 'classes', $class ); + $this->assertInternalType( 'array', $class ); + + $property = $this->find_entity_data_in( $class, 'properties', $property ); + $this->assertEntityHasDocs( $property, $docs ); + } + + /** + * Assert that a hook has a docblock. + * + * @param array $hook The hook name. + * @param array $docs The expected data for the hook's docblock. + */ + protected function assertHookHasDocs( $hook, $docs ) { + + $hook = $this->find_entity_data_in( $this->export_data, 'hooks', $hook ); + $this->assertEntityHasDocs( $hook, $docs ); + } + /** * Find the exported data for an entity. * diff --git a/tests/phpunit/tests/export/docblocks.inc b/tests/phpunit/tests/export/docblocks.inc index 3e0e8b5c5..05686f510 100644 --- a/tests/phpunit/tests/export/docblocks.inc +++ b/tests/phpunit/tests/export/docblocks.inc @@ -62,3 +62,29 @@ class Test_Class { return $var; } } + +/** + * A filter. + */ +$var = apply_filters( 'test_filter', $var ); + +/** + * A reference array filter. + */ +$var = apply_filters_ref_array( 'test_ref_array_filter', array( &$var ) ); + +/** + * A test action. + * + * @since 3.7.0 + * + * @param WP_Post $post Post object. + */ +do_action( 'test_action', $post ); + +do_action( 'undocumented_hook' ); + +/** + * A reference array action. + */ +do_action_ref_array( 'test_ref_array_action', array( &$var ) ); diff --git a/tests/phpunit/tests/export/docblocks.php b/tests/phpunit/tests/export/docblocks.php index 852538924..0d49b15d1 100644 --- a/tests/phpunit/tests/export/docblocks.php +++ b/tests/phpunit/tests/export/docblocks.php @@ -21,4 +21,125 @@ public function test_linebreaks_removed() { , $this->export_data['classes'][0]['doc']['long_description'] ); } + + /** + * Test that hooks which aren't documented don't receive docs from another node. + */ + public function test_undocumented_hook() { + + $this->assertHookHasDocs( + 'undocumented_hook' + , array( + 'description' => '', + ) + ); + } + + /** + * Test that hook docbloks are picked up. + */ + public function test_hook_docblocks() { + + $this->assertHookHasDocs( + 'test_action' + , array( 'description' => 'A test action.' ) + ); + + $this->assertHookHasDocs( + 'test_filter' + , array( 'description' => 'A filter.' ) + ); + + $this->assertHookHasDocs( + 'test_ref_array_action' + , array( 'description' => 'A reference array action.' ) + ); + + $this->assertHookHasDocs( + 'test_ref_array_filter' + , array( 'description' => 'A reference array filter.' ) + ); + } + + /** + * Test that file-level docs are exported. + */ + public function test_file_docblocks() { + + $this->assertFileHasDocs( + array( 'description' => 'This is the file-level docblock summary.' ) + ); + } + + /** + * Test that function docs are exported. + */ + public function test_function_docblocks() { + + $this->assertFunctionHasDocs( + 'test_func' + , array( + 'description' => 'This is a function docblock.', + 'long_description' => '<p>This function is just a test, but we\'ve added this description anyway.</p>', + 'tags' => array( + array( + 'name' => 'since', + 'content' => '2.6.0', + ), + array( + 'name' => 'param', + 'content' => 'A string value.', + 'types' => array( 'string' ), + 'variable' => '$var', + ), + array( + 'name' => 'param', + 'content' => 'A number.', + 'types' => array( 'int' ), + 'variable' => '$num', + ), + array( + 'name' => 'return', + 'content' => 'Whether the function was called correctly.', + 'types' => array( 'bool' ), + ), + ), + ) + ); + } + + /** + * Test that class docs are exported. + */ + public function test_class_docblocks() { + + $this->assertClassHasDocs( + 'Test_Class' + , array( 'description' => 'This is a class docblock.' ) + ); + } + + /** + * Test that method docs are exported. + */ + public function test_method_docblocks() { + + $this->assertMethodHasDocs( + 'Test_Class' + , 'test_method' + , array( 'description' => 'This is a method docblock.' ) + ); + } + + /** + * Test that function docs are exported. + */ + public function test_property_docblocks() { + + $this->assertPropertyHasDocs( + 'Test_Class' + , '$a_string' + , array( 'description' => 'This is a docblock for a class property.' ) + ); + } } From 4d041076861dbc5973a28ce51d3d5e7d1b65c12d Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 5 Sep 2014 17:29:51 -0400 Subject: [PATCH 232/402] Fix a typo --- lib/class-file-reflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 65167a025..fde94e285 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -152,7 +152,7 @@ public function enterNode( \PHPParser_Node $node ) { // to the next hook if necessary. We don't do this for name nodes, since even // though they aren't documentable, they still carry the docblock from their // corresponding class/constant/function/etc. that they are the name of. If - // we don't ignnore them, we'll end up picking up docblocks that are already + // we don't ignore them, we'll end up picking up docblocks that are already // associated with a named element, and so aren't really from a non- // documentable element after all. if ( ! $this->isNodeDocumentable( $node ) && 'Name' !== $node->getType() && ( $docblock = $node->getDocComment() ) ) { From 8362d5272421ed306ab5eef5a5a34070f8012a72 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 9 Sep 2014 17:31:55 -0400 Subject: [PATCH 233/402] Decouple the importer class from WP-CLI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `Importer` class was decoupled from WP-CLI except for its use as a progress/error reporting function. I’ve fixed that by abstracting the message reporting into two new methods, and implementing the use of WP-CLI for reporting in a child class. We then use the child class for importing. See #82 --- lib/class-command.php | 2 +- lib/class-importer.php | 48 ++++++++++++++++++++++------------- lib/class-wp-cli-importer.php | 37 +++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 lib/class-wp-cli-importer.php diff --git a/lib/class-command.php b/lib/class-command.php index 0cc83f438..d6ad1b94e 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -170,7 +170,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna delete_option( 'wp_parser_root_import_dir' ); // Run the importer - $importer = new Importer; + $importer = new WP_CLI_Importer; // Sanity check -- do the required post types exist? if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) || ! post_type_exists( $importer->post_type_hook ) ) { diff --git a/lib/class-importer.php b/lib/class-importer.php index 1a47065ad..7376eb551 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -2,8 +2,6 @@ namespace WP_Parser; -use WP_CLI; - /** * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. */ @@ -339,7 +337,7 @@ protected function import_version( $data ) { if ( isset( $wp_version ) && $wp_version ) { update_option( 'wp_parser_imported_wp_version', $wp_version ); - WP_CLI::log( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); + $this->log( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); } } @@ -382,20 +380,20 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::log( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::log( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); + $this->log( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::log( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); + $this->log( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); break; default: - WP_CLI::log( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); } return false; @@ -482,7 +480,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $anything_updated[] = true; } } else { - WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); + $this->warn( "\tCannot set @since term: " . $since_term->get_error_message() ); } } @@ -530,9 +528,9 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( is_wp_error( $package_term ) ) { if ( is_int( $main_package_id ) ) { - WP_CLI::warning( "\tCannot create @subpackage term: " . $package_term->get_error_message() ); + $this->warn( "\tCannot create @subpackage term: " . $package_term->get_error_message() ); } else { - WP_CLI::warning( "\tCannot create @package term: " . $package_term->get_error_message() ); + $this->warn( "\tCannot create @package term: " . $package_term->get_error_message() ); } } } @@ -565,38 +563,38 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( $is_new_post ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::log( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::log( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); + $this->log( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::log( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); + $this->log( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); break; default: - WP_CLI::log( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); } } else { switch ( $post_data['post_type'] ) { case $this->post_type_class: - WP_CLI::log( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - WP_CLI::log( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); + $this->log( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - WP_CLI::log( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); + $this->log( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); break; default: - WP_CLI::log( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); + $this->log( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); } } @@ -610,4 +608,18 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return $ID; } + + /** + * Log a messsage. + * + * @param string The message to log. + */ + public function log( $message ) {} + + /** + * Give a warning. + * + * @param string The warning message. + */ + public function warn( $message ) {} } \ No newline at end of file diff --git a/lib/class-wp-cli-importer.php b/lib/class-wp-cli-importer.php new file mode 100644 index 000000000..e500d3266 --- /dev/null +++ b/lib/class-wp-cli-importer.php @@ -0,0 +1,37 @@ +<?php + +/** + * Importer class for use with WP-CLI. + * + * @package WP_Parser + */ + +namespace WP_Parser; + +use WP_CLI; + +/** + * Importer for using with WP-CLI. + */ +class WP_CLI_Importer extends Importer { + + /** + * Log a messsage. + * + * @param string The message to log. + */ + public function log( $message ) { + WP_CLI::log( $message ); + } + + /** + * Give a warning. + * + * @param string The warning message. + */ + public function warn( $message ) { + WP_CLI::warning( $message ); + } +} + +// EOF From 089e0253ecdf10e2a4b45c7afd43e6d4e7b1a68f Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Wed, 10 Sep 2014 17:28:15 -0400 Subject: [PATCH 234/402] Move the import function to the importer See #82 --- lib/class-command.php | 98 +-------------------------- lib/class-importer.php | 124 +++++++++++++++++++++++++++++++++- lib/class-wp-cli-importer.php | 18 +++-- 3 files changed, 131 insertions(+), 109 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index d6ad1b94e..423c94c3a 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -139,111 +139,15 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. */ protected function _do_import( array $data, $skip_sleep = false, $import_internal_functions = false ) { - global $wpdb; - $time_start = microtime(true); - $num_queries = $wpdb->num_queries; - - // Make sure a current user is set if ( ! wp_get_current_user()->exists() ) { WP_CLI::error( 'Please specify a valid user: --user=<id|login>' ); exit; } - WP_CLI::line( 'Starting import. This will take some time…' ); - - $file_number = 1; - $num_of_files = count( $data ); - - do_action( 'wp_parser_starting_import' ); - - // Defer term counting for performance - wp_suspend_cache_invalidation( true ); - wp_defer_term_counting( true ); - wp_defer_comment_counting( true ); - - // Remove actions for performance - remove_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10 ); - remove_action( 'transition_post_status', '__clear_multi_author_cache', 10 ); - - delete_option( 'wp_parser_imported_wp_version' ); - delete_option( 'wp_parser_root_import_dir' ); - // Run the importer $importer = new WP_CLI_Importer; - - // Sanity check -- do the required post types exist? - if ( ! post_type_exists( $importer->post_type_class ) || ! post_type_exists( $importer->post_type_function ) || ! post_type_exists( $importer->post_type_hook ) ) { - WP_CLI::error( sprintf( 'Missing post type; check that "%1$s", "%2$s", and "%3$s" are registered.', $importer->post_type_class, $importer->post_type_function, $importer->post_type_hook ) ); - exit; - } - - // Sanity check -- do the required taxonomies exist? - if ( ! taxonomy_exists( $importer->taxonomy_file ) || ! taxonomy_exists( $importer->taxonomy_since_version ) || ! taxonomy_exists( $importer->taxonomy_package ) ) { - WP_CLI::error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); - exit; - } - - $root = ''; - foreach ( $data as $file ) { - WP_CLI::line( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); - $file_number ++; - - $importer->import_file( $file, $skip_sleep, $import_internal_functions ); - - if ( empty( $root ) && ( isset( $file['root'] ) && $file['root'] ) ) { - $root = $file['root']; - } - } - - if( ! empty( $root ) ) { - update_option( 'wp_parser_root_import_dir', $root ); - WP_CLI::line( 'Updated option wp_parser_root_import_dir: ' . $root ); - } - - $last_import = time(); - $import_date = date_i18n( get_option('date_format'), $last_import ); - $import_time = date_i18n( get_option('time_format'), $last_import ); - update_option( 'wp_parser_last_import', $last_import ); - WP_CLI::line( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); - - $wp_version = get_option( 'wp_parser_imported_wp_version' ); - if( $wp_version ) { - WP_CLI::line( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); - } - - /** - * Workaround for a WP core bug where hierarchial taxonomy caches are not being cleared - * - * https://core.trac.wordpress.org/ticket/14485 - * http://wordpress.stackexchange.com/questions/8357/inserting-terms-in-an-hierarchical-taxonomy - */ - delete_option( "{$importer->taxonomy_package}_children" ); - delete_option( "{$importer->taxonomy_since_version}_children" ); - - // Start counting again - wp_defer_term_counting( false ); - wp_suspend_cache_invalidation( false ); - wp_cache_flush(); - wp_defer_comment_counting( false ); - - do_action( 'wp_parser_ending_import' ); - - $time_end = microtime(true); - $time = $time_end - $time_start; - - WP_CLI::line( 'Time: '.$time ); - WP_CLI::line( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); - if ( empty( $importer->errors ) ) { - WP_CLI::success( 'Import complete!' ); - - } else { - WP_CLI::line( 'Import complete, but some errors were found:' ); - - foreach ( $importer->errors as $error ) { - WP_CLI::warning( $error ); - } - } + $importer->import( compact( 'skip_sleep', 'import_internal_functions' ) ); WP_CLI::line(); } diff --git a/lib/class-importer.php b/lib/class-importer.php index 7376eb551..ef84486a0 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -98,6 +98,112 @@ public function __construct( array $args = array() ) { } } + /** + * Import the PHPDoc $data into WordPress posts and taxonomies + * + * @param array $data + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + */ + public function import( array $data, $skip_sleep = false, $import_internal_functions = false ) { + global $wpdb; + + $time_start = microtime(true); + $num_queries = $wpdb->num_queries; + + $this->log( 'Starting import. This will take some time…' ); + + $file_number = 1; + $num_of_files = count( $data ); + + do_action( 'wp_parser_starting_import' ); + + // Defer term counting for performance + wp_suspend_cache_invalidation( true ); + wp_defer_term_counting( true ); + wp_defer_comment_counting( true ); + + // Remove actions for performance + remove_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10 ); + remove_action( 'transition_post_status', '__clear_multi_author_cache', 10 ); + + delete_option( 'wp_parser_imported_wp_version' ); + delete_option( 'wp_parser_root_import_dir' ); + + // Sanity check -- do the required post types exist? + if ( ! post_type_exists( $this->post_type_class ) || ! post_type_exists( $this->post_type_function ) || ! post_type_exists( $this->post_type_hook ) ) { + $this->error( sprintf( 'Missing post type; check that "%1$s", "%2$s", and "%3$s" are registered.', $this->post_type_class, $this->post_type_function, $this->post_type_hook ) ); + exit; + } + + // Sanity check -- do the required taxonomies exist? + if ( ! taxonomy_exists( $importer->taxonomy_file ) || ! taxonomy_exists( $importer->taxonomy_since_version ) || ! taxonomy_exists( $importer->taxonomy_package ) ) { + $this->error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); + exit; + } + + $root = ''; + foreach ( $data as $file ) { + $this->log( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); + $file_number ++; + + $importer->import_file( $file, $skip_sleep, $import_internal_functions ); + + if ( empty( $root ) && ( isset( $file['root'] ) && $file['root'] ) ) { + $root = $file['root']; + } + } + + if( ! empty( $root ) ) { + update_option( 'wp_parser_root_import_dir', $root ); + $this->log( 'Updated option wp_parser_root_import_dir: ' . $root ); + } + + $last_import = time(); + $import_date = date_i18n( get_option('date_format'), $last_import ); + $import_time = date_i18n( get_option('time_format'), $last_import ); + update_option( 'wp_parser_last_import', $last_import ); + $this->log( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); + + $wp_version = get_option( 'wp_parser_imported_wp_version' ); + if( $wp_version ) { + $this->log( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); + } + + /** + * Workaround for a WP core bug where hierarchial taxonomy caches are not being cleared + * + * https://core.trac.wordpress.org/ticket/14485 + * http://wordpress.stackexchange.com/questions/8357/inserting-terms-in-an-hierarchical-taxonomy + */ + delete_option( "{$importer->taxonomy_package}_children" ); + delete_option( "{$importer->taxonomy_since_version}_children" ); + + do_action( 'wp_parser_ending_import' ); + + // Start counting again + wp_defer_term_counting( false ); + wp_suspend_cache_invalidation( false ); + wp_cache_flush(); + wp_defer_comment_counting( false ); + + $time_end = microtime(true); + $time = $time_end - $time_start; + + $this->log( 'Time: '.$time ); + $this->log( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); + if ( empty( $importer->errors ) ) { + $this->success( 'Import complete!' ); + + } else { + $this->log( 'Import complete, but some errors were found:' ); + + foreach ( $importer->errors as $error ) { + $this->warn( $error ); + } + } + } + protected function insert_term( $term, $taxonomy, $args = array() ) { if ( isset( $this->inserted_terms[ $taxonomy ][ $term ] ) ) { return $this->inserted_terms[ $taxonomy ][ $term ]; @@ -612,14 +718,28 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal /** * Log a messsage. * - * @param string The message to log. + * @param string $message The message to log. */ public function log( $message ) {} /** * Give a warning. * - * @param string The warning message. + * @param string $message The warning message. */ public function warn( $message ) {} + + /** + * Give an error. + * + * @param string $message The error message. + */ + public function error( $message ) {} + + /** + * Give a success message. + * + * @param string $message The success message. + */ + public function success( $message ) {} } \ No newline at end of file diff --git a/lib/class-wp-cli-importer.php b/lib/class-wp-cli-importer.php index e500d3266..cb8b0bc8d 100644 --- a/lib/class-wp-cli-importer.php +++ b/lib/class-wp-cli-importer.php @@ -15,23 +15,21 @@ */ class WP_CLI_Importer extends Importer { - /** - * Log a messsage. - * - * @param string The message to log. - */ public function log( $message ) { WP_CLI::log( $message ); } - /** - * Give a warning. - * - * @param string The warning message. - */ public function warn( $message ) { WP_CLI::warning( $message ); } + + public function error( $message ) { + WP_CLI::error( $message ); + } + + public function success( $message ) { + WP_CLI::success( $message ); + } } // EOF From 08d52451a15c36eab04c0facd92f5b962c2413aa Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 26 Sep 2014 16:47:27 -0400 Subject: [PATCH 235/402] Remove errant compact() See #82 --- lib/class-command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index 423c94c3a..7f7d23f84 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -147,7 +147,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna // Run the importer $importer = new WP_CLI_Importer; - $importer->import( compact( 'skip_sleep', 'import_internal_functions' ) ); + $importer->import( $data, $skip_sleep, $import_internal_functions ); WP_CLI::line(); } From 8d6af26c6897bcbb60e5cc39ddfc8192f6ced2b0 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Fri, 26 Sep 2014 16:48:20 -0400 Subject: [PATCH 236/402] Use $this instead of $importer in importer class See #82 --- lib/class-importer.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index ef84486a0..024ed328d 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -137,8 +137,8 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct } // Sanity check -- do the required taxonomies exist? - if ( ! taxonomy_exists( $importer->taxonomy_file ) || ! taxonomy_exists( $importer->taxonomy_since_version ) || ! taxonomy_exists( $importer->taxonomy_package ) ) { - $this->error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $importer->taxonomy_file ) ); + if ( ! taxonomy_exists( $this->taxonomy_file ) || ! taxonomy_exists( $this->taxonomy_since_version ) || ! taxonomy_exists( $this->taxonomy_package ) ) { + $this->error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $this->taxonomy_file ) ); exit; } @@ -147,7 +147,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $this->log( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); $file_number ++; - $importer->import_file( $file, $skip_sleep, $import_internal_functions ); + $this->import_file( $file, $skip_sleep, $import_internal_functions ); if ( empty( $root ) && ( isset( $file['root'] ) && $file['root'] ) ) { $root = $file['root']; @@ -176,8 +176,8 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct * https://core.trac.wordpress.org/ticket/14485 * http://wordpress.stackexchange.com/questions/8357/inserting-terms-in-an-hierarchical-taxonomy */ - delete_option( "{$importer->taxonomy_package}_children" ); - delete_option( "{$importer->taxonomy_since_version}_children" ); + delete_option( "{$this->taxonomy_package}_children" ); + delete_option( "{$this->taxonomy_since_version}_children" ); do_action( 'wp_parser_ending_import' ); @@ -192,13 +192,13 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $this->log( 'Time: '.$time ); $this->log( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); - if ( empty( $importer->errors ) ) { + if ( empty( $this->errors ) ) { $this->success( 'Import complete!' ); } else { $this->log( 'Import complete, but some errors were found:' ); - foreach ( $importer->errors as $error ) { + foreach ( $this->errors as $error ) { $this->warn( $error ); } } From 72dbf8cc46cd964aecacdf0f1a4be7ee12cc7c82 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 27 Sep 2014 16:23:30 -0400 Subject: [PATCH 237/402] Load WordPress during unit tests --- tests/phpunit/includes/bootstrap.php | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index abc4d802d..bc07b83d7 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -1,4 +1,35 @@ <?php +if ( ! getenv( 'WP_TESTS_DIR' ) ) { + exit( '$_ENV["WP_TESTS_DIR"] is not set.' . PHP_EOL ); +} + include( __DIR__ . '/../../../vendor/autoload.php' ); + +/** + * The WordPress tests functions. + * + * Clearly, WP_TESTS_DIR should be the path to the WordPress PHPUnit tests checkout. + * + * We are loading this so that we can add our tests filter to load the plugin, using + * tests_add_filter(). + * + * @since 1.0.0 + */ +require_once getenv( 'WP_TESTS_DIR' ) . '/includes/functions.php'; + +tests_add_filter( 'muplugins_loaded', function() { + include( __DIR__ . '/../../../plugin.php' ); +}); + +/** + * Sets up the WordPress test environment. + * + * We've got our action set up, so we can load this now, and viola, the tests begin. + * Again, WordPress' PHPUnit test suite needs to be installed under the given path. + * + * @since 1.0.0 + */ +require getenv( 'WP_TESTS_DIR' ) . '/includes/bootstrap.php'; + include( __DIR__ . '/export-testcase.php' ); From 83742560e7ca244089e92c6fe80c8589d4cca1a3 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 27 Sep 2014 16:24:00 -0400 Subject: [PATCH 238/402] Add a parent test case for the import tests --- tests/phpunit/includes/bootstrap.php | 1 + tests/phpunit/includes/testcases/import.php | 31 +++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/phpunit/includes/testcases/import.php diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index bc07b83d7..8f67b8c49 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -33,3 +33,4 @@ require getenv( 'WP_TESTS_DIR' ) . '/includes/bootstrap.php'; include( __DIR__ . '/export-testcase.php' ); +include( __DIR__ . '/testcases/import.php' ); diff --git a/tests/phpunit/includes/testcases/import.php b/tests/phpunit/includes/testcases/import.php new file mode 100644 index 000000000..defcf29fe --- /dev/null +++ b/tests/phpunit/includes/testcases/import.php @@ -0,0 +1,31 @@ +<?php + +/** + * A parent test case class for the data export tests. + */ + +namespace WP_Parser\Tests; + +/** + * Parent test case for data export tests. + */ +class Import_UnitTestCase extends Export_UnitTestCase { + + /** + * The importer instace used in the tests. + * + * @var \WP_Parser\Importer + */ + protected $importer; + + /** + * Set up before the tests. + */ + public function setUp() { + + parent::setUp(); + + $this->importer = new \WP_Parser\Importer; + $this->importer->import( array( $this->export_data ) ); + } +} From 4b921d55224485b7c4966bf5dc1ba321539562da Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 27 Sep 2014 16:24:21 -0400 Subject: [PATCH 239/402] Have the export test case extend WP_UnitTestCase --- tests/phpunit/includes/export-testcase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 7b42736f7..ee2f94bbf 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -9,7 +9,7 @@ /** * Parent test case for data export tests. */ -class Export_UnitTestCase extends \PHPUnit_Framework_TestCase { +class Export_UnitTestCase extends \WP_UnitTestCase { /** * The exported data. From 7f9a828dc9bcbcc73081e7e5bd9606293a9ea84c Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sat, 27 Sep 2014 16:28:38 -0400 Subject: [PATCH 240/402] Add initial tests for importing Covers basic importing of a file and a function. --- tests/phpunit/tests/import/file.inc | 30 ++++++ tests/phpunit/tests/import/file.php | 138 ++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 tests/phpunit/tests/import/file.inc create mode 100644 tests/phpunit/tests/import/file.php diff --git a/tests/phpunit/tests/import/file.inc b/tests/phpunit/tests/import/file.inc new file mode 100644 index 000000000..7c569a8fe --- /dev/null +++ b/tests/phpunit/tests/import/file.inc @@ -0,0 +1,30 @@ +<?php + +/** + * File summary. + * + * This is the longer file description. It can be very long, and even span multiple + * lines, if hard wrapped as it should be. + * + * @package Something + * @since 1.0.0 + */ + +/** + * This is a function summary. + * + * This function is just here for tests. This is its longer description. + * + * @since 1.4.0 + * + * @param string $var A string variable which is the first parameter. + * @param int[] $ids An array of user IDs. + * + * @return mixed The return type is random. (Not really.) + */ +function wp_parser_test_func( $var, array $ids = array() ) { + + /* Code would go here. */ +} + +// EOF diff --git a/tests/phpunit/tests/import/file.php b/tests/phpunit/tests/import/file.php new file mode 100644 index 000000000..5b073d74f --- /dev/null +++ b/tests/phpunit/tests/import/file.php @@ -0,0 +1,138 @@ +<?php + +/** + * Test for importing files. + */ + +namespace WP_Parser\Tests; + +/** + * Test that files are imported correctly. + * + * @group import + */ +class File_Import_Test extends Import_UnitTestCase { + + /** + * Test that the term is created for this file. + */ + public function test_file_term_created() { + + $terms = get_terms( + $this->importer->taxonomy_file + , array( 'hide_empty' => false ) + ); + + $this->assertCount( 1, $terms ); + + $term = $terms[0]; + + $this->assertEquals( 'file.inc', $term->name ); + $this->assertEquals( 'file-inc', $term->slug ); + } + + /** + * Test that a post is created for the function. + */ + public function test_function_post_created() { + + $posts = get_posts( + array( 'post_type' => $this->importer->post_type_function ) + ); + + $this->assertCount( 1, $posts ); + + $post = $posts[0]; + + // Check that the post attributes are correct. + $this->assertEquals( + '<p>This function is just here for tests. This is its longer description.</p>' + , $post->post_content + ); + $this->assertEquals( 'This is a function summary.', $post->post_excerpt ); + $this->assertEquals( 'wp_parser_test_func', $post->post_name ); + $this->assertEquals( 0, $post->post_parent ); + $this->assertEquals( 'wp_parser_test_func', $post->post_title ); + + // It should be assigned to the file's taxonomy term. + $terms = wp_get_object_terms( + $post->ID + , $this->importer->taxonomy_file + ); + + $this->assertCount( 1, $terms ); + $this->assertEquals( 'file.inc', $terms[0]->name ); + + // It should be assigned to the correct @since taxonomy term. + $terms = wp_get_object_terms( + $post->ID + , $this->importer->taxonomy_since_version + ); + + $this->assertCount( 1, $terms ); + $this->assertEquals( '1.4.0', $terms[0]->name ); + + // It should be assigned the correct @package taxonomy term. + $terms = wp_get_object_terms( + $post->ID + , $this->importer->taxonomy_package + ); + + $this->assertCount( 1, $terms ); + $this->assertEquals( 'Something', $terms[0]->name ); + + // Check that the metadata was imported. + $this->assertEquals( + array( + array( + 'name' => '$var', + 'default' => null, + 'type' => '', + ), + array( + 'name' => '$ids', + 'default' => 'array()', + 'type' => 'array' , + ), + ) + , get_post_meta( $post->ID, '_wp-parser_args', true ) + ); + + $this->assertEquals( + 25 + , get_post_meta( $post->ID, '_wp-parser_line_num', true ) + ); + + $this->assertEquals( + 28 + , get_post_meta( $post->ID, '_wp-parser_end_line_num', true ) + ); + + $this->assertEquals( + array( + array( + 'name' => 'since', + 'content' => '1.4.0', + ), + array( + 'name' => 'param', + 'content' => 'A string variable which is the first parameter.', + 'types' => array( 'string' ), + 'variable' => '$var', + ), + array( + 'name' => 'param', + 'content' => 'An array of user IDs.', + 'types' => array( 'int[]' ), + 'variable' => '$ids', + ), + array( + 'name' => 'return', + 'content' => 'The return type is random. (Not really.)', + 'types' => array( 'mixed' ), + ), + ) + , get_post_meta( $post->ID, '_wp-parser_tags', true ) + ); + } +} From ba31671d7e59f22f31673dda4c4bef8b3887033a Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" <luca@theaveragedev.com> Date: Mon, 29 Sep 2014 15:42:45 +0300 Subject: [PATCH 241/402] added draft test files --- tests/source/actions.php | 122 +++++++++ tests/source/bad_class_doc.php | 33 +++ tests/source/class_method_doc.php | 405 ++++++++++++++++++++++++++++ tests/source/class_property_doc.php | 89 ++++++ tests/source/filters.php | 114 ++++++++ tests/source/functions.php | 158 +++++++++++ tests/source/good_class.php | 83 ++++++ 7 files changed, 1004 insertions(+) create mode 100644 tests/source/actions.php create mode 100644 tests/source/bad_class_doc.php create mode 100644 tests/source/class_method_doc.php create mode 100644 tests/source/class_property_doc.php create mode 100644 tests/source/filters.php create mode 100644 tests/source/functions.php create mode 100644 tests/source/good_class.php diff --git a/tests/source/actions.php b/tests/source/actions.php new file mode 100644 index 000000000..8b0ed93e3 --- /dev/null +++ b/tests/source/actions.php @@ -0,0 +1,122 @@ +<?php + +/** + * This is a well documented action. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action('good_doc_static_action', $option, $old_value, $value); + +/** + * This is a well documented dynamic action. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action('good_doc_dynamic_action_' . $option, $old_value, $value); + +/** + * This is a well documented dynamic action. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action("good_doc_double_quotes_dynamic_action_$option", $old_value, $value); + +/** + * This is an action missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action('missing_since_static_action', $option, $old_value, $value); + +/** + * This is a dynamic action missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action('missing_since_dynamic_action_' .$option, $old_value, $value); + +/** + * This is a dynamic action missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ +do_action("missing_since_double_quotes_dynamic_action_$option", $old_value, $value); + +/** + * This is an action missing a "param" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $value The new option value. + */ +do_action('missing_param_static_action', $option, $old_value, $value); + +/** + * This is a well documented dynamic action. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $value The new option value. + */ +do_action('missing_param_dynamic_action_' .$option, $old_value, $value); + +/** + * This is a well documented dynamic action. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.9.0 + * + * @param string $option Name of the option to update. + * @param mixed $value The new option value. + */ +do_action("missing_param_double_quotes_dynamic_action_$option", $old_value, $value); + +do_action('no_doc_static_action', $option, $old_value, $value); +do_action('no_doc_dynamic_action_' . $option, $old_value, $value); +do_action("no_doc_double_quotes_dymanic_action_$option", $old_value, $value); diff --git a/tests/source/bad_class_doc.php b/tests/source/bad_class_doc.php new file mode 100644 index 000000000..26f3b7d8d --- /dev/null +++ b/tests/source/bad_class_doc.php @@ -0,0 +1,33 @@ +<?php +/** +* WordPress Error class. +* +* Container for checking for WordPress errors and error messages. Return +* WP_Error and use {@link is_wp_error()} to check if this class is returned. +* Many core WordPress functions pass this class in the event of an error and +* if not handled properly will result in code errors. +* +* @package WordPress +*/ +class No_Since_Class { +} + +/** +* WordPress Error class. +* +* Container for checking for WordPress errors and error messages. Return +* WP_Error and use {@link is_wp_error()} to check if this class is returned. +* Many core WordPress functions pass this class in the event of an error and +* if not handled properly will result in code errors. +* +* @since 2.1.0 +*/ +class No_Package_Class { +} + +/** +* @package WordPress +* @since 2.1.0 +*/ +class No_Description_Class { +} \ No newline at end of file diff --git a/tests/source/class_method_doc.php b/tests/source/class_method_doc.php new file mode 100644 index 000000000..8fc39b7f6 --- /dev/null +++ b/tests/source/class_method_doc.php @@ -0,0 +1,405 @@ +<?php +/** +* This is a properly documented class. +* +* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +* Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +* +* @package WordPress +* @since 2.1.0 +*/ +class Various_Method_Docs_Class { + /** + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_description( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_since( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + public function public_method_missing_param( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + public function public_method_missing_return( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_access( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_see( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_link( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_global( $code = '', $message = '', $data = '' ) {} + /** + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_description( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_since( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + protected function protected_method_missing_param( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + protected function protected_method_missing_return( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_access( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_see( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_link( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_global( $code = '', $message = '', $data = '' ) {} + /** + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_description( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_since( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + private function private_method_missing_param( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + private function private_method_missing_return( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_access( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_see( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_link( $code = '', $message = '', $data = '' ) {} + /** + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_global( $code = '', $message = '', $data = '' ) {} +} \ No newline at end of file diff --git a/tests/source/class_property_doc.php b/tests/source/class_property_doc.php new file mode 100644 index 000000000..ea61cef12 --- /dev/null +++ b/tests/source/class_property_doc.php @@ -0,0 +1,89 @@ +<?php +/** +* WordPress Error class. +* +* Container for checking for WordPress errors and error messages. Return +* WP_Error and use {@link is_wp_error()} to check if this class is returned. +* Many core WordPress functions pass this class in the event of an error and +* if not handled properly will result in code errors. +* +* @package WordPress +* @since 2.1.0 +*/ +class Bad_Property_Doc { + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @var array + * @access private + */ + private $private_good_doc_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + * @access private + */ + private $private_missing_description_property = 'string'; + + /** + * Stores the list of errors. + * + * @var array + * @access private + */ + private $private_missing_since_property = 'foo'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @access private + */ + private $private_missing_var_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + */ + private $private_missing_access_property = 'string'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @var array + * @access public + */ + public $public_good_doc_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + * @access public + */ + public $public_missing_description_property = 'string'; + + /** + * Stores the list of errors. + * + * @var array + * @access public + */ + public $public_missing_since_property = 'foo'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @access public + */ + public $public_missing_var_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + */ + public $public_missing_access_property = 'string'; +} \ No newline at end of file diff --git a/tests/source/filters.php b/tests/source/filters.php new file mode 100644 index 000000000..23748202a --- /dev/null +++ b/tests/source/filters.php @@ -0,0 +1,114 @@ +<?php +/** + * This is a well documented filter. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 3.9.0 + * + * @param array $mce_translation Key/value pairs of strings. + * @param string $mce_locale Locale. + */ +$mce_translation = apply_filters('good_static_filter', $mce_translation, $mce_locale); + +/** + * This is a well documented dynamic filter. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.6.0 + * + * @param mixed $value The new, unserialized option value. + * @param mixed $old_value The old option value. + */ +$value = apply_filters('good_dynamic_filter_' . $option, $value, $old_value); + +/** + * This is a well documented dynamic filter. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.6.0 + * + * @param mixed $value The new, unserialized option value. + * @param mixed $old_value The old option value. + */ +$value = apply_filters("good_double_quotes_dynamic_filter_$option", $value, $old_value); + +/** + * This is a filter missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param mixed $value The new, unserialized option value. + * @param string $mce_locale Locale. + */ +$mce_translation = apply_filters('missing_since_static_filter', $mce_translation, $mce_locale); + +/** + * This is a dynamic filter missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param mixed $value The new, unserialized option value. + * @param mixed $old_value The old option value. + */ +$value = apply_filters('missing_since_dynamic_filter_' . $option, $value, $old_value); + +/** + * This is a dynamic filter missing the "since" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @param mixed $value The new, unserialized option value. + * @param mixed $old_value The old option value. + */ +$value = apply_filters("missing_since_double_quotes_dynamic_filter_$option", $value, $old_value); + +/** + * This is a filter missing one "param" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.6.0 + * + * @param string $mce_locale Locale. + */ +$mce_translation = apply_filters('missing_param_static_filter', $mce_translation, $mce_locale); + +/** + * This is a dynamic filter missing one "param" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.6.0 + * + * @param string $mce_locale Locale. + */ +$value = apply_filters('missing_param_dynamic_filter_' . $option, $value, $old_value); + +/** + * This is a dynamic filter missing one "param" line. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.6.0 + * + * @param string $mce_locale Locale. + */ +$value = apply_filters("missing_param_double_quotes_dynamic_filter_$option", $value, $old_value); + +$mce_translation = apply_filters('no_doc_static_filter', $mce_translation, $mce_locale); + +$value = apply_filters('no_doc_dynamic_filter_' . $option, $value, $old_value); + +$value = apply_filters("no_doc_double_quotes_dynamic_filter_$option", $value, $old_value); diff --git a/tests/source/functions.php b/tests/source/functions.php new file mode 100644 index 000000000..fba918168 --- /dev/null +++ b/tests/source/functions.php @@ -0,0 +1,158 @@ +<?php + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function good_doc_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_long_description_function($thing, $var) +{ +} + +/** + * @since 3.9.4 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_description_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_since_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_see_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_link_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @link URL + * + * @param type $thing Description. + * @param type $var Optional. Description. + * @return type Description. + */ +function missing_global_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return type Description. + */ +function missing_param_function($thing, $var) +{ +} + +/** + * Short description. (use period) + * + * Long description. + * + * @since 3.9.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param type $thing Description. + * @param type $var Optional. Description. + */ +function missing_return_function($thing, $var) +{ +} diff --git a/tests/source/good_class.php b/tests/source/good_class.php new file mode 100644 index 000000000..2c5902c80 --- /dev/null +++ b/tests/source/good_class.php @@ -0,0 +1,83 @@ +<?php +/** +* This is a properly documented class. +* + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +* +* @package WordPress +* @since 2.1.0 +*/ +class Good_Doc_Class { + /** + * This is a properly documented private property. + * + * @since 2.1.0 + * @var array + * @access private + */ + private $good_doc_private_property_from_good_doc_class = array(); + + /** + * This is a properly documented protected property. + * + * @since 2.1.0 + * @var array + * @access protected + */ + protected $good_doc_protected_property_from_good_doc_class = array(); + + /** + * This is a properly documented public property. + * + * @since 2.1.0 + * @var array + * @access public + */ + public $good_doc_public_property_from_good_doc_class = array(); + + /** + * This is a properly documented public method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function good_doc_public_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} + + /** + * This is a properly documented protected method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function good_doc_protected_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} + + /** + * This is a properly documented private method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function good_doc_private_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} +} From 91fb7cf06b5c0a61793e3cd0d7d0b916a8918328 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Mon, 29 Sep 2014 15:58:49 +0300 Subject: [PATCH 242/402] Mark all items in a deprecated file as deprecated --- lib/class-importer.php | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 1a47065ad..b0986d107 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -147,10 +147,30 @@ public function import_file( array $file, $skip_sleep = false, $import_internal return; } + // Detect deprecated file + $deprecated_file = false; + if ( isset( $file['uses']['functions'] ) ) { + $first_function = $file['uses']['functions'][0]; + + // If the first function in this file is _deprecated_function + if ( '_deprecated_file' === $first_function['name'] ) { + $contents = file_get_contents( $file['root'] . '/' . $file['path'] ); + $contents = explode( "\n", $contents ); + $contents = $contents[ $first_function['line'] - 1 ]; + + // Match our version number + $contents = preg_match( '#_deprecated_file\(.*, \'(\d\.\d)(\.\d)?\'#', $contents, $matches ); + + // Set the deprecated flag to the version number + $deprecated_file = $matches[1]; + } + } + // Store file meta for later use $this->file_meta = array( - 'docblock' => $file['file'], // File docblock - 'term_id' => $file['path'], // Term name in the file taxonomy is the file name + 'docblock' => $file['file'], // File docblock + 'term_id' => $file['path'], // Term name in the file taxonomy is the file name + 'deprecated' => $deprecated_file, // Deprecation status ); // Functions @@ -319,7 +339,7 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte /** * Updates the 'wp_parser_imported_wp_version' option with the version from wp-includes/version.php. - * + * * @param array $data Data */ protected function import_version( $data ) { @@ -549,6 +569,11 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $anything_updated[] = true; } + // If the file is deprecated do something + if ( ! empty( $this->file_meta['deprecated'] ) ) { + $data['doc']['tags']['deprecated'] = $this->file_meta['deprecated']; + } + if ( $post_data['post_type'] !== $this->post_type_class ) { $anything_updated[] = update_post_meta( $ID, '_wp-parser_args', $data['arguments'] ); } From c6cb98a26573a04e3958b6eab2617346120606fb Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Mon, 29 Sep 2014 17:50:15 +0300 Subject: [PATCH 243/402] Use the function call reflection to determine the version --- lib/class-importer.php | 8 +------- lib/runner.php | 10 +++++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index b0986d107..1798a42e6 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -154,15 +154,9 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // If the first function in this file is _deprecated_function if ( '_deprecated_file' === $first_function['name'] ) { - $contents = file_get_contents( $file['root'] . '/' . $file['path'] ); - $contents = explode( "\n", $contents ); - $contents = $contents[ $first_function['line'] - 1 ]; - - // Match our version number - $contents = preg_match( '#_deprecated_file\(.*, \'(\d\.\d)(\.\d)?\'#', $contents, $matches ); // Set the deprecated flag to the version number - $deprecated_file = $matches[1]; + $deprecated_file = $first_function['deprecation_version']; } } diff --git a/lib/runner.php b/lib/runner.php index bb6f8f175..afe8ffe63 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -255,11 +255,19 @@ function export_uses( array $uses ) { foreach ( $uses as $type => $used_elements ) { foreach ( $used_elements as $element ) { + $name = $element->getName(); + $out[ $type ][] = array( - 'name' => $element->getName(), + 'name' => $name, 'line' => $element->getLineNumber(), 'end_line' => $element->getNode()->getAttribute( 'endLine' ), ); + + if ( '_deprecated_file' === $name || '_deprecated_function' === $name || '_deprecated_argument' === $name ) { + $arguments = $element->getNode()->args; + + $out[ $type ][0]['deprecation_version'] = $arguments[1]->value->value; + } } } From fe4b9dbb03d44db388f2930761d4d185348f0114 Mon Sep 17 00:00:00 2001 From: "theAverageDev (Luca Tumedei)" <luca@theaveragedev.com> Date: Tue, 30 Sep 2014 14:31:58 +0300 Subject: [PATCH 244/402] modified comment indentation and file names --- tests/source/actions.php | 70 +-- tests/source/bad-class-doc.php | 37 ++ tests/source/bad_class_doc.php | 33 -- tests/source/class-property-doc.php | 91 +++ tests/source/class_method_doc.php | 829 +++++++++++++++------------- tests/source/class_property_doc.php | 89 --- tests/source/filters.php | 36 +- tests/source/good-class.php | 91 +++ tests/source/good_class.php | 83 --- 9 files changed, 723 insertions(+), 636 deletions(-) create mode 100644 tests/source/bad-class-doc.php delete mode 100644 tests/source/bad_class_doc.php create mode 100644 tests/source/class-property-doc.php delete mode 100644 tests/source/class_property_doc.php create mode 100644 tests/source/good-class.php delete mode 100644 tests/source/good_class.php diff --git a/tests/source/actions.php b/tests/source/actions.php index 8b0ed93e3..c28c32d83 100644 --- a/tests/source/actions.php +++ b/tests/source/actions.php @@ -2,118 +2,118 @@ /** * This is a well documented action. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ do_action('good_doc_static_action', $option, $old_value, $value); /** * This is a well documented dynamic action. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ do_action('good_doc_dynamic_action_' . $option, $old_value, $value); /** * This is a well documented dynamic action. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ do_action("good_doc_double_quotes_dynamic_action_$option", $old_value, $value); /** * This is an action missing the "since" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ do_action('missing_since_static_action', $option, $old_value, $value); /** * This is a dynamic action missing the "since" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ -do_action('missing_since_dynamic_action_' .$option, $old_value, $value); +do_action('missing_since_dynamic_action_' . $option, $old_value, $value); /** * This is a dynamic action missing the "since" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param string $option Name of the option to update. - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. */ do_action("missing_since_double_quotes_dynamic_action_$option", $old_value, $value); /** * This is an action missing a "param" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $value The new option value. */ do_action('missing_param_static_action', $option, $old_value, $value); /** * This is a well documented dynamic action. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $value The new option value. */ -do_action('missing_param_dynamic_action_' .$option, $old_value, $value); +do_action('missing_param_dynamic_action_' . $option, $old_value, $value); /** * This is a well documented dynamic action. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.9.0 * - * @param string $option Name of the option to update. - * @param mixed $value The new option value. + * @param string $option Name of the option to update. + * @param mixed $value The new option value. */ do_action("missing_param_double_quotes_dynamic_action_$option", $old_value, $value); diff --git a/tests/source/bad-class-doc.php b/tests/source/bad-class-doc.php new file mode 100644 index 000000000..076fa0764 --- /dev/null +++ b/tests/source/bad-class-doc.php @@ -0,0 +1,37 @@ +<?php + +/** + * WordPress Error class. + * + * Container for checking for WordPress errors and error messages. Return + * WP_Error and use {@link is_wp_error()} to check if this class is returned. + * Many core WordPress functions pass this class in the event of an error and + * if not handled properly will result in code errors. + * + * @package WordPress + */ +class No_Since_Class +{ +} + +/** + * WordPress Error class. + * + * Container for checking for WordPress errors and error messages. Return + * WP_Error and use {@link is_wp_error()} to check if this class is returned. + * Many core WordPress functions pass this class in the event of an error and + * if not handled properly will result in code errors. + * + * @since 2.1.0 + */ +class No_Package_Class +{ +} + +/** + * @package WordPress + * @since 2.1.0 + */ +class No_Description_Class +{ +} \ No newline at end of file diff --git a/tests/source/bad_class_doc.php b/tests/source/bad_class_doc.php deleted file mode 100644 index 26f3b7d8d..000000000 --- a/tests/source/bad_class_doc.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** -* WordPress Error class. -* -* Container for checking for WordPress errors and error messages. Return -* WP_Error and use {@link is_wp_error()} to check if this class is returned. -* Many core WordPress functions pass this class in the event of an error and -* if not handled properly will result in code errors. -* -* @package WordPress -*/ -class No_Since_Class { -} - -/** -* WordPress Error class. -* -* Container for checking for WordPress errors and error messages. Return -* WP_Error and use {@link is_wp_error()} to check if this class is returned. -* Many core WordPress functions pass this class in the event of an error and -* if not handled properly will result in code errors. -* -* @since 2.1.0 -*/ -class No_Package_Class { -} - -/** -* @package WordPress -* @since 2.1.0 -*/ -class No_Description_Class { -} \ No newline at end of file diff --git a/tests/source/class-property-doc.php b/tests/source/class-property-doc.php new file mode 100644 index 000000000..141b16cb5 --- /dev/null +++ b/tests/source/class-property-doc.php @@ -0,0 +1,91 @@ +<?php + +/** + * WordPress Error class. + * + * Container for checking for WordPress errors and error messages. Return + * WP_Error and use {@link is_wp_error()} to check if this class is returned. + * Many core WordPress functions pass this class in the event of an error and + * if not handled properly will result in code errors. + * + * @package WordPress + * @since 2.1.0 + */ +class Bad_Property_Doc +{ + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @var array + * @access private + */ + private $private_good_doc_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + * @access private + */ + private $private_missing_description_property = 'string'; + + /** + * Stores the list of errors. + * + * @var array + * @access private + */ + private $private_missing_since_property = 'foo'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @access private + */ + private $private_missing_var_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + */ + private $private_missing_access_property = 'string'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @var array + * @access public + */ + public $public_good_doc_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + * @access public + */ + public $public_missing_description_property = 'string'; + + /** + * Stores the list of errors. + * + * @var array + * @access public + */ + public $public_missing_since_property = 'foo'; + + /** + * Stores the list of errors. + * + * @since 2.1.0 + * @access public + */ + public $public_missing_var_property = 'foo'; + + /** + * @since 2.1.0 + * @var array + */ + public $public_missing_access_property = 'string'; +} \ No newline at end of file diff --git a/tests/source/class_method_doc.php b/tests/source/class_method_doc.php index 8fc39b7f6..60944b9a5 100644 --- a/tests/source/class_method_doc.php +++ b/tests/source/class_method_doc.php @@ -1,405 +1,478 @@ <?php + /** -* This is a properly documented class. -* -* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. -* Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -* -* @package WordPress -* @since 2.1.0 -*/ -class Various_Method_Docs_Class { + * This is a properly documented class. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @package WordPress + * @since 2.1.0 + */ +class Various_Method_Docs_Class +{ /** - * @since 2.1.0 - * @access public - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_description( $code = '', $message = '', $data = '' ) {} + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_description($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @access public - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_since( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_since($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access public - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @return WP_Error - */ - public function public_method_missing_param( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + public function public_method_missing_param($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access public - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - */ - public function public_method_missing_return( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + public function public_method_missing_return($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_access( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_access($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access public - * - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_see( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_see($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access public - * - * @see Function/method/class relied on - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_link( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_link($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access public - * - * @see Function/method/class relied on - * @link URL - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function public_method_missing_global( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access public + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function public_method_missing_global($code = '', $message = '', $data = '') + { + } + /** - * @since 2.1.0 - * @access protected - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_description( $code = '', $message = '', $data = '' ) {} + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_description($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @access protected - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_since( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_since($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access protected - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @return WP_Error - */ - protected function protected_method_missing_param( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + protected function protected_method_missing_param($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access protected - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - */ - protected function protected_method_missing_return( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + protected function protected_method_missing_return($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_access( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_access($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access protected - * - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_see( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_see($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access protected - * - * @see Function/method/class relied on - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_link( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_link($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access protected - * - * @see Function/method/class relied on - * @link URL - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function protected_method_missing_global( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access protected + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function protected_method_missing_global($code = '', $message = '', $data = '') + { + } + /** - * @since 2.1.0 - * @access private - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_description( $code = '', $message = '', $data = '' ) {} + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_description($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @access private - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_since( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_since($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access private - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @return WP_Error - */ - private function private_method_missing_param( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @return WP_Error + */ + private function private_method_missing_param($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access private - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - */ - private function private_method_missing_return( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + */ + private function private_method_missing_return($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * - * @see Function/method/class relied on - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_access( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * + * @see Function/method/class relied on + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_access($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access private - * - * @link URL - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_see( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @link URL + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_see($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access private - * - * @see Function/method/class relied on - * @global type $varname Short description. - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_link( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @global type $varname Short description. + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_link($code = '', $message = '', $data = '') + { + } + /** - * Short description. - * - * Long description. - * - * @since 2.1.0 - * @access private - * - * @see Function/method/class relied on - * @link URL - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function private_method_missing_global( $code = '', $message = '', $data = '' ) {} + * Short description. + * + * Long description. + * + * @since 2.1.0 + * @access private + * + * @see Function/method/class relied on + * @link URL + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function private_method_missing_global($code = '', $message = '', $data = '') + { + } } \ No newline at end of file diff --git a/tests/source/class_property_doc.php b/tests/source/class_property_doc.php deleted file mode 100644 index ea61cef12..000000000 --- a/tests/source/class_property_doc.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** -* WordPress Error class. -* -* Container for checking for WordPress errors and error messages. Return -* WP_Error and use {@link is_wp_error()} to check if this class is returned. -* Many core WordPress functions pass this class in the event of an error and -* if not handled properly will result in code errors. -* -* @package WordPress -* @since 2.1.0 -*/ -class Bad_Property_Doc { - /** - * Stores the list of errors. - * - * @since 2.1.0 - * @var array - * @access private - */ - private $private_good_doc_property = 'foo'; - - /** - * @since 2.1.0 - * @var array - * @access private - */ - private $private_missing_description_property = 'string'; - - /** - * Stores the list of errors. - * - * @var array - * @access private - */ - private $private_missing_since_property = 'foo'; - - /** - * Stores the list of errors. - * - * @since 2.1.0 - * @access private - */ - private $private_missing_var_property = 'foo'; - - /** - * @since 2.1.0 - * @var array - */ - private $private_missing_access_property = 'string'; - - /** - * Stores the list of errors. - * - * @since 2.1.0 - * @var array - * @access public - */ - public $public_good_doc_property = 'foo'; - - /** - * @since 2.1.0 - * @var array - * @access public - */ - public $public_missing_description_property = 'string'; - - /** - * Stores the list of errors. - * - * @var array - * @access public - */ - public $public_missing_since_property = 'foo'; - - /** - * Stores the list of errors. - * - * @since 2.1.0 - * @access public - */ - public $public_missing_var_property = 'foo'; - - /** - * @since 2.1.0 - * @var array - */ - public $public_missing_access_property = 'string'; -} \ No newline at end of file diff --git a/tests/source/filters.php b/tests/source/filters.php index 23748202a..6c450ad11 100644 --- a/tests/source/filters.php +++ b/tests/source/filters.php @@ -1,14 +1,14 @@ <?php /** * This is a well documented filter. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - * + * * @since 3.9.0 * - * @param array $mce_translation Key/value pairs of strings. - * @param string $mce_locale Locale. + * @param array $mce_translation Key/value pairs of strings. + * @param string $mce_locale Locale. */ $mce_translation = apply_filters('good_static_filter', $mce_translation, $mce_locale); @@ -20,7 +20,7 @@ * * @since 2.6.0 * - * @param mixed $value The new, unserialized option value. + * @param mixed $value The new, unserialized option value. * @param mixed $old_value The old option value. */ $value = apply_filters('good_dynamic_filter_' . $option, $value, $old_value); @@ -33,19 +33,19 @@ * * @since 2.6.0 * - * @param mixed $value The new, unserialized option value. + * @param mixed $value The new, unserialized option value. * @param mixed $old_value The old option value. */ $value = apply_filters("good_double_quotes_dynamic_filter_$option", $value, $old_value); /** * This is a filter missing the "since" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param mixed $value The new, unserialized option value. - * @param string $mce_locale Locale. + * @param mixed $value The new, unserialized option value. + * @param string $mce_locale Locale. */ $mce_translation = apply_filters('missing_since_static_filter', $mce_translation, $mce_locale); @@ -55,7 +55,7 @@ * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param mixed $value The new, unserialized option value. + * @param mixed $value The new, unserialized option value. * @param mixed $old_value The old option value. */ $value = apply_filters('missing_since_dynamic_filter_' . $option, $value, $old_value); @@ -66,20 +66,20 @@ * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * - * @param mixed $value The new, unserialized option value. + * @param mixed $value The new, unserialized option value. * @param mixed $old_value The old option value. */ $value = apply_filters("missing_since_double_quotes_dynamic_filter_$option", $value, $old_value); /** * This is a filter missing one "param" line. - * + * * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.6.0 - * - * @param string $mce_locale Locale. + * + * @param string $mce_locale Locale. */ $mce_translation = apply_filters('missing_param_static_filter', $mce_translation, $mce_locale); @@ -90,8 +90,8 @@ * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.6.0 - * - * @param string $mce_locale Locale. + * + * @param string $mce_locale Locale. */ $value = apply_filters('missing_param_dynamic_filter_' . $option, $value, $old_value); @@ -102,8 +102,8 @@ * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. * * @since 2.6.0 - * - * @param string $mce_locale Locale. + * + * @param string $mce_locale Locale. */ $value = apply_filters("missing_param_double_quotes_dynamic_filter_$option", $value, $old_value); diff --git a/tests/source/good-class.php b/tests/source/good-class.php new file mode 100644 index 000000000..3485bdffd --- /dev/null +++ b/tests/source/good-class.php @@ -0,0 +1,91 @@ +<?php + +/** + * This is a properly documented class. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @package WordPress + * @since 2.1.0 + */ +class Good_Doc_Class +{ + /** + * This is a properly documented private property. + * + * @since 2.1.0 + * @var array + * @access private + */ + private $good_doc_private_property_from_good_doc_class = array(); + + /** + * This is a properly documented protected property. + * + * @since 2.1.0 + * @var array + * @access protected + */ + protected $good_doc_protected_property_from_good_doc_class = array(); + + /** + * This is a properly documented public property. + * + * @since 2.1.0 + * @var array + * @access public + */ + public $good_doc_public_property_from_good_doc_class = array(); + + /** + * This is a properly documented public method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + public function good_doc_public_method_from_good_doc_class($code = '', $message = '', $data = '') + { + } + + /** + * This is a properly documented protected method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + protected function good_doc_protected_method_from_good_doc_class($code = '', $message = '', $data = '') + { + } + + /** + * This is a properly documented private method. + * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * + * @since 2.1.0 + * + * @param string|int $code Error code + * @param string $message Error message + * @param mixed $data Optional. Error data. + * @return WP_Error + */ + private function good_doc_private_method_from_good_doc_class($code = '', $message = '', $data = '') + { + } +} diff --git a/tests/source/good_class.php b/tests/source/good_class.php deleted file mode 100644 index 2c5902c80..000000000 --- a/tests/source/good_class.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -/** -* This is a properly documented class. -* - * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -* -* @package WordPress -* @since 2.1.0 -*/ -class Good_Doc_Class { - /** - * This is a properly documented private property. - * - * @since 2.1.0 - * @var array - * @access private - */ - private $good_doc_private_property_from_good_doc_class = array(); - - /** - * This is a properly documented protected property. - * - * @since 2.1.0 - * @var array - * @access protected - */ - protected $good_doc_protected_property_from_good_doc_class = array(); - - /** - * This is a properly documented public property. - * - * @since 2.1.0 - * @var array - * @access public - */ - public $good_doc_public_property_from_good_doc_class = array(); - - /** - * This is a properly documented public method. - * - * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - * - * @since 2.1.0 - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - public function good_doc_public_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} - - /** - * This is a properly documented protected method. - * - * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - * - * @since 2.1.0 - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - protected function good_doc_protected_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} - - /** - * This is a properly documented private method. - * - * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - * - * @since 2.1.0 - * - * @param string|int $code Error code - * @param string $message Error message - * @param mixed $data Optional. Error data. - * @return WP_Error - */ - private function good_doc_private_method_from_good_doc_class( $code = '', $message = '', $data = '' ) {} -} From 04cfd611c739db63e175e4b2b7762dd2e0c04609 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Sun, 5 Oct 2014 13:54:41 +0200 Subject: [PATCH 245/402] Prevent an error when parsing test files When parsing test files there was an error that $m[3] didn't exist, check for that. $m[1] will always exist even though it is optional because of PHP's handling of preg_match. Also improves clarity for the next reader. --- lib/class-hook-reflector.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 977926d27..99f785a1d 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -21,8 +21,17 @@ private function cleanupName( $name ) { } // two concatenated things, last one of them a variable - if ( preg_match( '/(?:[\'"]([^\'"]*)[\'"]\s*\.\s*)?(\$[^\s]*)(?:\s*\.\s*[\'"]([^\'"]*)[\'"])?/', $name, $m ) ) { - return $m[1].'{'.$m[2].'}'.$m[3]; + if ( preg_match( + '/(?:[\'"]([^\'"]*)[\'"]\s*\.\s*)?' . // First filter name string (optional) + '(\$[^\s]*)' . // Dynamic variable + '(?:\s*\.\s*[\'"]([^\'"]*)[\'"])?/', // Second filter name string (optional) + $name, $m ) ) { + + if ( isset( $m[3] ) ) { + return $m[1] . '{' . $m[2] . '}' . $m[3]; + } else { + return $m[1] . '{' . $m[2] . '}'; + } } return $name; From 67e2b45d39dee6f87cb17a34df88991dc6fdbe3d Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Sun, 5 Oct 2014 14:19:00 +0200 Subject: [PATCH 246/402] Add deprecated file to test for that functionality --- tests/source/deprecated-file.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/source/deprecated-file.php diff --git a/tests/source/deprecated-file.php b/tests/source/deprecated-file.php new file mode 100644 index 000000000..851aa1bb4 --- /dev/null +++ b/tests/source/deprecated-file.php @@ -0,0 +1,30 @@ +<?php +_deprecated_file( 'deprecated-file.php', '1.0' ); + +/** +* This class should be marked as deprecated since 1.0 +*/ +class Should_Be_Deprectated { + + /** + * This method should be marked as deprecated since 1.0 + */ + public function should_be_deprecated() {} +} + +/** +* This function should be marked as deprecated since 1.0 +*/ +function should_be_deprecated() {} + +/** +* This filter should be marked as deprecated since 1.0 +*/ +$var = apply_filters( 'deprecated_filter', $var ); + +/** +* This action should be marked as deprecated since 1.0 +*/ +do_action( 'deprecated_action' ); + +?> \ No newline at end of file From ca012d17669d70000810d080ffc5eb54fadd7c2b Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Sun, 5 Oct 2014 15:26:24 +0200 Subject: [PATCH 247/402] Remove minimum-stability and include UI-less p2p Instead of requiring only dev for all packages only specify it for p2p. Instead of including posts to posts with the UI we only include the core. --- composer.json | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index 5a67c8104..d66cdb05c 100644 --- a/composer.json +++ b/composer.json @@ -15,24 +15,22 @@ "issues": "https://github.com/rmccue/WP-Parser/issues", "source": "https://github.com/rmccue/WP-Parser" }, - "minimum-stability": "dev", "require" : { - "php" : ">=5.3.6", - "composer/installers" : "~1.0", - "phpdocumentor/reflection": "~1.0", - "erusev/parsedown" : "~0.9", - "scribu/posts-to-posts" : "dev-master" + "php" : ">=5.3.6", + "composer/installers" : "~1.0", + "phpdocumentor/reflection" : "~1.0", + "erusev/parsedown" : "~0.9", + "scribu/lib-posts-to-posts": "dev-master@dev", + "scribu/scb-framework" : "dev-master@dev" }, "autoload" : { "classmap": ["lib"], "files" : ["lib/runner.php", "lib/template.php"] }, "repositories": [ - { "type": "vcs", "url": "https://github.com/scribu/wp-posts-to-posts.git" } - ], - "extra": { - "installer-paths": { - "vendor/scribu/posts-to-posts": ["scribu/posts-to-posts"] + { + "type": "vcs", + "url": "https://github.com/scribu/wp-lib-posts-to-posts" } - } -} + ] +} \ No newline at end of file From cef80335a21a0cbc283a3a5e88b3d8de644294f8 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Tue, 7 Oct 2014 22:06:00 +0200 Subject: [PATCH 248/402] Make P2P work while only including p2p core --- lib/class-relationships.php | 10 ++++++---- plugin.php | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index e8e133fff..43051914e 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -35,7 +35,7 @@ class Relationships { public function __construct() { add_action( 'plugins_loaded', array( $this, 'require_posts_to_posts' ) ); - add_action( 'p2p_init', array( $this, 'register_post_relationships' ) ); + add_action( 'wp_loaded', array( $this, 'register_post_relationships' ) ); add_action( 'wp_parser_import_item', array( $this, 'import_item' ), 10, 3 ); add_action( 'wp_parser_starting_import', array( $this, 'wp_parser_starting_import' ) ); @@ -46,9 +46,11 @@ public function __construct() { * Load the posts2posts from the composer package if it is not loaded already. */ public function require_posts_to_posts() { - if ( ! function_exists( 'p2p_register_connection_type' ) ) { - require dirname( __DIR__ ) . '/vendor/scribu/posts-to-posts/posts-to-posts.php'; - } + // Initializes the database tables + \P2P_Storage::init(); + + // Initializes the query mechanism + \P2P_Query_Post::init(); } /** diff --git a/plugin.php b/plugin.php index ca5e80e22..fc1f6e250 100644 --- a/plugin.php +++ b/plugin.php @@ -15,3 +15,7 @@ global $wp_parser; $wp_parser = new WP_Parser\Plugin(); $wp_parser->on_load(); + +register_activation_hook( __FILE__, array( 'P2P_Storage', 'init' ) ); +register_activation_hook( __FILE__, array( 'P2P_Storage', 'install' ) ); +register_uninstall_hook( __FILE__, array( 'P2P_Storage', 'uninstall' ) ); \ No newline at end of file From d108e44b3198b32f2cbf0946110bad1d3b6c5e84 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Wed, 8 Oct 2014 00:19:17 +0200 Subject: [PATCH 249/402] Remove current relationships if they exist --- lib/class-relationships.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 43051914e..938bc8ad6 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -169,7 +169,17 @@ public function import_item( $ID, $data, $post_data ) { public function wp_parser_ending_import() { if ( defined( 'WP_CLI' ) && WP_CLI ) { - WP_CLI::line( 'Setting up relationships...' ); + WP_CLI::log( 'Removing current relationships...' ); + } + + p2p_delete_connections( 'functions_to_functions' ); + p2p_delete_connections( 'functions_to_methods' ); + p2p_delete_connections( 'functions_to_hooks' ); + p2p_delete_connections( 'methods_to_methods' ); + p2p_delete_connections( 'methods_to_hooks' ); + + if ( defined( 'WP_CLI' ) && WP_CLI ) { + WP_CLI::log( 'Setting up relationships...' ); } // Iterate over post types being related FROM: functions, methods, and hooks From 4fcf64010805689cdbc92cd8f030750b2233ca80 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Wed, 8 Oct 2014 00:19:40 +0200 Subject: [PATCH 250/402] Fix a bug that prevent functions_to_hooks from working --- lib/class-relationships.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 938bc8ad6..c1ad6f60e 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -190,7 +190,7 @@ public function wp_parser_ending_import() { // Iterate over slugs for each post type being related TO foreach ( $to_types as $to_type => $to_slugs ) { // Convert slugs to IDs. - $this->relationships[ $from_type ][ $from_id ][ $to_type ] = $this->get_ids_for_slugs( $to_slugs, $this->slugs_to_ids[ $from_type ] ); + $this->relationships[ $from_type ][ $from_id ][ $to_type ] = $this->get_ids_for_slugs( $to_slugs, $this->slugs_to_ids[ $to_type ] ); } } From 138352ff5d8e22206b8407b231e7ce760b4f3b5f Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Wed, 8 Oct 2014 21:06:57 +0200 Subject: [PATCH 251/402] Fix functions_to_hooks relationships --- lib/class-relationships.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index c1ad6f60e..5c7a47eaa 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -155,7 +155,7 @@ public function import_item( $ID, $data, $post_data ) { // Functions to Hooks $to_type = $this->post_types['hook']; - foreach ( (array) @$data['uses']['hooks'] as $to_hook ) { + foreach ( (array) @$data['hooks'] as $to_hook ) { $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; } From 57bf9c63ade62433f97d97f62127581931b1f10c Mon Sep 17 00:00:00 2001 From: Anton Timmermans <atimmermans@exed.nl> Date: Sat, 11 Oct 2014 01:02:08 +0200 Subject: [PATCH 252/402] Implement method calls relationships - Add a method call reflector to reflect a method call. - Put the used methods in the exported phpdoc. - Put the used methods in functions as a functions_to_methods relationship. --- lib/class-file-reflector.php | 18 ++++ lib/class-method-call-reflector.php | 141 ++++++++++++++++++++++++++++ lib/class-relationships.php | 12 ++- lib/runner.php | 28 +++++- 4 files changed, 193 insertions(+), 6 deletions(-) create mode 100644 lib/class-method-call-reflector.php diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index e43a3e5a4..944f6b30f 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -114,6 +114,24 @@ public function enterNode( \PHPParser_Node $node ) { } } break; + + case 'Expr_StaticCall': + case 'Expr_MethodCall': + $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + + /* + * If the method call is in the global scope, add it to the + * file's method calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['methods'][] = $method; + } else { + $this->uses_queue['methods'][] = $method; + } + + break; + } // Pick up DocBlock from non-documentable elements so that it can be assigned diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php new file mode 100644 index 000000000..b485818bc --- /dev/null +++ b/lib/class-method-call-reflector.php @@ -0,0 +1,141 @@ +<?php + +/** + * A reflection class for a method call, either static or non-static + */ + +namespace WP_Parser; + +use phpDocumentor\Reflection\BaseReflector; + +/** + * A reflection of a function call expression. + */ +class Method_Call_Reflector extends BaseReflector { + + /** + * Returns the name for this Reflector instance. + * + * @return string + */ + public function getName() { + if ( isset( $this->node->namespacedName ) ) { + return '\\' . implode( '\\', $this->node->namespacedName->parts ); + } + + $shortName = $this->getShortName(); + + if ( ! is_a( $shortName, 'PHPParser_Node_Name' ) ) { + + /** @var \PHPParser_Node_Expr_ArrayDimFetch $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_ArrayDimFetch' ) ) { + $var = $shortName->var->name; + $dim = $shortName->dim->name->parts[0]; + + return "\${$var}[{$dim}]"; + } + + /** @var \PHPParser_Node_Expr_Variable $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_Variable' ) ) { + return $shortName->name; + } + } + + return (string) $shortName; + } + + /** + * Returns the name of the class this method is called on. + * + * @return string + */ + public function getCalledOn() { + if ( is_a( $this->node, 'PHPParser_Node_Expr_StaticCall' ) ) { + $calledOn = $this->node->class->parts[0]; + } else if ( is_a( $this->node, 'PHPParser_Node_Expr_MethodCall' ) ) { + $calledOn = $this->node->var; + + // This is actually a variable name + $calledOn = $calledOn->name; + } + + return $calledOn; + } + + /** + * Returns the class this method exists on if it can be determined + * + * @return string The class this method exists on + */ + public function getClass() { + $called_on = $this->getCalledOn(); + + if ( $this->isStatic() ) { + $class = $called_on; + } else { + $class_mapping = $this->_getClassMapping(); + + if ( array_key_exists( $called_on, $class_mapping ) ) { + $class = $class_mapping[ $called_on ]; + } else { + $class = ''; + } + } + + return $class; + } + + /** + * Returns a mapping from variable names to a class name, leverages globals for most used classes + * + * @return array Class mapping to map variable names to classes + */ + protected function _getClassMapping() { + + // List of global use generated using following command: + // ack "global \\\$[^;]+;" --no-filename | tr -d '\t' | sort | uniq | sed "s/global //g" | sed "s/, /,/g" | tr , '\n' | sed "s/;//g" | sort | uniq | sed "s/\\\$//g" | sed "s/[^ ][^ ]*/'&' => ''/g" + // There is probably an easier way, there are currently no globals that are classes starting with an underscore + $wp_globals = array( + 'authordata' => 'WP_User', + 'custom_background' => 'Custom_Background', + 'custom_image_header' => 'Custom_Image_Header', + 'phpmailer' => 'PHPMailer', + 'post' => 'WP_Post', + 'userdata' => 'WP_User', // This can also be stdClass, but you can't call methods on an stdClass + 'wp' => 'WP', + 'wp_admin_bar' => 'WP_Admin_Bar', + 'wp_customize' => 'WP_Customize_Manager', + 'wp_embed' => 'WP_Embed', + 'wp_filesystem' => 'WP_Filesystem', + 'wp_hasher' => 'PasswordHash', // This can be overridden by plugins, for core assume this is ours + 'wp_json' => 'Services_JSON', + 'wp_list_table' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table + 'wp_locale' => 'WP_Locale', + 'wp_object_cache' => 'WP_Object_Cache', + 'wp_query' => 'WP_Query', + 'wp_rewrite' => 'WP_Rewrite', + 'wp_roles' => 'WP_Roles', + 'wp_scripts' => 'WP_Scripts', + 'wp_styles' => 'WP_Styles', + 'wp_the_query' => 'WP_Query', + 'wp_widget_factory' => 'WP_Widget_Factory', + 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours + 'wpdb' => 'wpdb', + + 'class' => 'CrazyClass', + ); + + $class_mapping = $wp_globals; + + return $class_mapping; + } + + /** + * Returns whether or not this method call was static + * + * @return boolean Whether or not this method call is a static call + */ + public function isStatic() { + return is_a( $this->node, 'PHPParser_Node_Expr_StaticCall' ); + } +} diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 5c7a47eaa..2b616155f 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -143,13 +143,22 @@ public function import_item( $ID, $data, $post_data ) { $to_type = $this->post_types['function']; foreach ( (array) @$data['uses']['functions'] as $to_function ) { $to_function_slug = $this->name_to_slug( $to_function['name'] ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_function_slug; } // Functions to Methods $to_type = $this->post_types['method']; foreach ( (array) @$data['uses']['methods'] as $to_method ) { - $to_method_slug = $this->name_to_slug( $to_method['name'] ); + + if ( $to_method['static'] || ! empty( $to_method['class'] ) ) { + $to_method_slug = $to_method['class'] . '-' . $to_method['name']; + } else { + + $to_method_slug = $to_method['name']; + } + $to_method_slug = $this->name_to_slug( $to_method_slug ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_method_slug; } @@ -157,6 +166,7 @@ public function import_item( $ID, $data, $post_data ) { $to_type = $this->post_types['hook']; foreach ( (array) @$data['hooks'] as $to_hook ) { $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; } } diff --git a/lib/runner.php b/lib/runner.php index 4b0681973..edff90360 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -255,11 +255,29 @@ function export_uses( array $uses ) { foreach ( $uses as $type => $used_elements ) { foreach ( $used_elements as $element ) { - $out[ $type ][] = array( - 'name' => $element->getName(), - 'line' => $element->getLineNumber(), - 'end_line' => $element->getNode()->getAttribute( 'endLine' ), - ); + + switch ( $type ) { + case 'methods': + $out[ $type ][] = array( + 'name' => $element->getName(), + 'called_on' => $element->getCalledOn(), + 'class' => $element->getClass(), + 'static' => $element->isStatic(), + 'line' => $element->getLineNumber(), + 'end_line' => $element->getNode()->getAttribute( 'endLine' ), + ); + break; + + default: + case 'functions': + $out[ $type ][] = array( + 'name' => $element->getName(), + 'line' => $element->getLineNumber(), + 'end_line' => $element->getNode()->getAttribute( 'endLine' ), + ); + + break; + } } } From f7dac2405d08d7270741e4d986e8325d54ae8669 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 14:43:29 +0200 Subject: [PATCH 253/402] Add methods_to_x relationships - Add methods_to_functions because it should be unique from functions_to_methods. - Chang references to self and $this to the correct classname - Put the things a method uses into the database as a p2p relationship --- lib/class-file-reflector.php | 7 +++ lib/class-method-call-reflector.php | 12 ++-- lib/class-relationships.php | 92 ++++++++++++++++++++++++++--- 3 files changed, 100 insertions(+), 11 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 944f6b30f..58104bde3 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -119,6 +119,13 @@ public function enterNode( \PHPParser_Node $node ) { case 'Expr_MethodCall': $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + // If we are in a class method we might need the class we are in at this moment + if ( 'Stmt_ClassMethod' === $this->getLocation()->getType() ) { + $class = $this->location[ count( $this->location ) - 2 ]; + + $node->setAttribute( 'containingClass', $class->name ); + } + /* * If the method call is in the global scope, add it to the * file's method calls. Otherwise, add it to the queue so it diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index b485818bc..ee6636305 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -71,11 +71,17 @@ public function getClass() { $called_on = $this->getCalledOn(); if ( $this->isStatic() ) { - $class = $called_on; + if ( 'self' === $called_on ) { + $class = $this->node->getAttribute( 'containingClass' ); + } else { + $class = $called_on; + } } else { $class_mapping = $this->_getClassMapping(); - if ( array_key_exists( $called_on, $class_mapping ) ) { + if ( 'this' === $called_on ) { + $class = $this->node->getAttribute( 'containingClass' ); + } else if ( array_key_exists( $called_on, $class_mapping ) ) { $class = $class_mapping[ $called_on ]; } else { $class = ''; @@ -121,8 +127,6 @@ protected function _getClassMapping() { 'wp_widget_factory' => 'WP_Widget_Factory', 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours 'wpdb' => 'wpdb', - - 'class' => 'CrazyClass', ); $class_mapping = $wp_globals; diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 2b616155f..4dacaa3ef 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -64,7 +64,9 @@ public function require_posts_to_posts() { */ public function register_post_relationships() { - // Functions <--> Functions + /* + * Functions to functions, methods and hooks + */ p2p_register_connection_type( array( 'name' => 'functions_to_functions', 'from' => 'wp-parser-function', @@ -73,7 +75,6 @@ public function register_post_relationships() { 'title' => array( 'from' => 'Uses Functions', 'to' => 'Used by Functions' ), ) ); - // Functions --> Methods p2p_register_connection_type( array( 'name' => 'functions_to_methods', 'from' => 'wp-parser-function', @@ -81,7 +82,6 @@ public function register_post_relationships() { 'title' => array( 'from' => 'Uses Methods', 'to' => 'Used by Functions' ), ) ); - // Functions <--> Hooks p2p_register_connection_type( array( 'name' => 'functions_to_hooks', 'from' => 'wp-parser-function', @@ -89,7 +89,16 @@ public function register_post_relationships() { 'title' => array( 'from' => 'Uses Hooks', 'to' => 'Used by Functions' ), ) ); - // Methods <--> Methods + /* + * Methods to functions, methods and hooks + */ + p2p_register_connection_type( array( + 'name' => 'methods_to_functions', + 'from' => 'wp-parser-method', + 'to' => 'wp-parser-function', + 'title' => array( 'from' => 'Uses Functions', 'to' => 'Used by Methods' ), + ) ); + p2p_register_connection_type( array( 'name' => 'methods_to_methods', 'from' => 'wp-parser-method', @@ -97,7 +106,6 @@ public function register_post_relationships() { 'title' => array( 'from' => 'Uses Methods', 'to' => 'Used by Methods' ), ) ); - // Hooks <--> Methods p2p_register_connection_type( array( 'name' => 'methods_to_hooks', 'from' => 'wp-parser-method', @@ -154,7 +162,6 @@ public function import_item( $ID, $data, $post_data ) { if ( $to_method['static'] || ! empty( $to_method['class'] ) ) { $to_method_slug = $to_method['class'] . '-' . $to_method['name']; } else { - $to_method_slug = $to_method['name']; } $to_method_slug = $this->name_to_slug( $to_method_slug ); @@ -171,6 +178,40 @@ public function import_item( $ID, $data, $post_data ) { } } + if ( $this->post_types['method'] === $from_type ) { + + // Methods to Functions + $to_type = $this->post_types['function']; + foreach ( (array) @$data['uses']['functions'] as $to_function ) { + $to_function_slug = $this->name_to_slug( $to_function['name'] ); + + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_function_slug; + } + + // Methods to Methods + $to_type = $this->post_types['method']; + foreach ( (array) @$data['uses']['methods'] as $to_method ) { + if ( $to_method['static'] || ! empty( $to_method['class'] ) ) { + $to_method_slug = $to_method['class'] . '-' . $to_method['name']; + } else { + $to_method_slug = $to_method['name']; + } + $to_method_slug = $this->name_to_slug( $to_method_slug ); + + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_method_slug; + } + + // Methods to Hooks + $to_type = $this->post_types['hook']; + foreach ( (array) @$data['hooks'] as $to_hook ) { + $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); + + $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; + } + } + + var_dump( $this->relationships ); + } /** @@ -185,6 +226,7 @@ public function wp_parser_ending_import() { p2p_delete_connections( 'functions_to_functions' ); p2p_delete_connections( 'functions_to_methods' ); p2p_delete_connections( 'functions_to_hooks' ); + p2p_delete_connections( 'methods_to_functions' ); p2p_delete_connections( 'methods_to_methods' ); p2p_delete_connections( 'methods_to_hooks' ); @@ -202,7 +244,6 @@ public function wp_parser_ending_import() { // Convert slugs to IDs. $this->relationships[ $from_type ][ $from_id ][ $to_type ] = $this->get_ids_for_slugs( $to_slugs, $this->slugs_to_ids[ $to_type ] ); } - } } @@ -244,6 +285,43 @@ public function wp_parser_ending_import() { } } + // Connect Methods + if ( $from_type === $this->post_types['method'] ) { + + foreach ( $to_types as $to_type => $to_slugs ) { + + // ...to Functions + if ( $this->post_types['function'] === $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'methods_to_functions' )->connect( $from_id, $to_id, array( 'data' => current_time( 'mysql' ) ) ); + } + } + } + + // ...to Methods + if ( $this->post_types['method'] === $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'methods_to_methods' )->connect( $from_id, $to_id, array( 'data' => current_time( 'mysql' ) ) ); + } + } + } + + // ...to Hooks + if ( $this->post_types['hook'] === $to_type ) { + foreach ( $to_slugs as $to_slug => $to_id ) { + $to_id = intval( $to_id, 10 ); + if ( 0 != $to_id ) { + p2p_type( 'methods_to_hooks' )->connect( $from_id, $to_id, array( 'data' => current_time( 'mysql' ) ) ); + } + } + } + } + } + } } From 96204f2f539b4892f35ee89600fc19d9b9cf5570 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 15:27:37 +0200 Subject: [PATCH 254/402] Remove debug cruft --- lib/class-relationships.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 4dacaa3ef..cd0ce1428 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -210,8 +210,6 @@ public function import_item( $ID, $data, $post_data ) { } } - var_dump( $this->relationships ); - } /** @@ -321,7 +319,6 @@ public function wp_parser_ending_import() { } } } - } } From a18ac213f517201664b4a2382d17cb263e3e70ec Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Sat, 11 Oct 2014 10:31:57 -0600 Subject: [PATCH 255/402] Add support for assigning multiple @since tags to the given item. phpDocumentor already supports and parses all of the @since tags present in a docblock. This PR simply recognizes that there can be more than one for a single item, and also recognizes that they can have descriptions. Adds a 'description' key to the meta array (if the tag description is set) and assigns multiple @since terms as available. --- lib/class-importer.php | 35 +++++++++++++++++++---------------- lib/runner.php | 8 ++++++++ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 1a47065ad..c61299348 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -466,23 +466,26 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } // If the item has @since markup, assign the taxonomy - $since_version = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); - if ( ! empty( $since_version ) ) { - - $since_version = array_shift( $since_version ); - $since_version = $since_version['content']; - - $since_term = $this->insert_term( $since_version, $this->taxonomy_since_version ); - - // Assign the tax item to the post - if ( ! is_wp_error( $since_term ) ) { - $added_term_relationship = did_action( 'added_term_relationship' ); - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version ); - if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { - $anything_updated[] = true; + $since_versions = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); + if ( ! empty( $since_versions ) ) { + + // Loop through all @since versions. + foreach ( $since_versions as $since_version ) { + + if ( ! empty( $since_version['content'] ) ) { + $since_term = $this->insert_term( $since_version['content'], $this->taxonomy_since_version ); + + // Assign the tax item to the post + if ( ! is_wp_error( $since_term ) ) { + $added_term_relationship = did_action( 'added_term_relationship' ); + wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version, true ); + if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { + $anything_updated[] = true; + } + } else { + WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); + } } - } else { - WP_CLI::warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } } diff --git a/lib/runner.php b/lib/runner.php index bb6f8f175..467965fa5 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -140,10 +140,18 @@ function export_docblock( $element ) { $t['refers'] = $tag->getReference(); } if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { + // Version string. $version = $tag->getVersion(); if ( !empty( $version ) ) { $t['content'] = $version; } + // Description string. + if ( method_exists( $tag, 'getDescription' ) ) { + $description = preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ); + if ( ! empty( $description ) ) { + $t['description'] = $description; + } + } } $output['tags'][] = $t; } From 37472defe38fd08ef0d22d5da919359b814ee4af Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 20:33:02 +0200 Subject: [PATCH 256/402] Fix an error with getLocation on the ClassMethod check --- lib/class-file-reflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 58104bde3..14f4b9ac6 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -120,7 +120,7 @@ public function enterNode( \PHPParser_Node $node ) { $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); // If we are in a class method we might need the class we are in at this moment - if ( 'Stmt_ClassMethod' === $this->getLocation()->getType() ) { + if ( $this !== $this->getLocation() && 'Stmt_ClassMethod' === $this->getLocation()->getType() ) { $class = $this->location[ count( $this->location ) - 2 ]; $node->setAttribute( 'containingClass', $class->name ); From b1497ac5cd11a096560881327005fca18f2386ae Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 20:33:37 +0200 Subject: [PATCH 257/402] Fix an error when parsing method calls on function calls --- lib/class-method-call-reflector.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index ee6636305..3f5f9f262 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -55,8 +55,15 @@ public function getCalledOn() { } else if ( is_a( $this->node, 'PHPParser_Node_Expr_MethodCall' ) ) { $calledOn = $this->node->var; - // This is actually a variable name - $calledOn = $calledOn->name; + if ( is_a( $calledOn, 'PHPParser_Node_Expr_FuncCall' ) ) { + + // Add parentheses to signify this is a function call + $calledOn = $calledOn->parts[0] . '()'; + } else { + + // This is actually a variable name + $calledOn = $calledOn->name; + } } return $calledOn; @@ -127,6 +134,8 @@ protected function _getClassMapping() { 'wp_widget_factory' => 'WP_Widget_Factory', 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours 'wpdb' => 'wpdb', + + 'get_screen()' => 'WP_Screen', ); $class_mapping = $wp_globals; From c4c7d750c1293782d33c03ec7513cda8d5096571 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 20:33:55 +0200 Subject: [PATCH 258/402] Enable self connections the methods_to_methods relation --- lib/class-relationships.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index cd0ce1428..afea6efd2 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -103,6 +103,7 @@ public function register_post_relationships() { 'name' => 'methods_to_methods', 'from' => 'wp-parser-method', 'to' => 'wp-parser-method', + 'self_connections' => 'true', 'title' => array( 'from' => 'Uses Methods', 'to' => 'Used by Methods' ), ) ); From c2fb6d9aece242ec82a08be771c2e28337b8850d Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sat, 11 Oct 2014 22:18:56 +0200 Subject: [PATCH 259/402] Prevent an error with Node_Scalar_Encapsed --- lib/class-method-call-reflector.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index 3f5f9f262..46338bee7 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -41,6 +41,11 @@ public function getName() { } } + // If the method call name is string combined with a variable we shouldn't try to relate it. + if ( is_a( $shortName, 'PHPParser_Node_Scalar_Encapsed' ) ) { + $shortName = ''; + } + return (string) $shortName; } From 8575b63868d0886b1b0e2849d9fbddda47404d81 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sun, 12 Oct 2014 13:29:24 +0200 Subject: [PATCH 260/402] Correctly report the function name a method is called on --- lib/class-method-call-reflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index 46338bee7..c43254fb5 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -63,7 +63,7 @@ public function getCalledOn() { if ( is_a( $calledOn, 'PHPParser_Node_Expr_FuncCall' ) ) { // Add parentheses to signify this is a function call - $calledOn = $calledOn->parts[0] . '()'; + $calledOn = $calledOn->name->parts[0] . '()'; } else { // This is actually a variable name From c57628b2422386c5340704711e9f92abd9bec3a9 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sun, 12 Oct 2014 13:29:41 +0200 Subject: [PATCH 261/402] Add function to class mapping for methods --- lib/class-method-call-reflector.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index c43254fb5..55fb7e95a 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -139,11 +139,15 @@ protected function _getClassMapping() { 'wp_widget_factory' => 'WP_Widget_Factory', 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours 'wpdb' => 'wpdb', + ); - 'get_screen()' => 'WP_Screen', + $wp_functions = array( + 'get_current_screen()' => 'WP_Screen', + '_get_list_table()' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table + 'wp_get_theme()' => 'WP_Theme', ); - $class_mapping = $wp_globals; + $class_mapping = array_merge( $wp_globals, $wp_functions ); return $class_mapping; } From 64a6245856d237ddd8c2768095e45e75f90045a6 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sun, 12 Oct 2014 17:17:19 +0200 Subject: [PATCH 262/402] Add relationships test file --- tests/source/relationships.php | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/source/relationships.php diff --git a/tests/source/relationships.php b/tests/source/relationships.php new file mode 100644 index 000000000..43cdbe90b --- /dev/null +++ b/tests/source/relationships.php @@ -0,0 +1,72 @@ +<?php + +function relate_function1() { + relate_function2(); +} + +function relate_function2() { + + /** + * A relationship hook + */ + $relate = apply_filters( 'relate-hook', true ); + + echo $relate; +} + +function relate_function3() { + wpdb::relate_method1(); +} + +function relate_function4() { + $wpdb = new wpdb(); + + $wpdb->relate_method4(); +} + +function relate_function5() { + wpdb::relate_method2()->some_function(); +} + +class wpdb { + + public function __construct() {} + + public static function relate_method1() { + self::method2(); + } + + public static function relate_method2() { + /** + * Filter a aCustomize setting value in un-slashed form. + * + * @since 3.5.0 + * + * @param mixed $value Value of the setting. + * @param WP_Customize_Setting $this WP_Customize_Setting instance. + */ + $meh = apply_filters( 'meh-hook', $meh ); + } + + public static function relate_method3() { + relate_function1(); + } + + public function relate_method4() { + relate_function2(); + } + + public function relate_method5() { + $this->relate_method4(); + } + + public static function relate_method6() { + wpdb::relate_method1(); + } + + public static function relate_method7() { + global $wpdb; + + $wpdb->relate_method5(); + } +} \ No newline at end of file From c8df8750eb87c0a5efaf4997b2aa80e850944f0f Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Sun, 12 Oct 2014 17:28:22 +0200 Subject: [PATCH 263/402] Add function call method calling to testfile --- tests/source/relationships.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/source/relationships.php b/tests/source/relationships.php index 43cdbe90b..c9a9e6c8f 100644 --- a/tests/source/relationships.php +++ b/tests/source/relationships.php @@ -28,6 +28,10 @@ function relate_function5() { wpdb::relate_method2()->some_function(); } +function relate_function6() { + wp_screen()->relate_method1(); +} + class wpdb { public function __construct() {} @@ -69,4 +73,8 @@ public static function relate_method7() { $wpdb->relate_method5(); } +} + +class WP_Screen { + public function relate_method1() {} } \ No newline at end of file From ff2092de088ddfbeb971cdd680bf0cdf95307c11 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Wed, 15 Oct 2014 13:53:30 +0200 Subject: [PATCH 264/402] Adds an example filter to test multiple since tags --- tests/source/filters.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/source/filters.php b/tests/source/filters.php index 6c450ad11..57bbd192e 100644 --- a/tests/source/filters.php +++ b/tests/source/filters.php @@ -107,6 +107,18 @@ */ $value = apply_filters("missing_param_double_quotes_dynamic_filter_$option", $value, $old_value); +/** + * This is a filter with multiple since tags + * + * @since 1.0 + * @since 1.9 Added a new parameter to the filter + * More description + * + * @param string $first_parameter + * @param string $second_parameter + */ +$value = apply_filters( 'multiple_since_tags', $first_parameter, $second_parameter ); + $mce_translation = apply_filters('no_doc_static_filter', $mce_translation, $mce_locale); $value = apply_filters('no_doc_dynamic_filter_' . $option, $value, $old_value); From 6c93e51ae4907d0fc2fb01173afac1dd3e21be1d Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Thu, 23 Oct 2014 23:09:28 +0200 Subject: [PATCH 265/402] Fix relate_method2 call in relate_method1 --- tests/source/relationships.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/source/relationships.php b/tests/source/relationships.php index c9a9e6c8f..281c0b4e0 100644 --- a/tests/source/relationships.php +++ b/tests/source/relationships.php @@ -37,7 +37,7 @@ class wpdb { public function __construct() {} public static function relate_method1() { - self::method2(); + self::relate_method2(); } public static function relate_method2() { @@ -77,4 +77,4 @@ public static function relate_method7() { class WP_Screen { public function relate_method1() {} -} \ No newline at end of file +} From 6047cad8e3e3ff33786557b7c1bea573baa0c113 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Thu, 23 Oct 2014 23:13:52 +0200 Subject: [PATCH 266/402] Fix file indentation --- lib/class-file-reflector.php | 414 ++++++++++++++-------------- lib/class-method-call-reflector.php | 214 +++++++------- 2 files changed, 314 insertions(+), 314 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 39b981401..a9098ed55 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -1,241 +1,241 @@ <?php - namespace WP_Parser; +namespace WP_Parser; + +use phpDocumentor\Reflection; +use phpDocumentor\Reflection\FileReflector; + +/** + * Reflection class for a full file. + * + * Extends the FileReflector from phpDocumentor to parse out WordPress + * hooks and note function relationships. + */ +class File_Reflector extends FileReflector { + /** + * List of elements used in global scope in this file, indexed by element type. + * + * @var array { + * @type \WP_Parser\Hook_Reflector[] $hooks The action and filters. + * @type \WP_Parser\Function_Call_Reflector[] $functions The functions called. + * } + */ + public $uses = array(); - use phpDocumentor\Reflection; - use phpDocumentor\Reflection\FileReflector; + /** + * List of elements used in the current node scope, indexed by element type. + * + * @var array {@see \WP_Parser\File_Reflector::$uses} + */ + protected $uses_queue = array(); /** - * Reflection class for a full file. + * List of elements used in the current class scope, indexed by method. * - * Extends the FileReflector from phpDocumentor to parse out WordPress - * hooks and note function relationships. + * @var array[][] {@see \WP_Parser\File_Reflector::$uses} */ - class File_Reflector extends FileReflector { - /** - * List of elements used in global scope in this file, indexed by element type. - * - * @var array { - * @type \WP_Parser\Hook_Reflector[] $hooks The action and filters. - * @type \WP_Parser\Function_Call_Reflector[] $functions The functions called. - * } - */ - public $uses = array(); - - /** - * List of elements used in the current node scope, indexed by element type. - * - * @var array {@see \WP_Parser\File_Reflector::$uses} - */ - protected $uses_queue = array(); - - /** - * List of elements used in the current class scope, indexed by method. - * - * @var array[][] {@see \WP_Parser\File_Reflector::$uses} - */ - protected $method_uses_queue = array(); - - /** - * Stack of classes/methods/functions currently being parsed. - * - * @see \WP_Parser\FileReflector::getLocation() - * @var \phpDocumentor\Reflection\BaseReflector[] - */ - protected $location = array(); - - /** - * Last DocBlock associated with a non-documentable element. - * - * @var \PHPParser_Comment_Doc - */ - protected $last_doc = null; - - /** - * Add hooks to the queue and update the node stack when we enter a node. - * - * If we are entering a class, function or method, we push it to the location - * stack. This is just so that we know whether we are in the file scope or not, - * so that hooks in the main file scope can be added to the file. - * - * We also check function calls to see if there are any actions or hooks. If - * there are, they are added to the file's hooks if in the global scope, or if - * we are in a function/method, they are added to the queue. They will be - * assigned to the function by leaveNode(). We also check for any other function - * calls and treat them similarly, so that we can export a list of functions - * used by each element. - * - * Finally, we pick up any docblocks for nodes that usually aren't documentable, - * so they can be assigned to the hooks to which they may belong. - */ - public function enterNode( \PHPParser_Node $node ) { - parent::enterNode( $node ); - - switch ( $node->getType() ) { - // Add classes, functions, and methods to the current location stack - case 'Stmt_Class': - case 'Stmt_Function': - case 'Stmt_ClassMethod': - array_push( $this->location, $node ); - break; - - // Parse out hook definitions and function calls and add them to the queue. - case 'Expr_FuncCall': - $function = new \WP_Parser\Function_Call_Reflector( $node, $this->context ); + protected $method_uses_queue = array(); - /* - * If the function call is in the global scope, add it to the - * file's function calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['functions'][] = $function; - } else { - $this->uses_queue['functions'][] = $function; - } + /** + * Stack of classes/methods/functions currently being parsed. + * + * @see \WP_Parser\FileReflector::getLocation() + * @var \phpDocumentor\Reflection\BaseReflector[] + */ + protected $location = array(); - if ( $this->isFilter( $node ) ) { - if ( $this->last_doc && ! $node->getDocComment() ) { - $node->setAttribute( 'comments', array( $this->last_doc ) ); - $this->last_doc = null; - } + /** + * Last DocBlock associated with a non-documentable element. + * + * @var \PHPParser_Comment_Doc + */ + protected $last_doc = null; - $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); - - /* - * If the hook is in the global scope, add it to the file's - * hooks. Otherwise, add it to the queue so it can be added to - * the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['hooks'][] = $hook; - } else { - $this->uses_queue['hooks'][] = $hook; - } + /** + * Add hooks to the queue and update the node stack when we enter a node. + * + * If we are entering a class, function or method, we push it to the location + * stack. This is just so that we know whether we are in the file scope or not, + * so that hooks in the main file scope can be added to the file. + * + * We also check function calls to see if there are any actions or hooks. If + * there are, they are added to the file's hooks if in the global scope, or if + * we are in a function/method, they are added to the queue. They will be + * assigned to the function by leaveNode(). We also check for any other function + * calls and treat them similarly, so that we can export a list of functions + * used by each element. + * + * Finally, we pick up any docblocks for nodes that usually aren't documentable, + * so they can be assigned to the hooks to which they may belong. + */ + public function enterNode( \PHPParser_Node $node ) { + parent::enterNode( $node ); + + switch ( $node->getType() ) { + // Add classes, functions, and methods to the current location stack + case 'Stmt_Class': + case 'Stmt_Function': + case 'Stmt_ClassMethod': + array_push( $this->location, $node ); + break; + + // Parse out hook definitions and function calls and add them to the queue. + case 'Expr_FuncCall': + $function = new \WP_Parser\Function_Call_Reflector( $node, $this->context ); + + /* + * If the function call is in the global scope, add it to the + * file's function calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['functions'][] = $function; + } else { + $this->uses_queue['functions'][] = $function; + } + + if ( $this->isFilter( $node ) ) { + if ( $this->last_doc && ! $node->getDocComment() ) { + $node->setAttribute( 'comments', array( $this->last_doc ) ); + $this->last_doc = null; } - break; - // Parse out method calls, so we can export where methods are used. - case 'Expr_MethodCall': - $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); /* - * If the method call is in the global scope, add it to the - * file's method calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. + * If the hook is in the global scope, add it to the file's + * hooks. Otherwise, add it to the queue so it can be added to + * the correct node when we leave it. */ if ( $this === $this->getLocation() ) { - $this->uses['methods'][] = $method; + $this->uses['hooks'][] = $hook; } else { - $this->uses_queue['methods'][] = $method; + $this->uses_queue['hooks'][] = $hook; } - break; - - // Parse out method calls, so we can export where methods are used. - case 'Expr_StaticCall': - $method = new \WP_Parser\Static_Method_Call_Reflector( $node, $this->context ); + } + break; + + // Parse out method calls, so we can export where methods are used. + case 'Expr_MethodCall': + $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + + /* + * If the method call is in the global scope, add it to the + * file's method calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['methods'][] = $method; + } else { + $this->uses_queue['methods'][] = $method; + } + break; + + // Parse out method calls, so we can export where methods are used. + case 'Expr_StaticCall': + $method = new \WP_Parser\Static_Method_Call_Reflector( $node, $this->context ); + + /* + * If the method call is in the global scope, add it to the + * file's method calls. Otherwise, add it to the queue so it + * can be added to the correct node when we leave it. + */ + if ( $this === $this->getLocation() ) { + $this->uses['methods'][] = $method; + } else { + $this->uses_queue['methods'][] = $method; + } + break; + } - /* - * If the method call is in the global scope, add it to the - * file's method calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['methods'][] = $method; - } else { - $this->uses_queue['methods'][] = $method; - } - break; - } - - // Pick up DocBlock from non-documentable elements so that it can be assigned - // to the next hook if necessary. - if ( ! $this->isNodeDocumentable( $node ) && ( $docblock = $node->getDocComment() ) ) { - $this->last_doc = $docblock; - } + // Pick up DocBlock from non-documentable elements so that it can be assigned + // to the next hook if necessary. + if ( ! $this->isNodeDocumentable( $node ) && ( $docblock = $node->getDocComment() ) ) { + $this->last_doc = $docblock; } + } - /** - * Assign queued hooks to functions and update the node stack on leaving a node. - * - * We can now access the function/method reflectors, so we can assign any queued - * hooks to them. The reflector for a node isn't created until the node is left. - */ - public function leaveNode( \PHPParser_Node $node ) { - - parent::leaveNode( $node ); - - switch ( $node->getType() ) { - case 'Stmt_Class': - $class = end( $this->classes ); - if ( ! empty( $this->method_uses_queue ) ) { - foreach ( $class->getMethods() as $method ) { - if ( isset( $this->method_uses_queue[ $method->getName() ] ) ) { - if ( isset( $this->method_uses_queue[ $method->getName() ]['methods'] ) ) { - /* - * For methods used in a class, set the class on the method call. - * That allows us to later get the correct class name for $this, self, parent. - */ - foreach ( $this->method_uses_queue[ $method->getName() ]['methods'] as $method_call ) { - $method_call->set_class( $class ); - } + /** + * Assign queued hooks to functions and update the node stack on leaving a node. + * + * We can now access the function/method reflectors, so we can assign any queued + * hooks to them. The reflector for a node isn't created until the node is left. + */ + public function leaveNode( \PHPParser_Node $node ) { + + parent::leaveNode( $node ); + + switch ( $node->getType() ) { + case 'Stmt_Class': + $class = end( $this->classes ); + if ( ! empty( $this->method_uses_queue ) ) { + foreach ( $class->getMethods() as $method ) { + if ( isset( $this->method_uses_queue[ $method->getName() ] ) ) { + if ( isset( $this->method_uses_queue[ $method->getName() ]['methods'] ) ) { + /* + * For methods used in a class, set the class on the method call. + * That allows us to later get the correct class name for $this, self, parent. + */ + foreach ( $this->method_uses_queue[ $method->getName() ]['methods'] as $method_call ) { + $method_call->set_class( $class ); } - - $method->uses = $this->method_uses_queue[ $method->getName() ]; } + + $method->uses = $this->method_uses_queue[ $method->getName() ]; } } - - $this->method_uses_queue = array(); - array_pop( $this->location ); - break; - - case 'Stmt_Function': - end( $this->functions )->uses = $this->uses_queue; + } + + $this->method_uses_queue = array(); + array_pop( $this->location ); + break; + + case 'Stmt_Function': + end( $this->functions )->uses = $this->uses_queue; + $this->uses_queue = array(); + array_pop( $this->location ); + break; + + case 'Stmt_ClassMethod': + /* + * Store the list of elements used by this method in the queue. We'll + * assign them to the method upon leaving the class (see above). + */ + if ( ! empty( $this->uses_queue ) ) { + $this->method_uses_queue[ $node->name ] = $this->uses_queue; $this->uses_queue = array(); - array_pop( $this->location ); - break; + } - case 'Stmt_ClassMethod': - /* - * Store the list of elements used by this method in the queue. We'll - * assign them to the method upon leaving the class (see above). - */ - if ( ! empty( $this->uses_queue ) ) { - $this->method_uses_queue[ $node->name ] = $this->uses_queue; - $this->uses_queue = array(); - } + array_pop( $this->location ); + break; + } + } - array_pop( $this->location ); - break; - } + protected function isFilter( \PHPParser_Node $node ) { + // Ignore variable functions + if ( $node->name->getType() !== 'Name' ) { + return false; } - protected function isFilter( \PHPParser_Node $node ) { - // Ignore variable functions - if ( $node->name->getType() !== 'Name' ) { - return false; - } + $calling = (string) $node->name; - $calling = (string) $node->name; + $functions = array( + 'apply_filters', + 'apply_filters_ref_array', + 'do_action', + 'do_action_ref_array', + ); - $functions = array( - 'apply_filters', - 'apply_filters_ref_array', - 'do_action', - 'do_action_ref_array', - ); + return in_array( $calling, $functions ); + } - return in_array( $calling, $functions ); - } + protected function getLocation() { + return empty( $this->location ) ? $this : end( $this->location ); + } - protected function getLocation() { - return empty( $this->location ) ? $this : end( $this->location ); - } - - protected function isNodeDocumentable( \PHPParser_Node $node ) { - return parent::isNodeDocumentable( $node ) - || ( $node instanceof \PHPParser_Node_Expr_FuncCall - && $this->isFilter( $node ) ); - } - } \ No newline at end of file + protected function isNodeDocumentable( \PHPParser_Node $node ) { + return parent::isNodeDocumentable( $node ) + || ( $node instanceof \PHPParser_Node_Expr_FuncCall + && $this->isFilter( $node ) ); + } +} \ No newline at end of file diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index 5da12d369..81bdd848c 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -1,122 +1,122 @@ <?php - /** - * A reflection class for a method call. - */ +/** + * A reflection class for a method call. + */ + +namespace WP_Parser; - namespace WP_Parser; +use phpDocumentor\Reflection\BaseReflector; - use phpDocumentor\Reflection\BaseReflector; +/** + * A reflection of a method call expression. + */ +class Method_Call_Reflector extends BaseReflector { + + /** + * The class that this method was called in, if it was called in a class. + * + * @var \phpDocumentor\Reflection\ClassReflector|false + */ + protected $called_in_class = false; /** - * A reflection of a method call expression. + * Returns the name for this Reflector instance. + * + * @return string[] Index 0 is the calling instance, 1 is the method name. */ - class Method_Call_Reflector extends BaseReflector { - - /** - * The class that this method was called in, if it was called in a class. - * - * @var \phpDocumentor\Reflection\ClassReflector|false - */ - protected $called_in_class = false; - - /** - * Returns the name for this Reflector instance. - * - * @return string[] Index 0 is the calling instance, 1 is the method name. - */ - public function getName() { - $name = $this->getShortName(); - - $printer = new Pretty_Printer; - $caller = $printer->prettyPrintExpr( $this->node->var ); - - if ( $this->called_in_class && '$this' === $caller ) { - $caller = $this->called_in_class->getShortName(); - } else { - - // If the caller is a function, convert it to the function name - if ( is_a( $caller, 'PHPParser_Node_Expr_FuncCall' ) ) { - - // Add parentheses to signify this is a function call - $caller = $caller->name->parts[0] . '()'; - } - - $class_mapping = $this->_getClassMapping(); - if ( array_key_exists( $caller, $class_mapping ) ) { - $caller = $class_mapping[ $caller ]; - } + public function getName() { + $name = $this->getShortName(); + + $printer = new Pretty_Printer; + $caller = $printer->prettyPrintExpr( $this->node->var ); + + if ( $this->called_in_class && '$this' === $caller ) { + $caller = $this->called_in_class->getShortName(); + } else { + + // If the caller is a function, convert it to the function name + if ( is_a( $caller, 'PHPParser_Node_Expr_FuncCall' ) ) { + + // Add parentheses to signify this is a function call + $caller = $caller->name->parts[0] . '()'; } - return array( $caller, $name ); + $class_mapping = $this->_getClassMapping(); + if ( array_key_exists( $caller, $class_mapping ) ) { + $caller = $class_mapping[ $caller ]; + } } - /** - * Set the class that this method was called within. - * - * @param \phpDocumentor\Reflection\ClassReflector $class - */ - public function set_class( \phpDocumentor\Reflection\ClassReflector $class ) { + return array( $caller, $name ); + } - $this->called_in_class = $class; - } + /** + * Set the class that this method was called within. + * + * @param \phpDocumentor\Reflection\ClassReflector $class + */ + public function set_class( \phpDocumentor\Reflection\ClassReflector $class ) { - /** - * Returns whether or not this method call is a static call - * - * @return bool Whether or not this method call is a static call - */ - public function isStatic() { - return false; - } + $this->called_in_class = $class; + } - /** - * Returns a mapping from variable names to a class name, leverages globals for most used classes - * - * @return array Class mapping to map variable names to classes - */ - protected function _getClassMapping() { - - // List of global use generated using following command: - // ack "global \\\$[^;]+;" --no-filename | tr -d '\t' | sort | uniq | sed "s/global //g" | sed "s/, /,/g" | tr , '\n' | sed "s/;//g" | sort | uniq | sed "s/\\\$//g" | sed "s/[^ ][^ ]*/'&' => ''/g" - // There is probably an easier way, there are currently no globals that are classes starting with an underscore - $wp_globals = array( - 'authordata' => 'WP_User', - 'custom_background' => 'Custom_Background', - 'custom_image_header' => 'Custom_Image_Header', - 'phpmailer' => 'PHPMailer', - 'post' => 'WP_Post', - 'userdata' => 'WP_User', // This can also be stdClass, but you can't call methods on an stdClass - 'wp' => 'WP', - 'wp_admin_bar' => 'WP_Admin_Bar', - 'wp_customize' => 'WP_Customize_Manager', - 'wp_embed' => 'WP_Embed', - 'wp_filesystem' => 'WP_Filesystem', - 'wp_hasher' => 'PasswordHash', // This can be overridden by plugins, for core assume this is ours - 'wp_json' => 'Services_JSON', - 'wp_list_table' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table - 'wp_locale' => 'WP_Locale', - 'wp_object_cache' => 'WP_Object_Cache', - 'wp_query' => 'WP_Query', - 'wp_rewrite' => 'WP_Rewrite', - 'wp_roles' => 'WP_Roles', - 'wp_scripts' => 'WP_Scripts', - 'wp_styles' => 'WP_Styles', - 'wp_the_query' => 'WP_Query', - 'wp_widget_factory' => 'WP_Widget_Factory', - 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours - 'wpdb' => 'wpdb', - ); - - $wp_functions = array( - 'get_current_screen()' => 'WP_Screen', - '_get_list_table()' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table - 'wp_get_theme()' => 'WP_Theme', - ); - - $class_mapping = array_merge( $wp_globals, $wp_functions ); - - return $class_mapping; - } + /** + * Returns whether or not this method call is a static call + * + * @return bool Whether or not this method call is a static call + */ + public function isStatic() { + return false; + } - } \ No newline at end of file + /** + * Returns a mapping from variable names to a class name, leverages globals for most used classes + * + * @return array Class mapping to map variable names to classes + */ + protected function _getClassMapping() { + + // List of global use generated using following command: + // ack "global \\\$[^;]+;" --no-filename | tr -d '\t' | sort | uniq | sed "s/global //g" | sed "s/, /,/g" | tr , '\n' | sed "s/;//g" | sort | uniq | sed "s/\\\$//g" | sed "s/[^ ][^ ]*/'&' => ''/g" + // There is probably an easier way, there are currently no globals that are classes starting with an underscore + $wp_globals = array( + 'authordata' => 'WP_User', + 'custom_background' => 'Custom_Background', + 'custom_image_header' => 'Custom_Image_Header', + 'phpmailer' => 'PHPMailer', + 'post' => 'WP_Post', + 'userdata' => 'WP_User', // This can also be stdClass, but you can't call methods on an stdClass + 'wp' => 'WP', + 'wp_admin_bar' => 'WP_Admin_Bar', + 'wp_customize' => 'WP_Customize_Manager', + 'wp_embed' => 'WP_Embed', + 'wp_filesystem' => 'WP_Filesystem', + 'wp_hasher' => 'PasswordHash', // This can be overridden by plugins, for core assume this is ours + 'wp_json' => 'Services_JSON', + 'wp_list_table' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table + 'wp_locale' => 'WP_Locale', + 'wp_object_cache' => 'WP_Object_Cache', + 'wp_query' => 'WP_Query', + 'wp_rewrite' => 'WP_Rewrite', + 'wp_roles' => 'WP_Roles', + 'wp_scripts' => 'WP_Scripts', + 'wp_styles' => 'WP_Styles', + 'wp_the_query' => 'WP_Query', + 'wp_widget_factory' => 'WP_Widget_Factory', + 'wp_xmlrpc_server' => 'wp_xmlrpc_server', // This can be overridden by plugins, for core assume this is ours + 'wpdb' => 'wpdb', + ); + + $wp_functions = array( + 'get_current_screen()' => 'WP_Screen', + '_get_list_table()' => 'WP_List_Table', // This one differs because there are a lot of different List Tables, assume they all only overwrite existing functions on WP_List_Table + 'wp_get_theme()' => 'WP_Theme', + ); + + $class_mapping = array_merge( $wp_globals, $wp_functions ); + + return $class_mapping; + } + +} \ No newline at end of file From 845323a3dca0b8793b3722fd05903c4d8437b36f Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Thu, 23 Oct 2014 23:17:45 +0200 Subject: [PATCH 267/402] Fix some merge leftovers --- lib/class-file-reflector.php | 13 +++++++++---- lib/class-method-call-reflector.php | 2 +- lib/class-static-method-call-reflector.php | 5 +++++ plugin.php | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index a9098ed55..3d7130311 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -149,8 +149,13 @@ public function enterNode( \PHPParser_Node $node ) { } // Pick up DocBlock from non-documentable elements so that it can be assigned - // to the next hook if necessary. - if ( ! $this->isNodeDocumentable( $node ) && ( $docblock = $node->getDocComment() ) ) { + // to the next hook if necessary. We don't do this for name nodes, since even + // though they aren't documentable, they still carry the docblock from their + // corresponding class/constant/function/etc. that they are the name of. If + // we don't ignore them, we'll end up picking up docblocks that are already + // associated with a named element, and so aren't really from a non- + // documentable element after all. + if ( ! $this->isNodeDocumentable( $node ) && 'Name' !== $node->getType() && ( $docblock = $node->getDocComment() ) ) { $this->last_doc = $docblock; } } @@ -235,7 +240,7 @@ protected function getLocation() { protected function isNodeDocumentable( \PHPParser_Node $node ) { return parent::isNodeDocumentable( $node ) - || ( $node instanceof \PHPParser_Node_Expr_FuncCall - && $this->isFilter( $node ) ); + || ( $node instanceof \PHPParser_Node_Expr_FuncCall + && $this->isFilter( $node ) ); } } \ No newline at end of file diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index 81bdd848c..e6d874e9f 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -119,4 +119,4 @@ protected function _getClassMapping() { return $class_mapping; } -} \ No newline at end of file +} diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index b4610caaa..91688db2b 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -31,4 +31,9 @@ public function getName() { return array( $class, $this->getShortName() ); } + + + public function isStatic() { + return true; + } } diff --git a/plugin.php b/plugin.php index 9547afb25..f0d79f909 100644 --- a/plugin.php +++ b/plugin.php @@ -19,4 +19,4 @@ register_activation_hook( __FILE__, array( 'P2P_Storage', 'init' ) ); register_activation_hook( __FILE__, array( 'P2P_Storage', 'install' ) ); -register_uninstall_hook( __FILE__, array( 'P2P_Storage', 'uninstall' ) ); \ No newline at end of file +register_uninstall_hook( __FILE__, array( 'P2P_Storage', 'uninstall' ) ); From 04d7c9a9fc91370aad290bfc70ebf4fc817c34d1 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Thu, 23 Oct 2014 23:19:25 +0200 Subject: [PATCH 268/402] Add some missing newlines at the end of files --- composer.json | 2 +- lib/class-file-reflector.php | 2 +- lib/class-relationships.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index d66cdb05c..1d5b9762c 100644 --- a/composer.json +++ b/composer.json @@ -33,4 +33,4 @@ "url": "https://github.com/scribu/wp-lib-posts-to-posts" } ] -} \ No newline at end of file +} diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 3d7130311..fde94e285 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -243,4 +243,4 @@ protected function isNodeDocumentable( \PHPParser_Node $node ) { || ( $node instanceof \PHPParser_Node_Expr_FuncCall && $this->isFilter( $node ) ); } -} \ No newline at end of file +} diff --git a/lib/class-relationships.php b/lib/class-relationships.php index afea6efd2..5d68568bc 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -355,4 +355,4 @@ public function get_ids_for_slugs( array $slugs, array $slugs_to_ids ) { return $slugs_with_ids; } -} \ No newline at end of file +} From 9fdf176b8398f6c3ccae30476b3021b98d64cf5b Mon Sep 17 00:00:00 2001 From: Anton Timmermans <me@atimmer.com> Date: Thu, 23 Oct 2014 23:24:35 +0200 Subject: [PATCH 269/402] Add documentation where it was previously missing --- lib/class-importer.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 20cd834ae..ca7781409 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -179,6 +179,9 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct delete_option( "{$this->taxonomy_package}_children" ); delete_option( "{$this->taxonomy_since_version}_children" ); + /** + * Action at the end of a complete import + */ do_action( 'wp_parser_ending_import' ); // Start counting again @@ -738,7 +741,8 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal * Action at the end of importing an item. * * @param int $ID Optional; post ID of the inserted or updated item. - * @param array $data Data + * @param array $data PHPDoc data for the item we just imported + * @param array $post_data WordPress data of the post we just inserted or updated */ do_action( 'wp_parser_import_item', $ID, $data, $post_data ); @@ -772,4 +776,4 @@ public function error( $message ) {} * @param string $message The success message. */ public function success( $message ) {} -} \ No newline at end of file +} From d3d87dbfb2f5ec509e9ffec1e4350ea94c498a69 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 27 Oct 2014 22:38:29 +0200 Subject: [PATCH 270/402] Removing custom P2P repo from composer.json since now available on Packagist. --- composer.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 1d5b9762c..dbf2336b3 100644 --- a/composer.json +++ b/composer.json @@ -26,11 +26,5 @@ "autoload" : { "classmap": ["lib"], "files" : ["lib/runner.php", "lib/template.php"] - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/scribu/wp-lib-posts-to-posts" - } - ] + } } From b0e30d6c1d28790e1659d6875e6142fb93050e2a Mon Sep 17 00:00:00 2001 From: Stephen Edgar <stephen@netweb.com.au> Date: Tue, 28 Oct 2014 14:28:03 +1100 Subject: [PATCH 271/402] Update example filter to test multiple since tags --- tests/source/filters.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/source/filters.php b/tests/source/filters.php index 57bbd192e..75e0f1dcf 100644 --- a/tests/source/filters.php +++ b/tests/source/filters.php @@ -110,6 +110,9 @@ /** * This is a filter with multiple since tags * + * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + * * @since 1.0 * @since 1.9 Added a new parameter to the filter * More description From 213cb8fa91cb214ce0244d7fd78e7e854238789b Mon Sep 17 00:00:00 2001 From: Stephen Edgar <stephen@netweb.com.au> Date: Tue, 28 Oct 2014 18:10:57 +1100 Subject: [PATCH 272/402] Remove "More description" --- tests/source/filters.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/source/filters.php b/tests/source/filters.php index 75e0f1dcf..faaeea5f1 100644 --- a/tests/source/filters.php +++ b/tests/source/filters.php @@ -115,7 +115,6 @@ * * @since 1.0 * @since 1.9 Added a new parameter to the filter - * More description * * @param string $first_parameter * @param string $second_parameter From ccfe1a71a35f0ae86945d008603456b7b86b38b1 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 1 Dec 2014 23:08:57 +0200 Subject: [PATCH 273/402] Skip relationship creation for dynamic method calls Fixes #142 --- lib/class-relationships.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 5d68568bc..43961d2bf 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -192,6 +192,11 @@ public function import_item( $ID, $data, $post_data ) { // Methods to Methods $to_type = $this->post_types['method']; foreach ( (array) @$data['uses']['methods'] as $to_method ) { + + if ( ! is_string( $to_method['name'] ) ) { // might contain variable node for dynamic method calls + continue; + } + if ( $to_method['static'] || ! empty( $to_method['class'] ) ) { $to_method_slug = $to_method['class'] . '-' . $to_method['name']; } else { From 9fd2d094c81cf4ee69919ac841938803c752d36d Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 1 Dec 2014 23:11:02 +0200 Subject: [PATCH 274/402] Added empty check to make fatal error go away. --- lib/class-relationships.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 43961d2bf..dc05a3a01 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -246,6 +246,11 @@ public function wp_parser_ending_import() { // Iterate over slugs for each post type being related TO foreach ( $to_types as $to_type => $to_slugs ) { // Convert slugs to IDs. + + if ( empty( $this->slugs_to_ids[ $to_type ] ) ) { // TODO why might this be empty? test class-IXR.php + continue; + } + $this->relationships[ $from_type ][ $from_id ][ $to_type ] = $this->get_ids_for_slugs( $to_slugs, $this->slugs_to_ids[ $to_type ] ); } } From 9ff98809eabe360f60fbb040ed8fb28019c2f4eb Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:27:11 +0200 Subject: [PATCH 275/402] Updated authors section in composer.json --- composer.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index dbf2336b3..b2ecf4dfe 100644 --- a/composer.json +++ b/composer.json @@ -8,12 +8,22 @@ "authors" : [ { "name" : "Ryan McCue", - "homepage": "http://ryanmccue.info" + "homepage": "http://ryanmccue.info", + "role" : "Developer" + }, + { + "name" : "Andrey Savchenko", + "email" : "contact@rarst.net", + "homepage": "http://www.Rarst.net/", + "role" : "Maintainer" + }, + { + "name" : "Contributors", + "homepage": "https://github.com/rmccue/WP-Parser/graphs/contributors" } ], "support" : { - "issues": "https://github.com/rmccue/WP-Parser/issues", - "source": "https://github.com/rmccue/WP-Parser" + "issues": "https://github.com/rmccue/WP-Parser/issues" }, "require" : { "php" : ">=5.3.6", From a125bb4665525d9aecb40ea71bd9e015435081ad Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:29:27 +0200 Subject: [PATCH 276/402] Removed from ignore and committed composer.lock --- .gitignore | 3 +- composer.lock | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 415 insertions(+), 2 deletions(-) create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 88e99d50d..5657f6ea7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -vendor -composer.lock \ No newline at end of file +vendor \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..fe0c0b784 --- /dev/null +++ b/composer.lock @@ -0,0 +1,414 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "07b6e006fa64a11589ce6797b1e0146c", + "packages": [ + { + "name": "composer/installers", + "version": "v1.0.19", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "89d77bfbee79e16653f7162c86e602cc188471db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/89d77bfbee79e16653f7162c86e602cc188471db", + "reference": "89d77bfbee79e16653f7162c86e602cc188471db", + "shasum": "" + }, + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "4.1.*" + }, + "type": "composer-installer", + "extra": { + "class": "Composer\\Installers\\Installer", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Composer\\Installers\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "http://composer.github.com/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Hurad", + "MODX Evo", + "OXID", + "Thelia", + "WolfCMS", + "agl", + "annotatecms", + "bitrix", + "cakephp", + "chef", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "elgg", + "fuelphp", + "grav", + "installer", + "joomla", + "kohana", + "laravel", + "lithium", + "magento", + "mako", + "mediawiki", + "modulework", + "moodle", + "phpbb", + "piwik", + "ppi", + "puppet", + "roundcube", + "shopware", + "silverstripe", + "symfony", + "typo3", + "wordpress", + "zend", + "zikula" + ], + "time": "2014-11-29 01:29:17" + }, + { + "name": "erusev/parsedown", + "version": "0.9.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/d29ff18299210b52a75a631a70963e7c8b35b04f", + "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2014-02-06 12:16:14" + }, + { + "name": "nikic/php-parser", + "version": "v0.9.5", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", + "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + } + }, + "autoload": { + "psr-0": { + "PHPParser": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2014-07-23 18:24:17" + }, + { + "name": "phpdocumentor/reflection", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc40c3f604ac2287eb5c314174d5109b2c699372", + "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~0.9.4", + "php": ">=5.3.3", + "phpdocumentor/reflection-docblock": "~2.0", + "psr/log": "~1.0" + }, + "require-dev": { + "behat/behat": "~2.4", + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2014-11-14 11:43:04" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "38743b677965c48a637097b2746a281264ae2347" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/38743b677965c48a637097b2746a281264ae2347", + "reference": "38743b677965c48a637097b2746a281264ae2347", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@stable" + }, + "suggest": { + "dflydev/markdown": "1.0.*", + "erusev/parsedown": "~0.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2014-08-09 10:27:07" + }, + { + "name": "psr/log", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2012-12-21 11:40:51" + }, + { + "name": "scribu/lib-posts-to-posts", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/scribu/wp-lib-posts-to-posts.git", + "reference": "0f04cd2e35a802bfd6799fc502cd960c75ca46e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/0f04cd2e35a802bfd6799fc502cd960c75ca46e3", + "reference": "0f04cd2e35a802bfd6799fc502cd960c75ca46e3", + "shasum": "" + }, + "require": { + "scribu/scb-framework": "dev-master" + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "license": [ + "GPL-2.0+" + ], + "description": "A library for many-to-many relationships in WordPress", + "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", + "support": { + "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" + }, + "time": "2014-09-09 05:34:49" + }, + { + "name": "scribu/scb-framework", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/scribu/wp-scb-framework.git", + "reference": "6ea9861db28fcd3722c1a726446ecf60f048409c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/6ea9861db28fcd3722c1a726446ecf60f048409c", + "reference": "6ea9861db28fcd3722c1a726446ecf60f048409c", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "." + ], + "files": [ + "load-composer.php", + "Util.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0+" + ], + "authors": [ + { + "name": "Cristi Burcă", + "homepage": "http://scribu.net/" + } + ], + "description": "A set of useful classes for faster plugin development", + "homepage": "https://github.com/scribu/wp-scb-framework", + "keywords": [ + "wordpress" + ], + "time": "2014-01-23 13:57:58" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "scribu/lib-posts-to-posts": 20, + "scribu/scb-framework": 20 + }, + "prefer-stable": false, + "platform": { + "php": ">=5.3.6" + }, + "platform-dev": [] +} From 9c1a2c6bcefe8ae45dba62bdd1756726232641e3 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:34:44 +0200 Subject: [PATCH 277/402] Added explicit false return value for short circuit. --- lib/class-importer.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index ca7781409..1462d7fd7 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -537,8 +537,9 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). */ - if ( ! apply_filters( 'wp_parser_pre_import_item', true, $data, $parent_post_id, $import_internal, $arg_overrides ) ) - return; + if ( ! apply_filters( 'wp_parser_pre_import_item', true, $data, $parent_post_id, $import_internal, $arg_overrides ) ) { + return false; + } // Look for an existing post for this item $existing_post_id = $wpdb->get_var( From 051aea97ba79758555d43adfe357ce366f293b39 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:35:28 +0200 Subject: [PATCH 278/402] Removed closing php tag from file. --- tests/source/deprecated-file.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/source/deprecated-file.php b/tests/source/deprecated-file.php index 851aa1bb4..aa4c5d490 100644 --- a/tests/source/deprecated-file.php +++ b/tests/source/deprecated-file.php @@ -26,5 +26,3 @@ function should_be_deprecated() {} * This action should be marked as deprecated since 1.0 */ do_action( 'deprecated_action' ); - -?> \ No newline at end of file From a072129333bf1bdcf8c4f349df74540418e551e7 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:38:35 +0200 Subject: [PATCH 279/402] Corrected argument name in PHPDoc. --- tests/phpunit/includes/export-testcase.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index ee2f94bbf..50133311a 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -256,9 +256,9 @@ protected function assertHookHasDocs( $hook, $docs ) { /** * Find the exported data for an entity. * - * @param array $data The data to search in. - * @param string $type The type of entity. - * @param string $entity The name of the function. + * @param array $data The data to search in. + * @param string $type The type of entity. + * @param string $entity_name The name of the function. * * @return array|false The data for the entity, or false if it couldn't be found. */ From 4308266ae4ca716a5c6038ef7d2711a2cbb49a76 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:41:50 +0200 Subject: [PATCH 280/402] Removed obsolete use statement. --- lib/class-static-method-call-reflector.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index 91688db2b..fc4b56be6 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -6,8 +6,6 @@ namespace WP_Parser; -use phpDocumentor\Reflection\BaseReflector; - /** * A reflection of a method call expression. */ From 4f77dad6ec15ee66b26e602af5a3a367da0cb052 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:43:05 +0200 Subject: [PATCH 281/402] Made namespace hint absolute in PHPDoc. --- lib/class-plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 944a7b40f..0df8edc72 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -4,7 +4,7 @@ class Plugin { /** - * @var WP_Parser\Relationships + * @var \WP_Parser\Relationships */ var $relationships; From fb6febb27738de7a0c3d2725141e9f2db999e7ad Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:54:58 +0200 Subject: [PATCH 282/402] Updated for coding style and conditions clarity. --- lib/class-function-call-reflector.php | 4 ++-- lib/runner.php | 4 ++-- lib/template.php | 12 +++++++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php index a296a5fd6..e2e945d86 100644 --- a/lib/class-function-call-reflector.php +++ b/lib/class-function-call-reflector.php @@ -19,8 +19,8 @@ class Function_Call_Reflector extends BaseReflector { * @return string */ public function getName() { - if (isset($this->node->namespacedName)) { - return '\\'.implode('\\', $this->node->namespacedName->parts); + if ( isset( $this->node->namespacedName ) ) { + return '\\' . implode( '\\', $this->node->namespacedName->parts ); } $shortName = $this->getShortName(); diff --git a/lib/runner.php b/lib/runner.php index 58fc63bac..77afcf8d6 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -10,7 +10,7 @@ function get_wp_files( $directory ) { try { foreach ( $iterableFiles as $file ) { - if ( $file->getExtension() !== 'php' ) { + if ( 'php' !== $file->getExtension() ) { continue; } @@ -142,7 +142,7 @@ function export_docblock( $element ) { if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { // Version string. $version = $tag->getVersion(); - if ( !empty( $version ) ) { + if ( ! empty( $version ) ) { $t['content'] = $version; } // Description string. diff --git a/lib/template.php b/lib/template.php index 868597e4a..e2d2ab998 100644 --- a/lib/template.php +++ b/lib/template.php @@ -7,10 +7,16 @@ */ function the_content() { + static $post_types = array( + 'wp-parser-class', + 'wp-parser-method', + 'wp-parser-function', + 'wp-parser-hook', + ); $post = get_post(); $content = get_the_content(); - if ( $post->post_type !== 'wp-parser-class' && $post->post_type !== 'wp-parser-method' && $post->post_type !== 'wp-parser-function' && $post->post_type !== 'wp-parser-hook' ) { + if ( ! in_array( $post->post_type, $post_types, true ) ) { return $content; } @@ -198,7 +204,7 @@ function get_hook_arguments() { if ( ! empty( $param_tag['variable'] ) ) { $param['name'] = $param_tag['variable']; - } elseif ( strpos( $arg, '$' ) === 0 ) { + } elseif ( 0 === strpos( $arg, '$' ) ) { $param['name'] = $arg; } else { $param['name'] = '$(unnamed)'; @@ -273,7 +279,7 @@ function get_hook_prototype() { $args = get_hook_arguments(); foreach ( $args as $arg ) { $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); - if ( ! empty( $arg['value'] ) && strpos( $arg['value'], '$' ) !== 0 ) { + if ( ! empty( $arg['value'] ) && 0 !== strpos( $arg['value'], '$' ) ) { $friendly .= ' <span class="default"> = <span class="value">' . $arg['value'] . '</span></span>'; } From b1663371d66c80895e9d6b1d12d52eb204f80c3e Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 14 Dec 2014 23:59:06 +0200 Subject: [PATCH 283/402] Simplified namespace usage. --- lib/class-file-reflector.php | 12 ++++++------ lib/class-method-call-reflector.php | 11 ++++------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index fde94e285..95df11128 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -16,8 +16,8 @@ class File_Reflector extends FileReflector { * List of elements used in global scope in this file, indexed by element type. * * @var array { - * @type \WP_Parser\Hook_Reflector[] $hooks The action and filters. - * @type \WP_Parser\Function_Call_Reflector[] $functions The functions called. + * @type Hook_Reflector[] $hooks The action and filters. + * @type Function_Call_Reflector[] $functions The functions called. * } */ public $uses = array(); @@ -81,7 +81,7 @@ public function enterNode( \PHPParser_Node $node ) { // Parse out hook definitions and function calls and add them to the queue. case 'Expr_FuncCall': - $function = new \WP_Parser\Function_Call_Reflector( $node, $this->context ); + $function = new Function_Call_Reflector( $node, $this->context ); /* * If the function call is in the global scope, add it to the @@ -100,7 +100,7 @@ public function enterNode( \PHPParser_Node $node ) { $this->last_doc = null; } - $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); + $hook = new Hook_Reflector( $node, $this->context ); /* * If the hook is in the global scope, add it to the file's @@ -117,7 +117,7 @@ public function enterNode( \PHPParser_Node $node ) { // Parse out method calls, so we can export where methods are used. case 'Expr_MethodCall': - $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + $method = new Method_Call_Reflector( $node, $this->context ); /* * If the method call is in the global scope, add it to the @@ -133,7 +133,7 @@ public function enterNode( \PHPParser_Node $node ) { // Parse out method calls, so we can export where methods are used. case 'Expr_StaticCall': - $method = new \WP_Parser\Static_Method_Call_Reflector( $node, $this->context ); + $method = new Static_Method_Call_Reflector( $node, $this->context ); /* * If the method call is in the global scope, add it to the diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index e6d874e9f..2e5f8c007 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -1,12 +1,9 @@ <?php -/** - * A reflection class for a method call. - */ - namespace WP_Parser; use phpDocumentor\Reflection\BaseReflector; +use phpDocumentor\Reflection\ClassReflector; /** * A reflection of a method call expression. @@ -16,7 +13,7 @@ class Method_Call_Reflector extends BaseReflector { /** * The class that this method was called in, if it was called in a class. * - * @var \phpDocumentor\Reflection\ClassReflector|false + * @var ClassReflector|false */ protected $called_in_class = false; @@ -54,9 +51,9 @@ public function getName() { /** * Set the class that this method was called within. * - * @param \phpDocumentor\Reflection\ClassReflector $class + * @param ClassReflector $class */ - public function set_class( \phpDocumentor\Reflection\ClassReflector $class ) { + public function set_class( ClassReflector $class ) { $this->called_in_class = $class; } From d3c282ef858ef27c8f7c5caaabc6399b278a2133 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 00:20:10 +0200 Subject: [PATCH 284/402] Expanded overly short variable names. --- lib/class-hook-reflector.php | 14 ++++----- lib/class-importer.php | 58 ++++++++++++++++++------------------ lib/class-relationships.php | 22 +++++++------- lib/runner.php | 20 ++++++------- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 99f785a1d..1103d0677 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -13,11 +13,11 @@ public function getName() { } private function cleanupName( $name ) { - $m = array(); + $matches = array(); // quotes on both ends of a string - if ( preg_match( '/^[\'"]([^\'"]*)[\'"]$/', $name, $m ) ) { - return $m[1]; + if ( preg_match( '/^[\'"]([^\'"]*)[\'"]$/', $name, $matches ) ) { + return $matches[1]; } // two concatenated things, last one of them a variable @@ -25,12 +25,12 @@ private function cleanupName( $name ) { '/(?:[\'"]([^\'"]*)[\'"]\s*\.\s*)?' . // First filter name string (optional) '(\$[^\s]*)' . // Dynamic variable '(?:\s*\.\s*[\'"]([^\'"]*)[\'"])?/', // Second filter name string (optional) - $name, $m ) ) { + $name, $matches ) ) { - if ( isset( $m[3] ) ) { - return $m[1] . '{' . $m[2] . '}' . $m[3]; + if ( isset( $matches[3] ) ) { + return $matches[1] . '{' . $matches[2] . '}' . $matches[3]; } else { - return $m[1] . '{' . $m[2] . '}'; + return $matches[1] . '{' . $matches[2] . '}'; } } diff --git a/lib/class-importer.php b/lib/class-importer.php index 1462d7fd7..7a70c8f36 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -80,7 +80,7 @@ class Importer { */ public function __construct( array $args = array() ) { - $r = wp_parse_args( + $properties = wp_parse_args( $args, array( 'post_type_class' => 'wp-parser-class', @@ -93,7 +93,7 @@ public function __construct( array $args = array() ) { ) ); - foreach ( $r as $property_name => $value ) { + foreach ( $properties as $property_name => $value ) { $this->{$property_name} = $value; } } @@ -276,14 +276,14 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // Functions if ( ! empty( $file['functions'] ) ) { - $i = 0; + $count = 0; foreach ( $file['functions'] as $function ) { $this->import_function( $function, 0, $import_internal ); - $i ++; + $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) { + if ( ! $skip_sleep && $count % 10 == 0 ) { // TODO figure our why are we still doing this sleep( 3 ); } } @@ -291,28 +291,28 @@ public function import_file( array $file, $skip_sleep = false, $import_internal // Classes if ( ! empty( $file['classes'] ) ) { - $i = 0; + $count = 0; foreach ( $file['classes'] as $class ) { $this->import_class( $class, $import_internal ); - $i ++; + $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) { + if ( ! $skip_sleep && $count % 10 == 0 ) { sleep( 3 ); } } } if ( ! empty( $file['hooks'] ) ) { - $i = 0; + $count = 0; foreach ( $file['hooks'] as $hook ) { $this->import_hook( $hook, 0, $import_internal ); - $i ++; + $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $i % 10 == 0 ) { + if ( ! $skip_sleep && $count % 10 == 0 ) { sleep( 3 ); } } @@ -562,34 +562,34 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Insert/update the item post if ( ! empty( $existing_post_id ) ) { $is_new_post = false; - $ID = $post_data['ID'] = (int) $existing_post_id; + $post_id = $post_data['ID'] = (int) $existing_post_id; $post_needed_update = array_diff_assoc( sanitize_post( $post_data, 'db' ), get_post( $existing_post_id, ARRAY_A, 'db' ) ); if ( $post_needed_update ) { - $ID = wp_update_post( wp_slash( $post_data ), true ); + $post_id = wp_update_post( wp_slash( $post_data ), true ); } } else { - $ID = wp_insert_post( wp_slash( $post_data ), true ); + $post_id = wp_insert_post( wp_slash( $post_data ), true ); } $anything_updated = array(); - if ( ! $ID || is_wp_error( $ID ) ) { + if ( ! $post_id || is_wp_error( $post_id ) ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for class "%1$s"', $data['name'], $ID->get_error_message() ); + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for class "%1$s"', $data['name'], $post_id->get_error_message() ); break; case $this->post_type_method: - $this->errors[] = "\t\t" . sprintf( 'Problem inserting/updating post for method "%1$s"', $data['name'], $ID->get_error_message() ); + $this->errors[] = "\t\t" . sprintf( 'Problem inserting/updating post for method "%1$s"', $data['name'], $post_id->get_error_message() ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->errors[] = $indent . sprintf( 'Problem inserting/updating post for hook "%1$s"', $data['name'], $ID->get_error_message() ); + $this->errors[] = $indent . sprintf( 'Problem inserting/updating post for hook "%1$s"', $data['name'], $post_id->get_error_message() ); break; default: - $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for function "%1$s"', $data['name'], $ID->get_error_message() ); + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for function "%1$s"', $data['name'], $post_id->get_error_message() ); } return false; @@ -608,7 +608,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal // Assign the tax item to the post if ( ! is_wp_error( $since_term ) ) { $added_term_relationship = did_action( 'added_term_relationship' ); - wp_set_object_terms( $ID, (int) $since_term['term_id'], $this->taxonomy_since_version, true ); + wp_set_object_terms( $post_id, (int) $since_term['term_id'], $this->taxonomy_since_version, true ); if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { $anything_updated[] = true; } @@ -670,14 +670,14 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } } $added_term_relationship = did_action( 'added_term_relationship' ); - wp_set_object_terms( $ID, $package_term_ids, $this->taxonomy_package ); + wp_set_object_terms( $post_id, $package_term_ids, $this->taxonomy_package ); if ( did_action( 'added_term_relationship' ) > $added_term_relationship ) { $anything_updated[] = true; } // Set other taxonomy and post meta to use in the theme templates $added_item = did_action( 'added_term_relationship' ); - wp_set_object_terms( $ID, $this->file_meta['term_id'], $this->taxonomy_file ); + wp_set_object_terms( $post_id, $this->file_meta['term_id'], $this->taxonomy_file ); if ( did_action( 'added_term_relationship' ) > $added_item ) { $anything_updated[] = true; } @@ -688,11 +688,11 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } if ( $post_data['post_type'] !== $this->post_type_class ) { - $anything_updated[] = update_post_meta( $ID, '_wp-parser_args', $data['arguments'] ); + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_args', $data['arguments'] ); } - $anything_updated[] = update_post_meta( $ID, '_wp-parser_line_num', (string) $data['line'] ); - $anything_updated[] = update_post_meta( $ID, '_wp-parser_end_line_num', (string) $data['end_line'] ); - $anything_updated[] = update_post_meta( $ID, '_wp-parser_tags', $data['doc']['tags'] ); + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_line_num', (string) $data['line'] ); + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_end_line_num', (string) $data['end_line'] ); + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_tags', $data['doc']['tags'] ); // If the post didn't need to be updated, but meta or tax changed, update it to bump last modified. if ( ! $is_new_post && ! $post_needed_update && array_filter( $anything_updated ) ) { @@ -741,13 +741,13 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal /** * Action at the end of importing an item. * - * @param int $ID Optional; post ID of the inserted or updated item. + * @param int $post_id Optional; post ID of the inserted or updated item. * @param array $data PHPDoc data for the item we just imported * @param array $post_data WordPress data of the post we just inserted or updated */ - do_action( 'wp_parser_import_item', $ID, $data, $post_data ); + do_action( 'wp_parser_import_item', $post_id, $data, $post_data ); - return $ID; + return $post_id; } /** diff --git a/lib/class-relationships.php b/lib/class-relationships.php index dc05a3a01..02897c1c1 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -134,16 +134,16 @@ public function wp_parser_starting_import() { * These will be used to associate post IDs to each other without doing an additional * database query to map each post's slug to its ID. * - * @param int $ID Post ID of item just imported. - * @param array $data Parser data - * @param array $post_data Post data + * @param int $post_id Post ID of item just imported. + * @param array $data Parser data + * @param array $post_data Post data */ - public function import_item( $ID, $data, $post_data ) { + public function import_item( $post_id, $data, $post_data ) { $from_type = $post_data['post_type']; $slug = $post_data['post_name']; - $this->slugs_to_ids[ $from_type ][ $slug ] = $ID; + $this->slugs_to_ids[ $from_type ][ $slug ] = $post_id; // Build Relationships: Functions if ( $this->post_types['function'] == $from_type ) { @@ -153,7 +153,7 @@ public function import_item( $ID, $data, $post_data ) { foreach ( (array) @$data['uses']['functions'] as $to_function ) { $to_function_slug = $this->name_to_slug( $to_function['name'] ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_function_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_function_slug; } // Functions to Methods @@ -167,7 +167,7 @@ public function import_item( $ID, $data, $post_data ) { } $to_method_slug = $this->name_to_slug( $to_method_slug ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_method_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_method_slug; } // Functions to Hooks @@ -175,7 +175,7 @@ public function import_item( $ID, $data, $post_data ) { foreach ( (array) @$data['hooks'] as $to_hook ) { $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_hook_slug; } } @@ -186,7 +186,7 @@ public function import_item( $ID, $data, $post_data ) { foreach ( (array) @$data['uses']['functions'] as $to_function ) { $to_function_slug = $this->name_to_slug( $to_function['name'] ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_function_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_function_slug; } // Methods to Methods @@ -204,7 +204,7 @@ public function import_item( $ID, $data, $post_data ) { } $to_method_slug = $this->name_to_slug( $to_method_slug ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_method_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_method_slug; } // Methods to Hooks @@ -212,7 +212,7 @@ public function import_item( $ID, $data, $post_data ) { foreach ( (array) @$data['hooks'] as $to_hook ) { $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); - $this->relationships[ $from_type ][ $ID ][ $to_type ][] = $to_hook_slug; + $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_hook_slug; } } diff --git a/lib/runner.php b/lib/runner.php index 77afcf8d6..4789e62f2 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -16,7 +16,7 @@ function get_wp_files( $directory ) { $files[] = $file->getPathname(); } - } catch ( \UnexpectedValueException $e ) { + } catch ( \UnexpectedValueException $exc ) { printf( 'Directory [%s] contained a directory we can not recurse into', $directory ); } @@ -87,7 +87,7 @@ function parse_files( $files, $root ) { } foreach ( $file->getClasses() as $class ) { - $cl = array( + $class_data = array( 'name' => $class->getShortName(), 'line' => $class->getLineNumber(), 'end_line' => $class->getNode()->getAttribute( 'endLine' ), @@ -100,7 +100,7 @@ function parse_files( $files, $root ) { 'doc' => export_docblock( $class ), ); - $out['classes'][] = $cl; + $out['classes'][] = $class_data; } $output[] = $out; @@ -126,34 +126,34 @@ function export_docblock( $element ) { ); foreach ( $docblock->getTags() as $tag ) { - $t = array( + $tag_data = array( 'name' => $tag->getName(), 'content' => preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ), ); if ( method_exists( $tag, 'getTypes' ) ) { - $t['types'] = $tag->getTypes(); + $tag_data['types'] = $tag->getTypes(); } if ( method_exists( $tag, 'getVariableName' ) ) { - $t['variable'] = $tag->getVariableName(); + $tag_data['variable'] = $tag->getVariableName(); } if ( method_exists( $tag, 'getReference' ) ) { - $t['refers'] = $tag->getReference(); + $tag_data['refers'] = $tag->getReference(); } if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { // Version string. $version = $tag->getVersion(); if ( ! empty( $version ) ) { - $t['content'] = $version; + $tag_data['content'] = $version; } // Description string. if ( method_exists( $tag, 'getDescription' ) ) { $description = preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ); if ( ! empty( $description ) ) { - $t['description'] = $description; + $tag_data['description'] = $description; } } } - $output['tags'][] = $t; + $output['tags'][] = $tag_data; } return $output; From 71104ba2558f0ce3bd5f26fdd9c00a67f05b072d Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 00:28:27 +0200 Subject: [PATCH 285/402] Added missing parameters to PHPDoc. --- lib/class-command.php | 8 ++++++++ lib/class-file-reflector.php | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/lib/class-command.php b/lib/class-command.php index 7f7d23f84..e5eb363b9 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -14,6 +14,8 @@ class Command extends WP_CLI_Command { * Generate a JSON file containing the PHPDoc markup, and save to filesystem. * * @synopsis <directory> [<output_file>] + * + * @param array $args */ public function export( $args ) { $directory = $args[0]; @@ -46,6 +48,9 @@ public function export( $args ) { * Read a JSON file containing the PHPDoc markup, convert it into WordPress posts, and insert into DB. * * @synopsis <file> [--quick] [--import-internal] + * + * @param array $args + * @param array $assoc_args */ public function import( $args, $assoc_args ) { list( $file ) = $args; @@ -78,6 +83,9 @@ public function import( $args, $assoc_args ) { * * @subcommand create * @synopsis <directory> [--quick] [--import-internal] [--user] + * + * @param array $args + * @param array $assoc_args */ public function create( $args, $assoc_args ) { list( $directory ) = $args; diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 95df11128..be0a9c02b 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -67,6 +67,8 @@ class File_Reflector extends FileReflector { * * Finally, we pick up any docblocks for nodes that usually aren't documentable, * so they can be assigned to the hooks to which they may belong. + * + * @param \PHPParser_Node $node */ public function enterNode( \PHPParser_Node $node ) { parent::enterNode( $node ); @@ -165,6 +167,8 @@ public function enterNode( \PHPParser_Node $node ) { * * We can now access the function/method reflectors, so we can assign any queued * hooks to them. The reflector for a node isn't created until the node is left. + * + * @param \PHPParser_Node $node */ public function leaveNode( \PHPParser_Node $node ) { From 0758ad0922b7c4952ec4dc0bb00054fd902f48a1 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 21:12:08 +0200 Subject: [PATCH 286/402] Simplified nested logic levels. --- lib/class-function-call-reflector.php | 23 +++++++++--------- lib/class-static-method-call-reflector.php | 12 +++++----- lib/runner.php | 23 ++++++++++-------- lib/template.php | 27 +++++----------------- 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php index e2e945d86..83e5db49a 100644 --- a/lib/class-function-call-reflector.php +++ b/lib/class-function-call-reflector.php @@ -25,20 +25,21 @@ public function getName() { $shortName = $this->getShortName(); - if ( ! is_a( $shortName, 'PHPParser_Node_Name' ) ) { + if ( is_a( $shortName, 'PHPParser_Node_Name' ) ) { + return (string) $shortName; + } - /** @var \PHPParser_Node_Expr_ArrayDimFetch $shortName */ - if ( is_a( $shortName, 'PHPParser_Node_Expr_ArrayDimFetch' ) ) { - $var = $shortName->var->name; - $dim = $shortName->dim->name->parts[0]; + /** @var \PHPParser_Node_Expr_ArrayDimFetch $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_ArrayDimFetch' ) ) { + $var = $shortName->var->name; + $dim = $shortName->dim->name->parts[0]; - return "\${$var}[{$dim}]"; - } + return "\${$var}[{$dim}]"; + } - /** @var \PHPParser_Node_Expr_Variable $shortName */ - if ( is_a( $shortName, 'PHPParser_Node_Expr_Variable' ) ) { - return $shortName->name; - } + /** @var \PHPParser_Node_Expr_Variable $shortName */ + if ( is_a( $shortName, 'PHPParser_Node_Expr_Variable' ) ) { + return $shortName->name; } return (string) $shortName; diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index fc4b56be6..5598aa6af 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -19,12 +19,12 @@ class Static_Method_Call_Reflector extends Method_Call_Reflector { public function getName() { $class = $this->node->class->parts[0]; - if ( $this->called_in_class ) { - if ( 'self' === $class ) { - $class = $this->called_in_class->getShortName(); - } elseif ( 'parent' === $class ) { - $class = $this->called_in_class->getNode()->extends; - } + if ( $this->called_in_class && 'self' === $class ) { + $class = $this->called_in_class->getShortName(); + } + + if ( $this->called_in_class && 'parent' === $class ) { + $class = $this->called_in_class->getNode()->extends; } return array( $class, $this->getShortName() ); diff --git a/lib/runner.php b/lib/runner.php index 4789e62f2..e530ab866 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -2,6 +2,8 @@ namespace WP_Parser; +use phpDocumentor\Reflection\ClassReflector\PropertyReflector; + function get_wp_files( $directory ) { $iterableFiles = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $directory ) @@ -109,6 +111,11 @@ function parse_files( $files, $root ) { return $output; } +/** + * @param $element + * + * @return array + */ function export_docblock( $element ) { $docblock = $element->getDocBlock(); if ( ! $docblock ) { @@ -190,11 +197,16 @@ function export_arguments( array $arguments ) { return $output; } +/** + * @param PropertyReflector[] $properties + * + * @return array + */ function export_properties( array $properties ) { $out = array(); foreach ( $properties as $property ) { - $prop = array( + $out[] = array( 'name' => $property->getName(), 'line' => $property->getLineNumber(), 'end_line' => $property->getNode()->getAttribute( 'endLine' ), @@ -202,15 +214,8 @@ function export_properties( array $properties ) { // 'final' => $property->isFinal(), 'static' => $property->isStatic(), 'visibililty' => $property->getVisibility(), + 'doc' => export_docblock( $property ), ); - - $docblock = export_docblock( $property ); - if ( $docblock ) { - $prop['doc'] = $docblock; - } - - $out[] = $prop; - } return $out; diff --git a/lib/template.php b/lib/template.php index e2d2ab998..93dc5c341 100644 --- a/lib/template.php +++ b/lib/template.php @@ -20,31 +20,19 @@ function the_content() { return $content; } - if ( 'wp-parser-hook' === $post->post_type ) { - $before_content = get_hook_prototype(); - } else { - $before_content = get_prototype(); - } - + $before_content = ( 'wp-parser-hook' === $post->post_type ) ? get_hook_prototype() : get_prototype(); $before_content .= '<p class="wp-parser-description">' . get_the_excerpt() . '</p>'; $before_content .= '<div class="wp-parser-longdesc">'; $after_content = '</div>'; - $after_content .= '<div class="wp-parser-arguments"><h3>Arguments</h3>'; - if ( 'wp-parser-hook' === $post->post_type ) { - $args = get_hook_arguments(); - } else { - $args = get_arguments(); - } + $args = ( 'wp-parser-hook' === $post->post_type ) ? get_hook_arguments() : get_arguments(); foreach ( $args as $arg ) { $after_content .= '<div class="wp-parser-arg">'; $after_content .= '<h4><code><span class="type">' . implode( '|', $arg['types'] ) . '</span> <span class="variable">' . $arg['name'] . '</span></code></h4>'; - if ( ! empty( $arg['desc'] ) ) { - $after_content .= wpautop( $arg['desc'], false ); - } + $after_content .= empty( $arg['desc'] ) ? '' : wpautop( $arg['desc'], false ); $after_content .= '</div>'; } @@ -243,9 +231,7 @@ function get_prototype() { $args = get_arguments(); foreach ( $args as $arg ) { $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); - if ( ! empty( $arg['default_value'] ) ) { - $friendly .= ' <span class="default"> = <span class="value">' . $arg['default_value'] . '</span></span>'; - } + $friendly .= empty( $arg['default_value'] ) ? '' : ' <span class="default"> = <span class="value">' . $arg['default_value'] . '</span></span>'; $friendly_args[] = $friendly; } @@ -279,9 +265,8 @@ function get_hook_prototype() { $args = get_hook_arguments(); foreach ( $args as $arg ) { $friendly = sprintf( '<span class="type">%s</span> <span class="variable">%s</span>', implode( '|', $arg['types'] ), $arg['name'] ); - if ( ! empty( $arg['value'] ) && 0 !== strpos( $arg['value'], '$' ) ) { - $friendly .= ' <span class="default"> = <span class="value">' . $arg['value'] . '</span></span>'; - } + $has_value = ! empty( $arg['value'] ) && 0 !== strpos( $arg['value'], '$' ); + $friendly .= $has_value ? ' <span class="default"> = <span class="value">' . $arg['value'] . '</span></span>' : ''; $friendly_args[] = $friendly; } From 9cf4c03aee2c866bc05d9e516668ca5c0c866c97 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 22:00:54 +0200 Subject: [PATCH 287/402] Added missing PHPDoc. --- lib/class-file-reflector.php | 13 ++++++++++ lib/class-hook-reflector.php | 20 ++++++++++++++++ lib/class-importer.php | 9 +++++++ lib/class-plugin.php | 9 +++++++ lib/class-pretty-printer.php | 3 +++ lib/class-relationships.php | 6 +++++ lib/class-static-method-call-reflector.php | 8 +++---- lib/class-wp-cli-importer.php | 20 +++++++++------- lib/runner.php | 28 ++++++++++++++++++++++ 9 files changed, 103 insertions(+), 13 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index be0a9c02b..64cc69dd6 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -220,6 +220,11 @@ public function leaveNode( \PHPParser_Node $node ) { } } + /** + * @param \PHPParser_Node $node + * + * @return bool + */ protected function isFilter( \PHPParser_Node $node ) { // Ignore variable functions if ( $node->name->getType() !== 'Name' ) { @@ -238,10 +243,18 @@ protected function isFilter( \PHPParser_Node $node ) { return in_array( $calling, $functions ); } + /** + * @return File_Reflector + */ protected function getLocation() { return empty( $this->location ) ? $this : end( $this->location ); } + /** + * @param \PHPParser_Node $node + * + * @return bool + */ protected function isNodeDocumentable( \PHPParser_Node $node ) { return parent::isNodeDocumentable( $node ) || ( $node instanceof \PHPParser_Node_Expr_FuncCall diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 1103d0677..5120def20 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -5,13 +5,24 @@ use phpDocumentor\Reflection\BaseReflector; use PHPParser_PrettyPrinter_Default; +/** + * Custom reflector for WordPress hooks. + */ class Hook_Reflector extends BaseReflector { + /** + * @return string + */ public function getName() { $printer = new PHPParser_PrettyPrinter_Default; return $this->cleanupName( $printer->prettyPrintExpr( $this->node->args[0]->value ) ); } + /** + * @param string $name + * + * @return string + */ private function cleanupName( $name ) { $matches = array(); @@ -37,10 +48,16 @@ private function cleanupName( $name ) { return $name; } + /** + * @return string + */ public function getShortName() { return $this->getName(); } + /** + * @return string + */ public function getType() { $type = 'filter'; switch ( (string) $this->node->name ) { @@ -58,6 +75,9 @@ public function getType() { return $type; } + /** + * @return array + */ public function getArgs() { $printer = new Pretty_Printer; $args = array(); diff --git a/lib/class-importer.php b/lib/class-importer.php index 7a70c8f36..69a36e4dc 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -207,12 +207,21 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct } } + /** + * @param int|string $term + * @param string $taxonomy + * @param array $args + * + * @return array|mixed|\WP_Error + */ protected function insert_term( $term, $taxonomy, $args = array() ) { + if ( isset( $this->inserted_terms[ $taxonomy ][ $term ] ) ) { return $this->inserted_terms[ $taxonomy ][ $term ]; } $parent = isset( $args['parent'] ) ? $args['parent'] : 0; + if ( ! $inserted_term = term_exists( $term, $taxonomy, $parent ) ) { $inserted_term = wp_insert_term( $term, $taxonomy, $args ); } diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 0df8edc72..db954dd4c 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -1,6 +1,9 @@ <?php namespace WP_Parser; +/** + * Main plugin's class. Registers things and adds WP CLI command. + */ class Plugin { /** @@ -170,6 +173,12 @@ public function register_taxonomies() { } } + /** + * @param string $link + * @param \WP_Post $post + * + * @return string|void + */ public function method_permalink( $link, $post ) { if ( $post->post_type !== 'wp-parser-method' || $post->post_parent == 0 ) { diff --git a/lib/class-pretty-printer.php b/lib/class-pretty-printer.php index dea55532a..31c37e28f 100644 --- a/lib/class-pretty-printer.php +++ b/lib/class-pretty-printer.php @@ -5,6 +5,9 @@ use PHPParser_Node_Arg; use PHPParser_PrettyPrinter_Default; +/** + * Extends default printer for arguments. + */ class Pretty_Printer extends PHPParser_PrettyPrinter_Default { /** * Pretty prints an argument. diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 02897c1c1..74a6e590c 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -4,6 +4,9 @@ use WP_CLI; +/** + * Registers and implements relationships with Posts 2 Posts. + */ class Relationships { /** @@ -33,6 +36,9 @@ class Relationships { */ var $relationships = array(); + /** + * Adds the actions. + */ public function __construct() { add_action( 'plugins_loaded', array( $this, 'require_posts_to_posts' ) ); add_action( 'wp_loaded', array( $this, 'register_post_relationships' ) ); diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index 5598aa6af..21f8a7062 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -1,9 +1,5 @@ <?php -/** - * A reflection class for a method call. - */ - namespace WP_Parser; /** @@ -30,7 +26,9 @@ public function getName() { return array( $class, $this->getShortName() ); } - + /** + * @return bool + */ public function isStatic() { return true; } diff --git a/lib/class-wp-cli-importer.php b/lib/class-wp-cli-importer.php index cb8b0bc8d..586c4ac09 100644 --- a/lib/class-wp-cli-importer.php +++ b/lib/class-wp-cli-importer.php @@ -1,11 +1,5 @@ <?php -/** - * Importer class for use with WP-CLI. - * - * @package WP_Parser - */ - namespace WP_Parser; use WP_CLI; @@ -15,21 +9,31 @@ */ class WP_CLI_Importer extends Importer { + /** + * @param string $message + */ public function log( $message ) { WP_CLI::log( $message ); } + /** + * @param string $message + */ public function warn( $message ) { WP_CLI::warning( $message ); } + /** + * @param string $message + */ public function error( $message ) { WP_CLI::error( $message ); } + /** + * @param string $message + */ public function success( $message ) { WP_CLI::success( $message ); } } - -// EOF diff --git a/lib/runner.php b/lib/runner.php index e530ab866..4b105e27e 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -2,8 +2,15 @@ namespace WP_Parser; +use phpDocumentor\Reflection\ClassReflector\MethodReflector; use phpDocumentor\Reflection\ClassReflector\PropertyReflector; +use phpDocumentor\Reflection\FunctionReflector\ArgumentReflector; +/** + * @param string $directory + * + * @return array + */ function get_wp_files( $directory ) { $iterableFiles = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $directory ) @@ -25,6 +32,12 @@ function get_wp_files( $directory ) { return $files; } +/** + * @param array $files + * @param string $root + * + * @return array + */ function parse_files( $files, $root ) { $output = array(); @@ -166,6 +179,11 @@ function export_docblock( $element ) { return $output; } +/** + * @param Hook_Reflector[] $hooks + * + * @return array + */ function export_hooks( array $hooks ) { $out = array(); @@ -183,6 +201,11 @@ function export_hooks( array $hooks ) { return $out; } +/** + * @param ArgumentReflector[] $arguments + * + * @return array + */ function export_arguments( array $arguments ) { $output = array(); @@ -221,6 +244,11 @@ function export_properties( array $properties ) { return $out; } +/** + * @param MethodReflector[] $methods + * + * @return array + */ function export_methods( array $methods ) { $out = array(); From e7c5525d697767cc0417ea16c357e5322500a8d9 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 22:13:20 +0200 Subject: [PATCH 288/402] Adjusted variable names and typos for spelling. --- lib/class-importer.php | 6 +++--- lib/runner.php | 12 ++++++------ lib/template.php | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 69a36e4dc..5bc0402dd 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -8,7 +8,7 @@ class Importer { /** - * Taxonony name for files + * Taxonomy name for files * * @var string */ @@ -171,7 +171,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct } /** - * Workaround for a WP core bug where hierarchial taxonomy caches are not being cleared + * Workaround for a WP core bug where hierarchical taxonomy caches are not being cleared * * https://core.trac.wordpress.org/ticket/14485 * http://wordpress.stackexchange.com/questions/8357/inserting-terms-in-an-hierarchical-taxonomy @@ -760,7 +760,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } /** - * Log a messsage. + * Log a message. * * @param string $message The message to log. */ diff --git a/lib/runner.php b/lib/runner.php index 4b105e27e..df39b52c4 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -250,10 +250,10 @@ function export_properties( array $properties ) { * @return array */ function export_methods( array $methods ) { - $out = array(); + $output = array(); foreach ( $methods as $method ) { - $meth = array( + $method_data = array( 'name' => $method->getShortName(), 'line' => $method->getLineNumber(), 'end_line' => $method->getNode()->getAttribute( 'endLine' ), @@ -266,17 +266,17 @@ function export_methods( array $methods ) { ); if ( ! empty( $method->uses ) ) { - $meth['uses'] = export_uses( $method->uses ); + $method_data['uses'] = export_uses( $method->uses ); if ( ! empty( $method->uses['hooks'] ) ) { - $meth['hooks'] = export_hooks( $method->uses['hooks'] ); + $method_data['hooks'] = export_hooks( $method->uses['hooks'] ); } } - $out[] = $meth; + $output[] = $method_data; } - return $out; + return $output; } /** diff --git a/lib/template.php b/lib/template.php index 93dc5c341..6b07bc336 100644 --- a/lib/template.php +++ b/lib/template.php @@ -112,9 +112,9 @@ function the_return_desc() { * @return bool */ function arguments_have_default_values() { - $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_args', true ), array( 'name' => 'default' ) ); + $return = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_args', true ), array( 'name' => 'default' ) ); - return apply_filters( 'wp_parser_arguments_have_default_values', ! empty( $retval ) ); + return apply_filters( 'wp_parser_arguments_have_default_values', ! empty( $return ) ); } /** @@ -123,9 +123,9 @@ function arguments_have_default_values() { * @return bool */ function is_function_deprecated() { - $retval = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_tags', true ), array( 'name' => 'deprecated' ) ); + $return = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_tags', true ), array( 'name' => 'deprecated' ) ); - return apply_filters( 'wp_parser_is_function_deprecated', ! empty( $retval ) ); + return apply_filters( 'wp_parser_is_function_deprecated', ! empty( $return ) ); } /** From 7d01c5ff085aa6c20a984a54aa580ad8146b4021 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 22:39:43 +0200 Subject: [PATCH 289/402] Fixed typo in array key. --- lib/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index df39b52c4..094aec0fc 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -236,7 +236,7 @@ function export_properties( array $properties ) { 'default' => $property->getDefault(), // 'final' => $property->isFinal(), 'static' => $property->isStatic(), - 'visibililty' => $property->getVisibility(), + 'visibility' => $property->getVisibility(), 'doc' => export_docblock( $property ), ); } From c1cda659de4edc2997ba16ac057310cf01b83b4a Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Mon, 15 Dec 2014 22:40:12 +0200 Subject: [PATCH 290/402] Added type hints for variables. --- lib/class-file-reflector.php | 2 ++ lib/runner.php | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 64cc69dd6..5cb07f912 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -178,6 +178,7 @@ public function leaveNode( \PHPParser_Node $node ) { case 'Stmt_Class': $class = end( $this->classes ); if ( ! empty( $this->method_uses_queue ) ) { + /** @var Reflection\ClassReflector\MethodReflector $method */ foreach ( $class->getMethods() as $method ) { if ( isset( $this->method_uses_queue[ $method->getName() ] ) ) { if ( isset( $this->method_uses_queue[ $method->getName() ]['methods'] ) ) { @@ -186,6 +187,7 @@ public function leaveNode( \PHPParser_Node $node ) { * That allows us to later get the correct class name for $this, self, parent. */ foreach ( $this->method_uses_queue[ $method->getName() ]['methods'] as $method_call ) { + /** @var Method_Call_Reflector $method_call */ $method_call->set_class( $class ); } } diff --git a/lib/runner.php b/lib/runner.php index 094aec0fc..5f6f0501f 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -2,8 +2,10 @@ namespace WP_Parser; +use phpDocumentor\Reflection\BaseReflector; use phpDocumentor\Reflection\ClassReflector\MethodReflector; use phpDocumentor\Reflection\ClassReflector\PropertyReflector; +use phpDocumentor\Reflection\FunctionReflector; use phpDocumentor\Reflection\FunctionReflector\ArgumentReflector; /** @@ -125,7 +127,7 @@ function parse_files( $files, $root ) { } /** - * @param $element + * @param BaseReflector $element * * @return array */ @@ -295,6 +297,8 @@ function export_uses( array $uses ) { unset( $uses['hooks'] ); foreach ( $uses as $type => $used_elements ) { + + /** @var MethodReflector|FunctionReflector $element */ foreach ( $used_elements as $element ) { $name = $element->getName(); From 822d3374293aaa5cb3f517ccc2bb340ad5e6ac91 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Tue, 16 Dec 2014 19:15:29 +0200 Subject: [PATCH 291/402] Added more type hints. --- lib/class-method-call-reflector.php | 1 + lib/runner.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index 2e5f8c007..d770439c3 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -36,6 +36,7 @@ public function getName() { if ( is_a( $caller, 'PHPParser_Node_Expr_FuncCall' ) ) { // Add parentheses to signify this is a function call + /** @var \PHPParser_Node_Expr_FuncCall $caller */ $caller = $caller->name->parts[0] . '()'; } diff --git a/lib/runner.php b/lib/runner.php index 5f6f0501f..cccf0a64d 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -7,6 +7,7 @@ use phpDocumentor\Reflection\ClassReflector\PropertyReflector; use phpDocumentor\Reflection\FunctionReflector; use phpDocumentor\Reflection\FunctionReflector\ArgumentReflector; +use phpDocumentor\Reflection\ReflectionAbstract; /** * @param string $directory @@ -127,7 +128,7 @@ function parse_files( $files, $root ) { } /** - * @param BaseReflector $element + * @param BaseReflector|ReflectionAbstract $element * * @return array */ From 0f1850b004b788bc5b7837e728e5d5927d07667a Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Tue, 16 Dec 2014 19:52:08 +0200 Subject: [PATCH 292/402] Simplified template tags logic and nesting levels. --- lib/template.php | 99 ++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/lib/template.php b/lib/template.php index 6b07bc336..8bab9f2b4 100644 --- a/lib/template.php +++ b/lib/template.php @@ -140,33 +140,33 @@ function get_arguments() { $return_args = array(); - if ( ! empty( $args_data ) ) { - foreach ( $args_data as $arg ) { - $param_tag = wp_list_filter( $params, array( 'variable' => $arg['name'] ) ); - $param_tag = array_shift( $param_tag ); - - $param = array( - 'name' => $arg['name'], - ); - - if ( ! empty( $arg['default'] ) ) { - $param['default_value'] = $arg['default']; - } - - if ( ! empty( $arg['type'] ) ) { - $param['types'] = array( $arg['type'] ); - } else if ( ! empty( $param_tag['types'] ) ) { - $param['types'] = $param_tag['types']; - } else { - $param['types'] = array(); - } - - if ( ! empty( $param_tag['content'] ) ) { - $param['desc'] = $param_tag['content']; - } - - $return_args[] = $param; + if ( empty( $args_data ) ) { + $args_data = array(); + } + + foreach ( $args_data as $arg ) { + $param_tag = wp_list_filter( $params, array( 'variable' => $arg['name'] ) ); + $param_tag = array_shift( $param_tag ); + $param = array( + 'name' => $arg['name'], + 'types' => array(), + ); + + if ( ! empty( $arg['default'] ) ) { + $param['default_value'] = $arg['default']; + } + + if ( ! empty( $arg['type'] ) ) { + $param['types'] = array( $arg['type'] ); + } else if ( ! empty( $param_tag['types'] ) ) { + $param['types'] = $param_tag['types']; + } + + if ( ! empty( $param_tag['content'] ) ) { + $param['desc'] = $param_tag['content']; } + + $return_args[] = $param; } return apply_filters( 'wp_parser_get_arguments', $return_args ); @@ -184,34 +184,33 @@ function get_hook_arguments() { $return_args = array(); - if ( ! empty( $args_data ) ) { - foreach ( $args_data as $arg ) { - $param_tag = array_shift( $params ); - - $param = array(); - - if ( ! empty( $param_tag['variable'] ) ) { - $param['name'] = $param_tag['variable']; - } elseif ( 0 === strpos( $arg, '$' ) ) { - $param['name'] = $arg; - } else { - $param['name'] = '$(unnamed)'; - } - - if ( ! empty( $param_tag['types'] ) ) { - $param['types'] = $param_tag['types']; - } else { - $param['types'] = array(); - } + if ( empty( $args_data ) ) { + $args_data = array(); + } - if ( ! empty( $param_tag['content'] ) ) { - $param['desc'] = $param_tag['content']; - } + foreach ( $args_data as $arg ) { + $param_tag = array_shift( $params ); + $param = array( + 'name' => '$(unnamed)', + 'types' => array(), + 'value' => $arg, + ); + + if ( ! empty( $param_tag['variable'] ) ) { + $param['name'] = $param_tag['variable']; + } elseif ( 0 === strpos( $arg, '$' ) ) { + $param['name'] = $arg; + } - $param['value'] = $arg; + if ( ! empty( $param_tag['types'] ) ) { + $param['types'] = $param_tag['types']; + } - $return_args[] = $param; + if ( ! empty( $param_tag['content'] ) ) { + $param['desc'] = $param_tag['content']; } + + $return_args[] = $param; } return apply_filters( 'wp_parser_get_hook_arguments', $return_args ); From c44a6a579282ebaab78ca735f832a8db5cc98216 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Tue, 16 Dec 2014 21:05:15 +0200 Subject: [PATCH 293/402] Changed PHP4 style property declarations. --- lib/class-plugin.php | 2 +- lib/class-relationships.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index db954dd4c..1d4859362 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -9,7 +9,7 @@ class Plugin { /** * @var \WP_Parser\Relationships */ - var $relationships; + public $relationships; public function on_load() { diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 74a6e590c..d7d808200 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -12,12 +12,12 @@ class Relationships { /** * @var array Post types we're setting relationships between */ - var $post_types; + public $post_types; /** * @var array Map of post slugs to post ids. */ - var $slugs_to_ids = array(); + public $slugs_to_ids = array(); /** * Map of how post IDs relate to one another. @@ -34,7 +34,7 @@ class Relationships { * * @var array */ - var $relationships = array(); + public $relationships = array(); /** * Adds the actions. From bbdd0d92a474d0cd30a8702c4055291ab5d93773 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 00:17:38 +0200 Subject: [PATCH 294/402] Adjusted whitespace to coding style. --- lib/class-importer.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 5bc0402dd..908eb34cf 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -154,7 +154,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct } } - if( ! empty( $root ) ) { + if ( ! empty( $root ) ) { update_option( 'wp_parser_root_import_dir', $root ); $this->log( 'Updated option wp_parser_root_import_dir: ' . $root ); } @@ -166,7 +166,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $this->log( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); $wp_version = get_option( 'wp_parser_imported_wp_version' ); - if( $wp_version ) { + if ( $wp_version ) { $this->log( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); } @@ -454,9 +454,9 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte */ protected function import_version( $data ) { - $version_path = $data['root'] . '/' . $data['path']; + $version_path = $data['root'] . '/' . $data['path']; - if( !is_readable( $version_path ) ) { + if ( ! is_readable( $version_path ) ) { return; } From acd9e515b43383a60c864abca258659448a48338 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 00:21:56 +0200 Subject: [PATCH 295/402] Changed checks to Yoda conditions. --- lib/class-command.php | 2 +- lib/class-file-reflector.php | 2 +- lib/class-importer.php | 13 ++++++------- lib/class-plugin.php | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index e5eb363b9..4c9c2993f 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -132,7 +132,7 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { // Extract PHPDoc $output = parse_files( $files, $path ); - if ( $format == 'json' ) { + if ( 'json' == $format ) { $output = json_encode( $output ); } diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 5cb07f912..920acd4c3 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -229,7 +229,7 @@ public function leaveNode( \PHPParser_Node $node ) { */ protected function isFilter( \PHPParser_Node $node ) { // Ignore variable functions - if ( $node->name->getType() !== 'Name' ) { + if ( 'Name' !== $node->name->getType() ) { return false; } diff --git a/lib/class-importer.php b/lib/class-importer.php index 908eb34cf..df5bf75e7 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -292,7 +292,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $count % 10 == 0 ) { // TODO figure our why are we still doing this + if ( ! $skip_sleep && 0 == $count % 10 ) { // TODO figure our why are we still doing this sleep( 3 ); } } @@ -307,7 +307,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $count % 10 == 0 ) { + if ( ! $skip_sleep && 0 == $count % 10 ) { sleep( 3 ); } } @@ -321,7 +321,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $count ++; // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && $count % 10 == 0 ) { + if ( ! $skip_sleep && 0 == $count % 10 ) { sleep( 3 ); } } @@ -655,18 +655,17 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $pack_value = array_shift( $pack_value ); $pack_value = $pack_value['content']; + $package_term_args = array( 'parent' => 0 ); // Set the parent term_id to look for, as the package taxonomy is hierarchical. - if ( $pack_name === 'sub' && is_int( $main_package_id ) ) { + if ( 'sub' === $pack_name && is_int( $main_package_id ) ) { $package_term_args = array( 'parent' => $main_package_id ); - } else { - $package_term_args = array( 'parent' => 0 ); } // If the package doesn't already exist in the taxonomy, add it $package_term = $this->insert_term( $pack_value, $this->taxonomy_package, $package_term_args ); $package_term_ids[] = (int) $package_term['term_id']; - if ( $pack_name === 'main' && $main_package_id === false && ! is_wp_error( $package_term ) ) { + if ( 'main' === $pack_name && false === $main_package_id && ! is_wp_error( $package_term ) ) { $main_package_id = (int) $package_term['term_id']; } diff --git a/lib/class-plugin.php b/lib/class-plugin.php index 1d4859362..e5b6715b0 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -181,7 +181,7 @@ public function register_taxonomies() { */ public function method_permalink( $link, $post ) { - if ( $post->post_type !== 'wp-parser-method' || $post->post_parent == 0 ) { + if ( 'wp-parser-method' !== $post->post_type || 0 == $post->post_parent ) { return $link; } From 387fe21f1d20b6d1c4bf2f75a508bca4affddc62 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 18:50:36 +0200 Subject: [PATCH 296/402] Commented out unconditional P2P uninstall. --- plugin.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugin.php b/plugin.php index f0d79f909..1bdbba78a 100644 --- a/plugin.php +++ b/plugin.php @@ -19,4 +19,6 @@ register_activation_hook( __FILE__, array( 'P2P_Storage', 'init' ) ); register_activation_hook( __FILE__, array( 'P2P_Storage', 'install' ) ); -register_uninstall_hook( __FILE__, array( 'P2P_Storage', 'uninstall' ) ); + +// TODO safer handling for uninstall +//register_uninstall_hook( __FILE__, array( 'P2P_Storage', 'uninstall' ) ); From 7d4c530a34e0bf310a7b1cf9d02c61c69c0a1352 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 20:37:10 +0200 Subject: [PATCH 297/402] Added psr/log as explicit dependency. --- composer.json | 3 ++- composer.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index b2ecf4dfe..73f38d6f2 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,8 @@ "phpdocumentor/reflection" : "~1.0", "erusev/parsedown" : "~0.9", "scribu/lib-posts-to-posts": "dev-master@dev", - "scribu/scb-framework" : "dev-master@dev" + "scribu/scb-framework" : "dev-master@dev", + "psr/log" : "~1.0" }, "autoload" : { "classmap": ["lib"], diff --git a/composer.lock b/composer.lock index fe0c0b784..9f740f7a0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "07b6e006fa64a11589ce6797b1e0146c", + "hash": "0471201cd107b3b42675b0b30721e5a1", "packages": [ { "name": "composer/installers", From e8ee7934c8152cd03bbef71f2b822dd233fc7d0f Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 20:38:51 +0200 Subject: [PATCH 298/402] Added PSR-3 compatible WP_CLI_Logger class. --- lib/class-wp-cli-logger.php | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/class-wp-cli-logger.php diff --git a/lib/class-wp-cli-logger.php b/lib/class-wp-cli-logger.php new file mode 100644 index 000000000..9280ecdc4 --- /dev/null +++ b/lib/class-wp-cli-logger.php @@ -0,0 +1,38 @@ +<?php +namespace WP_Parser; + +use Psr\Log\AbstractLogger; +use Psr\Log\LogLevel; + +/** + * + */ +class WP_CLI_Logger extends AbstractLogger { + + /** + * @param string $level + * @param string $message + * @param array $context + * + * @return void + */ + public function log( $level, $message, array $context = array() ) { + + switch ( $level ) { + + case LogLevel::WARNING: + \WP_CLI::warning( $message ); + break; + + case LogLevel::ERROR: + case LogLevel::ALERT: + case LogLevel::EMERGENCY: + case LogLevel::CRITICAL: + \WP_CLI::error( $message ); + break; + + default: + \WP_CLI::log( $message ); + } + } +} \ No newline at end of file From 2e4a03ad3c5fda33ee6efce2c9817766bd034932 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 20:39:41 +0200 Subject: [PATCH 299/402] Converted Importer class to use PSR-3 logger. --- lib/class-importer.php | 95 +++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 52 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index df5bf75e7..2fd9f12ed 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -2,10 +2,14 @@ namespace WP_Parser; +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; + /** * Handles creating and updating posts from (functions|classes|files) generated by phpDoc. */ -class Importer { +class Importer implements LoggerAwareInterface { /** * Taxonomy name for files @@ -73,6 +77,9 @@ class Importer { */ protected $inserted_terms = array(); + /** @var LoggerInterface $logger */ + protected $logger; + /** * Constructor. Sets up post type/taxonomy names. * @@ -96,6 +103,8 @@ public function __construct( array $args = array() ) { foreach ( $properties as $property_name => $value ) { $this->{$property_name} = $value; } + + $this->logger = new NullLogger(); } /** @@ -111,7 +120,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $time_start = microtime(true); $num_queries = $wpdb->num_queries; - $this->log( 'Starting import. This will take some time…' ); + $this->logger->info( 'Starting import. This will take some time…' ); $file_number = 1; $num_of_files = count( $data ); @@ -132,19 +141,19 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct // Sanity check -- do the required post types exist? if ( ! post_type_exists( $this->post_type_class ) || ! post_type_exists( $this->post_type_function ) || ! post_type_exists( $this->post_type_hook ) ) { - $this->error( sprintf( 'Missing post type; check that "%1$s", "%2$s", and "%3$s" are registered.', $this->post_type_class, $this->post_type_function, $this->post_type_hook ) ); + $this->logger->error( sprintf( 'Missing post type; check that "%1$s", "%2$s", and "%3$s" are registered.', $this->post_type_class, $this->post_type_function, $this->post_type_hook ) ); exit; } // Sanity check -- do the required taxonomies exist? if ( ! taxonomy_exists( $this->taxonomy_file ) || ! taxonomy_exists( $this->taxonomy_since_version ) || ! taxonomy_exists( $this->taxonomy_package ) ) { - $this->error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $this->taxonomy_file ) ); + $this->logger->error( sprintf( 'Missing taxonomy; check that "%1$s" is registered.', $this->taxonomy_file ) ); exit; } $root = ''; foreach ( $data as $file ) { - $this->log( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); + $this->logger->info( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); $file_number ++; $this->import_file( $file, $skip_sleep, $import_internal_functions ); @@ -156,18 +165,18 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct if ( ! empty( $root ) ) { update_option( 'wp_parser_root_import_dir', $root ); - $this->log( 'Updated option wp_parser_root_import_dir: ' . $root ); + $this->logger->info( 'Updated option wp_parser_root_import_dir: ' . $root ); } $last_import = time(); $import_date = date_i18n( get_option('date_format'), $last_import ); $import_time = date_i18n( get_option('time_format'), $last_import ); update_option( 'wp_parser_last_import', $last_import ); - $this->log( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); + $this->logger->info( sprintf( 'Updated option wp_parser_last_import: %1$s at %2$s.', $import_date, $import_time ) ); $wp_version = get_option( 'wp_parser_imported_wp_version' ); if ( $wp_version ) { - $this->log( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); + $this->logger->info( 'Updated option wp_parser_imported_wp_version: ' . $wp_version ); } /** @@ -193,16 +202,16 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $time_end = microtime(true); $time = $time_end - $time_start; - $this->log( 'Time: '.$time ); - $this->log( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); + $this->logger->info( 'Time: '.$time ); + $this->logger->info( 'Queries: ' . ( $wpdb->num_queries - $num_queries ) ); if ( empty( $this->errors ) ) { - $this->success( 'Import complete!' ); + $this->logger->notice( 'Import complete!' ); } else { - $this->log( 'Import complete, but some errors were found:' ); + $this->logger->info( 'Import complete, but some errors were found:' ); foreach ( $this->errors as $error ) { - $this->warn( $error ); + $this->logger->error( $error ); } } } @@ -469,7 +478,7 @@ protected function import_version( $data ) { if ( isset( $wp_version ) && $wp_version ) { update_option( 'wp_parser_imported_wp_version', $wp_version ); - $this->log( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); + $this->logger->info( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); } } @@ -512,20 +521,20 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->log( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - $this->log( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->log( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); + $this->logger->info( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); break; default: - $this->log( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); } return false; @@ -622,7 +631,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal $anything_updated[] = true; } } else { - $this->warn( "\tCannot set @since term: " . $since_term->get_error_message() ); + $this->logger->warning( "\tCannot set @since term: " . $since_term->get_error_message() ); } } } @@ -671,9 +680,9 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( is_wp_error( $package_term ) ) { if ( is_int( $main_package_id ) ) { - $this->warn( "\tCannot create @subpackage term: " . $package_term->get_error_message() ); + $this->logger->warning( "\tCannot create @subpackage term: " . $package_term->get_error_message() ); } else { - $this->warn( "\tCannot create @package term: " . $package_term->get_error_message() ); + $this->logger->warning( "\tCannot create @package term: " . $package_term->get_error_message() ); } } } @@ -711,38 +720,38 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal if ( $is_new_post ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->log( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->log( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); + $this->logger->info( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - $this->log( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); break; default: - $this->log( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); } } else { switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->log( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->log( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); + $this->logger->info( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - $this->log( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); break; default: - $this->log( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); } } @@ -759,30 +768,12 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal } /** - * Log a message. - * - * @param string $message The message to log. - */ - public function log( $message ) {} - - /** - * Give a warning. + * @param LoggerInterface $logger * - * @param string $message The warning message. + * @return void */ - public function warn( $message ) {} + public function setLogger( LoggerInterface $logger ) { - /** - * Give an error. - * - * @param string $message The error message. - */ - public function error( $message ) {} - - /** - * Give a success message. - * - * @param string $message The success message. - */ - public function success( $message ) {} + $this->logger = $logger; + } } From ddccdf2329b747b231789449dfd8dc517066eb7b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 20:40:42 +0200 Subject: [PATCH 300/402] Removed WP_CLI_Importer in favor of using PSR-3 logging. --- lib/class-command.php | 3 ++- lib/class-wp-cli-importer.php | 39 ----------------------------------- 2 files changed, 2 insertions(+), 40 deletions(-) delete mode 100644 lib/class-wp-cli-importer.php diff --git a/lib/class-command.php b/lib/class-command.php index 4c9c2993f..0cd6a1fd9 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -154,7 +154,8 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna } // Run the importer - $importer = new WP_CLI_Importer; + $importer = new Importer; + $importer->setLogger( new WP_CLI_Logger() ); $importer->import( $data, $skip_sleep, $import_internal_functions ); WP_CLI::line(); diff --git a/lib/class-wp-cli-importer.php b/lib/class-wp-cli-importer.php deleted file mode 100644 index 586c4ac09..000000000 --- a/lib/class-wp-cli-importer.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -namespace WP_Parser; - -use WP_CLI; - -/** - * Importer for using with WP-CLI. - */ -class WP_CLI_Importer extends Importer { - - /** - * @param string $message - */ - public function log( $message ) { - WP_CLI::log( $message ); - } - - /** - * @param string $message - */ - public function warn( $message ) { - WP_CLI::warning( $message ); - } - - /** - * @param string $message - */ - public function error( $message ) { - WP_CLI::error( $message ); - } - - /** - * @param string $message - */ - public function success( $message ) { - WP_CLI::success( $message ); - } -} From cb5fda9f50046ca2892d81788afec00c04bfeea7 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 22:16:47 +0200 Subject: [PATCH 301/402] Added class PHPDoc to WP CLI logger. --- lib/class-wp-cli-logger.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-wp-cli-logger.php b/lib/class-wp-cli-logger.php index 9280ecdc4..cba60a079 100644 --- a/lib/class-wp-cli-logger.php +++ b/lib/class-wp-cli-logger.php @@ -5,7 +5,7 @@ use Psr\Log\LogLevel; /** - * + * PSR-3 logger for WP CLI. */ class WP_CLI_Logger extends AbstractLogger { From 45ff10ed656ad783b9e68f368d3b208040715170 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Wed, 17 Dec 2014 23:50:00 +0200 Subject: [PATCH 302/402] Disabled skipping of undocumented hooks. --- lib/class-importer.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 2fd9f12ed..12253ad85 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -368,13 +368,20 @@ public function import_function( array $data, $parent_post_id = 0, $import_inter * @return bool|int Post ID of this hook, false if any failure. */ public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { + + /* TODO core-centric assumption, shouldn't be handled on import step if ( 0 === strpos( $data['doc']['description'], 'This action is documented in' ) ) { return false; - } elseif ( 0 === strpos( $data['doc']['description'], 'This filter is documented in' ) ) { + } + + if ( 0 === strpos( $data['doc']['description'], 'This filter is documented in' ) ) { return false; - } elseif ( '' === $data['doc']['description'] && '' === $data['doc']['long_description'] ) { + } + + if ( '' === $data['doc']['description'] && '' === $data['doc']['long_description'] ) { return false; } + */ $hook_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); From 140e69b04fa780a35f77a359ab5d069c78f44f39 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Thu, 18 Dec 2014 00:00:30 +0200 Subject: [PATCH 303/402] Simplified import/update logging logic. --- lib/class-importer.php | 47 +++++++++++++----------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 12253ad85..c19e92e92 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -723,43 +723,24 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal wp_update_post( wp_slash( $post_data ), true ); } - // Everything worked! Woo hoo! - if ( $is_new_post ) { - switch ( $post_data['post_type'] ) { - case $this->post_type_class: - $this->logger->info( "\t" . sprintf( 'Imported class "%1$s"', $data['name'] ) ); - break; + $action = $is_new_post ? 'Imported' : 'Updated'; - case $this->post_type_hook: - $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->logger->info( $indent . sprintf( 'Imported hook "%1$s"', $data['name'] ) ); - break; + switch ( $post_data['post_type'] ) { + case $this->post_type_class: + $this->logger->info( "\t" . sprintf( '%1$s class "%2$s"', $action, $data['name'] ) ); + break; - case $this->post_type_method: - $this->logger->info( "\t\t" . sprintf( 'Imported method "%1$s"', $data['name'] ) ); - break; + case $this->post_type_hook: + $indent = ( $parent_post_id ) ? "\t\t" : "\t"; + $this->logger->info( $indent . sprintf( '%1$s hook "%2$s"', $action, $data['name'] ) ); + break; - default: - $this->logger->info( "\t" . sprintf( 'Imported function "%1$s"', $data['name'] ) ); - } - } else { - switch ( $post_data['post_type'] ) { - case $this->post_type_class: - $this->logger->info( "\t" . sprintf( 'Updated class "%1$s"', $data['name'] ) ); - break; - - case $this->post_type_hook: - $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->logger->info( $indent . sprintf( 'Updated hook "%1$s"', $data['name'] ) ); - break; + case $this->post_type_method: + $this->logger->info( "\t\t" . sprintf( '%1$s method "%2$s"', $action, $data['name'] ) ); + break; - case $this->post_type_method: - $this->logger->info( "\t\t" . sprintf( 'Updated method "%1$s"', $data['name'] ) ); - break; - - default: - $this->logger->info( "\t" . sprintf( 'Updated function "%1$s"', $data['name'] ) ); - } + default: + $this->logger->info( "\t" . sprintf( '%1$s function "%2$s"', $action, $data['name'] ) ); } /** From 1342002e58d585ff792a39a2b67f2ab45a8c06f0 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Thu, 18 Dec 2014 00:13:00 +0200 Subject: [PATCH 304/402] Simplified sanitizing arguments. --- lib/class-plugin.php | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/class-plugin.php b/lib/class-plugin.php index e5b6715b0..ca5d7e6ae 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -200,7 +200,19 @@ public function method_permalink( $link, $post ) { */ public function make_args_safe( $args ) { - $filters = array( + array_walk_recursive( $args, array( $this, 'sanitize_argument' ) ); + + return apply_filters( 'wp_parser_make_args_safe', $args ); + } + + /** + * @param mixed $value + * + * @return mixed + */ + public function sanitize_argument( &$value ) { + + static $filters = array( 'wp_filter_kses', 'make_clickable', 'force_balance_tags', @@ -210,21 +222,11 @@ public function make_args_safe( $args ) { 'stripslashes_deep', ); - foreach ( $args as &$arg ) { - foreach ( $arg as &$value ) { - foreach ( $filters as $filter_function ) { - if ( is_array( $value ) ) { - foreach ( $value as &$v ) { - $v = call_user_func( $filter_function, $v ); - } - } else { - $value = call_user_func( $filter_function, $value ); - } - } - } + foreach ( $filters as $filter ) { + $value = call_user_func( $filter, $value ); } - return apply_filters( 'wp_parser_make_args_safe', $args ); + return $value; } /** From 4c374d9b88a0fd1bd4fcf05f95a805690499bc89 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Thu, 18 Dec 2014 16:37:44 +0200 Subject: [PATCH 305/402] Simplified logic nesting and counting for pauses. --- lib/class-importer.php | 54 ++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index c19e92e92..03e867f3d 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -292,47 +292,39 @@ public function import_file( array $file, $skip_sleep = false, $import_internal 'deprecated' => $deprecated_file, // Deprecation status ); - // Functions - if ( ! empty( $file['functions'] ) ) { - $count = 0; + // TODO ensures values are set, but better handled upstream later + $file = array_merge( array( + 'functions' => array(), + 'classes' => array(), + 'hooks' => array(), + ), $file ); - foreach ( $file['functions'] as $function ) { - $this->import_function( $function, 0, $import_internal ); - $count ++; + $count = 0; - // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && 0 == $count % 10 ) { // TODO figure our why are we still doing this - sleep( 3 ); - } + foreach ( $file['functions'] as $function ) { + $this->import_function( $function, 0, $import_internal ); + $count ++; + + if ( ! $skip_sleep && 0 == $count % 10 ) { // TODO figure our why are we still doing this + sleep( 3 ); } } - // Classes - if ( ! empty( $file['classes'] ) ) { - $count = 0; - - foreach ( $file['classes'] as $class ) { - $this->import_class( $class, $import_internal ); - $count ++; + foreach ( $file['classes'] as $class ) { + $this->import_class( $class, $import_internal ); + $count ++; - // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && 0 == $count % 10 ) { - sleep( 3 ); - } + if ( ! $skip_sleep && 0 == $count % 10 ) { + sleep( 3 ); } } - if ( ! empty( $file['hooks'] ) ) { - $count = 0; - - foreach ( $file['hooks'] as $hook ) { - $this->import_hook( $hook, 0, $import_internal ); - $count ++; + foreach ( $file['hooks'] as $hook ) { + $this->import_hook( $hook, 0, $import_internal ); + $count ++; - // Wait 3 seconds after every 10 items - if ( ! $skip_sleep && 0 == $count % 10 ) { - sleep( 3 ); - } + if ( ! $skip_sleep && 0 == $count % 10 ) { + sleep( 3 ); } } From a730d0ae0ce31d75186054c05b2e6edc96b09f46 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Thu, 18 Dec 2014 15:46:21 -0700 Subject: [PATCH 306/402] Parse parameter and changelog entry descriptions with markdown as prescribed by the standard. Introduces a new `format_description()` function and relies on a new `line()` method introduced in Parsedown v1.0.0. Bumps Parsedown dependency to v1.1.4 --- composer.json | 2 +- lib/runner.php | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 73f38d6f2..9323a613e 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "php" : ">=5.3.6", "composer/installers" : "~1.0", "phpdocumentor/reflection" : "~1.0", - "erusev/parsedown" : "~0.9", + "erusev/parsedown" : "~1.1.4", "scribu/lib-posts-to-posts": "dev-master@dev", "scribu/scb-framework" : "dev-master@dev", "psr/log" : "~1.0" diff --git a/lib/runner.php b/lib/runner.php index cccf0a64d..05e4a10d5 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -151,7 +151,7 @@ function export_docblock( $element ) { foreach ( $docblock->getTags() as $tag ) { $tag_data = array( 'name' => $tag->getName(), - 'content' => preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ), + 'content' => preg_replace( '/[\n\r]+/', ' ', format_description( $tag->getDescription() ) ), ); if ( method_exists( $tag, 'getTypes' ) ) { $tag_data['types'] = $tag->getTypes(); @@ -170,7 +170,7 @@ function export_docblock( $element ) { } // Description string. if ( method_exists( $tag, 'getDescription' ) ) { - $description = preg_replace( '/[\n\r]+/', ' ', $tag->getDescription() ); + $description = preg_replace( '/[\n\r]+/', ' ', format_description( $tag->getDescription() ) ); if ( ! empty( $description ) ) { $tag_data['description'] = $description; } @@ -336,3 +336,19 @@ function export_uses( array $uses ) { return $out; } + +/** + * Format the given description with Markdown. + * + * @param string $description Description. + * + * @return string Description as Markdown if the Parsedown class exists, otherwise return + * the given description text. + */ +function format_description( $description ) { + if ( class_exists( 'Parsedown' ) ) { + $parsedown = \Parsedown::instance(); + $description = $parsedown->line( $description ); + } + return $description; +} From ddff315a3235e1f051a7d1c5021931f7730d59a3 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Thu, 18 Dec 2014 15:57:04 -0700 Subject: [PATCH 307/402] Spaces spaces, we don't need no spaces. --- lib/runner.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index 05e4a10d5..88cfc186b 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -341,7 +341,6 @@ function export_uses( array $uses ) { * Format the given description with Markdown. * * @param string $description Description. - * * @return string Description as Markdown if the Parsedown class exists, otherwise return * the given description text. */ From 6a91754b6007861e78a65b476c49003a17ef2110 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Thu, 18 Dec 2014 16:28:01 -0700 Subject: [PATCH 308/402] Update composer.lock file. --- composer.lock | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/composer.lock b/composer.lock index 9f740f7a0..726e4196a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "0471201cd107b3b42675b0b30721e5a1", + "hash": "17e7f674d6c7b7a0c541d275a9427656", "packages": [ { "name": "composer/installers", @@ -101,16 +101,16 @@ }, { "name": "erusev/parsedown", - "version": "0.9.4", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f" + "reference": "495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/d29ff18299210b52a75a631a70963e7c8b35b04f", - "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a", + "reference": "495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a", "shasum": "" }, "type": "library", @@ -136,7 +136,7 @@ "markdown", "parser" ], - "time": "2014-02-06 12:16:14" + "time": "2014-11-29 02:29:14" }, { "name": "nikic/php-parser", @@ -347,14 +347,12 @@ "autoload.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0+" ], "description": "A library for many-to-many relationships in WordPress", "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", - "support": { - "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" - }, "time": "2014-09-09 05:34:49" }, { From 90d42fdfae77c46b251b2a7995e64f7dd0dbad6d Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Thu, 18 Dec 2014 16:29:21 -0700 Subject: [PATCH 309/402] Use v1.1 for updating the Parsedown dependency instead of v1.1.4. --- composer.json | 2 +- composer.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 9323a613e..c5c737de5 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "php" : ">=5.3.6", "composer/installers" : "~1.0", "phpdocumentor/reflection" : "~1.0", - "erusev/parsedown" : "~1.1.4", + "erusev/parsedown" : "~1.1", "scribu/lib-posts-to-posts": "dev-master@dev", "scribu/scb-framework" : "dev-master@dev", "psr/log" : "~1.0" diff --git a/composer.lock b/composer.lock index 726e4196a..9ac447f5a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "17e7f674d6c7b7a0c541d275a9427656", + "hash": "3afcce64c58240f7ee787a666df91db0", "packages": [ { "name": "composer/installers", From cb5b702b1ddeedd06a137f20d8912c69795d3b5e Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 20 Dec 2014 21:29:57 +0200 Subject: [PATCH 310/402] Bumped PHP requirement to 5.4 Fixes #143 --- README.md | 2 +- composer.json | 2 +- composer.lock | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e6fae12b5..53476ac3e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ We are currently looking for contributors to help us complete the work on the pa There is a guide to developing for developer.wordpress.org in the [WordPress documentation handbook](http://make.wordpress.org/docs/handbook/projects/devhub/) ## Requirements -* PHP 5.3.6+ +* PHP 5.4+ * [Composer](https://getcomposer.org/) * [WP CLI](http://wp-cli.org/) diff --git a/composer.json b/composer.json index c5c737de5..a42c4a5b7 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "issues": "https://github.com/rmccue/WP-Parser/issues" }, "require" : { - "php" : ">=5.3.6", + "php" : ">=5.4", "composer/installers" : "~1.0", "phpdocumentor/reflection" : "~1.0", "erusev/parsedown" : "~1.1", diff --git a/composer.lock b/composer.lock index 9ac447f5a..7230b35ad 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "3afcce64c58240f7ee787a666df91db0", + "hash": "c3dfe31bb0f250fd8025b4d3c08c8ff8", "packages": [ { "name": "composer/installers", @@ -347,12 +347,14 @@ "autoload.php" ] }, - "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0+" ], "description": "A library for many-to-many relationships in WordPress", "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", + "support": { + "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" + }, "time": "2014-09-09 05:34:49" }, { @@ -406,7 +408,7 @@ }, "prefer-stable": false, "platform": { - "php": ">=5.3.6" + "php": ">=5.4" }, "platform-dev": [] } From 40f922db554241dce1fb234ab496f501ca58b778 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 20 Dec 2014 21:31:58 +0200 Subject: [PATCH 311/402] Fixed return type in PHPDoc. --- lib/class-command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-command.php b/lib/class-command.php index 0cd6a1fd9..a2d5c07ae 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -108,7 +108,7 @@ public function create( $args, $assoc_args ) { * @param string $path Directory to scan for PHPDoc * @param string $format Optional. What format the data is returned in: [json*|array]. * - * @return string + * @return string|array */ protected function _get_phpdoc_data( $path, $format = 'json' ) { $is_file = is_file( $path ); From 76b87249620cdedfcdfcc07777c37750a5dc3fd4 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sat, 20 Dec 2014 21:33:10 +0200 Subject: [PATCH 312/402] Shortened variable name, adjusted PHPDoc. --- lib/class-command.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index a2d5c07ae..93425f40f 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -143,10 +143,10 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * Import the PHPDoc $data into WordPress posts and taxonomies * * @param array $data - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $skip_sleep If true, the sleep() calls are skipped. + * @param bool $import_internal If true, functions marked @internal will be imported. */ - protected function _do_import( array $data, $skip_sleep = false, $import_internal_functions = false ) { + protected function _do_import( array $data, $skip_sleep = false, $import_internal = false ) { if ( ! wp_get_current_user()->exists() ) { WP_CLI::error( 'Please specify a valid user: --user=<id|login>' ); @@ -156,7 +156,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna // Run the importer $importer = new Importer; $importer->setLogger( new WP_CLI_Logger() ); - $importer->import( $data, $skip_sleep, $import_internal_functions ); + $importer->import( $data, $skip_sleep, $import_internal ); WP_CLI::line(); } From 435749414f6db6cf88ce47472f03d76406e01a8b Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 21 Dec 2014 15:46:46 +0200 Subject: [PATCH 313/402] Removed explicit logger implementation in favor of upstream trait. --- lib/class-importer.php | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 03e867f3d..5233f1950 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -3,7 +3,7 @@ namespace WP_Parser; use Psr\Log\LoggerAwareInterface; -use Psr\Log\LoggerInterface; +use Psr\Log\LoggerAwareTrait; use Psr\Log\NullLogger; /** @@ -11,6 +11,8 @@ */ class Importer implements LoggerAwareInterface { + use LoggerAwareTrait; + /** * Taxonomy name for files * @@ -77,9 +79,6 @@ class Importer implements LoggerAwareInterface { */ protected $inserted_terms = array(); - /** @var LoggerInterface $logger */ - protected $logger; - /** * Constructor. Sets up post type/taxonomy names. * @@ -746,14 +745,4 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal return $post_id; } - - /** - * @param LoggerInterface $logger - * - * @return void - */ - public function setLogger( LoggerInterface $logger ) { - - $this->logger = $logger; - } } From a9c5b6480221ebd824709748f6cde69aa6760c97 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 21 Dec 2014 17:28:50 +0200 Subject: [PATCH 314/402] Simplified path and error handling. --- lib/class-command.php | 29 ++++++++++------------------- lib/runner.php | 7 +++++-- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 93425f40f..228f2f48a 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -105,35 +105,26 @@ public function create( $args, $assoc_args ) { /** * Generate the data from the PHPDoc markup. * - * @param string $path Directory to scan for PHPDoc - * @param string $format Optional. What format the data is returned in: [json*|array]. + * @param string $path Directory or file to scan for PHPDoc + * @param string $format What format the data is returned in: [json|array]. * * @return string|array */ protected function _get_phpdoc_data( $path, $format = 'json' ) { + WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s. This may take a few minutes...', $path ) ); $is_file = is_file( $path ); - WP_CLI::line( sprintf( 'Extracting PHPDoc from %1$s. This may take a few minutes...', $is_file ? $path : "$path/" ) ); - - // Find the files to get the PHPDoc data from. $path can either be a folder or an absolute ref to a file. - if ( $is_file ) { - $files = array( $path ); - $path = dirname( $path ); - } else { - ob_start(); - $files = get_wp_files( $path ); - $error = ob_get_clean(); - - if ( $error ) { - WP_CLI::error( sprintf( 'Problem with %1$s: %2$s', $path, $error ) ); - exit; - } + $files = $is_file ? array( $path ) : get_wp_files( $path ); + $path = $is_file ? dirname( $path ) : $path; + + if ( $files instanceof \WP_Error ) { + WP_CLI::error( sprintf( 'Problem with %1$s: %2$s', $path, $files->get_error_message() ) ); + exit; } - // Extract PHPDoc $output = parse_files( $files, $path ); if ( 'json' == $format ) { - $output = json_encode( $output ); + return json_encode( $output, JSON_PRETTY_PRINT ); } return $output; diff --git a/lib/runner.php b/lib/runner.php index 88cfc186b..90b8f82e9 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -12,7 +12,7 @@ /** * @param string $directory * - * @return array + * @return array|\WP_Error */ function get_wp_files( $directory ) { $iterableFiles = new \RecursiveIteratorIterator( @@ -29,7 +29,10 @@ function get_wp_files( $directory ) { $files[] = $file->getPathname(); } } catch ( \UnexpectedValueException $exc ) { - printf( 'Directory [%s] contained a directory we can not recurse into', $directory ); + return new \WP_Error( + 'unexpected_value_exception', + sprintf( 'Directory [%s] contained a directory we can not recurse into', $directory ) + ); } return $files; From 66697297edbfa8326925cf5fce07737b9dc64a94 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 21 Dec 2014 17:33:27 +0200 Subject: [PATCH 315/402] Simplified export command. --- lib/class-command.php | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 228f2f48a..60d0a5463 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -18,24 +18,13 @@ class Command extends WP_CLI_Command { * @param array $args */ public function export( $args ) { - $directory = $args[0]; - - $output_file = 'phpdoc.json'; - - if ( ! empty( $args[1] ) ) { - $output_file = $args[1]; - } - - $directory = realpath( $directory ); + $directory = realpath( $args[0] ); + $output_file = empty( $args[1] ) ? 'phpdoc.json' : $args[1]; + $json = $this->_get_phpdoc_data( $directory ); + $result = file_put_contents( $output_file, $json ); WP_CLI::line(); - // Get data from the PHPDoc - $json = $this->_get_phpdoc_data( $directory ); - - // Write to $output_file - $error = ! file_put_contents( $output_file, $json ); - - if ( $error ) { + if ( false === $result ) { WP_CLI::error( sprintf( 'Problem writing %1$s bytes of data to %2$s', strlen( $json ), $output_file ) ); exit; } From 60f596f38e1670de5e8a35c1bf6079fb6bb568c2 Mon Sep 17 00:00:00 2001 From: keesiemeijer <keesie.meijer@gmail.com> Date: Mon, 22 Dec 2014 13:38:58 +0100 Subject: [PATCH 316/402] Removed check for functions, classes, hooks when importing the WP version --- lib/class-importer.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 5233f1950..148ed38ef 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -467,11 +467,6 @@ protected function import_version( $data ) { return; } - // version.php should not contain functions, classes or hooks. - if ( isset( $data['functions'] ) || isset ( $data['classes'] ) || isset( $data['hooks'] ) ) { - return; - } - include $version_path; if ( isset( $wp_version ) && $wp_version ) { From e566e6cffca8b65fbbb6df1197a4285bbfe13b17 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Mon, 12 Jan 2015 00:02:58 -0500 Subject: [PATCH 317/402] `@internal` should not be misused for skipping parsing. Switches all `@internal` references to `@ignore`, the correct phpDoc tag to use to skip parsing an element. --- lib/class-command.php | 8 ++-- lib/class-importer.php | 96 +++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 53 deletions(-) diff --git a/lib/class-command.php b/lib/class-command.php index 60d0a5463..4fdad9141 100644 --- a/lib/class-command.php +++ b/lib/class-command.php @@ -123,10 +123,10 @@ protected function _get_phpdoc_data( $path, $format = 'json' ) { * Import the PHPDoc $data into WordPress posts and taxonomies * * @param array $data - * @param bool $skip_sleep If true, the sleep() calls are skipped. - * @param bool $import_internal If true, functions marked @internal will be imported. + * @param bool $skip_sleep If true, the sleep() calls are skipped. + * @param bool $import_ignored If true, functions marked `@ignore` will be imported. */ - protected function _do_import( array $data, $skip_sleep = false, $import_internal = false ) { + protected function _do_import( array $data, $skip_sleep = false, $import_ignored = false ) { if ( ! wp_get_current_user()->exists() ) { WP_CLI::error( 'Please specify a valid user: --user=<id|login>' ); @@ -136,7 +136,7 @@ protected function _do_import( array $data, $skip_sleep = false, $import_interna // Run the importer $importer = new Importer; $importer->setLogger( new WP_CLI_Logger() ); - $importer->import( $data, $skip_sleep, $import_internal ); + $importer->import( $data, $skip_sleep, $import_ignored ); WP_CLI::line(); } diff --git a/lib/class-importer.php b/lib/class-importer.php index 148ed38ef..4f3d4a7ed 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -110,10 +110,10 @@ public function __construct( array $args = array() ) { * Import the PHPDoc $data into WordPress posts and taxonomies * * @param array $data - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal_functions Optional; defaults to false. If true, functions marked @internal will be imported. + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_ignored_functions Optional; defaults to false. If true, functions marked `@ignore` will be imported. */ - public function import( array $data, $skip_sleep = false, $import_internal_functions = false ) { + public function import( array $data, $skip_sleep = false, $import_ignored_functions = false ) { global $wpdb; $time_start = microtime(true); @@ -155,7 +155,7 @@ public function import( array $data, $skip_sleep = false, $import_internal_funct $this->logger->info( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); $file_number ++; - $this->import_file( $file, $skip_sleep, $import_internal_functions ); + $this->import_file( $file, $skip_sleep, $import_ignored_functions ); if ( empty( $root ) && ( isset( $file['root'] ) && $file['root'] ) ) { $root = $file['root']; @@ -245,10 +245,10 @@ protected function insert_term( $term, $taxonomy, $args = array() ) { * For a specific file, go through and import the file, functions, and classes. * * @param array $file - * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. - * @param bool $import_internal Optional; defaults to false. If true, functions and classes marked `@internal` will be imported. + * @param bool $skip_sleep Optional; defaults to false. If true, the sleep() calls are skipped. + * @param bool $import_ignored Optional; defaults to false. If true, functions and classes marked `@ignore` will be imported. */ - public function import_file( array $file, $skip_sleep = false, $import_internal = false ) { + public function import_file( array $file, $skip_sleep = false, $import_ignored = false ) { /** * Filter whether to proceed with importing a prospective file. @@ -301,7 +301,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal $count = 0; foreach ( $file['functions'] as $function ) { - $this->import_function( $function, 0, $import_internal ); + $this->import_function( $function, 0, $import_ignored ); $count ++; if ( ! $skip_sleep && 0 == $count % 10 ) { // TODO figure our why are we still doing this @@ -310,7 +310,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal } foreach ( $file['classes'] as $class ) { - $this->import_class( $class, $import_internal ); + $this->import_class( $class, $import_ignored ); $count ++; if ( ! $skip_sleep && 0 == $count % 10 ) { @@ -319,7 +319,7 @@ public function import_file( array $file, $skip_sleep = false, $import_internal } foreach ( $file['hooks'] as $hook ) { - $this->import_hook( $hook, 0, $import_internal ); + $this->import_hook( $hook, 0, $import_ignored ); $count ++; if ( ! $skip_sleep && 0 == $count % 10 ) { @@ -335,30 +335,29 @@ public function import_file( array $file, $skip_sleep = false, $import_internal /** * Create a post for a function * - * @param array $data Function - * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions marked `@internal` will be imported. + * @param array $data Function. + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_ignored Optional; defaults to false. If true, functions marked `@ignore` will be imported. * * @return bool|int Post ID of this function, false if any failure. */ - public function import_function( array $data, $parent_post_id = 0, $import_internal = false ) { - $function_id = $this->import_item( $data, $parent_post_id, $import_internal ); + public function import_function( array $data, $parent_post_id = 0, $import_ignored = false ) { + $function_id = $this->import_item( $data, $parent_post_id, $import_ignored ); foreach ( $data['hooks'] as $hook ) { - $this->import_hook( $hook, $function_id, $import_internal ); + $this->import_hook( $hook, $function_id, $import_ignored ); } } /** * Create a post for a hook * - * @param array $data Hook - * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, hooks marked `@internal` will be imported. - * + * @param array $data Hook. + * @param int $parent_post_id Optional; post ID of the parent (function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_ignored Optional; defaults to false. If true, hooks marked `@ignore` will be imported. * @return bool|int Post ID of this hook, false if any failure. */ - public function import_hook( array $data, $parent_post_id = 0, $import_internal = false ) { + public function import_hook( array $data, $parent_post_id = 0, $import_ignored = false ) { /* TODO core-centric assumption, shouldn't be handled on import step if ( 0 === strpos( $data['doc']['description'], 'This action is documented in' ) ) { @@ -374,7 +373,7 @@ public function import_hook( array $data, $parent_post_id = 0, $import_internal } */ - $hook_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_hook ) ); + $hook_id = $this->import_item( $data, $parent_post_id, $import_ignored, array( 'post_type' => $this->post_type_hook ) ); if ( ! $hook_id ) { return false; @@ -388,15 +387,14 @@ public function import_hook( array $data, $parent_post_id = 0, $import_internal /** * Create a post for a class * - * @param array $data Class - * @param bool $import_internal Optional; defaults to false. If true, functions marked `@internal` will be imported. - * + * @param array $data Class. + * @param bool $import_ignored Optional; defaults to false. If true, functions marked `@ignore` will be imported. * @return bool|int Post ID of this function, false if any failure. */ - protected function import_class( array $data, $import_internal = false ) { + protected function import_class( array $data, $import_ignored = false ) { // Insert this class - $class_id = $this->import_item( $data, 0, $import_internal, array( 'post_type' => $this->post_type_class ) ); + $class_id = $this->import_item( $data, 0, $import_ignored, array( 'post_type' => $this->post_type_class ) ); if ( ! $class_id ) { return false; @@ -413,7 +411,7 @@ protected function import_class( array $data, $import_internal = false ) { foreach ( $data['methods'] as $method ) { // Namespace method names with the class name $method['name'] = $data['name'] . '::' . $method['name']; - $this->import_method( $method, $class_id, $import_internal ); + $this->import_method( $method, $class_id, $import_ignored ); } return $class_id; @@ -422,17 +420,17 @@ protected function import_class( array $data, $import_internal = false ) { /** * Create a post for a class method. * - * @param array $data Method. - * @param int $parent_post_id Optional; post ID of the parent (class) this - * method belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions - * marked `@internal` will be imported. + * @param array $data Method. + * @param int $parent_post_id Optional; post ID of the parent (class) this + * method belongs to. Defaults to zero (no parent). + * @param bool $import_ignored Optional; defaults to false. If true, functions + * marked `@ignore` will be imported. * @return bool|int Post ID of this function, false if any failure. */ - protected function import_method( array $data, $parent_post_id = 0, $import_internal = false ) { + protected function import_method( array $data, $parent_post_id = 0, $import_ignored = false ) { // Insert this method. - $method_id = $this->import_item( $data, $parent_post_id, $import_internal, array( 'post_type' => $this->post_type_method ) ); + $method_id = $this->import_item( $data, $parent_post_id, $import_ignored, array( 'post_type' => $this->post_type_method ) ); if ( ! $method_id ) { return false; @@ -447,7 +445,7 @@ protected function import_method( array $data, $parent_post_id = 0, $import_inte // Now add the hooks. if ( ! empty( $data['hooks'] ) ) { foreach ( $data['hooks'] as $hook ) { - $this->import_hook( $hook, $method_id, $import_internal ); + $this->import_hook( $hook, $method_id, $import_ignored ); } } @@ -481,14 +479,14 @@ protected function import_version( $data ) { * Anything that needs to be dealt identically for functions or methods should go in this function. * Anything more specific should go in either import_function() or import_class() as appropriate. * - * @param array $data Data - * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. - * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). + * @param array $data Data. + * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). + * @param bool $import_ignored Optional; defaults to false. If true, functions or classes marked `@ignore` will be imported. + * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). * * @return bool|int Post ID of this item, false if any failure. */ - public function import_item( array $data, $parent_post_id = 0, $import_internal = false, array $arg_overrides = array() ) { + public function import_item( array $data, $parent_post_id = 0, $import_ignored = false, array $arg_overrides = array() ) { /** @var \wpdb $wpdb */ global $wpdb; @@ -509,25 +507,25 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal ) ); - // Don't import items marked `@internal` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_internal && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + // Don't import items marked `@ignore` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + if ( ! $import_ignored && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->logger->info( "\t" . sprintf( 'Skipped importing @internal class "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d class "%1$s"', $data['name'] ) ); break; case $this->post_type_method: - $this->logger->info( "\t\t" . sprintf( 'Skipped importing @internal method "%1$s"', $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( 'Skipped importing @ignore-d method "%1$s"', $data['name'] ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->logger->info( $indent . sprintf( 'Skipped importing @internal hook "%1$s"', $data['name'] ) ); + $this->logger->info( $indent . sprintf( 'Skipped importing @ignore-d hook "%1$s"', $data['name'] ) ); break; default: - $this->logger->info( "\t" . sprintf( 'Skipped importing @internal function "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d function "%1$s"', $data['name'] ) ); } return false; @@ -545,10 +543,10 @@ public function import_item( array $data, $parent_post_id = 0, $import_internal * @param bool $display Whether to proceed with adding/updating the import item. Default true. * @param array $data Data * @param int $parent_post_id Optional; post ID of the parent (class or function) this item belongs to. Defaults to zero (no parent). - * @param bool $import_internal Optional; defaults to false. If true, functions or classes marked `@internal` will be imported. + * @param bool $import_ignored Optional; defaults to false. If true, functions or classes marked `@ignore` will be imported. * @param array $arg_overrides Optional; array of parameters that override the defaults passed to wp_update_post(). */ - if ( ! apply_filters( 'wp_parser_pre_import_item', true, $data, $parent_post_id, $import_internal, $arg_overrides ) ) { + if ( ! apply_filters( 'wp_parser_pre_import_item', true, $data, $parent_post_id, $import_ignored, $arg_overrides ) ) { return false; } From ec7963b94f7cacd4f7039afd4d34df2a3ad13727 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Mon, 12 Jan 2015 00:10:52 -0500 Subject: [PATCH 318/402] Probably would help to actually change the tag name from `internal` to `ignore`. --- lib/class-importer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 4f3d4a7ed..f2303aa64 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -508,7 +508,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = ); // Don't import items marked `@ignore` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 - if ( ! $import_ignored && wp_list_filter( $data['doc']['tags'], array( 'name' => 'internal' ) ) ) { + if ( ! $import_ignored && wp_list_filter( $data['doc']['tags'], array( 'name' => 'ignore' ) ) ) { switch ( $post_data['post_type'] ) { case $this->post_type_class: From 5270d04c52490e1f112b520cfbf2be5f24c2c099 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Sun, 1 Mar 2015 13:37:30 -0700 Subject: [PATCH 319/402] Introduce a simple filter to re-enable skipping duplicate hooks when parsing. Ex: `add_filter( 'wp_parser_skip_duplicate_hooks', '__return_true' );` --- lib/class-importer.php | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index f2303aa64..52127baa1 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -358,20 +358,31 @@ public function import_function( array $data, $parent_post_id = 0, $import_ignor * @return bool|int Post ID of this hook, false if any failure. */ public function import_hook( array $data, $parent_post_id = 0, $import_ignored = false ) { + /** + * Filter whether to skip parsing duplicate hooks. + * + * "Duplicate hooks" are characterized in WordPress core by a preceding DocBlock comment + * including the phrases "This action is documented in" or "This filter is documented in". + * + * Passing a truthy value will skip the parsing of duplicate hooks. + * + * @param bool $skip Whether to skip parsing duplicate hooks. Default false. + */ + $skip_duplicates = apply_filters( 'wp_parser_skip_duplicate_hooks', false ); - /* TODO core-centric assumption, shouldn't be handled on import step - if ( 0 === strpos( $data['doc']['description'], 'This action is documented in' ) ) { - return false; - } + if ( false !== $skip_duplicates ) { + if ( 0 === strpos( $data['doc']['description'], 'This action is documented in' ) ) { + return false; + } - if ( 0 === strpos( $data['doc']['description'], 'This filter is documented in' ) ) { - return false; - } + if ( 0 === strpos( $data['doc']['description'], 'This filter is documented in' ) ) { + return false; + } - if ( '' === $data['doc']['description'] && '' === $data['doc']['long_description'] ) { - return false; + if ( '' === $data['doc']['description'] && '' === $data['doc']['long_description'] ) { + return false; + } } - */ $hook_id = $this->import_item( $data, $parent_post_id, $import_ignored, array( 'post_type' => $this->post_type_hook ) ); From a8d3ca852cbdb0e6ad9ba27cd832efd9fe42a964 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 5 Apr 2015 17:28:42 -0400 Subject: [PATCH 320/402] Use correct function to fail PHPUnit tests --- tests/phpunit/includes/export-testcase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 7b42736f7..7e133d43b 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -67,7 +67,7 @@ protected function assertEntityContains( $entity, $type, $expected ) { } } - $this->markTestFailed( "No matching {$type} contained by {$entity['name']}." ); + $this->fail( "No matching {$type} contained by {$entity['name']}." ); } /** @@ -100,7 +100,7 @@ protected function assertEntityUses( $entity, $type, $used ) { } } - $this->markTestFailed( "No matching {$type} used by {$entity['name']}." ); + $this->fail( "No matching {$type} used by {$entity['name']}." ); } /** From 3617a018fe3f3b27a960c2994fc7123ef2a692e6 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 5 Apr 2015 17:29:49 -0400 Subject: [PATCH 321/402] PHPUnit: change var name to match docblock --- tests/phpunit/includes/export-testcase.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 7e133d43b..67e1e8e84 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -262,15 +262,15 @@ protected function assertHookHasDocs( $hook, $docs ) { * * @return array|false The data for the entity, or false if it couldn't be found. */ - protected function find_entity_data_in( $data, $type, $entity_name ) { + protected function find_entity_data_in( $data, $type, $entity ) { if ( empty( $data[ $type ] ) ) { return false; } - foreach ( $data[ $type ] as $entity ) { - if ( $entity['name'] === $entity_name ) { - return $entity; + foreach ( $data[ $type ] as $entity_data ) { + if ( $entity_data['name'] === $entity ) { + return $entity_data; } } From da3593fc39824913eacf9b6bd3835c153c88d2c3 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 5 Apr 2015 17:30:39 -0400 Subject: [PATCH 322/402] PHPUnit: add assertions for function use exporting --- tests/phpunit/includes/export-testcase.php | 96 +++++++++++++++++----- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 67e1e8e84..96d8755a9 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -104,22 +104,13 @@ protected function assertEntityUses( $entity, $type, $used ) { } /** - * Assert that a file uses an method. + * Assert that a function uses another entity. * - * @param array $method The expected export data for the method. + * @param string $type The type of entity. E.g. 'functions', 'methods'. + * @param string $function_name The name of the function that uses this function. + * @param array $entity The expected exported data for the used entity. */ - protected function assertFileUsesMethod( $method ) { - - $this->assertEntityUses( $this->export_data, 'methods', $method ); - } - - /** - * Assert that a function uses a method. - * - * @param string $function_name The name of the function that uses this method. - * @param array $method The expected exported data for this method. - */ - protected function assertFunctionUsesMethod( $function_name, $method ) { + protected function assertFunctionUses( $type, $function_name, $entity ) { $function_data = $this->find_entity_data_in( $this->export_data @@ -128,17 +119,18 @@ protected function assertFunctionUsesMethod( $function_name, $method ) { ); $this->assertInternalType( 'array', $function_data ); - $this->assertEntityUses( $function_data, 'methods', $method ); + $this->assertEntityUses( $function_data, $type, $entity ); } /** - * Assert that a method uses a method. + * Assert that a method uses another entity. * + * @param string $type The type of entity. E.g. 'functions', 'methods'. * @param string $class_name The name of the class that the method is used in. * @param string $method_name The name of the method that uses this method. - * @param array $method The expected exported data for this method. + * @param array $entity The expected exported data for this function. */ - protected function assertMethodUsesMethod( $class_name, $method_name, $method ) { + protected function assertMethodUses( $type, $class_name, $method_name, $entity ) { $class_data = $this->find_entity_data_in( $this->export_data @@ -155,7 +147,73 @@ protected function assertMethodUsesMethod( $class_name, $method_name, $method ) ); $this->assertInternalType( 'array', $method_data ); - $this->assertEntityUses( $method_data, 'methods', $method ); + $this->assertEntityUses( $method_data, $type, $entity ); + } + + /** + * Assert that a file uses a function. + * + * @param array $function The expected export data for the function. + */ + protected function assertFileUsesFunction( $function ) { + + $this->assertEntityUses( $this->export_data, 'functions', $function ); + } + + /** + * Assert that a function uses another function. + * + * @param string $function_name The name of the function that uses this function. + * @param array $function The expected exported data for the used function. + */ + protected function assertFunctionUsesFunction( $function_name, $function ) { + + $this->assertFunctionUses( 'functions', $function_name, $function ); + } + + /** + * Assert that a method uses a function. + * + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $function The expected exported data for this function. + */ + protected function assertMethodUsesFunction( $class_name, $method_name, $function ) { + + $this->assertMethodUses( 'functions', $class_name, $method_name, $function ); + } + + /** + * Assert that a file uses an method. + * + * @param array $method The expected export data for the method. + */ + protected function assertFileUsesMethod( $method ) { + + $this->assertEntityUses( $this->export_data, 'methods', $method ); + } + + /** + * Assert that a function uses a method. + * + * @param string $function_name The name of the function that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertFunctionUsesMethod( $function_name, $method ) { + + $this->assertFunctionUses( 'methods', $function_name, $method ); + } + + /** + * Assert that a method uses a method. + * + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertMethodUsesMethod( $class_name, $method_name, $method ) { + + $this->assertMethodUses( 'methods', $class_name, $method_name, $method ); } /** From f6c079b8fcad8d0a0ae3ef38e55eb00016be43ab Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Sun, 5 Apr 2015 17:31:01 -0400 Subject: [PATCH 323/402] PHPUnit: fix two typos --- tests/phpunit/includes/export-testcase.php | 2 +- tests/phpunit/tests/export/uses/methods.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 96d8755a9..0fc6f04a5 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -85,7 +85,7 @@ protected function assertFileContainsHook( $hook ) { * * @param array $entity The exported entity data. * @param string $type The type of thing that this entity should use. - * @param array $used The expcted data for the thing the entity should use. + * @param array $used The expected data for the thing the entity should use. */ protected function assertEntityUses( $entity, $type, $used ) { diff --git a/tests/phpunit/tests/export/uses/methods.php b/tests/phpunit/tests/export/uses/methods.php index 5013d63fa..11bcf02bd 100644 --- a/tests/phpunit/tests/export/uses/methods.php +++ b/tests/phpunit/tests/export/uses/methods.php @@ -7,7 +7,7 @@ namespace WP_Parser\Tests; /** - * Test that module use is exported correctly. + * Test that method use is exported correctly. */ class Export_Method_Use extends Export_UnitTestCase { From 56f8a459288f08a65a85eb07455b135c5e07664a Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 6 Apr 2015 12:32:06 -0400 Subject: [PATCH 324/402] PHPUnit: add assertions that one entity doesn't use another --- tests/phpunit/includes/export-testcase.php | 167 +++++++++++++++++++-- 1 file changed, 158 insertions(+), 9 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 0fc6f04a5..9ed69b852 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -89,18 +89,29 @@ protected function assertFileContainsHook( $hook ) { */ protected function assertEntityUses( $entity, $type, $used ) { - $this->assertArrayHasKey( 'uses', $entity ); - $this->assertArrayHasKey( $type, $entity['uses'] ); + if ( ! $this->entity_uses( $entity, $type, $used ) ) { - $found = false; - foreach ( $entity['uses'][ $type ] as $exported_used ) { - if ( $exported_used['line'] == $used['line'] ) { - $this->assertEquals( $used, $exported_used ); - return; - } + $name = isset( $entity['path'] ) ? $entity['path'] : $entity['name']; + + $this->fail( "No matching {$type} used by {$name}." ); } + } - $this->fail( "No matching {$type} used by {$entity['name']}." ); + /** + * Assert that an entity doesn't use another entity. + * + * @param array $entity The exported entity data. + * @param string $type The type of thing that this entity shouldn't use. + * @param array $used The expected data for the thing the entity shouldn't use. + */ + protected function assertEntityNotUses( $entity, $type, $used ) { + + if ( $this->entity_uses( $entity, $type, $used ) ) { + + $name = isset( $entity['path'] ) ? $entity['path'] : $entity['name']; + + $this->fail( "Matching {$type} used by {$name}." ); + } } /** @@ -122,6 +133,25 @@ protected function assertFunctionUses( $type, $function_name, $entity ) { $this->assertEntityUses( $function_data, $type, $entity ); } + /** + * Assert that a function doesn't use another entity. + * + * @param string $type The type of entity. E.g. 'functions', 'methods'. + * @param string $function_name The name of the function that uses this function. + * @param array $entity The expected exported data for the used entity. + */ + protected function assertFunctionNotUses( $type, $function_name, $entity ) { + + $function_data = $this->find_entity_data_in( + $this->export_data + , 'functions' + , $function_name + ); + + $this->assertInternalType( 'array', $function_data ); + $this->assertEntityNotUses( $function_data, $type, $entity ); + } + /** * Assert that a method uses another entity. * @@ -150,6 +180,34 @@ protected function assertMethodUses( $type, $class_name, $method_name, $entity ) $this->assertEntityUses( $method_data, $type, $entity ); } + /** + * Assert that a method doesn't use another entity. + * + * @param string $type The type of entity. E.g. 'functions', 'methods'. + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $entity The expected exported data for this entity. + */ + protected function assertMethodNotUses( $type, $class_name, $method_name, $entity ) { + + $class_data = $this->find_entity_data_in( + $this->export_data + , 'classes' + , $class_name + ); + + $this->assertInternalType( 'array', $class_data ); + + $method_data = $this->find_entity_data_in( + $class_data + , 'methods' + , $method_name + ); + + $this->assertInternalType( 'array', $method_data ); + $this->assertEntityNotUses( $method_data, $type, $entity ); + } + /** * Assert that a file uses a function. * @@ -183,6 +241,39 @@ protected function assertMethodUsesFunction( $class_name, $method_name, $functio $this->assertMethodUses( 'functions', $class_name, $method_name, $function ); } + /** + * Assert that a file uses a function. + * + * @param array $function The expected export data for the function. + */ + protected function assertFileNotUsesFunction( $function ) { + + $this->assertEntityNotUses( $this->export_data, 'functions', $function ); + } + + /** + * Assert that a function uses another function. + * + * @param string $function_name The name of the function that uses this function. + * @param array $function The expected exported data for the used function. + */ + protected function assertFunctionNotUsesFunction( $function_name, $function ) { + + $this->assertFunctionNotUses( 'functions', $function_name, $function ); + } + + /** + * Assert that a method uses a function. + * + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $function The expected exported data for this function. + */ + protected function assertMethodNotUsesFunction( $class_name, $method_name, $function ) { + + $this->assertMethodNotUses( 'functions', $class_name, $method_name, $function ); + } + /** * Assert that a file uses an method. * @@ -216,6 +307,39 @@ protected function assertMethodUsesMethod( $class_name, $method_name, $method ) $this->assertMethodUses( 'methods', $class_name, $method_name, $method ); } + /** + * Assert that a file uses an method. + * + * @param array $method The expected export data for the method. + */ + protected function assertFileNotUsesMethod( $method ) { + + $this->assertEntityNotUses( $this->export_data, 'methods', $method ); + } + + /** + * Assert that a function uses a method. + * + * @param string $function_name The name of the function that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertFunctionNotUsesMethod( $function_name, $method ) { + + $this->assertFunctionNotUses( 'methods', $function_name, $method ); + } + + /** + * Assert that a method uses a method. + * + * @param string $class_name The name of the class that the method is used in. + * @param string $method_name The name of the method that uses this method. + * @param array $method The expected exported data for this method. + */ + protected function assertMethodNotUsesMethod( $class_name, $method_name, $method ) { + + $this->assertMethodNotUses( 'methods', $class_name, $method_name, $method ); + } + /** * Assert that an entity has a docblock. * @@ -334,4 +458,29 @@ protected function find_entity_data_in( $data, $type, $entity ) { return false; } + + /** + * Check if one entity uses another entity. + * + * @param array $entity The exported entity data. + * @param string $type The type of thing that this entity should use. + * @param array $used The expected data for the thing the entity should use. + * + * @return bool Whether the entity uses the other. + */ + function entity_uses( $entity, $type, $used ) { + + if ( ! isset( $entity['uses'][ $type ] ) ) { + return false; + } + + foreach ( $entity['uses'][ $type ] as $exported_used ) { + if ( $exported_used['line'] == $used['line'] ) { + $this->assertEquals( $used, $exported_used ); + return true; + } + } + + return false; + } } From 9266a86b9f3b5e8ce2fa0e705441a6234c2b9f57 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 6 Apr 2015 12:32:33 -0400 Subject: [PATCH 325/402] PHPUnit: docblock cleanup --- tests/phpunit/includes/export-testcase.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 9ed69b852..9939cf4cb 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -50,7 +50,7 @@ public function setUp() { * * @param array $entity The exported entity data. * @param string $type The type of thing that this entity should contain. - * @param array $expected The expcted data for the thing the entity should contain. + * @param array $expected The expected data for the thing the entity should contain. */ protected function assertEntityContains( $entity, $type, $expected ) { @@ -158,7 +158,7 @@ protected function assertFunctionNotUses( $type, $function_name, $entity ) { * @param string $type The type of entity. E.g. 'functions', 'methods'. * @param string $class_name The name of the class that the method is used in. * @param string $method_name The name of the method that uses this method. - * @param array $entity The expected exported data for this function. + * @param array $entity The expected exported data for this entity. */ protected function assertMethodUses( $type, $class_name, $method_name, $entity ) { @@ -234,7 +234,7 @@ protected function assertFunctionUsesFunction( $function_name, $function ) { * * @param string $class_name The name of the class that the method is used in. * @param string $method_name The name of the method that uses this method. - * @param array $function The expected exported data for this function. + * @param array $function The expected exported data for this function. */ protected function assertMethodUsesFunction( $class_name, $method_name, $function ) { @@ -344,7 +344,7 @@ protected function assertMethodNotUsesMethod( $class_name, $method_name, $method * Assert that an entity has a docblock. * * @param array $entity The exported entity data. - * @param array $docs The expcted data for the entity's docblock. + * @param array $docs The expected data for the entity's docblock. * @param string $doc_key The key in the entity array that should hold the docs. */ protected function assertEntityHasDocs( $entity, $docs, $doc_key = 'doc' ) { @@ -396,7 +396,7 @@ protected function assertClassHasDocs( $class, $docs ) { * * @param string $class The name of the class that the method is used in. * @param string $method The method name. - * @param array $docs The expected data for the methods's docblock. + * @param array $docs The expected data for the method's docblock. */ protected function assertMethodHasDocs( $class, $method, $docs ) { From 01273d6f318cc0bf00570047ae33099455638e63 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 6 Apr 2015 12:32:43 -0400 Subject: [PATCH 326/402] PHPUnit: remove unused variables --- tests/phpunit/includes/export-testcase.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/phpunit/includes/export-testcase.php b/tests/phpunit/includes/export-testcase.php index 9939cf4cb..daff5d73f 100644 --- a/tests/phpunit/includes/export-testcase.php +++ b/tests/phpunit/includes/export-testcase.php @@ -56,7 +56,6 @@ protected function assertEntityContains( $entity, $type, $expected ) { $this->assertArrayHasKey( $type, $entity ); - $found = false; foreach ( $entity[ $type ] as $exported ) { if ( $exported['line'] == $expected['line'] ) { foreach ( $expected as $key => $expected_value ) { @@ -351,7 +350,6 @@ protected function assertEntityHasDocs( $entity, $docs, $doc_key = 'doc' ) { $this->assertArrayHasKey( $doc_key, $entity ); - $found = false; foreach ( $docs as $key => $expected_value ) { $this->assertEquals( $expected_value, $entity[ $doc_key ][ $key ] ); } From a78e025df2f4c44acbc7b5d7d9ca9c4a6232f951 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 6 Apr 2015 12:35:20 -0400 Subject: [PATCH 327/402] Uses/used-by parsing: handle nested functions This actually simplifies the code by better utilizing the location/scope stack that was already present. Includes PHPUnit tests. --- lib/class-file-reflector.php | 68 ++----- tests/phpunit/tests/export/uses/nested.inc | 34 ++++ tests/phpunit/tests/export/uses/nested.php | 204 +++++++++++++++++++++ 3 files changed, 251 insertions(+), 55 deletions(-) create mode 100644 tests/phpunit/tests/export/uses/nested.inc create mode 100644 tests/phpunit/tests/export/uses/nested.php diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index fde94e285..f366a8538 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -22,13 +22,6 @@ class File_Reflector extends FileReflector { */ public $uses = array(); - /** - * List of elements used in the current node scope, indexed by element type. - * - * @var array {@see \WP_Parser\File_Reflector::$uses} - */ - protected $uses_queue = array(); - /** * List of elements used in the current class scope, indexed by method. * @@ -83,16 +76,8 @@ public function enterNode( \PHPParser_Node $node ) { case 'Expr_FuncCall': $function = new \WP_Parser\Function_Call_Reflector( $node, $this->context ); - /* - * If the function call is in the global scope, add it to the - * file's function calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['functions'][] = $function; - } else { - $this->uses_queue['functions'][] = $function; - } + // Add the call to the list of functions used in this scope. + $this->getLocation()->uses['functions'][] = $function; if ( $this->isFilter( $node ) ) { if ( $this->last_doc && ! $node->getDocComment() ) { @@ -102,16 +87,8 @@ public function enterNode( \PHPParser_Node $node ) { $hook = new \WP_Parser\Hook_Reflector( $node, $this->context ); - /* - * If the hook is in the global scope, add it to the file's - * hooks. Otherwise, add it to the queue so it can be added to - * the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['hooks'][] = $hook; - } else { - $this->uses_queue['hooks'][] = $hook; - } + // Add it to the list of hooks used in this scope. + $this->getLocation()->uses['hooks'][] = $hook; } break; @@ -119,32 +96,16 @@ public function enterNode( \PHPParser_Node $node ) { case 'Expr_MethodCall': $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); - /* - * If the method call is in the global scope, add it to the - * file's method calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['methods'][] = $method; - } else { - $this->uses_queue['methods'][] = $method; - } + // Add it to the list of methods used in this scope. + $this->getLocation()->uses['methods'][] = $method; break; // Parse out method calls, so we can export where methods are used. case 'Expr_StaticCall': $method = new \WP_Parser\Static_Method_Call_Reflector( $node, $this->context ); - /* - * If the method call is in the global scope, add it to the - * file's method calls. Otherwise, add it to the queue so it - * can be added to the correct node when we leave it. - */ - if ( $this === $this->getLocation() ) { - $this->uses['methods'][] = $method; - } else { - $this->uses_queue['methods'][] = $method; - } + // Add it to the list of methods used in this scope. + $this->getLocation()->uses['methods'][] = $method; break; } @@ -196,22 +157,19 @@ public function leaveNode( \PHPParser_Node $node ) { break; case 'Stmt_Function': - end( $this->functions )->uses = $this->uses_queue; - $this->uses_queue = array(); - array_pop( $this->location ); + end( $this->functions )->uses = array_pop( $this->location )->uses; break; case 'Stmt_ClassMethod': + $method = array_pop( $this->location ); + /* * Store the list of elements used by this method in the queue. We'll * assign them to the method upon leaving the class (see above). */ - if ( ! empty( $this->uses_queue ) ) { - $this->method_uses_queue[ $node->name ] = $this->uses_queue; - $this->uses_queue = array(); + if ( ! empty( $method->uses ) ) { + $this->method_uses_queue[ $method->name ] = $method->uses; } - - array_pop( $this->location ); break; } } diff --git a/tests/phpunit/tests/export/uses/nested.inc b/tests/phpunit/tests/export/uses/nested.inc new file mode 100644 index 000000000..e9f3cfc8f --- /dev/null +++ b/tests/phpunit/tests/export/uses/nested.inc @@ -0,0 +1,34 @@ +<?php + +function test() { + + a_function(); + + function sub_test() { + + b_function(); + + My_Class::static_method(); + } + + sub_test(); + + My_Class::do_things(); +} + +class My_Class extends Parent_Class { + + public function a_method() { + + $this->do_it(); + + function sub_method_test() { + + b_function(); + + My_Class::a_method(); + } + + do_things(); + } +} diff --git a/tests/phpunit/tests/export/uses/nested.php b/tests/phpunit/tests/export/uses/nested.php new file mode 100644 index 000000000..bb25cb413 --- /dev/null +++ b/tests/phpunit/tests/export/uses/nested.php @@ -0,0 +1,204 @@ +<?php + +/** + * A test case for exporting function use when one function is defined within another. + */ + +namespace WP_Parser\Tests; + +/** + * Test that function use is exported correctly when function declarations are nested. + */ +class Export_Nested_Function_Use extends Export_UnitTestCase { + + /** + * Test that the uses data of the outer function is correct. + */ + public function test_top_function_uses_correct() { + + $this->assertFunctionUsesFunction( + 'test' + , array( + 'name' => 'a_function', + 'line' => 5, + 'end_line' => 5, + ) + ); + + $this->assertFunctionUsesFunction( + 'test' + , array( + 'name' => 'sub_test', + 'line' => 14, + 'end_line' => 14, + ) + ); + + $this->assertFunctionUsesMethod( + 'test' + , array( + 'name' => array( 'My_Class', 'do_things' ), + 'line' => 16, + 'end_line' => 16, + ) + ); + + $this->assertFunctionNotUsesFunction( + 'test' + , array( + 'name' => 'b_function', + 'line' => 9, + 'end_line' => 9, + ) + ); + + $this->assertFunctionNotUsesMethod( + 'test' + , array( + 'name' => array( 'My_Class', 'static_method' ), + 'line' => 11, + 'end_line' => 11, + ) + ); + } + + /** + * Test that the usages of the nested function is correct. + */ + public function test_nested_function_uses_correct() { + + $this->assertFunctionUsesFunction( + 'sub_test' + , array( + 'name' => 'b_function', + 'line' => 9, + 'end_line' => 9, + ) + ); + + $this->assertFunctionUsesMethod( + 'sub_test' + , array( + 'name' => array( 'My_Class', 'static_method' ), + 'line' => 11, + 'end_line' => 11, + ) + ); + + $this->assertFunctionNotUsesFunction( + 'sub_test' + , array( + 'name' => 'a_function', + 'line' => 5, + 'end_line' => 5, + ) + ); + + $this->assertFunctionNotUsesFunction( + 'sub_test' + , array( + 'name' => 'sub_test', + 'line' => 14, + 'end_line' => 14, + ) + ); + + $this->assertFunctionNotUsesMethod( + 'sub_test' + , array( + 'name' => array( 'My_Class', 'do_things' ), + 'line' => 16, + 'end_line' => 16, + ) + ); + } + + + /** + * Test that the uses data of the outer method is correct. + */ + public function test_method_uses_correct() { + + $this->assertMethodUsesMethod( + 'My_Class' + , 'a_method' + , array( + 'name' => array( 'My_Class', 'do_it', ), + 'line' => 23, + 'end_line' => 23, + ) + ); + + $this->assertMethodUsesFunction( + 'My_Class' + , 'a_method' + , array( + 'name' => 'do_things', + 'line' => 32, + 'end_line' => 32, + ) + ); + + $this->assertMethodNotUsesFunction( + 'My_Class' + , 'a_method' + , array( + 'name' => 'b_function', + 'line' => 27, + 'end_line' => 27, + ) + ); + + $this->assertMethodNotUsesMethod( + 'My_Class' + , 'a_method' + , array( + 'name' => array( 'My_Class', 'a_method' ), + 'line' => 29, + 'end_line' => 29, + ) + ); + } + + /** + * Test that the usages of the nested function within a method is correct. + */ + public function test_nested_function_in_method_uses_correct() { + + $this->assertFunctionUsesFunction( + 'sub_method_test' + , array( + 'name' => 'b_function', + 'line' => 27, + 'end_line' => 27, + ) + ); + + $this->assertFunctionUsesMethod( + 'sub_method_test' + , array( + 'name' => array( 'My_Class', 'a_method' ), + 'line' => 29, + 'end_line' => 29, + ) + ); + + $this->assertFunctionNotUsesMethod( + 'sub_method_test' + , array( + 'name' => array( 'My_Class', 'do_it', ), + 'line' => 23, + 'end_line' => 23, + ) + ); + + $this->assertFunctionNotUsesFunction( + 'sub_method_test' + , array( + 'name' => 'do_things', + 'line' => 32, + 'end_line' => 32, + ) + ); + } +} From a1183c4347a42587ef44a22c9998dd43103df2de Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Mon, 6 Apr 2015 15:03:32 -0400 Subject: [PATCH 328/402] Travis CI: update php versions We no longer support 5.3, so there is no need to test against it. PHP 5.6 is now stable, so we should be testing against it. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index da8263796..84812fb8e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: php php: + - 5.6 - 5.5 - 5.4 - - 5.3 - hhvm install: composer install --no-dev \ No newline at end of file From 269d107fcbc6d818e4c1ddd9156a9423290ea801 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 7 Apr 2015 14:28:59 -0400 Subject: [PATCH 329/402] PHPUnit: run the plugins activation hook when it is loaded MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise Posts2Posts storage won’t be enabled. --- tests/phpunit/includes/bootstrap.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index 8f67b8c49..f51b13904 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -19,7 +19,9 @@ require_once getenv( 'WP_TESTS_DIR' ) . '/includes/functions.php'; tests_add_filter( 'muplugins_loaded', function() { - include( __DIR__ . '/../../../plugin.php' ); + $plugin_file = dirname( dirname( dirname( __DIR__ ) ) ) . '/plugin.php'; + include( $plugin_file ); + do_action( 'activate_' . plugin_basename( $plugin_file ) ); }); /** From 9af417ac08e8c034cc086b4acdf8c7bba0d94942 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 7 Apr 2015 14:31:33 -0400 Subject: [PATCH 330/402] PHPUnit: update export tests to match latest format Previously the `name` field was an array for methods, now it is just the method name, with the class name exported under the `class` field. The `static` attribute was also added. --- tests/phpunit/tests/export/uses/methods.php | 32 +++++++++++++++------ tests/phpunit/tests/export/uses/nested.php | 30 +++++++++++++------ 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/tests/phpunit/tests/export/uses/methods.php b/tests/phpunit/tests/export/uses/methods.php index 11bcf02bd..aad38ff5b 100644 --- a/tests/phpunit/tests/export/uses/methods.php +++ b/tests/phpunit/tests/export/uses/methods.php @@ -18,18 +18,22 @@ public function test_static_methods() { $this->assertFileUsesMethod( array( - 'name' => array( 'My_Class', 'static_method' ), + 'name' => 'static_method', 'line' => 3, 'end_line' => 3, + 'class' => 'My_Class', + 'static' => true, ) ); $this->assertFunctionUsesMethod( 'test' , array( - 'name' => array( 'Another_Class', 'another_method' ), + 'name' => 'another_method', 'line' => 8, 'end_line' => 8, + 'class' => 'Another_Class', + 'static' => true, ) ); @@ -37,9 +41,11 @@ public function test_static_methods() { 'My_Class' , 'static_method' , array( - 'name' => array( 'Another_Class', 'do_static_stuff' ), + 'name' => 'do_static_stuff', 'line' => 16, 'end_line' => 16, + 'class' => 'Another_Class', + 'static' => true, ) ); @@ -47,9 +53,11 @@ public function test_static_methods() { 'My_Class' , 'static_method' , array( - 'name' => array( 'My_Class', 'do_stuff' ), + 'name' => 'do_stuff', 'line' => 17, 'end_line' => 17, + 'class' => 'My_Class', + 'static' => true, ) ); @@ -57,9 +65,11 @@ public function test_static_methods() { 'My_Class' , 'static_method' , array( - 'name' => array( 'Parent_Class', 'do_parental_stuff' ), + 'name' => 'do_parental_stuff', 'line' => 19, 'end_line' => 19, + 'class' => 'Parent_Class', + 'static' => true, ) ); } @@ -71,18 +81,22 @@ public function test_instance_methods() { $this->assertFileUsesMethod( array( - 'name' => array( '$wpdb', 'update' ), + 'name' => 'update', 'line' => 5, 'end_line' => 5, + 'class' => '$wpdb', + 'static' => false, ) ); $this->assertFunctionUsesMethod( 'test' , array( - 'name' => array( 'get_class()', 'call_method' ), + 'name' => 'call_method', 'line' => 10, 'end_line' => 10, + 'class' => 'get_class()', + 'static' => false, ) ); @@ -90,9 +104,11 @@ public function test_instance_methods() { 'My_Class' , 'static_method' , array( - 'name' => array( 'My_Class', 'go' ), + 'name' => 'go', 'line' => 18, 'end_line' => 18, + 'class' => 'My_Class', + 'static' => false, ) ); } diff --git a/tests/phpunit/tests/export/uses/nested.php b/tests/phpunit/tests/export/uses/nested.php index bb25cb413..dc1ef80ff 100644 --- a/tests/phpunit/tests/export/uses/nested.php +++ b/tests/phpunit/tests/export/uses/nested.php @@ -37,9 +37,11 @@ public function test_top_function_uses_correct() { $this->assertFunctionUsesMethod( 'test' , array( - 'name' => array( 'My_Class', 'do_things' ), + 'name' => 'do_things', 'line' => 16, 'end_line' => 16, + 'class' => 'My_Class', + 'static' => true, ) ); @@ -55,9 +57,11 @@ public function test_top_function_uses_correct() { $this->assertFunctionNotUsesMethod( 'test' , array( - 'name' => array( 'My_Class', 'static_method' ), + 'name' => 'static_method', 'line' => 11, 'end_line' => 11, + 'class' => 'My_Class', + 'static' => true, ) ); } @@ -79,9 +83,11 @@ public function test_nested_function_uses_correct() { $this->assertFunctionUsesMethod( 'sub_test' , array( - 'name' => array( 'My_Class', 'static_method' ), + 'name' => 'static_method', 'line' => 11, 'end_line' => 11, + 'class' => 'My_Class', + 'static' => true, ) ); @@ -106,7 +112,7 @@ public function test_nested_function_uses_correct() { $this->assertFunctionNotUsesMethod( 'sub_test' , array( - 'name' => array( 'My_Class', 'do_things' ), + 'name' => 'do_things', 'line' => 16, 'end_line' => 16, ) @@ -123,9 +129,11 @@ public function test_method_uses_correct() { 'My_Class' , 'a_method' , array( - 'name' => array( 'My_Class', 'do_it', ), + 'name' => 'do_it', 'line' => 23, 'end_line' => 23, + 'class' => 'My_Class', + 'static' => false, ) ); @@ -153,9 +161,11 @@ public function test_method_uses_correct() { 'My_Class' , 'a_method' , array( - 'name' => array( 'My_Class', 'a_method' ), + 'name' => 'a_method', 'line' => 29, 'end_line' => 29, + 'class' => 'My_Class', + 'static' => true, ) ); } @@ -177,18 +187,22 @@ public function test_nested_function_in_method_uses_correct() { $this->assertFunctionUsesMethod( 'sub_method_test' , array( - 'name' => array( 'My_Class', 'a_method' ), + 'name' => 'a_method', 'line' => 29, 'end_line' => 29, + 'class' => 'My_Class', + 'static' => true, ) ); $this->assertFunctionNotUsesMethod( 'sub_method_test' , array( - 'name' => array( 'My_Class', 'do_it', ), + 'name' => 'do_it', 'line' => 23, 'end_line' => 23, + 'class' => 'My_Class', + 'static' => false, ) ); From c3b54a0e4921922ec21fa19b73019c47a4f84d62 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Tue, 7 Apr 2015 14:46:31 -0400 Subject: [PATCH 331/402] Export used-by information for class constructors Includes unit tests. Fixes #154 --- lib/class-file-reflector.php | 8 ++ lib/class-method-call-reflector.php | 66 +++++++++---- lib/class-static-method-call-reflector.php | 9 +- .../phpunit/tests/export/uses/constructor.inc | 20 ++++ .../phpunit/tests/export/uses/constructor.php | 92 +++++++++++++++++++ 5 files changed, 171 insertions(+), 24 deletions(-) create mode 100644 tests/phpunit/tests/export/uses/constructor.inc create mode 100644 tests/phpunit/tests/export/uses/constructor.php diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 923d27f07..5e1b59f5b 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -106,6 +106,14 @@ public function enterNode( \PHPParser_Node $node ) { case 'Expr_StaticCall': $method = new Static_Method_Call_Reflector( $node, $this->context ); + // Add it to the list of methods used in this scope. + $this->getLocation()->uses['methods'][] = $method; + break; + + // Parse out `new Class()` calls as uses of Class::__construct(). + case 'Expr_New': + $method = new \WP_Parser\Method_Call_Reflector( $node, $this->context ); + // Add it to the list of methods used in this scope. $this->getLocation()->uses['methods'][] = $method; break; diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index d770439c3..fbba06c4d 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -23,27 +23,35 @@ class Method_Call_Reflector extends BaseReflector { * @return string[] Index 0 is the calling instance, 1 is the method name. */ public function getName() { - $name = $this->getShortName(); - $printer = new Pretty_Printer; - $caller = $printer->prettyPrintExpr( $this->node->var ); - - if ( $this->called_in_class && '$this' === $caller ) { - $caller = $this->called_in_class->getShortName(); + if ( 'Expr_New' === $this->node->getType() ) { + $name = '__construct'; + $caller = $this->node->class; } else { + $name = $this->getShortName(); + $caller = $this->node->var; + } - // If the caller is a function, convert it to the function name - if ( is_a( $caller, 'PHPParser_Node_Expr_FuncCall' ) ) { + if ( $caller instanceof \PHPParser_Node_Expr ) { + $printer = new Pretty_Printer; + $caller = $printer->prettyPrintExpr( $caller ); + } elseif ( $caller instanceof \PHPParser_Node_Name ) { + $caller = $caller->toString(); + } - // Add parentheses to signify this is a function call - /** @var \PHPParser_Node_Expr_FuncCall $caller */ - $caller = $caller->name->parts[0] . '()'; - } + $caller = $this->_resolveName( $caller ); - $class_mapping = $this->_getClassMapping(); - if ( array_key_exists( $caller, $class_mapping ) ) { - $caller = $class_mapping[ $caller ]; - } + // If the caller is a function, convert it to the function name + if ( is_a( $caller, 'PHPParser_Node_Expr_FuncCall' ) ) { + + // Add parentheses to signify this is a function call + /** @var \PHPParser_Node_Expr_FuncCall $caller */ + $caller = $caller->name->parts[0] . '()'; + } + + $class_mapping = $this->_getClassMapping(); + if ( array_key_exists( $caller, $class_mapping ) ) { + $caller = $class_mapping[ $caller ]; } return array( $caller, $name ); @@ -117,4 +125,30 @@ protected function _getClassMapping() { return $class_mapping; } + /** + * Resolve a class name from self/parent. + * + * @param string $class The class name. + * + * @return string The resolved class name. + */ + protected function _resolveName( $class ) { + + if ( ! $this->called_in_class ) { + return $class; + } + + switch ( $class ) { + case '$this': + case 'self': + $class = $this->called_in_class->getShortName(); + break; + + case 'parent': + $class = $this->called_in_class->getNode()->extends->toString(); + break; + } + + return $class; + } } diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index 21f8a7062..c9c5699bd 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -14,14 +14,7 @@ class Static_Method_Call_Reflector extends Method_Call_Reflector { */ public function getName() { $class = $this->node->class->parts[0]; - - if ( $this->called_in_class && 'self' === $class ) { - $class = $this->called_in_class->getShortName(); - } - - if ( $this->called_in_class && 'parent' === $class ) { - $class = $this->called_in_class->getNode()->extends; - } + $class = $this->_resolveName( $class ); return array( $class, $this->getShortName() ); } diff --git a/tests/phpunit/tests/export/uses/constructor.inc b/tests/phpunit/tests/export/uses/constructor.inc new file mode 100644 index 000000000..2fa3d1d11 --- /dev/null +++ b/tests/phpunit/tests/export/uses/constructor.inc @@ -0,0 +1,20 @@ +<?php + +$query = new WP_Query(); + +function test() { + $a = new My_Class; +} + +class My_Class extends Parent_Class { + + static function instance() { + return new self; + } + + static function parent() { + return new parent; + } +} + +$b = new $class; diff --git a/tests/phpunit/tests/export/uses/constructor.php b/tests/phpunit/tests/export/uses/constructor.php new file mode 100644 index 000000000..d05e15ae2 --- /dev/null +++ b/tests/phpunit/tests/export/uses/constructor.php @@ -0,0 +1,92 @@ +<?php + +/** + * A test case for exporting constructor method use. + */ + +namespace WP_Parser\Tests; + +/** + * Test that use of the __construct() method is exported for new Class() statements. + */ +class Export_Constructor_Use extends Export_UnitTestCase { + + /** + * Test that use is exported when the class name is used explicitly. + */ + public function test_new_class() { + + $this->assertFileUsesMethod( + array( + 'name' => '__construct', + 'line' => 3, + 'end_line' => 3, + 'class' => 'WP_Query', + 'static' => false, + ) + ); + + $this->assertFunctionUsesMethod( + 'test' + , array( + 'name' => '__construct', + 'line' => 6, + 'end_line' => 6, + 'class' => 'My_Class', + 'static' => false, + ) + ); + } + + /** + * Test that use is exported when the self keyword is used. + */ + public function test_new_self() { + + $this->assertMethodUsesMethod( + 'My_Class' + , 'instance' + , array( + 'name' => '__construct', + 'line' => 12, + 'end_line' => 12, + 'class' => 'My_Class', + 'static' => false, + ) + ); + } + + /** + * Test that use is exported when the parent keyword is used. + */ + public function test_new_parent() { + + $this->assertMethodUsesMethod( + 'My_Class' + , 'parent' + , array( + 'name' => '__construct', + 'line' => 16, + 'end_line' => 16, + 'class' => 'Parent_Class', + 'static' => false, + ) + ); + } + + /** + * Test that use is exported when a variable is used. + */ + public function test_new_variable() { + + $this->assertFileUsesMethod( + array( + 'name' => '__construct', + 'line' => 20, + 'end_line' => 20, + 'class' => '$class', + 'static' => false, + ) + ); + } +} From 0b7dfdc38c1bf39fb76ff9a6a046423718ed4053 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 9 Apr 2015 15:13:17 -0400 Subject: [PATCH 332/402] Travis CI: install WordPress for the import tests First pass. May not work. --- .travis.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.travis.yml b/.travis.yml index 84812fb8e..44f7ae2d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,4 +5,17 @@ php: - 5.4 - hhvm +before_install: + # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). + - WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ + # Clone the WordPress develop repo. + - git clone --depth=1 --branch="branch-4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ + # Setup DB. + - mysql -e "CREATE DATABASE wordpress_test;" -uroot + # Setup wp-config. + - cp /tmp/wordpress/wp-tests-config-sample.php /tmp/wordpress/wp-tests-config.php + - sed -i "s/youremptytestdbnamehere/wordpress_test/" /tmp/wordpress/wp-tests-config.php + - sed -i "s/yourusernamehere/root/" /tmp/wordpress/wp-tests-config.php + - sed -i "s/yourpasswordhere//" /tmp/wordpress/wp-tests-config.php + install: composer install --no-dev \ No newline at end of file From 794f24c70e3e80b842e189636c4d4cdec454cb1f Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 9 Apr 2015 15:21:14 -0400 Subject: [PATCH 333/402] Travis: use correct branch name for WordPress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We could use `master` to get `trunk`, but for now we’ll test against the current stable version, which is 4.1 at the moment. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 44f7ae2d7..003213e64 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ before_install: # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). - WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ # Clone the WordPress develop repo. - - git clone --depth=1 --branch="branch-4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ + - git clone --depth=1 --branch="4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ # Setup DB. - mysql -e "CREATE DATABASE wordpress_test;" -uroot # Setup wp-config. From 2225bce0d89720a2de769ad0cb72ee8a009d1f04 Mon Sep 17 00:00:00 2001 From: JDGrimes <jdg@codesymphony.co> Date: Thu, 9 Apr 2015 15:43:16 -0400 Subject: [PATCH 334/402] Travis: export the test dir path --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 003213e64..5708eb957 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ php: before_install: # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). - - WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ + - export WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ # Clone the WordPress develop repo. - git clone --depth=1 --branch="4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ # Setup DB. From 0bbd7126969db61a294b788ecddec04d5071cd60 Mon Sep 17 00:00:00 2001 From: Andrey Savchenko <contact@rarst.net> Date: Sun, 15 Nov 2015 11:32:57 +0100 Subject: [PATCH 335/402] Removed myself as official maintainer Subj. --- composer.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/composer.json b/composer.json index a42c4a5b7..08f94e9be 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,6 @@ "homepage": "http://ryanmccue.info", "role" : "Developer" }, - { - "name" : "Andrey Savchenko", - "email" : "contact@rarst.net", - "homepage": "http://www.Rarst.net/", - "role" : "Maintainer" - }, { "name" : "Contributors", "homepage": "https://github.com/rmccue/WP-Parser/graphs/contributors" From 42e4de3f4f2b78049d4b2a25e7fe303a10b3dbfb Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Sun, 6 Dec 2015 11:19:38 -0500 Subject: [PATCH 336/402] Add support for PHP Namespaces --- lib/class-function-call-reflector.php | 4 + lib/class-importer.php | 82 +++++++++++++++---- lib/class-method-call-reflector.php | 12 ++- lib/class-plugin.php | 16 ++++ lib/class-relationships.php | 47 ++++++++--- lib/class-static-method-call-reflector.php | 5 +- lib/runner.php | 6 ++ .../phpunit/tests/export/uses/constructor.php | 8 +- tests/phpunit/tests/export/uses/methods.php | 12 +-- tests/phpunit/tests/export/uses/nested.php | 14 ++-- 10 files changed, 156 insertions(+), 50 deletions(-) diff --git a/lib/class-function-call-reflector.php b/lib/class-function-call-reflector.php index 83e5db49a..233e6d87a 100644 --- a/lib/class-function-call-reflector.php +++ b/lib/class-function-call-reflector.php @@ -25,6 +25,10 @@ public function getName() { $shortName = $this->getShortName(); + if ( is_a( $shortName, 'PHPParser_Node_Name_FullyQualified' ) ) { + return '\\' . (string) $shortName; + } + if ( is_a( $shortName, 'PHPParser_Node_Name' ) ) { return (string) $shortName; } diff --git a/lib/class-importer.php b/lib/class-importer.php index 52127baa1..9c66d0819 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -20,6 +20,13 @@ class Importer implements LoggerAwareInterface { */ public $taxonomy_file; + /** + * Taxonomy name for an item's namespace tags + * + * @var string + */ + public $taxonomy_namespace; + /** * Taxonomy name for an item's @since tag * @@ -94,6 +101,7 @@ public function __construct( array $args = array() ) { 'post_type_function' => 'wp-parser-function', 'post_type_hook' => 'wp-parser-hook', 'taxonomy_file' => 'wp-parser-source-file', + 'taxonomy_namespace' => 'wp-parser-namespace', 'taxonomy_package' => 'wp-parser-package', 'taxonomy_since_version' => 'wp-parser-since', ) @@ -223,12 +231,12 @@ public function import( array $data, $skip_sleep = false, $import_ignored_functi * @return array|mixed|\WP_Error */ protected function insert_term( $term, $taxonomy, $args = array() ) { + $parent = isset( $args['parent'] ) ? $args['parent'] : 0; - if ( isset( $this->inserted_terms[ $taxonomy ][ $term ] ) ) { - return $this->inserted_terms[ $taxonomy ][ $term ]; + if ( isset( $this->inserted_terms[ $taxonomy ][ $term . $parent ] ) ) { + return $this->inserted_terms[ $taxonomy ][ $term . $parent ]; } - $parent = isset( $args['parent'] ) ? $args['parent'] : 0; if ( ! $inserted_term = term_exists( $term, $taxonomy, $parent ) ) { $inserted_term = wp_insert_term( $term, $taxonomy, $args ); @@ -503,7 +511,8 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = global $wpdb; $is_new_post = true; - $slug = sanitize_title( str_replace( '::', '-', $data['name'] ) ); + $ns_name = ( empty( $data['namespace'] ) || 'global' === $data['namespace'] ) ? $data['name'] : $data['namespace'] . '\\' . $data['name']; + $slug = sanitize_title( str_replace( '\\', '-', str_replace( '::', '-', $ns_name ) ) ); $post_data = wp_parse_args( $arg_overrides, @@ -523,20 +532,20 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d class "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d class "%1$s"', $ns_name ) ); break; case $this->post_type_method: - $this->logger->info( "\t\t" . sprintf( 'Skipped importing @ignore-d method "%1$s"', $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( 'Skipped importing @ignore-d method "%1$s"', $ns_name ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->logger->info( $indent . sprintf( 'Skipped importing @ignore-d hook "%1$s"', $data['name'] ) ); + $this->logger->info( $indent . sprintf( 'Skipped importing @ignore-d hook "%1$s"', $ns_name ) ); break; default: - $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d function "%1$s"', $data['name'] ) ); + $this->logger->info( "\t" . sprintf( 'Skipped importing @ignore-d function "%1$s"', $ns_name ) ); } return false; @@ -596,25 +605,55 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for class "%1$s"', $data['name'], $post_id->get_error_message() ); + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for class "%1$s"', $ns_name, $post_id->get_error_message() ); break; case $this->post_type_method: - $this->errors[] = "\t\t" . sprintf( 'Problem inserting/updating post for method "%1$s"', $data['name'], $post_id->get_error_message() ); + $this->errors[] = "\t\t" . sprintf( 'Problem inserting/updating post for method "%1$s"', $ns_name, $post_id->get_error_message() ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->errors[] = $indent . sprintf( 'Problem inserting/updating post for hook "%1$s"', $data['name'], $post_id->get_error_message() ); + $this->errors[] = $indent . sprintf( 'Problem inserting/updating post for hook "%1$s"', $ns_name, $post_id->get_error_message() ); break; default: - $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for function "%1$s"', $data['name'], $post_id->get_error_message() ); + $this->errors[] = "\t" . sprintf( 'Problem inserting/updating post for function "%1$s"', $ns_name, $post_id->get_error_message() ); } return false; } + $namespaces = ( ! empty( $data['namespace'] ) ) ? explode( '\\', $data['namespace'] ) : false; + if ( $namespaces ) { + $ns_term = false; + $ns_terms = array(); + foreach ( $namespaces as $namespace ) { + $ns_term = $this->insert_term( + $namespace, + $this->taxonomy_namespace, + array( + 'slug' => strtolower( str_replace( '_', '-', $namespace ) ), + 'parent' => ( $ns_term ) ? $ns_term['term_id'] : 0, + ) + ); + if ( ! is_wp_error( $ns_term ) ) { + $ns_terms[] = (int) $ns_term['term_id']; + } else { + $this->logger->warning( "\tCannot set namespace term: " . $ns_term->get_error_message() ); + $ns_term = false; + } + } + + if ( ! empty( $ns_terms ) ) { + $added_term_relationship = did_action( 'added_term_relationship' ); + wp_set_object_terms( $post_id, $ns_terms, $this->taxonomy_namespace ); + if( did_action( 'added_term_relationship' ) > $added_term_relationship ) { + $this->anything_updated[] = true; + } + } + } + // If the item has @since markup, assign the taxonomy $since_versions = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); if ( ! empty( $since_versions ) ) { @@ -709,6 +748,17 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = if ( $post_data['post_type'] !== $this->post_type_class ) { $anything_updated[] = update_post_meta( $post_id, '_wp-parser_args', $data['arguments'] ); } + + // If the post type is using namespace aliases, record them. + if ( ! empty( $data['aliases'] ) ) { + $anything_updated[] = update_post_meta( $post_id, '_wp_parser_aliases', (array) $data['aliases'] ); + } + + // Recored the namespace if there is one. + if ( ! empty( $data['namespace'] ) ) { + $anything_updated[] = update_post_meta( $post_id, '_wp_parser_namespace', (string) addslashes( $data['namespace'] ) ); + } + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_line_num', (string) $data['line'] ); $anything_updated[] = update_post_meta( $post_id, '_wp-parser_end_line_num', (string) $data['end_line'] ); $anything_updated[] = update_post_meta( $post_id, '_wp-parser_tags', $data['doc']['tags'] ); @@ -722,20 +772,20 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = switch ( $post_data['post_type'] ) { case $this->post_type_class: - $this->logger->info( "\t" . sprintf( '%1$s class "%2$s"', $action, $data['name'] ) ); + $this->logger->info( "\t" . sprintf( '%1$s class "%2$s"', $action, $ns_name ) ); break; case $this->post_type_hook: $indent = ( $parent_post_id ) ? "\t\t" : "\t"; - $this->logger->info( $indent . sprintf( '%1$s hook "%2$s"', $action, $data['name'] ) ); + $this->logger->info( $indent . sprintf( '%1$s hook "%2$s"', $action, $ns_name ) ); break; case $this->post_type_method: - $this->logger->info( "\t\t" . sprintf( '%1$s method "%2$s"', $action, $data['name'] ) ); + $this->logger->info( "\t\t" . sprintf( '%1$s method "%2$s"', $action, $ns_name ) ); break; default: - $this->logger->info( "\t" . sprintf( '%1$s function "%2$s"', $action, $data['name'] ) ); + $this->logger->info( "\t" . sprintf( '%1$s function "%2$s"', $action, $ns_name ) ); } /** diff --git a/lib/class-method-call-reflector.php b/lib/class-method-call-reflector.php index fbba06c4d..570d5a542 100644 --- a/lib/class-method-call-reflector.php +++ b/lib/class-method-call-reflector.php @@ -35,6 +35,8 @@ public function getName() { if ( $caller instanceof \PHPParser_Node_Expr ) { $printer = new Pretty_Printer; $caller = $printer->prettyPrintExpr( $caller ); + } elseif ( $caller instanceof \PHPParser_Node_Name_FullyQualified ) { + $caller = '\\' . $caller->toString(); } elseif ( $caller instanceof \PHPParser_Node_Name ) { $caller = $caller->toString(); } @@ -46,7 +48,7 @@ public function getName() { // Add parentheses to signify this is a function call /** @var \PHPParser_Node_Expr_FuncCall $caller */ - $caller = $caller->name->parts[0] . '()'; + $caller = implode( '\\', $caller->name->parts ) . '()'; } $class_mapping = $this->_getClassMapping(); @@ -138,14 +140,16 @@ protected function _resolveName( $class ) { return $class; } + switch ( $class ) { case '$this': case 'self': - $class = $this->called_in_class->getShortName(); + $namespace = (string) $this->called_in_class->getNamespace(); + $namespace = ( 'global' !== $namespace ) ? $namespace . '\\' : ''; + $class = '\\' . $namespace . $this->called_in_class->getShortName(); break; - case 'parent': - $class = $this->called_in_class->getNode()->extends->toString(); + $class = '\\' . $this->called_in_class->getNode()->extends->toString(); break; } diff --git a/lib/class-plugin.php b/lib/class-plugin.php index ca5d7e6ae..5fe7f952c 100644 --- a/lib/class-plugin.php +++ b/lib/class-plugin.php @@ -171,6 +171,22 @@ public function register_taxonomies() { ) ); } + + if ( ! taxonomy_exists( 'wp-parser-namespace' ) ) { + + register_taxonomy( + 'wp-parser-namespace', + $object_types, + array( + 'hierarchical' => true, + 'label' => __( 'Namespaces', 'wp-parser' ), + 'public' => true, + 'rewrite' => array( 'slug' => 'namespace' ), + 'sort' => false, + 'update_count_callback' => '_update_post_term_count', + ) + ); + } } /** diff --git a/lib/class-relationships.php b/lib/class-relationships.php index d7d808200..7c861f71f 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -157,7 +157,7 @@ public function import_item( $post_id, $data, $post_data ) { // Functions to Functions $to_type = $this->post_types['function']; foreach ( (array) @$data['uses']['functions'] as $to_function ) { - $to_function_slug = $this->name_to_slug( $to_function['name'] ); + $to_function_slug = $this->names_to_slugs( $to_function['name'], $data['namespace'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_function_slug; } @@ -171,7 +171,7 @@ public function import_item( $post_id, $data, $post_data ) { } else { $to_method_slug = $to_method['name']; } - $to_method_slug = $this->name_to_slug( $to_method_slug ); + $to_method_slug = $this->names_to_slugs( $to_method_slug, $data['namespace'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_method_slug; } @@ -179,7 +179,8 @@ public function import_item( $post_id, $data, $post_data ) { // Functions to Hooks $to_type = $this->post_types['hook']; foreach ( (array) @$data['hooks'] as $to_hook ) { - $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); + // Never a namespace on a hook so don't send one. + $to_hook_slug = $this->names_to_slugs( $to_hook['name'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_hook_slug; } @@ -190,7 +191,7 @@ public function import_item( $post_id, $data, $post_data ) { // Methods to Functions $to_type = $this->post_types['function']; foreach ( (array) @$data['uses']['functions'] as $to_function ) { - $to_function_slug = $this->name_to_slug( $to_function['name'] ); + $to_function_slug = $this->names_to_slugs( $to_function['name'], $data['namespace'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_function_slug; } @@ -208,7 +209,7 @@ public function import_item( $post_id, $data, $post_data ) { } else { $to_method_slug = $to_method['name']; } - $to_method_slug = $this->name_to_slug( $to_method_slug ); + $to_method_slug = $this->names_to_slugs( $to_method_slug, $data['namespace'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_method_slug; } @@ -216,7 +217,7 @@ public function import_item( $post_id, $data, $post_data ) { // Methods to Hooks $to_type = $this->post_types['hook']; foreach ( (array) @$data['hooks'] as $to_hook ) { - $to_hook_slug = $this->name_to_slug( $to_hook['name'] ); + $to_hook_slug = $this->names_to_slugs( $to_hook['name'] ); $this->relationships[ $from_type ][ $post_id ][ $to_type ][] = $to_hook_slug; } @@ -251,8 +252,8 @@ public function wp_parser_ending_import() { // Iterate over slugs for each post type being related TO foreach ( $to_types as $to_type => $to_slugs ) { - // Convert slugs to IDs. + // Convert slugs to IDs. if ( empty( $this->slugs_to_ids[ $to_type ] ) ) { // TODO why might this be empty? test class-IXR.php continue; } @@ -341,15 +342,34 @@ public function wp_parser_ending_import() { } + public function names_to_slugs( $name, $namespace = null ) { + $fully_qualified = ( 0 === strpos( '\\', $name ) ); + $name = ltrim( $name, '\\' ); + $names = array(); + + if ( $namespace && ! $fully_qualified ) { + $names[] = $this->name_to_slug( $namespace . '\\' . $name ); + } + $names[] = $this->name_to_slug( $name ); + + return $names; + } + /** * Convert a method, function, or hook name to a post slug. * + * Based on context, we may need to check on two names for a fuction because + * if the function call looks to be to global scope, but is from a namespace + * then the call may actually be to a function in that namespace. Similarly, + * PHP will traverse up namespace trees from the current namespace, so we'll + * try to catch that use case as well. + * * @see WP_Parser\Importer::import_item() * @param string $name Method, function, or hook name * @return string Post slug */ public function name_to_slug( $name ) { - return sanitize_title( str_replace( '::', '-', $name ) ); + return sanitize_title( str_replace( '\\', '-', str_replace( '::', '-', $name ) ) ); } /** @@ -363,9 +383,14 @@ public function name_to_slug( $name ) { public function get_ids_for_slugs( array $slugs, array $slugs_to_ids ) { $slugs_with_ids = array(); - foreach ( $slugs as $index => $slug ) { - if ( array_key_exists( $slug, $slugs_to_ids ) ) { - $slugs_with_ids[ $slug ] = $slugs_to_ids[ $slug ]; + foreach ( $slugs as $index => $scoped_slugs ) { + // Find the first matching scope the ID exists for. + foreach ( $scoped_slugs as $slug ) { + if ( array_key_exists( $slug, $slugs_to_ids ) ) { + $slugs_with_ids[ $slug ] = $slugs_to_ids[ $slug ]; + // if we found it in this scope, stop searching the chain. + continue; + } } } diff --git a/lib/class-static-method-call-reflector.php b/lib/class-static-method-call-reflector.php index c9c5699bd..9d39c7c2f 100644 --- a/lib/class-static-method-call-reflector.php +++ b/lib/class-static-method-call-reflector.php @@ -13,8 +13,9 @@ class Static_Method_Call_Reflector extends Method_Call_Reflector { * @return string[] Index 0 is the class name, 1 is the method name. */ public function getName() { - $class = $this->node->class->parts[0]; - $class = $this->_resolveName( $class ); + $class = $this->node->class; + $prefix = ( is_a( $class, 'PHPParser_Node_Name_FullyQualified' ) ) ? '\\' : ''; + $class = $prefix . $this->_resolveName( implode( '\\', $class->parts ) ); return array( $class, $this->getShortName() ); } diff --git a/lib/runner.php b/lib/runner.php index 90b8f82e9..50846c151 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -89,6 +89,8 @@ function parse_files( $files, $root ) { foreach ( $file->getFunctions() as $function ) { $func = array( 'name' => $function->getShortName(), + 'namespace' => $function->getNamespace(), + 'aliases' => $function->getNamespaceAliases(), 'line' => $function->getLineNumber(), 'end_line' => $function->getNode()->getAttribute( 'endLine' ), 'arguments' => export_arguments( $function->getArguments() ), @@ -110,6 +112,7 @@ function parse_files( $files, $root ) { foreach ( $file->getClasses() as $class ) { $class_data = array( 'name' => $class->getShortName(), + 'namespace' => $function->getNamespace(), 'line' => $class->getLineNumber(), 'end_line' => $class->getNode()->getAttribute( 'endLine' ), 'final' => $class->isFinal(), @@ -259,8 +262,11 @@ function export_methods( array $methods ) { $output = array(); foreach ( $methods as $method ) { + $method_data = array( 'name' => $method->getShortName(), + 'namespace' => $method->getNamespace(), + 'aliases' => $method->getNamespaceAliases(), 'line' => $method->getLineNumber(), 'end_line' => $method->getNode()->getAttribute( 'endLine' ), 'final' => $method->isFinal(), diff --git a/tests/phpunit/tests/export/uses/constructor.php b/tests/phpunit/tests/export/uses/constructor.php index d05e15ae2..202eb7de4 100644 --- a/tests/phpunit/tests/export/uses/constructor.php +++ b/tests/phpunit/tests/export/uses/constructor.php @@ -21,7 +21,7 @@ public function test_new_class() { 'name' => '__construct', 'line' => 3, 'end_line' => 3, - 'class' => 'WP_Query', + 'class' => '\WP_Query', 'static' => false, ) ); @@ -32,7 +32,7 @@ public function test_new_class() { 'name' => '__construct', 'line' => 6, 'end_line' => 6, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => false, ) ); @@ -50,7 +50,7 @@ public function test_new_self() { 'name' => '__construct', 'line' => 12, 'end_line' => 12, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => false, ) ); @@ -68,7 +68,7 @@ public function test_new_parent() { 'name' => '__construct', 'line' => 16, 'end_line' => 16, - 'class' => 'Parent_Class', + 'class' => '\Parent_Class', 'static' => false, ) ); diff --git a/tests/phpunit/tests/export/uses/methods.php b/tests/phpunit/tests/export/uses/methods.php index aad38ff5b..2def2399f 100644 --- a/tests/phpunit/tests/export/uses/methods.php +++ b/tests/phpunit/tests/export/uses/methods.php @@ -21,7 +21,7 @@ public function test_static_methods() { 'name' => 'static_method', 'line' => 3, 'end_line' => 3, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -32,7 +32,7 @@ public function test_static_methods() { 'name' => 'another_method', 'line' => 8, 'end_line' => 8, - 'class' => 'Another_Class', + 'class' => '\Another_Class', 'static' => true, ) ); @@ -44,7 +44,7 @@ public function test_static_methods() { 'name' => 'do_static_stuff', 'line' => 16, 'end_line' => 16, - 'class' => 'Another_Class', + 'class' => '\Another_Class', 'static' => true, ) ); @@ -56,7 +56,7 @@ public function test_static_methods() { 'name' => 'do_stuff', 'line' => 17, 'end_line' => 17, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -68,7 +68,7 @@ public function test_static_methods() { 'name' => 'do_parental_stuff', 'line' => 19, 'end_line' => 19, - 'class' => 'Parent_Class', + 'class' => '\Parent_Class', 'static' => true, ) ); @@ -107,7 +107,7 @@ public function test_instance_methods() { 'name' => 'go', 'line' => 18, 'end_line' => 18, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => false, ) ); diff --git a/tests/phpunit/tests/export/uses/nested.php b/tests/phpunit/tests/export/uses/nested.php index dc1ef80ff..4caaef6cd 100644 --- a/tests/phpunit/tests/export/uses/nested.php +++ b/tests/phpunit/tests/export/uses/nested.php @@ -40,7 +40,7 @@ public function test_top_function_uses_correct() { 'name' => 'do_things', 'line' => 16, 'end_line' => 16, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -60,7 +60,7 @@ public function test_top_function_uses_correct() { 'name' => 'static_method', 'line' => 11, 'end_line' => 11, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -86,7 +86,7 @@ public function test_nested_function_uses_correct() { 'name' => 'static_method', 'line' => 11, 'end_line' => 11, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -132,7 +132,7 @@ public function test_method_uses_correct() { 'name' => 'do_it', 'line' => 23, 'end_line' => 23, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => false, ) ); @@ -164,7 +164,7 @@ public function test_method_uses_correct() { 'name' => 'a_method', 'line' => 29, 'end_line' => 29, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -190,7 +190,7 @@ public function test_nested_function_in_method_uses_correct() { 'name' => 'a_method', 'line' => 29, 'end_line' => 29, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => true, ) ); @@ -201,7 +201,7 @@ public function test_nested_function_in_method_uses_correct() { 'name' => 'do_it', 'line' => 23, 'end_line' => 23, - 'class' => 'My_Class', + 'class' => '\My_Class', 'static' => false, ) ); From bba3b29217b3dca9960c9ead291166103c2fdfe4 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 11:47:59 -0500 Subject: [PATCH 337/402] Update dependencies --- composer.lock | 71 +++++++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/composer.lock b/composer.lock index 7230b35ad..87d349443 100644 --- a/composer.lock +++ b/composer.lock @@ -1,25 +1,29 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "c3dfe31bb0f250fd8025b4d3c08c8ff8", + "hash": "a6b6b77caa783549c8eda9ef2cc489fb", + "content-hash": "81428b7705fd3ea26dd058625d6527c9", "packages": [ { "name": "composer/installers", - "version": "v1.0.19", + "version": "v1.0.22", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "89d77bfbee79e16653f7162c86e602cc188471db" + "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/89d77bfbee79e16653f7162c86e602cc188471db", - "reference": "89d77bfbee79e16653f7162c86e602cc188471db", + "url": "https://api.github.com/repos/composer/installers/zipball/bd9b14f094c89c8b5804a4e41edeb7853bb85046", + "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046", "shasum": "" }, + "require": { + "composer-plugin-api": "1.0.0" + }, "replace": { "roundcube/plugin-installer": "*", "shama/baton": "*" @@ -28,9 +32,9 @@ "composer/composer": "1.0.*@dev", "phpunit/phpunit": "4.1.*" }, - "type": "composer-installer", + "type": "composer-plugin", "extra": { - "class": "Composer\\Installers\\Installer", + "class": "Composer\\Installers\\Plugin", "branch-alias": { "dev-master": "1.0-dev" } @@ -59,9 +63,11 @@ "Hurad", "MODX Evo", "OXID", + "SMF", "Thelia", "WolfCMS", "agl", + "aimeos", "annotatecms", "bitrix", "cakephp", @@ -97,20 +103,20 @@ "zend", "zikula" ], - "time": "2014-11-29 01:29:17" + "time": "2015-10-29 23:28:48" }, { "name": "erusev/parsedown", - "version": "1.1.4", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a" + "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a", - "reference": "495e7ac73bb5fde6b857b88ff2bb1b5e79a4263a", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7", + "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7", "shasum": "" }, "type": "library", @@ -136,7 +142,7 @@ "markdown", "parser" ], - "time": "2014-11-29 02:29:14" + "time": "2015-10-04 16:44:32" }, { "name": "nikic/php-parser", @@ -239,27 +245,27 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "38743b677965c48a637097b2746a281264ae2347" + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/38743b677965c48a637097b2746a281264ae2347", - "reference": "38743b677965c48a637097b2746a281264ae2347", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "3.7.*@stable" + "phpunit/phpunit": "~4.0" }, "suggest": { - "dflydev/markdown": "1.0.*", - "erusev/parsedown": "~0.7" + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" }, "type": "library", "extra": { @@ -284,7 +290,7 @@ "email": "mike.vanriel@naenius.com" } ], - "time": "2014-08-09 10:27:07" + "time": "2015-02-03 12:10:50" }, { "name": "psr/log", @@ -330,12 +336,12 @@ "source": { "type": "git", "url": "https://github.com/scribu/wp-lib-posts-to-posts.git", - "reference": "0f04cd2e35a802bfd6799fc502cd960c75ca46e3" + "reference": "baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/0f04cd2e35a802bfd6799fc502cd960c75ca46e3", - "reference": "0f04cd2e35a802bfd6799fc502cd960c75ca46e3", + "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2", + "reference": "baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2", "shasum": "" }, "require": { @@ -347,15 +353,13 @@ "autoload.php" ] }, + "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0+" ], "description": "A library for many-to-many relationships in WordPress", "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", - "support": { - "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" - }, - "time": "2014-09-09 05:34:49" + "time": "2015-08-19 09:04:19" }, { "name": "scribu/scb-framework", @@ -363,12 +367,12 @@ "source": { "type": "git", "url": "https://github.com/scribu/wp-scb-framework.git", - "reference": "6ea9861db28fcd3722c1a726446ecf60f048409c" + "reference": "95b23ac342fce16bf5eb8d939ac5a361b94b104b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/6ea9861db28fcd3722c1a726446ecf60f048409c", - "reference": "6ea9861db28fcd3722c1a726446ecf60f048409c", + "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/95b23ac342fce16bf5eb8d939ac5a361b94b104b", + "reference": "95b23ac342fce16bf5eb8d939ac5a361b94b104b", "shasum": "" }, "type": "library", @@ -396,7 +400,7 @@ "keywords": [ "wordpress" ], - "time": "2014-01-23 13:57:58" + "time": "2015-10-25 20:19:41" } ], "packages-dev": [], @@ -407,6 +411,7 @@ "scribu/scb-framework": 20 }, "prefer-stable": false, + "prefer-lowest": false, "platform": { "php": ">=5.4" }, From 45b5b559073d068ec5fa974a0f32c949f364dfec Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 12:37:21 -0500 Subject: [PATCH 338/402] Bust cache for travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5708eb957..5d7f2dcdf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ php: - hhvm before_install: - # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). + # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). - export WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ # Clone the WordPress develop repo. - git clone --depth=1 --branch="4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ @@ -18,4 +18,4 @@ before_install: - sed -i "s/yourusernamehere/root/" /tmp/wordpress/wp-tests-config.php - sed -i "s/yourpasswordhere//" /tmp/wordpress/wp-tests-config.php -install: composer install --no-dev \ No newline at end of file +install: composer install --no-dev From 55623ff116afe4f2b5ca8fe0526bf9f9dd079517 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:06:11 -0500 Subject: [PATCH 339/402] Add PHP 7.0 to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 5d7f2dcdf..03acb8cfd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: php php: + - 7.0 - 5.6 - 5.5 - 5.4 From deaa4a4191643f5c8568e92f0f5a2d762c6a5630 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:11:05 -0500 Subject: [PATCH 340/402] Switch PHP versions to a matrix --- .travis.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 03acb8cfd..455d92e52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,12 @@ language: php -php: - - 7.0 - - 5.6 - - 5.5 - - 5.4 - - hhvm + +matrix: + include: + - php: 7.0 + - php: 5.6 + - php: 5.5 + - php: 5.4 + - php: hhvm before_install: # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). From 7e764be249516328b0e99e1566da9dda6ac562c1 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:16:15 -0500 Subject: [PATCH 341/402] Add explicit script to prevent 5.5 error --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 455d92e52..1a27e31c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,3 +22,6 @@ before_install: - sed -i "s/yourpasswordhere//" /tmp/wordpress/wp-tests-config.php install: composer install --no-dev + +script: + - phpunit From 026136a4cb206cd8b2c9174f72a7f29c4cb0bd3b Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:20:32 -0500 Subject: [PATCH 342/402] Use the new container based infrastructure --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 1a27e31c6..bf5c780b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: php +sudo: false + matrix: include: - php: 7.0 From 6d3aa66ef221a60d8e20f0d116d4eaa5267f4533 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:23:49 -0500 Subject: [PATCH 343/402] Parse WordPress core as a sanity check --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index bf5c780b3..fc06b9a08 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ sudo: false matrix: include: - php: 7.0 + env: PARSE_CORE=1 - php: 5.6 - php: 5.5 - php: 5.4 @@ -27,3 +28,9 @@ install: composer install --no-dev script: - phpunit + + # Parse WordPress core as a sanity check + - if [[ "$PARSE_CORE" == "1" ]]; wget https://wordpress.org/latest.zip; fi + - if [[ "$PARSE_CORE" == "1" ]]; unzip latest.zip; fi + - if [[ "$PARSE_CORE" == "1" ]]; wp parser create wordpress --user=admin; fi + From 9fa8d2dcdae98357feb4d4c2839ed22896fd6fec Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:26:14 -0500 Subject: [PATCH 344/402] Add missing `then` in the travis config --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc06b9a08..66c4300b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ script: - phpunit # Parse WordPress core as a sanity check - - if [[ "$PARSE_CORE" == "1" ]]; wget https://wordpress.org/latest.zip; fi - - if [[ "$PARSE_CORE" == "1" ]]; unzip latest.zip; fi - - if [[ "$PARSE_CORE" == "1" ]]; wp parser create wordpress --user=admin; fi + - if [[ "$PARSE_CORE" == "1" ]]; then wget https://wordpress.org/latest.zip; fi + - if [[ "$PARSE_CORE" == "1" ]]; then unzip latest.zip; fi + - if [[ "$PARSE_CORE" == "1" ]]; then wp parser create wordpress --user=admin; fi From 22da2c169a8c78e82265b2f3e85614bc4044616e Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:30:35 -0500 Subject: [PATCH 345/402] Remove WordPress sanity check parsing It doesn't work without a WordPress installation and that's not worth it. This can be reintroduced when the parser works standalone. --- .travis.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 66c4300b7..2242c9d4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ sudo: false matrix: include: - php: 7.0 - env: PARSE_CORE=1 - php: 5.6 - php: 5.5 - php: 5.4 @@ -29,8 +28,7 @@ install: composer install --no-dev script: - phpunit - # Parse WordPress core as a sanity check - - if [[ "$PARSE_CORE" == "1" ]]; then wget https://wordpress.org/latest.zip; fi - - if [[ "$PARSE_CORE" == "1" ]]; then unzip latest.zip; fi - - if [[ "$PARSE_CORE" == "1" ]]; then wp parser create wordpress --user=admin; fi +language: php + +sudo: false From 1307fa7dfe9de4907f1d90b6e05f0c373fd91a05 Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Sun, 6 Dec 2015 14:36:07 -0500 Subject: [PATCH 346/402] Ensure proper internal docs for name-to-slug methods --- lib/class-relationships.php | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 7c861f71f..929012a9b 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -342,6 +342,29 @@ public function wp_parser_ending_import() { } + /** + * Map a name to slug, taking into account namespace context. + * + * When a function is called within a namespace, the function is first looked + * for in the current namespace. If it exists, the namespaced version is used. + * If the function does not exist in the current namespace, PHP tries to find + * the function in the global scope. + * + * Unless the call has been prefixed with '\' indicating it is fully qualified + * we need to check first in the current namespace and then in the global + * scope. + * + * This also catches the case where relative namespaces are used. You can + * create a file in namespace `\Foo` and then call a funtion called `baz` in + * namespace `\Foo\Bar\` by just calling `Bar\baz()`. PHP will first look + * for `\Foo\Bar\baz()` and if it can't find it fall back to `\Bar\baz()`. + * + * @see WP_Parser\Importer::import_item() + * @param string $name The name of the item a slug is needed for. + * @param string $namespace The namespace the item is in when for context. + * @return array An array of slugs, starting with the context of the + * namespace, and falling back to the global namespace. + */ public function names_to_slugs( $name, $namespace = null ) { $fully_qualified = ( 0 === strpos( '\\', $name ) ); $name = ltrim( $name, '\\' ); @@ -356,17 +379,12 @@ public function names_to_slugs( $name, $namespace = null ) { } /** - * Convert a method, function, or hook name to a post slug. + * Simple conversion of a method, function, or hook name to a post slug. * - * Based on context, we may need to check on two names for a fuction because - * if the function call looks to be to global scope, but is from a namespace - * then the call may actually be to a function in that namespace. Similarly, - * PHP will traverse up namespace trees from the current namespace, so we'll - * try to catch that use case as well. + * Replaces '::' and '\' to dashes and then runs the name through `sanitize_title()`. * - * @see WP_Parser\Importer::import_item() * @param string $name Method, function, or hook name - * @return string Post slug + * @return string The post slug for the passed name. */ public function name_to_slug( $name ) { return sanitize_title( str_replace( '\\', '-', str_replace( '::', '-', $name ) ) ); From f6aa1f0ef78bbd7c02176c264b42db084ecd3676 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:37:22 -0500 Subject: [PATCH 347/402] Add caching to the travis build --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2242c9d4b..3b01a8626 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,4 +31,7 @@ script: language: php -sudo: false +cache: + directories: + - vendor + - $HOME/.composer/cache From bb3857cd9fadf34ae80b0b92cd51f2722700583a Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 14:42:47 -0500 Subject: [PATCH 348/402] Update WordPress develop checkout to 4.3 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3b01a8626..46103072a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ before_install: # Setup WP_TESTS_DIR (needed to bootstrap WP PHPUnit tests). - export WP_TESTS_DIR=/tmp/wordpress/tests/phpunit/ # Clone the WordPress develop repo. - - git clone --depth=1 --branch="4.1" git://develop.git.wordpress.org/ /tmp/wordpress/ + - git clone --depth=1 --branch="4.3" git://develop.git.wordpress.org/ /tmp/wordpress/ # Setup DB. - mysql -e "CREATE DATABASE wordpress_test;" -uroot # Setup wp-config. From 0a7e3aa24614966ce5c1f90d378ca473d0b038d2 Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Sun, 6 Dec 2015 14:59:40 -0500 Subject: [PATCH 349/402] Break out namespace processing to a protected method to stop the sprawl of the import method --- lib/class-importer.php | 68 ++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 9c66d0819..18b98211f 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -624,35 +624,8 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = return false; } - $namespaces = ( ! empty( $data['namespace'] ) ) ? explode( '\\', $data['namespace'] ) : false; - if ( $namespaces ) { - $ns_term = false; - $ns_terms = array(); - foreach ( $namespaces as $namespace ) { - $ns_term = $this->insert_term( - $namespace, - $this->taxonomy_namespace, - array( - 'slug' => strtolower( str_replace( '_', '-', $namespace ) ), - 'parent' => ( $ns_term ) ? $ns_term['term_id'] : 0, - ) - ); - if ( ! is_wp_error( $ns_term ) ) { - $ns_terms[] = (int) $ns_term['term_id']; - } else { - $this->logger->warning( "\tCannot set namespace term: " . $ns_term->get_error_message() ); - $ns_term = false; - } - } - - if ( ! empty( $ns_terms ) ) { - $added_term_relationship = did_action( 'added_term_relationship' ); - wp_set_object_terms( $post_id, $ns_terms, $this->taxonomy_namespace ); - if( did_action( 'added_term_relationship' ) > $added_term_relationship ) { - $this->anything_updated[] = true; - } - } - } + $namespaces = ( ! empty( $data['namespace'] ) ) ? explode( '\\', $data['namespace'] ) : array(); + $this->_set_namespaces( $post_id, $namespaces ); // If the item has @since markup, assign the taxonomy $since_versions = wp_list_filter( $data['doc']['tags'], array( 'name' => 'since' ) ); @@ -799,4 +772,41 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = return $post_id; } + + /** + * Process the Namespace of items and add them to the correct taxonomy terms. + * + * This creates terms for each of the namespace terms in a hierachical tree + * and then adds the item being processed to each of the terms in that tree. + * + * @param int $post_id The ID of the post item being processed. + */ + protected function _set_namespaces( $post_id, $namespaces ) { + $ns_term = false; + $ns_terms = array(); + foreach ( $namespaces as $namespace ) { + $ns_term = $this->insert_term( + $namespace, + $this->taxonomy_namespace, + array( + 'slug' => strtolower( str_replace( '_', '-', $namespace ) ), + 'parent' => ( $ns_term ) ? $ns_term['term_id'] : 0, + ) + ); + if ( ! is_wp_error( $ns_term ) ) { + $ns_terms[] = (int) $ns_term['term_id']; + } else { + $this->logger->warning( "\tCannot set namespace term: " . $ns_term->get_error_message() ); + $ns_term = false; + } + } + + if ( ! empty( $ns_terms ) ) { + $added_term_relationship = did_action( 'added_term_relationship' ); + wp_set_object_terms( $post_id, $ns_terms, $this->taxonomy_namespace ); + if( did_action( 'added_term_relationship' ) > $added_term_relationship ) { + $this->anything_updated[] = true; + } + } + } } From 8b5b8b2ffa27cda528887008d51cf4f91fe0703a Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 15:02:49 -0500 Subject: [PATCH 350/402] Change installation instructions --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 53476ac3e..39dc4f337 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,17 @@ There is a guide to developing for developer.wordpress.org in the [WordPress doc * [Composer](https://getcomposer.org/) * [WP CLI](http://wp-cli.org/) -Install via Composer into your WordPress plugins directory: +Clone the repository into your WordPress plugins directory: - composer create-project rmccue/wp-parser:dev-master --no-dev +```bash +git clone git@github.com:WordPress/phpdoc-parser.git +``` + +After that install the dependencies using composer in the parser directory: + +```bash +composer install +``` ## Running Note: ensure the plugin is enabled first. From 01e73eab71acd6c12a4cfb005674103255499cc5 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 15:05:22 -0500 Subject: [PATCH 351/402] Remove redundant language statement --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 46103072a..9bad0c16c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,9 +28,6 @@ install: composer install --no-dev script: - phpunit - -language: php - cache: directories: - vendor From b4c209f6c4feef7c1c8572070e77bec0e3735ae9 Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Sun, 6 Dec 2015 15:12:53 -0500 Subject: [PATCH 352/402] Add param doc for --- lib/class-importer.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index 18b98211f..f0d541a6a 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -779,7 +779,8 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = * This creates terms for each of the namespace terms in a hierachical tree * and then adds the item being processed to each of the terms in that tree. * - * @param int $post_id The ID of the post item being processed. + * @param int $post_id The ID of the post item being processed. + * @param array $namespaces An array of namespaces strings */ protected function _set_namespaces( $post_id, $namespaces ) { $ns_term = false; From d14f17aabd765e8e7836336e452abc8da4262276 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <anton@yoast.com> Date: Sun, 6 Dec 2015 15:36:57 -0500 Subject: [PATCH 353/402] Add tests to check if namespaces are parsed --- tests/phpunit/tests/export/namespace.inc | 5 +++++ tests/phpunit/tests/export/namespace.php | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/phpunit/tests/export/namespace.inc create mode 100644 tests/phpunit/tests/export/namespace.php diff --git a/tests/phpunit/tests/export/namespace.inc b/tests/phpunit/tests/export/namespace.inc new file mode 100644 index 000000000..2ee912eae --- /dev/null +++ b/tests/phpunit/tests/export/namespace.inc @@ -0,0 +1,5 @@ +<?php + +namespace Awesome\Space; + +function ohai() {} diff --git a/tests/phpunit/tests/export/namespace.php b/tests/phpunit/tests/export/namespace.php new file mode 100644 index 000000000..dc7834f50 --- /dev/null +++ b/tests/phpunit/tests/export/namespace.php @@ -0,0 +1,23 @@ +<?php + +/** + * A test case for hook exporting. + */ + +namespace WP_Parser\Tests; + +/** + * Test that hooks are exported correctly. + */ +class Export_Namespace extends Export_UnitTestCase { + + /** + * Test that hook names are standardized on export. + */ + public function test_basic_namespace_support() { + $expected = 'Awesome\\Space'; + $actual = $this->export_data['functions'][0]['namespace']; + + $this->assertEquals( $expected, $actual, 'Namespace should be parsed' ); + } +} From 6e4044d99d02708649e91300bfa5e11cb67ffbc4 Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Mon, 28 Dec 2015 22:37:24 -0600 Subject: [PATCH 354/402] Fix bug where cached term isn't stored with the right key --- lib/class-importer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index f0d541a6a..c12534ae6 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -243,7 +243,7 @@ protected function insert_term( $term, $taxonomy, $args = array() ) { } if ( ! is_wp_error( $inserted_term ) ) { - $this->inserted_terms[ $taxonomy ][ $term ] = $inserted_term; + $this->inserted_terms[ $taxonomy ][ $term . $parent ] = $inserted_term; } return $inserted_term; From 40aa830ac2eebe5e89b62f784b062d51eea33f71 Mon Sep 17 00:00:00 2001 From: Luke Woodward <woodward.lucas@gmail.com> Date: Sun, 27 Dec 2015 00:04:51 -0600 Subject: [PATCH 355/402] fix incorrect var name when getting a namespace --- lib/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index 50846c151..9022e04c7 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -112,7 +112,7 @@ function parse_files( $files, $root ) { foreach ( $file->getClasses() as $class ) { $class_data = array( 'name' => $class->getShortName(), - 'namespace' => $function->getNamespace(), + 'namespace' => $class->getNamespace(), 'line' => $class->getLineNumber(), 'end_line' => $class->getNode()->getAttribute( 'endLine' ), 'final' => $class->isFinal(), From 416842275cc3e860ae170bfd1e101e068bf61477 Mon Sep 17 00:00:00 2001 From: Anton Timmermans <services@atimmer.com> Date: Tue, 29 Dec 2015 21:48:13 +0100 Subject: [PATCH 356/402] Create P2P tables if they don't exist The parser would throw a huge number of errors when the posts2posts tables weren't created when parsing. After this commit the tables will be created if they don't exist when parsing. --- lib/class-relationships.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/class-relationships.php b/lib/class-relationships.php index 929012a9b..ad29e1813 100644 --- a/lib/class-relationships.php +++ b/lib/class-relationships.php @@ -128,6 +128,11 @@ public function register_post_relationships() { public function wp_parser_starting_import() { $importer = new Importer; + if ( ! $this->p2p_tables_exist() ) { + \P2P_Storage::init(); + \P2P_Storage::install(); + } + $this->post_types = array( 'hook' => $importer->post_type_hook, 'method' => $importer->post_type_method, @@ -135,6 +140,20 @@ public function wp_parser_starting_import() { ); } + /** + * Checks to see if the posts to posts tables exist and returns if they do + * + * @return bool Whether or not the posts 2 posts tables exist. + */ + public function p2p_tables_exist() { + global $wpdb; + + $tables = $wpdb->get_col( 'SHOW TABLES' ); + + // There is no way to get the name out of P2P so we hard code it here. + return in_array( $wpdb->prefix . 'p2p', $tables ); + } + /** * As each item imports, build an array mapping it's post_type->slug to it's post ID. * These will be used to associate post IDs to each other without doing an additional From 384665d939eed93098a1896251784d3a2a648aba Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Tue, 29 Dec 2015 17:52:05 -0700 Subject: [PATCH 357/402] Update composer.json values following migration of the repository to the WordPress organization. --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 08f94e9be..2bf6824c6 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { - "name" : "rmccue/wp-parser", + "name" : "WordPress/phpdoc-parser", "description": "Static code parser for WordPress source.", "keywords" : ["wordpress"], "type" : "wordpress-plugin", - "homepage" : "https://github.com/rmccue/WP-Parser", + "homepage" : "https://github.com/WordPress/phpdoc-parser", "license" : "GPL-2.0+", "authors" : [ { @@ -13,11 +13,11 @@ }, { "name" : "Contributors", - "homepage": "https://github.com/rmccue/WP-Parser/graphs/contributors" + "homepage": "https://github.com/WordPress/phpdoc-parser/graphs/contributors" } ], "support" : { - "issues": "https://github.com/rmccue/WP-Parser/issues" + "issues": "https://github.com/WordPress/phpdoc-parser/issues" }, "require" : { "php" : ">=5.4", From cbff5d8ec858fee3cdedced93a46e9891e158c27 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Tue, 29 Dec 2015 18:00:01 -0700 Subject: [PATCH 358/402] Lowercase letters for packagist. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 2bf6824c6..2f7c28cc4 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name" : "WordPress/phpdoc-parser", + "name" : "wordpress/phpdoc-parser", "description": "Static code parser for WordPress source.", "keywords" : ["wordpress"], "type" : "wordpress-plugin", From 88feb149a4d2ecc0161e546ef07606b9604093c5 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Wed, 30 Dec 2015 07:32:08 -0700 Subject: [PATCH 359/402] Revert composer files pending packagist submission and replacement. --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 2f7c28cc4..08f94e9be 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { - "name" : "wordpress/phpdoc-parser", + "name" : "rmccue/wp-parser", "description": "Static code parser for WordPress source.", "keywords" : ["wordpress"], "type" : "wordpress-plugin", - "homepage" : "https://github.com/WordPress/phpdoc-parser", + "homepage" : "https://github.com/rmccue/WP-Parser", "license" : "GPL-2.0+", "authors" : [ { @@ -13,11 +13,11 @@ }, { "name" : "Contributors", - "homepage": "https://github.com/WordPress/phpdoc-parser/graphs/contributors" + "homepage": "https://github.com/rmccue/WP-Parser/graphs/contributors" } ], "support" : { - "issues": "https://github.com/WordPress/phpdoc-parser/issues" + "issues": "https://github.com/rmccue/WP-Parser/issues" }, "require" : { "php" : ">=5.4", From d8ecb6324bca2c80129b88a3ec6322e1971d84a1 Mon Sep 17 00:00:00 2001 From: DrewAPicture <drew@10up.com> Date: Wed, 30 Dec 2015 08:17:09 -0700 Subject: [PATCH 360/402] Revert the revert! This reverts commit 88feb149a4d2ecc0161e546ef07606b9604093c5. --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 08f94e9be..2f7c28cc4 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { - "name" : "rmccue/wp-parser", + "name" : "wordpress/phpdoc-parser", "description": "Static code parser for WordPress source.", "keywords" : ["wordpress"], "type" : "wordpress-plugin", - "homepage" : "https://github.com/rmccue/WP-Parser", + "homepage" : "https://github.com/WordPress/phpdoc-parser", "license" : "GPL-2.0+", "authors" : [ { @@ -13,11 +13,11 @@ }, { "name" : "Contributors", - "homepage": "https://github.com/rmccue/WP-Parser/graphs/contributors" + "homepage": "https://github.com/WordPress/phpdoc-parser/graphs/contributors" } ], "support" : { - "issues": "https://github.com/rmccue/WP-Parser/issues" + "issues": "https://github.com/WordPress/phpdoc-parser/issues" }, "require" : { "php" : ">=5.4", From d544f5a6f67cd5c13ebd482f6a52d1eda3046e7a Mon Sep 17 00:00:00 2001 From: Stephen Edgar <stephen@netweb.com.au> Date: Thu, 31 Dec 2015 10:49:33 +1100 Subject: [PATCH 361/402] MOre sans rmccue following repo migration --- lib/class-importer.php | 2 +- plugin.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index c12534ae6..b37f8cdc2 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -527,7 +527,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = ) ); - // Don't import items marked `@ignore` unless explicitly requested. See https://github.com/rmccue/WP-Parser/issues/16 + // Don't import items marked `@ignore` unless explicitly requested. See https://github.com/WordPress/phpdoc-parser/issues/16 if ( ! $import_ignored && wp_list_filter( $data['doc']['tags'], array( 'name' => 'ignore' ) ) ) { switch ( $post_data['post_type'] ) { diff --git a/plugin.php b/plugin.php index 1bdbba78a..ac76e7991 100644 --- a/plugin.php +++ b/plugin.php @@ -3,8 +3,8 @@ * Plugin Name: WP Parser * Description: Create a function reference site powered by WordPress * Author: Ryan McCue, Paul Gibbs, Andrey "Rarst" Savchenko and Contributors - * Author URI: https://github.com/rmccue/WP-Parser/graphs/contributors - * Plugin URI: https://github.com/rmccue/WP-Parser + * Author URI: https://github.com/WordPress/phpdoc-parser/graphs/contributors + * Plugin URI: https://github.com/WordPress/phpdoc-parser * Version: * Text Domain: wp-parser */ From 9f524d5adb16fb2d66be503de59171ca584a5877 Mon Sep 17 00:00:00 2001 From: Stephen Harris <contact@stephenharris.info> Date: Wed, 3 Feb 2016 01:20:48 +0000 Subject: [PATCH 362/402] Include URL from @link doc tag --- lib/runner.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/runner.php b/lib/runner.php index 90b8f82e9..28cb643ac 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -159,6 +159,9 @@ function export_docblock( $element ) { if ( method_exists( $tag, 'getTypes' ) ) { $tag_data['types'] = $tag->getTypes(); } + if ( method_exists( $tag, 'getLink' ) ) { + $tag_data['link'] = $tag->getLink(); + } if ( method_exists( $tag, 'getVariableName' ) ) { $tag_data['variable'] = $tag->getVariableName(); } From e311590b1502bfe030525d845daea0ccfd464d92 Mon Sep 17 00:00:00 2001 From: Stephen Harris <contact@stephenharris.info> Date: Wed, 3 Feb 2016 01:22:41 +0000 Subject: [PATCH 363/402] Include version where available, for example with the deprecated tag --- lib/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index 90b8f82e9..144148ead 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -165,7 +165,7 @@ function export_docblock( $element ) { if ( method_exists( $tag, 'getReference' ) ) { $tag_data['refers'] = $tag->getReference(); } - if ( 'since' == $tag->getName() && method_exists( $tag, 'getVersion' ) ) { + if ( method_exists( $tag, 'getVersion' ) ) { // Version string. $version = $tag->getVersion(); if ( ! empty( $version ) ) { From 2a03e76f504d44933cb9e6cb575e33bca19d4854 Mon Sep 17 00:00:00 2001 From: Ian Dunn <ian@iandunn.name> Date: Fri, 12 Aug 2016 01:10:20 +0000 Subject: [PATCH 364/402] Composer: Update `composer/installers` and its dependencies. Fixes #180 --- composer.lock | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index 87d349443..8cb5c5e27 100644 --- a/composer.lock +++ b/composer.lock @@ -4,25 +4,25 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "a6b6b77caa783549c8eda9ef2cc489fb", - "content-hash": "81428b7705fd3ea26dd058625d6527c9", + "hash": "7f8182189ed845514079dae0bb6fbc34", + "content-hash": "50b4965030469f5686192ba48645cb3e", "packages": [ { "name": "composer/installers", - "version": "v1.0.22", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046" + "reference": "a3595c5272a6f247228abb20076ed27321e4aae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/bd9b14f094c89c8b5804a4e41edeb7853bb85046", - "reference": "bd9b14f094c89c8b5804a4e41edeb7853bb85046", + "url": "https://api.github.com/repos/composer/installers/zipball/a3595c5272a6f247228abb20076ed27321e4aae9", + "reference": "a3595c5272a6f247228abb20076ed27321e4aae9", "shasum": "" }, "require": { - "composer-plugin-api": "1.0.0" + "composer-plugin-api": "^1.0" }, "replace": { "roundcube/plugin-installer": "*", @@ -40,8 +40,8 @@ } }, "autoload": { - "psr-0": { - "Composer\\Installers\\": "src/" + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" } }, "notification-url": "https://packagist.org/downloads/", @@ -56,13 +56,16 @@ } ], "description": "A multi-framework Composer library installer", - "homepage": "http://composer.github.com/installers/", + "homepage": "https://composer.github.io/installers/", "keywords": [ "Craft", "Dolibarr", "Hurad", + "ImageCMS", "MODX Evo", + "Mautic", "OXID", + "RadPHP", "SMF", "Thelia", "WolfCMS", @@ -78,6 +81,7 @@ "dokuwiki", "drupal", "elgg", + "expressionengine", "fuelphp", "grav", "installer", @@ -103,7 +107,7 @@ "zend", "zikula" ], - "time": "2015-10-29 23:28:48" + "time": "2016-07-05 06:18:20" }, { "name": "erusev/parsedown", From f86dbe32f32b29e9d174cb3385a65c07f2ac71fa Mon Sep 17 00:00:00 2001 From: Klaus Hartl <k127@gmx.de> Date: Fri, 21 Oct 2016 16:40:20 +0200 Subject: [PATCH 365/402] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 39dc4f337..81748a0bb 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,10 @@ composer install ``` ## Running -Note: ensure the plugin is enabled first. +Activate the plugin first: + + wp plugin activate phpdoc-parser In your site's directory: - $ wp parser create /path/to/source/code --user=<id|login> + wp parser create /path/to/source/code --user=<id|login> From fe38f83e9a864023cf69783cede0634bee47dd33 Mon Sep 17 00:00:00 2001 From: Stephen Edgar <stephen@netweb.com.au> Date: Sun, 1 Jan 2017 10:35:42 +1100 Subject: [PATCH 366/402] Add PHP 7.1 to Travis CI job matrix --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9bad0c16c..18bbdb521 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ sudo: false matrix: include: + - php: 7.1 - php: 7.0 - php: 5.6 - php: 5.5 From d49f8eb531c723e2ebc026786818605fc495ac40 Mon Sep 17 00:00:00 2001 From: Drew Jaynes <DrewAPicture@users.noreply.github.com> Date: Thu, 15 Jun 2017 20:56:02 -0600 Subject: [PATCH 367/402] Add handling for deprecated hooks (#178) * Allow the parser to recognize the two new functions. * Assign new hook types for apply_filters|do_action_deprecated() (usable by themes). * Handle deriving and storing a deprecated version for hooks. * Introduce a generic is_deprecated() function for determining if the current element is deprecated. Also converts is_function_deprecated() into a wrapper for the new function and introduces a new generic 'wp_parser_is_deprecated' hook. The 'wp_parser_is_function_deprecated' hook is retained for back-compat on the return of is_function_deprecated(). --- lib/class-file-reflector.php | 2 ++ lib/class-hook-reflector.php | 6 ++++++ lib/runner.php | 6 +++++- lib/template.php | 29 +++++++++++++++++++++++++++-- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 5e1b59f5b..5b01e8da0 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -204,8 +204,10 @@ protected function isFilter( \PHPParser_Node $node ) { $functions = array( 'apply_filters', 'apply_filters_ref_array', + 'apply_filters_deprecated', 'do_action', 'do_action_ref_array', + 'do_action_deprecated', ); return in_array( $calling, $functions ); diff --git a/lib/class-hook-reflector.php b/lib/class-hook-reflector.php index 5120def20..50075e0fc 100644 --- a/lib/class-hook-reflector.php +++ b/lib/class-hook-reflector.php @@ -67,9 +67,15 @@ public function getType() { case 'do_action_ref_array': $type = 'action_reference'; break; + case 'do_action_deprecated': + $type = 'action_deprecated'; + break; case 'apply_filters_ref_array': $type = 'filter_reference'; break; + case 'apply_filters_deprecated'; + $type = 'filter_deprecated'; + break; } return $type; diff --git a/lib/runner.php b/lib/runner.php index 89d45bbb8..e54278761 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -335,7 +335,11 @@ function export_uses( array $uses ) { 'end_line' => $element->getNode()->getAttribute( 'endLine' ), ); - if ( '_deprecated_file' === $name || '_deprecated_function' === $name || '_deprecated_argument' === $name ) { + if ( '_deprecated_file' === $name + || '_deprecated_function' === $name + || '_deprecated_argument' === $name + || '_deprecated_hook' === $name + ) { $arguments = $element->getNode()->args; $out[ $type ][0]['deprecation_version'] = $arguments[1]->value->value; diff --git a/lib/template.php b/lib/template.php index 8bab9f2b4..e2a5c0b98 100644 --- a/lib/template.php +++ b/lib/template.php @@ -123,9 +123,34 @@ function arguments_have_default_values() { * @return bool */ function is_function_deprecated() { - $return = wp_list_filter( get_post_meta( get_the_ID(), '_wp-parser_tags', true ), array( 'name' => 'deprecated' ) ); + /** + * Filters whether the current function is considered deprecated. + * + * @param bool Whether the current function should be considered deprecated. + */ + return apply_filters( 'wp_parser_is_function_deprecated', is_deprecated() ); +} - return apply_filters( 'wp_parser_is_function_deprecated', ! empty( $return ) ); +/** + * Determines if the current element is deprecated. + * + * Works for conceivably any parsed post type that stores DocBlock tag values in meta. + * + * @return bool Whether the current element is considered deprecated. + */ +function is_deprecated() { + $tags = get_post_meta( get_the_ID(), '_wp-parser_tags', true ); + $deprecated = wp_list_filter( $tags, array( 'name' => 'deprecated' ) ); + + $post_type = get_post_type( get_the_ID() ); + + /** + * Filters whether the current element is deprecated. + * + * @param bool $deprecated Whether the current element should be considered deprecated. + * @param string $post_type Post type for the current element. + */ + return apply_filters( 'wp_parser_is_deprecated', ! empty( $deprecated ), $post_type ); } /** From b563053e8d1bf3d52fec9c752d9508c4bdc50387 Mon Sep 17 00:00:00 2001 From: Stephen Edgar <stephen@netweb.com.au> Date: Sat, 6 Jan 2018 17:35:58 +1100 Subject: [PATCH 368/402] Update license in `composer.json` to adhere to SPDX v3.0 specification --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 2f7c28cc4..bcf25676d 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "keywords" : ["wordpress"], "type" : "wordpress-plugin", "homepage" : "https://github.com/WordPress/phpdoc-parser", - "license" : "GPL-2.0+", + "license" : "GPL-2.0-or-later", "authors" : [ { "name" : "Ryan McCue", From 7218f4bb3407fad449c6dc45f1c84285fcdcd8a3 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Thu, 16 Nov 2017 11:26:02 -0700 Subject: [PATCH 369/402] Fix newline handling in parsed text This is hacky. It predates a similar approach proposed in #165 and is not the more complete solution proposed in #173, but it'll at least sync the code with that used in production. Fixes #114, see #165, see #173. --- lib/runner.php | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index e54278761..2b39ea0c7 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -133,6 +133,47 @@ function parse_files( $files, $root ) { return $output; } +/** + * Fixes newline handling in parsed text. + * + * DocBlock lines, particularly for descriptions, generally adhere to a given character width. For sentences and + * paragraphs that exceed that width, what is intended as a manual soft wrap (via line break) is used to ensure + * on-screen/in-file legibility of that text. These line breaks are retained by phpDocumentor. However, consumers + * of this parsed data may believe the line breaks to be intentional and may display the text as such. + * + * This function fixes text by merging consecutive lines of text into a single line. A special exception is made + * for text appearing in `<code>` and `<pre>` tags, as newlines appearing in those tags are always intentional. + * + * @param string $text + * + * @return string + */ +function fix_newlines( $text ) { + // Non-naturally occurring string to use as temporary replacement. + $replacement_string = '{{{{{}}}}}'; + + // Replace newline characters within 'code' and 'pre' tags with replacement string. + $text = preg_replace_callback( + "/(?<=<pre><code>)(.+)(?=<\/code><\/pre>)/s", + function ( $matches ) { + return preg_replace( '/[\n\r]/', $replacement_string, $matches[1] ); + }, + $text + ); + + // Merge consecutive non-blank lines together by replacing the newlines with a space. + $text = preg_replace( + "/[\n\r](?!\s*[\n\r])/m", + ' ', + $text + ); + + // Restore newline characters into code blocks. + $text = str_replace( $replacement_string, "\n", $text ); + + return $text; +} + /** * @param BaseReflector|ReflectionAbstract $element * @@ -150,7 +191,7 @@ function export_docblock( $element ) { $output = array( 'description' => preg_replace( '/[\n\r]+/', ' ', $docblock->getShortDescription() ), - 'long_description' => preg_replace( '/[\n\r]+/', ' ', $docblock->getLongDescription()->getFormattedContents() ), + 'long_description' => fix_newlines( $docblock->getLongDescription()->getFormattedContents() ), 'tags' => array(), ); From 10243460550b6b1ae66859418ec463ae091e7f22 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Fri, 13 Apr 2018 00:13:36 -0600 Subject: [PATCH 370/402] Prevent creation of duplicate hooks when reparsing. Fixes #145. --- lib/class-importer.php | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index b37f8cdc2..c54099e7a 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -571,14 +571,24 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = } // Look for an existing post for this item - $existing_post_id = $wpdb->get_var( - $q = $wpdb->prepare( - "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", - $slug, - $post_data['post_type'], - (int) $parent_post_id - ) - ); + if ( 'wp-parser-hook' === $post_data['post_type'] ) { + $existing_post_id = $wpdb->get_var( + $q = $wpdb->prepare( + "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s LIMIT 1", + $slug, + $post_data['post_type'] + ) + ); + } else { + $existing_post_id = $wpdb->get_var( + $q = $wpdb->prepare( + "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND post_parent = %d LIMIT 1", + $slug, + $post_data['post_type'], + (int) $parent_post_id + ) + ); + } /** * Filter an import item's post data before it is updated or inserted. From 8ca832e2649f80580fa5f680ad945e70da9e5b81 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Mon, 1 Oct 2018 15:32:18 -0600 Subject: [PATCH 371/402] Use `use` so closure has access to variable from parent scope --- lib/runner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/runner.php b/lib/runner.php index 2b39ea0c7..cacbec266 100644 --- a/lib/runner.php +++ b/lib/runner.php @@ -155,7 +155,7 @@ function fix_newlines( $text ) { // Replace newline characters within 'code' and 'pre' tags with replacement string. $text = preg_replace_callback( "/(?<=<pre><code>)(.+)(?=<\/code><\/pre>)/s", - function ( $matches ) { + function ( $matches ) use ( $replacement_string ) { return preg_replace( '/[\n\r]/', $replacement_string, $matches[1] ); }, $text From 42967c97e868566332e4e14b1a8ce2f28cfa15a1 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Tue, 2 Oct 2018 12:22:15 -0600 Subject: [PATCH 372/402] Output log message to provide indication that a file is being skipped from being parsed --- lib/class-importer.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index c54099e7a..b83e59755 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -266,8 +266,10 @@ public function import_file( array $file, $skip_sleep = false, $import_ignored = * @param bool $display Whether to proceed with importing the file. Default true. * @param array $file File data */ - if ( ! apply_filters( 'wp_parser_pre_import_file', true, $file ) ) + if ( ! apply_filters( 'wp_parser_pre_import_file', true, $file ) ) { + $this->logger->info( sprintf( "\t" . 'Skipping file "%s".', $file['path'] ) ); return; + } // Maybe add this file to the file taxonomy $slug = sanitize_title( str_replace( '/', '_', $file['path'] ) ); From 277c4f8b066c821690fd9be4dd9a200f10bba968 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Thu, 4 Oct 2018 00:27:24 -0600 Subject: [PATCH 373/402] Update README links to HTTPS --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 81748a0bb..b4b2df99a 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # WP Parser -WP-Parser is the parser for creating the new code reference at [developer.wordpress.org](http://developer.wordpress.org/reference). It parses the inline documentation and produces custom post type entries in WordPress. +WP-Parser is the parser for creating the new code reference at [developer.wordpress.org](https://developer.wordpress.org/reference). It parses the inline documentation and produces custom post type entries in WordPress. We are currently looking for contributors to help us complete the work on the parser. -There is a guide to developing for developer.wordpress.org in the [WordPress documentation handbook](http://make.wordpress.org/docs/handbook/projects/devhub/) +There is a guide to developing for developer.wordpress.org in the [WordPress documentation handbook](https://make.wordpress.org/docs/handbook/projects/devhub/) ## Requirements * PHP 5.4+ * [Composer](https://getcomposer.org/) -* [WP CLI](http://wp-cli.org/) +* [WP CLI](https://wp-cli.org/) Clone the repository into your WordPress plugins directory: From 8d0f59d8079b8d4ade45e2f9898487c03f085ab4 Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Mon, 8 Oct 2018 15:08:59 -0600 Subject: [PATCH 374/402] Update Git repository location used in installation instructions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4b2df99a..6c4390b32 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ There is a guide to developing for developer.wordpress.org in the [WordPress doc Clone the repository into your WordPress plugins directory: ```bash -git clone git@github.com:WordPress/phpdoc-parser.git +git clone https://github.com/WordPress/phpdoc-parser.git ``` After that install the dependencies using composer in the parser directory: From e482b28d6cb3761f0a2d69a2ea97fd19a0b22e7a Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Mon, 8 Oct 2018 15:45:28 -0600 Subject: [PATCH 375/402] Update Composer requirements --- composer.json | 4 +- composer.lock | 125 +++++++++++++++++++++++++++++++------------------- 2 files changed, 81 insertions(+), 48 deletions(-) diff --git a/composer.json b/composer.json index bcf25676d..6e2b6c025 100644 --- a/composer.json +++ b/composer.json @@ -22,8 +22,8 @@ "require" : { "php" : ">=5.4", "composer/installers" : "~1.0", - "phpdocumentor/reflection" : "~1.0", - "erusev/parsedown" : "~1.1", + "phpdocumentor/reflection" : "~3.0", + "erusev/parsedown" : "~1.7", "scribu/lib-posts-to-posts": "dev-master@dev", "scribu/scb-framework" : "dev-master@dev", "psr/log" : "~1.0" diff --git a/composer.lock b/composer.lock index 8cb5c5e27..978b69e0a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "7f8182189ed845514079dae0bb6fbc34", - "content-hash": "50b4965030469f5686192ba48645cb3e", + "content-hash": "6702889e0a9f2aec0b235a17dad1def6", "packages": [ { "name": "composer/installers", - "version": "v1.1.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "a3595c5272a6f247228abb20076ed27321e4aae9" + "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/a3595c5272a6f247228abb20076ed27321e4aae9", - "reference": "a3595c5272a6f247228abb20076ed27321e4aae9", + "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", + "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", "shasum": "" }, "require": { @@ -30,7 +29,7 @@ }, "require-dev": { "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "4.1.*" + "phpunit/phpunit": "^4.8.36" }, "type": "composer-plugin", "extra": { @@ -60,11 +59,17 @@ "keywords": [ "Craft", "Dolibarr", + "Eliasis", "Hurad", "ImageCMS", + "Kanboard", + "Lan Management System", "MODX Evo", "Mautic", + "Maya", "OXID", + "Plentymarkets", + "Porto", "RadPHP", "SMF", "Thelia", @@ -72,57 +77,76 @@ "agl", "aimeos", "annotatecms", + "attogram", "bitrix", "cakephp", "chef", + "cockpit", "codeigniter", "concrete5", "croogo", "dokuwiki", "drupal", + "eZ Platform", "elgg", "expressionengine", "fuelphp", "grav", "installer", + "itop", "joomla", "kohana", "laravel", + "lavalite", "lithium", "magento", + "majima", "mako", "mediawiki", "modulework", + "modx", "moodle", + "osclass", "phpbb", "piwik", "ppi", "puppet", + "pxcms", + "reindex", "roundcube", "shopware", "silverstripe", + "sydes", "symfony", "typo3", "wordpress", + "yawik", "zend", "zikula" ], - "time": "2016-07-05 06:18:20" + "time": "2018-08-27T06:10:37+00:00" }, { "name": "erusev/parsedown", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7" + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7", - "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", "shasum": "" }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, "type": "library", "autoload": { "psr-0": { @@ -146,36 +170,36 @@ "markdown", "parser" ], - "time": "2015-10-04 16:44:32" + "time": "2018-03-08T01:11:30+00:00" }, { "name": "nikic/php-parser", - "version": "v0.9.5", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.2" + "php": ">=5.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9-dev" + "dev-master": "1.4-dev" } }, "autoload": { - "psr-0": { - "PHPParser": "lib/" - } + "files": [ + "lib/bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -191,24 +215,24 @@ "parser", "php" ], - "time": "2014-07-23 18:24:17" + "time": "2015-09-19T14:15:08+00:00" }, { "name": "phpdocumentor/reflection", - "version": "1.0.7", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372" + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/fc40c3f604ac2287eb5c314174d5109b2c699372", - "reference": "fc40c3f604ac2287eb5c314174d5109b2c699372", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", "shasum": "" }, "require": { - "nikic/php-parser": "~0.9.4", + "nikic/php-parser": "^1.0", "php": ">=5.3.3", "phpdocumentor/reflection-docblock": "~2.0", "psr/log": "~1.0" @@ -245,20 +269,20 @@ "reflection", "static analysis" ], - "time": "2014-11-14 11:43:04" + "time": "2016-05-21T08:42:32+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", "shasum": "" }, "require": { @@ -294,26 +318,34 @@ "email": "mike.vanriel@naenius.com" } ], - "time": "2015-02-03 12:10:50" + "time": "2016-01-25T08:17:30+00:00" }, { "name": "psr/log", - "version": "1.0.0", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, + "require": { + "php": ">=5.3.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "psr-4": { + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -327,12 +359,13 @@ } ], "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], - "time": "2012-12-21 11:40:51" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "scribu/lib-posts-to-posts", @@ -340,12 +373,12 @@ "source": { "type": "git", "url": "https://github.com/scribu/wp-lib-posts-to-posts.git", - "reference": "baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2" + "reference": "a695438e455587fa228e993d05b4431cde99af1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2", - "reference": "baefe121458b5d4d333b29e0c0b8cb8fad0fa4a2", + "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/a695438e455587fa228e993d05b4431cde99af1b", + "reference": "a695438e455587fa228e993d05b4431cde99af1b", "shasum": "" }, "require": { @@ -363,7 +396,7 @@ ], "description": "A library for many-to-many relationships in WordPress", "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", - "time": "2015-08-19 09:04:19" + "time": "2016-02-15T12:08:59+00:00" }, { "name": "scribu/scb-framework", @@ -404,7 +437,7 @@ "keywords": [ "wordpress" ], - "time": "2015-10-25 20:19:41" + "time": "2015-10-25T20:19:41+00:00" } ], "packages-dev": [], From 2b4a8bff6280d6916b75b32eeea5541e1de90b4b Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Fri, 13 Nov 2020 14:00:26 -0800 Subject: [PATCH 376/402] Refresh Composer requirements --- composer.lock | 101 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 25 deletions(-) diff --git a/composer.lock b/composer.lock index 978b69e0a..00db30b07 100644 --- a/composer.lock +++ b/composer.lock @@ -1,35 +1,38 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "6702889e0a9f2aec0b235a17dad1def6", "packages": [ { "name": "composer/installers", - "version": "v1.6.0", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" + "reference": "b93bcf0fa1fccb0b7d176b0967d969691cd74cca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", + "url": "https://api.github.com/repos/composer/installers/zipball/b93bcf0fa1fccb0b7d176b0967d969691cd74cca", + "reference": "b93bcf0fa1fccb0b7d176b0967d969691cd74cca", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" + "composer-plugin-api": "^1.0 || ^2.0" }, "replace": { "roundcube/plugin-installer": "*", "shama/baton": "*" }, "require-dev": { - "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "^4.8.36" + "composer/composer": "1.6.* || 2.0.*@dev", + "composer/semver": "1.0.* || 2.0.*@dev", + "phpunit/phpunit": "^4.8.36", + "sebastian/comparator": "^1.2.4", + "symfony/process": "^2.3" }, "type": "composer-plugin", "extra": { @@ -65,6 +68,7 @@ "Kanboard", "Lan Management System", "MODX Evo", + "MantisBT", "Mautic", "Maya", "OXID", @@ -73,6 +77,7 @@ "RadPHP", "SMF", "Thelia", + "Whmcs", "WolfCMS", "agl", "aimeos", @@ -95,6 +100,7 @@ "installer", "itop", "joomla", + "known", "kohana", "laravel", "lavalite", @@ -117,6 +123,7 @@ "shopware", "silverstripe", "sydes", + "sylius", "symfony", "typo3", "wordpress", @@ -124,20 +131,34 @@ "zend", "zikula" ], - "time": "2018-08-27T06:10:37+00:00" + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/v1.9.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-04-07T06:57:05+00:00" }, { "name": "erusev/parsedown", - "version": "1.7.1", + "version": "1.7.4", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", "shasum": "" }, "require": { @@ -170,7 +191,11 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "time": "2019-12-30T22:54:17+00:00" }, { "name": "nikic/php-parser", @@ -215,6 +240,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/1.x" + }, "time": "2015-09-19T14:15:08+00:00" }, { @@ -269,6 +298,10 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/Reflection/issues", + "source": "https://github.com/phpDocumentor/Reflection/tree/master" + }, "time": "2016-05-21T08:42:32+00:00" }, { @@ -318,20 +351,24 @@ "email": "mike.vanriel@naenius.com" } ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/2.x" + }, "time": "2016-01-25T08:17:30+00:00" }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -340,7 +377,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -365,7 +402,10 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" }, { "name": "scribu/lib-posts-to-posts", @@ -384,6 +424,7 @@ "require": { "scribu/scb-framework": "dev-master" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -396,6 +437,9 @@ ], "description": "A library for many-to-many relationships in WordPress", "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", + "support": { + "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" + }, "time": "2016-02-15T12:08:59+00:00" }, { @@ -404,14 +448,15 @@ "source": { "type": "git", "url": "https://github.com/scribu/wp-scb-framework.git", - "reference": "95b23ac342fce16bf5eb8d939ac5a361b94b104b" + "reference": "d35d5126c6d323711dd14b9d97aaa927eaaba123" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/95b23ac342fce16bf5eb8d939ac5a361b94b104b", - "reference": "95b23ac342fce16bf5eb8d939ac5a361b94b104b", + "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/d35d5126c6d323711dd14b9d97aaa927eaaba123", + "reference": "d35d5126c6d323711dd14b9d97aaa927eaaba123", "shasum": "" }, + "default-branch": true, "type": "library", "autoload": { "classmap": [ @@ -437,7 +482,12 @@ "keywords": [ "wordpress" ], - "time": "2015-10-25T20:19:41+00:00" + "support": { + "issues": "https://github.com/scribu/wp-scb-framework/issues", + "source": "https://github.com/scribu/wp-scb-framework", + "wiki": "https://github.com/scribu/wp-scb-framework/wiki" + }, + "time": "2020-03-15T20:51:58+00:00" } ], "packages-dev": [], @@ -452,5 +502,6 @@ "platform": { "php": ">=5.4" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.0.0" } From 17cb34f70e52b214c42c6d9ea8c6b61c99eea6cf Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Fri, 13 Nov 2020 23:00:56 -0800 Subject: [PATCH 377/402] Check that a function uses something before assuming it does, preventing PHP notices Props keesiemeijer. See #206. --- lib/class-file-reflector.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/class-file-reflector.php b/lib/class-file-reflector.php index 5b01e8da0..62f401d7e 100644 --- a/lib/class-file-reflector.php +++ b/lib/class-file-reflector.php @@ -171,7 +171,10 @@ public function leaveNode( \PHPParser_Node $node ) { break; case 'Stmt_Function': - end( $this->functions )->uses = array_pop( $this->location )->uses; + $function = array_pop( $this->location ); + if ( isset( $function->uses ) && ! empty( $function->uses ) ) { + end( $this->functions )->uses = $function->uses; + } break; case 'Stmt_ClassMethod': From 7ae98fca7bc280f16c427905dc038160f02f6c0e Mon Sep 17 00:00:00 2001 From: Scott Reilly <scott@coffee2code.com> Date: Fri, 13 Nov 2020 23:14:08 -0800 Subject: [PATCH 378/402] Record version of WP for which item was last imported Also: * Updates `import_version()` to return the version number it obtained, or false. * Stores version in `_wp-parser_last_parsed_wp_version` post meta --- lib/class-importer.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/class-importer.php b/lib/class-importer.php index b83e59755..bc723723e 100644 --- a/lib/class-importer.php +++ b/lib/class-importer.php @@ -81,6 +81,13 @@ class Importer implements LoggerAwareInterface { */ public $errors = array(); + /** + * Version number of codebase being parsed. + * + * @var string + */ + public $version; + /** * @var array Cached items of inserted terms */ @@ -158,6 +165,12 @@ public function import( array $data, $skip_sleep = false, $import_ignored_functi exit; } + // Specifically import WP version file first to get version number. + $ver_file = array_filter( $data, function( $f ) { return 'wp-includes/version.php' === $f['path']; } ); + if ( $ver_file ) { + $this->version = $this->import_version( reset( $ver_file ) ); + } + $root = ''; foreach ( $data as $file ) { $this->logger->info( sprintf( 'Processing file %1$s of %2$s "%3$s".', number_format_i18n( $file_number ), number_format_i18n( $num_of_files ), $file['path'] ) ); @@ -336,10 +349,6 @@ public function import_file( array $file, $skip_sleep = false, $import_ignored = sleep( 3 ); } } - - if ( 'wp-includes/version.php' === $file['path'] ) { - $this->import_version( $file ); - } } /** @@ -477,13 +486,14 @@ protected function import_method( array $data, $parent_post_id = 0, $import_igno * Updates the 'wp_parser_imported_wp_version' option with the version from wp-includes/version.php. * * @param array $data Data + * @return string|false WordPress version number, or false if not known. */ protected function import_version( $data ) { $version_path = $data['root'] . '/' . $data['path']; if ( ! is_readable( $version_path ) ) { - return; + return false; } include $version_path; @@ -491,7 +501,10 @@ protected function import_version( $data ) { if ( isset( $wp_version ) && $wp_version ) { update_option( 'wp_parser_imported_wp_version', $wp_version ); $this->logger->info( "\t" . sprintf( 'Updated option wp_parser_imported_wp_version to "%1$s"', $wp_version ) ); + return $wp_version; } + + return false; } /** @@ -747,6 +760,7 @@ public function import_item( array $data, $parent_post_id = 0, $import_ignored = $anything_updated[] = update_post_meta( $post_id, '_wp-parser_line_num', (string) $data['line'] ); $anything_updated[] = update_post_meta( $post_id, '_wp-parser_end_line_num', (string) $data['end_line'] ); $anything_updated[] = update_post_meta( $post_id, '_wp-parser_tags', $data['doc']['tags'] ); + $anything_updated[] = update_post_meta( $post_id, '_wp-parser_last_parsed_wp_version', $this->version ); // If the post didn't need to be updated, but meta or tax changed, update it to bump last modified. if ( ! $is_new_post && ! $post_needed_update && array_filter( $anything_updated ) ) { From fb4da0d6bf4032439d85ffadbcffc079d41e4e3b Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Tue, 7 Jun 2022 10:14:46 -0400 Subject: [PATCH 379/402] Handbooks: Use code syntax block in handbook code examples (#85) * Handbooks: Add `code` shortcode support for syntax highlighting in handbooks * Code blocks: When copying single-line shell scripts, trim off the initial `$ `, if exists. --- .../themes/wporg-developer/inc/formatting.php | 52 +++++++++++++++++-- .../wporg-developer/js/function-reference.js | 8 ++- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/formatting.php b/source/wp-content/themes/wporg-developer/inc/formatting.php index 8009e65ed..eaf552f01 100644 --- a/source/wp-content/themes/wporg-developer/inc/formatting.php +++ b/source/wp-content/themes/wporg-developer/inc/formatting.php @@ -49,6 +49,7 @@ public static function do_init() { add_shortcode( 'php', array( __CLASS__, 'do_shortcode_php' ) ); add_shortcode( 'js', array( __CLASS__, 'do_shortcode_js' ) ); add_shortcode( 'css', array( __CLASS__, 'do_shortcode_css' ) ); + add_shortcode( 'code', array( __CLASS__, 'do_shortcode_code' ) ); add_filter( 'no_texturize_shortcodes', @@ -56,6 +57,7 @@ function ( $shortcodes ) { $shortcodes[] = 'php'; $shortcodes[] = 'js'; $shortcodes[] = 'css'; + $shortcodes[] = 'code'; return $shortcodes; } ); @@ -695,7 +697,7 @@ public static function do_shortcode_php( $attr, $content, $tag ) { return do_blocks( sprintf( '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code"><code lang="php" class="language-php line-numbers">%s</code></pre><!-- /wp:code -->', - trim( $content ) + self::_trim_code( $content ) ) ); } @@ -714,7 +716,7 @@ public static function do_shortcode_js( $attr, $content, $tag ) { return do_blocks( sprintf( '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">%s</code></pre><!-- /wp:code -->', - trim( $content ) + self::_trim_code( $content ) ) ); } @@ -733,11 +735,55 @@ public static function do_shortcode_css( $attr, $content, $tag ) { return do_blocks( sprintf( '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code"><code lang="css" class="language-css line-numbers">%s</code></pre><!-- /wp:code -->', - trim( $content ) + self::_trim_code( $content ) ) ); } + /** + * Render the code shortcode using the Code Syntax Block syntax. + * + * This is used in the handbooks content. + * + * @param array|string $attr Shortcode attributes array or empty string. + * @param string $content Shortcode content. + * @param string $tag Shortcode name. + * @return string + */ + public static function do_shortcode_code( $attr, $content, $tag ) { + // Use an allowedlist of languages, falling back to PHP. + // This should account for all languages used in the handbooks. + $lang_list = [ 'js', 'json', 'sh', 'bash', 'html', 'css', 'scss', 'php', 'markdown', 'yaml' ]; + $lang = in_array( $attr['lang'], $lang_list ) ? $attr['lang'] : 'php'; + + // Shell is flagged with `sh` or `bash` in the handbooks, but Prism uses `shell`. + if ( 'sh' === $lang || 'bash' === $lang ) { + $lang = 'shell'; + } + + return do_blocks( + sprintf( + '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code"><code lang="%1$s" class="language-%1$s line-numbers">%2$s</code></pre><!-- /wp:code -->', + $lang, + self::_trim_code( $content ) + ) + ); + } + + /** + * Trim off any extra space, including initial new lines. + * Strip out <br /> and <p> added by WordPress. + * + * @param string $content Shortcode content. + * @return string + */ + public static function _trim_code( $content ) { + $content = preg_replace( '/<br \/>/', '', $content ); + $content = preg_replace( '/<\/p>\s*<p>/', "\n\n", $content ); + // Trim everything except leading spaces. + $content = trim( $content, "\n\r\t\v\x00" ); + return $content; + } } // DevHub_Formatting DevHub_Formatting::init(); diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index 1c89b34f0..bcc1a7ffd 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -57,11 +57,17 @@ jQuery( function ( $ ) { $button.text( wporgFunctionReferenceI18n.copy ); $button.on( 'click', function () { clearTimeout( timeoutId ); - const code = $element.find( 'code' ).text(); + const $code = $element.find( 'code' ); + let code = $code.text(); if ( ! code ) { return; } + // For single-line shell scripts, trim off the initial `$ `, if exists. + if ( 'shell' === $code.attr( 'lang' ) && code.startsWith( '$ ' ) && ! code.includes( '\n' ) ) { + code = code.slice( 2 ); + } + // This returns a promise which will resolve if the copy suceeded, // and we can set the button text to tell the user it worked. // We don't do anything if it fails. From a517ab17cf3f0f2a15c8f77d73c79878571e2e5e Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Tue, 7 Jun 2022 10:28:54 -0400 Subject: [PATCH 380/402] Tools: Update composer package lock --- composer.lock | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/composer.lock b/composer.lock index 30d39833b..cd3f6b40e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b5f4eaf703c1a073d9bfa5c01eee4e4d", + "content-hash": "7d188cffc59d82d3a992b6c7fd7b141d", "packages": [ { "name": "composer/installers", @@ -500,16 +500,6 @@ }, "time": "2020-03-15T20:51:58+00:00" }, - { - "name": "wordpress-meta/handbook", - "version": "1", - "source": { - "type": "svn", - "url": "https://meta.svn.wordpress.org/sites/", - "reference": "trunk/wordpress.org/public_html/wp-content/plugins/handbook/" - }, - "type": "wordpress-plugin" - }, { "name": "wordpress-meta/pub", "version": "1", @@ -637,15 +627,15 @@ }, { "name": "wpackagist-plugin/jetpack", - "version": "11.0-a.11", + "version": "11.0", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/jetpack/", - "reference": "tags/11.0-a.11" + "reference": "tags/11.0" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/jetpack.11.0-a.11.zip" + "url": "https://downloads.wordpress.org/plugin/jetpack.11.0.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" From d2060892add88a6be095d4a5dd3af525a2882793 Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Tue, 7 Jun 2022 10:56:43 -0400 Subject: [PATCH 381/402] Tools: Add handbook plugin to the ignored exceptions. This plugin was added to git in #46, but it's still technically ignored by git (and IDEs that follow the gitignore). This adds the plugin as an exception, like the theme itself. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 65f1e0170..709974ada 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ phpcs.xml.dist # ...except the actual source of this project. !/source/wp-content/themes !/source/wp-content/themes/wporg-developer +!/source/wp-content/plugins +!/source/wp-content/plugins/handbook From 08ed00c41efe54e594fccdecc1f2c962131a5983 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Wed, 8 Jun 2022 13:06:31 +1000 Subject: [PATCH 382/402] Prepare to merge into wporg-developer --- .gitignore => source/wp-content/plugins/phpdoc-parser/.gitignore | 0 .../wp-content/plugins/phpdoc-parser/.travis.yml | 0 README.md => source/wp-content/plugins/phpdoc-parser/README.md | 0 .../wp-content/plugins/phpdoc-parser/composer.json | 0 .../wp-content/plugins/phpdoc-parser/composer.lock | 0 .../wp-content/plugins/phpdoc-parser/lib}/class-command.php | 0 .../plugins/phpdoc-parser/lib}/class-file-reflector.php | 0 .../plugins/phpdoc-parser/lib}/class-function-call-reflector.php | 0 .../plugins/phpdoc-parser/lib}/class-hook-reflector.php | 0 .../wp-content/plugins/phpdoc-parser/lib}/class-importer.php | 0 .../plugins/phpdoc-parser/lib}/class-method-call-reflector.php | 0 .../wp-content/plugins/phpdoc-parser/lib}/class-plugin.php | 0 .../plugins/phpdoc-parser/lib}/class-pretty-printer.php | 0 .../wp-content/plugins/phpdoc-parser/lib}/class-relationships.php | 0 .../phpdoc-parser/lib}/class-static-method-call-reflector.php | 0 .../wp-content/plugins/phpdoc-parser/lib}/class-wp-cli-logger.php | 0 {lib => source/wp-content/plugins/phpdoc-parser/lib}/runner.php | 0 {lib => source/wp-content/plugins/phpdoc-parser/lib}/template.php | 0 .../wp-content/plugins/phpdoc-parser/phpunit.xml.dist | 0 plugin.php => source/wp-content/plugins/phpdoc-parser/plugin.php | 0 .../plugins/phpdoc-parser/tests}/phpunit/includes/bootstrap.php | 0 .../phpdoc-parser/tests}/phpunit/includes/export-testcase.php | 0 .../phpdoc-parser/tests}/phpunit/includes/testcases/import.php | 0 .../phpdoc-parser/tests}/phpunit/tests/export/docblocks.inc | 0 .../phpdoc-parser/tests}/phpunit/tests/export/docblocks.php | 0 .../plugins/phpdoc-parser/tests}/phpunit/tests/export/hooks.inc | 0 .../plugins/phpdoc-parser/tests}/phpunit/tests/export/hooks.php | 0 .../phpdoc-parser/tests}/phpunit/tests/export/namespace.inc | 0 .../phpdoc-parser/tests}/phpunit/tests/export/namespace.php | 0 .../tests}/phpunit/tests/export/uses/constructor.inc | 0 .../tests}/phpunit/tests/export/uses/constructor.php | 0 .../phpdoc-parser/tests}/phpunit/tests/export/uses/methods.inc | 0 .../phpdoc-parser/tests}/phpunit/tests/export/uses/methods.php | 0 .../phpdoc-parser/tests}/phpunit/tests/export/uses/nested.inc | 0 .../phpdoc-parser/tests}/phpunit/tests/export/uses/nested.php | 0 .../plugins/phpdoc-parser/tests}/phpunit/tests/import/file.inc | 0 .../plugins/phpdoc-parser/tests}/phpunit/tests/import/file.php | 0 .../wp-content/plugins/phpdoc-parser/tests}/source/actions.php | 0 .../plugins/phpdoc-parser/tests}/source/bad-class-doc.php | 0 .../plugins/phpdoc-parser/tests}/source/class-property-doc.php | 0 .../plugins/phpdoc-parser/tests}/source/class_method_doc.php | 0 .../plugins/phpdoc-parser/tests}/source/deprecated-file.php | 0 .../wp-content/plugins/phpdoc-parser/tests}/source/filters.php | 0 .../wp-content/plugins/phpdoc-parser/tests}/source/functions.php | 0 .../wp-content/plugins/phpdoc-parser/tests}/source/good-class.php | 0 .../plugins/phpdoc-parser/tests}/source/relationships.php | 0 46 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => source/wp-content/plugins/phpdoc-parser/.gitignore (100%) rename .travis.yml => source/wp-content/plugins/phpdoc-parser/.travis.yml (100%) rename README.md => source/wp-content/plugins/phpdoc-parser/README.md (100%) rename composer.json => source/wp-content/plugins/phpdoc-parser/composer.json (100%) rename composer.lock => source/wp-content/plugins/phpdoc-parser/composer.lock (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-command.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-file-reflector.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-function-call-reflector.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-hook-reflector.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-importer.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-method-call-reflector.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-plugin.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-pretty-printer.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-relationships.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-static-method-call-reflector.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/class-wp-cli-logger.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/runner.php (100%) rename {lib => source/wp-content/plugins/phpdoc-parser/lib}/template.php (100%) rename phpunit.xml.dist => source/wp-content/plugins/phpdoc-parser/phpunit.xml.dist (100%) rename plugin.php => source/wp-content/plugins/phpdoc-parser/plugin.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/includes/bootstrap.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/includes/export-testcase.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/includes/testcases/import.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/docblocks.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/docblocks.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/hooks.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/hooks.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/namespace.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/namespace.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/constructor.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/constructor.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/methods.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/methods.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/nested.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/export/uses/nested.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/import/file.inc (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/phpunit/tests/import/file.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/actions.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/bad-class-doc.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/class-property-doc.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/class_method_doc.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/deprecated-file.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/filters.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/functions.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/good-class.php (100%) rename {tests => source/wp-content/plugins/phpdoc-parser/tests}/source/relationships.php (100%) diff --git a/.gitignore b/source/wp-content/plugins/phpdoc-parser/.gitignore similarity index 100% rename from .gitignore rename to source/wp-content/plugins/phpdoc-parser/.gitignore diff --git a/.travis.yml b/source/wp-content/plugins/phpdoc-parser/.travis.yml similarity index 100% rename from .travis.yml rename to source/wp-content/plugins/phpdoc-parser/.travis.yml diff --git a/README.md b/source/wp-content/plugins/phpdoc-parser/README.md similarity index 100% rename from README.md rename to source/wp-content/plugins/phpdoc-parser/README.md diff --git a/composer.json b/source/wp-content/plugins/phpdoc-parser/composer.json similarity index 100% rename from composer.json rename to source/wp-content/plugins/phpdoc-parser/composer.json diff --git a/composer.lock b/source/wp-content/plugins/phpdoc-parser/composer.lock similarity index 100% rename from composer.lock rename to source/wp-content/plugins/phpdoc-parser/composer.lock diff --git a/lib/class-command.php b/source/wp-content/plugins/phpdoc-parser/lib/class-command.php similarity index 100% rename from lib/class-command.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-command.php diff --git a/lib/class-file-reflector.php b/source/wp-content/plugins/phpdoc-parser/lib/class-file-reflector.php similarity index 100% rename from lib/class-file-reflector.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-file-reflector.php diff --git a/lib/class-function-call-reflector.php b/source/wp-content/plugins/phpdoc-parser/lib/class-function-call-reflector.php similarity index 100% rename from lib/class-function-call-reflector.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-function-call-reflector.php diff --git a/lib/class-hook-reflector.php b/source/wp-content/plugins/phpdoc-parser/lib/class-hook-reflector.php similarity index 100% rename from lib/class-hook-reflector.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-hook-reflector.php diff --git a/lib/class-importer.php b/source/wp-content/plugins/phpdoc-parser/lib/class-importer.php similarity index 100% rename from lib/class-importer.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-importer.php diff --git a/lib/class-method-call-reflector.php b/source/wp-content/plugins/phpdoc-parser/lib/class-method-call-reflector.php similarity index 100% rename from lib/class-method-call-reflector.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-method-call-reflector.php diff --git a/lib/class-plugin.php b/source/wp-content/plugins/phpdoc-parser/lib/class-plugin.php similarity index 100% rename from lib/class-plugin.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-plugin.php diff --git a/lib/class-pretty-printer.php b/source/wp-content/plugins/phpdoc-parser/lib/class-pretty-printer.php similarity index 100% rename from lib/class-pretty-printer.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-pretty-printer.php diff --git a/lib/class-relationships.php b/source/wp-content/plugins/phpdoc-parser/lib/class-relationships.php similarity index 100% rename from lib/class-relationships.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-relationships.php diff --git a/lib/class-static-method-call-reflector.php b/source/wp-content/plugins/phpdoc-parser/lib/class-static-method-call-reflector.php similarity index 100% rename from lib/class-static-method-call-reflector.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-static-method-call-reflector.php diff --git a/lib/class-wp-cli-logger.php b/source/wp-content/plugins/phpdoc-parser/lib/class-wp-cli-logger.php similarity index 100% rename from lib/class-wp-cli-logger.php rename to source/wp-content/plugins/phpdoc-parser/lib/class-wp-cli-logger.php diff --git a/lib/runner.php b/source/wp-content/plugins/phpdoc-parser/lib/runner.php similarity index 100% rename from lib/runner.php rename to source/wp-content/plugins/phpdoc-parser/lib/runner.php diff --git a/lib/template.php b/source/wp-content/plugins/phpdoc-parser/lib/template.php similarity index 100% rename from lib/template.php rename to source/wp-content/plugins/phpdoc-parser/lib/template.php diff --git a/phpunit.xml.dist b/source/wp-content/plugins/phpdoc-parser/phpunit.xml.dist similarity index 100% rename from phpunit.xml.dist rename to source/wp-content/plugins/phpdoc-parser/phpunit.xml.dist diff --git a/plugin.php b/source/wp-content/plugins/phpdoc-parser/plugin.php similarity index 100% rename from plugin.php rename to source/wp-content/plugins/phpdoc-parser/plugin.php diff --git a/tests/phpunit/includes/bootstrap.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/bootstrap.php similarity index 100% rename from tests/phpunit/includes/bootstrap.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/bootstrap.php diff --git a/tests/phpunit/includes/export-testcase.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/export-testcase.php similarity index 100% rename from tests/phpunit/includes/export-testcase.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/export-testcase.php diff --git a/tests/phpunit/includes/testcases/import.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/testcases/import.php similarity index 100% rename from tests/phpunit/includes/testcases/import.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/includes/testcases/import.php diff --git a/tests/phpunit/tests/export/docblocks.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/docblocks.inc similarity index 100% rename from tests/phpunit/tests/export/docblocks.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/docblocks.inc diff --git a/tests/phpunit/tests/export/docblocks.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/docblocks.php similarity index 100% rename from tests/phpunit/tests/export/docblocks.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/docblocks.php diff --git a/tests/phpunit/tests/export/hooks.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/hooks.inc similarity index 100% rename from tests/phpunit/tests/export/hooks.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/hooks.inc diff --git a/tests/phpunit/tests/export/hooks.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/hooks.php similarity index 100% rename from tests/phpunit/tests/export/hooks.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/hooks.php diff --git a/tests/phpunit/tests/export/namespace.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/namespace.inc similarity index 100% rename from tests/phpunit/tests/export/namespace.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/namespace.inc diff --git a/tests/phpunit/tests/export/namespace.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/namespace.php similarity index 100% rename from tests/phpunit/tests/export/namespace.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/namespace.php diff --git a/tests/phpunit/tests/export/uses/constructor.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/constructor.inc similarity index 100% rename from tests/phpunit/tests/export/uses/constructor.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/constructor.inc diff --git a/tests/phpunit/tests/export/uses/constructor.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/constructor.php similarity index 100% rename from tests/phpunit/tests/export/uses/constructor.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/constructor.php diff --git a/tests/phpunit/tests/export/uses/methods.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/methods.inc similarity index 100% rename from tests/phpunit/tests/export/uses/methods.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/methods.inc diff --git a/tests/phpunit/tests/export/uses/methods.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/methods.php similarity index 100% rename from tests/phpunit/tests/export/uses/methods.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/methods.php diff --git a/tests/phpunit/tests/export/uses/nested.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/nested.inc similarity index 100% rename from tests/phpunit/tests/export/uses/nested.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/nested.inc diff --git a/tests/phpunit/tests/export/uses/nested.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/nested.php similarity index 100% rename from tests/phpunit/tests/export/uses/nested.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/export/uses/nested.php diff --git a/tests/phpunit/tests/import/file.inc b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/import/file.inc similarity index 100% rename from tests/phpunit/tests/import/file.inc rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/import/file.inc diff --git a/tests/phpunit/tests/import/file.php b/source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/import/file.php similarity index 100% rename from tests/phpunit/tests/import/file.php rename to source/wp-content/plugins/phpdoc-parser/tests/phpunit/tests/import/file.php diff --git a/tests/source/actions.php b/source/wp-content/plugins/phpdoc-parser/tests/source/actions.php similarity index 100% rename from tests/source/actions.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/actions.php diff --git a/tests/source/bad-class-doc.php b/source/wp-content/plugins/phpdoc-parser/tests/source/bad-class-doc.php similarity index 100% rename from tests/source/bad-class-doc.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/bad-class-doc.php diff --git a/tests/source/class-property-doc.php b/source/wp-content/plugins/phpdoc-parser/tests/source/class-property-doc.php similarity index 100% rename from tests/source/class-property-doc.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/class-property-doc.php diff --git a/tests/source/class_method_doc.php b/source/wp-content/plugins/phpdoc-parser/tests/source/class_method_doc.php similarity index 100% rename from tests/source/class_method_doc.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/class_method_doc.php diff --git a/tests/source/deprecated-file.php b/source/wp-content/plugins/phpdoc-parser/tests/source/deprecated-file.php similarity index 100% rename from tests/source/deprecated-file.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/deprecated-file.php diff --git a/tests/source/filters.php b/source/wp-content/plugins/phpdoc-parser/tests/source/filters.php similarity index 100% rename from tests/source/filters.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/filters.php diff --git a/tests/source/functions.php b/source/wp-content/plugins/phpdoc-parser/tests/source/functions.php similarity index 100% rename from tests/source/functions.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/functions.php diff --git a/tests/source/good-class.php b/source/wp-content/plugins/phpdoc-parser/tests/source/good-class.php similarity index 100% rename from tests/source/good-class.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/good-class.php diff --git a/tests/source/relationships.php b/source/wp-content/plugins/phpdoc-parser/tests/source/relationships.php similarity index 100% rename from tests/source/relationships.php rename to source/wp-content/plugins/phpdoc-parser/tests/source/relationships.php From 904a33aa98c9383e1dc3c0f65f5db1cd582e6fe7 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Wed, 8 Jun 2022 13:42:30 +1000 Subject: [PATCH 383/402] No need to import phpdoc-parser from an external now. --- composer.json | 5 - composer.lock | 653 ++++++++++++++++++-------------------------------- 2 files changed, 236 insertions(+), 422 deletions(-) diff --git a/composer.json b/composer.json index b7c032771..360981eb3 100644 --- a/composer.json +++ b/composer.json @@ -70,10 +70,6 @@ { "type": "vcs", "url": "git@github.com:WordPress/wporg-mu-plugins.git" - }, - { - "type": "vcs", - "url": "git@github.com:WordPress/phpdoc-parser.git" } ], "require": { @@ -87,7 +83,6 @@ "wordpress-meta/wporg": "1", "wordpress-meta/pub": "1", "wordpress-meta/wporg-markdown": "1", - "wordpress/phpdoc-parser": "dev-master", "wporg/wporg-repo-tools": "dev-trunk", "wporg/wporg-mu-plugins": "dev-build" }, diff --git a/composer.lock b/composer.lock index cd3f6b40e..9a36b59db 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7d188cffc59d82d3a992b6c7fd7b141d", + "content-hash": "866a6878ed2f5e55e14d9551ec48b738", "packages": [ { "name": "composer/installers", @@ -158,348 +158,6 @@ ], "time": "2022-03-15T21:23:54+00:00" }, - { - "name": "erusev/parsedown", - "version": "1.8.0-beta-7", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955", - "reference": "fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "support": { - "issues": "https://github.com/erusev/parsedown/issues", - "source": "https://github.com/erusev/parsedown/tree/1.8.0-beta-7" - }, - "time": "2019-03-17T18:47:21+00:00" - }, - { - "name": "nikic/php-parser", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c4bbc8e236a1f21b2b17cfbf3d46aa6ece69b9f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c4bbc8e236a1f21b2b17cfbf3d46aa6ece69b9f7", - "reference": "c4bbc8e236a1f21b2b17cfbf3d46aa6ece69b9f7", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "files": [ - "lib/bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/1.x" - }, - "time": "2016-01-15T21:03:42+00:00" - }, - { - "name": "phpdocumentor/reflection", - "version": "3.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "59e61accdecf9ea69db71763a0f6f774094f656e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/59e61accdecf9ea69db71763a0f6f774094f656e", - "reference": "59e61accdecf9ea69db71763a0f6f774094f656e", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^1.0", - "php": ">=5.3.3", - "phpdocumentor/reflection-docblock": "~2.0", - "psr/log": "~1.0" - }, - "require-dev": { - "behat/behat": "~2.4", - "mockery/mockery": "~0.8", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/", - "tests/unit/", - "tests/mocks/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/Reflection/issues", - "source": "https://github.com/phpDocumentor/Reflection/tree/master" - }, - "time": "2017-12-20T21:17:50+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", - "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/2.x" - }, - "time": "2016-01-25T08:17:30+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "scribu/lib-posts-to-posts", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/scribu/wp-lib-posts-to-posts.git", - "reference": "a695438e455587fa228e993d05b4431cde99af1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-lib-posts-to-posts/zipball/a695438e455587fa228e993d05b4431cde99af1b", - "reference": "a695438e455587fa228e993d05b4431cde99af1b", - "shasum": "" - }, - "require": { - "scribu/scb-framework": "dev-master" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "description": "A library for many-to-many relationships in WordPress", - "homepage": "https://github.com/scribu/wp-lib-posts-to-posts", - "support": { - "source": "https://github.com/scribu/wp-lib-posts-to-posts/tree/master" - }, - "time": "2016-02-15T12:08:59+00:00" - }, - { - "name": "scribu/scb-framework", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/scribu/wp-scb-framework.git", - "reference": "d35d5126c6d323711dd14b9d97aaa927eaaba123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/scribu/wp-scb-framework/zipball/d35d5126c6d323711dd14b9d97aaa927eaaba123", - "reference": "d35d5126c6d323711dd14b9d97aaa927eaaba123", - "shasum": "" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "load-composer.php", - "Util.php" - ], - "classmap": [ - "." - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0+" - ], - "authors": [ - { - "name": "Cristi Burcă", - "homepage": "http://scribu.net/" - } - ], - "description": "A set of useful classes for faster plugin development", - "homepage": "https://github.com/scribu/wp-scb-framework", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/scribu/wp-scb-framework/issues", - "source": "https://github.com/scribu/wp-scb-framework", - "wiki": "https://github.com/scribu/wp-scb-framework/wiki" - }, - "time": "2020-03-15T20:51:58+00:00" - }, { "name": "wordpress-meta/pub", "version": "1", @@ -530,65 +188,6 @@ }, "type": "wordpress-plugin" }, - { - "name": "wordpress/phpdoc-parser", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/WordPress/phpdoc-parser.git", - "reference": "7ae98fca7bc280f16c427905dc038160f02f6c0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WordPress/phpdoc-parser/zipball/7ae98fca7bc280f16c427905dc038160f02f6c0e", - "reference": "7ae98fca7bc280f16c427905dc038160f02f6c0e", - "shasum": "" - }, - "require": { - "composer/installers": "~1.0", - "erusev/parsedown": "~1.7", - "php": ">=5.4", - "phpdocumentor/reflection": "~3.0", - "psr/log": "~1.0", - "scribu/lib-posts-to-posts": "dev-master@dev", - "scribu/scb-framework": "dev-master@dev" - }, - "default-branch": true, - "type": "wordpress-plugin", - "autoload": { - "classmap": [ - "lib" - ], - "files": [ - "lib/runner.php", - "lib/template.php" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Ryan McCue", - "homepage": "http://ryanmccue.info", - "role": "Developer" - }, - { - "name": "Contributors", - "homepage": "https://github.com/WordPress/phpdoc-parser/graphs/contributors" - } - ], - "description": "Static code parser for WordPress source.", - "homepage": "https://github.com/WordPress/phpdoc-parser", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/WordPress/phpdoc-parser/issues", - "source": "https://github.com/WordPress/phpdoc-parser/tree/master" - }, - "time": "2020-11-14T07:14:08+00:00" - }, { "name": "wpackagist-plugin/code-syntax-block", "version": "3.0.0", @@ -1256,35 +855,198 @@ }, "time": "2022-03-19T08:19:46+00:00" }, + { + "name": "phpdocumentor/reflection-common", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6", + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" + }, + "time": "2021-06-25T13:47:51+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9455bde915e322a823d464a2c41e5c0de03512a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9455bde915e322a823d464a2c41e5c0de03512a6", + "reference": "9455bde915e322a823d464a2c41e5c0de03512a6", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5", + "psalm/phar": "^4.8" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2022-04-02T20:16:01+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, { "name": "phpspec/prophecy", - "version": "v1.10.3", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -1319,9 +1081,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2020-03-05T15:02:03+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2533,6 +2295,64 @@ ], "time": "2021-07-28T10:34:58+00:00" }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, { "name": "wp-coding-standards/wpcs", "version": "2.3.0", @@ -2698,7 +2518,6 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "wordpress/phpdoc-parser": 20, "wporg/wporg-repo-tools": 20, "wporg/wporg-mu-plugins": 20 }, From 649a96963262b0f6b135ee17fc2488500abd85a1 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Wed, 8 Jun 2022 13:45:11 +1000 Subject: [PATCH 384/402] No need to install / remove the phpdoc parser anymore. --- .../wporg-developer/inc/cli-commands.php | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/cli-commands.php b/source/wp-content/themes/wporg-developer/inc/cli-commands.php index bc9f85c0d..89e31abde 100644 --- a/source/wp-content/themes/wporg-developer/inc/cli-commands.php +++ b/source/wp-content/themes/wporg-developer/inc/cli-commands.php @@ -113,21 +113,6 @@ public function parse( $args, $assoc_args ) { WP_CLI::confirm( "Looks like WP $version was already parsed on " . date_i18n( 'Y-m-d H:i', $last_parsed_date ) . ". Proceed anyway?" ); } - // Get the phpdoc-parser plugin if not installed. - $all_plugins = get_plugins(); - if ( ! in_array( $plugins['phpdoc-parser'], array_keys( $all_plugins ) ) ) { - WP_CLI::log( "Installing phpdoc-parser plugin..." ); - WP_CLI::runcommand( 'plugin install https://github.com/WordPress/phpdoc-parser/archive/master.zip' ); - touch( WP_PLUGIN_DIR . '/phpdoc-parser/.devhub-parser-installed' ); - } - - // Verify the phpdoc-parser plugin is available locally. - wp_cache_set( 'plugins', [], 'plugins' ); // Reset cache of plugins. - $all_plugins = get_plugins(); - if ( ! in_array( $plugins['phpdoc-parser'], array_keys( $all_plugins ) ) ) { - WP_CLI::error( 'The PHPDoc-Parser plugin (from https://github.com/WordPress/phpdoc-parser) could not be automatically installed locally in ' . WP_PLUGIN_DIR . '/. Please do so manually.' ); - } - // Install phpdoc-parser plugin dependencies if not installed. $plugin_dir = WP_PLUGIN_DIR . '/phpdoc-parser/'; if ( ! file_exists( $plugin_dir . 'vendor' ) ) { @@ -280,22 +265,6 @@ public function clean() { WP_CLI::launch( $cmd, false, true ); } - // Remove the phpdoc-parser plugin. - // @todo Add argument to facilitate disabling this step, or do a git checkout and only delete if no local changes. - $plugin = 'phpdoc-parser'; - $all_plugins = get_plugins(); - if ( in_array( $plugin . '/plugin.php', array_keys( $all_plugins ) ) ) { - // Only delete the plugin if it was automatically installed via parse command. - if ( file_exists( WP_PLUGIN_DIR . '/phpdoc-parser/.devhub-parser-installed' ) ) { - WP_CLI::log( "Deleting plugin {$plugin}..." ); - WP_CLI::runcommand( "plugin delete {$plugin}" ); - } else { - WP_CLI::log( "Plugin {$plugin} present but was manually installed or looks to have customizations so it must be deleted manually, if so desired." ); - } - } else { - WP_CLI::log( "Plugin {$plugin} not present so it can't be deleted." ); - } - WP_CLI::success( 'Clean-up is complete.' ); } From c5b44408b994f2aea4f5efb74b6caa2e924c46d6 Mon Sep 17 00:00:00 2001 From: tellyworth <alex@automattic.com> Date: Tue, 7 Jun 2022 16:38:05 +1000 Subject: [PATCH 385/402] Restore the code collapse & expand buttons --- .../wporg-developer/js/function-reference.js | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index bcc1a7ffd..2b4fea19e 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -7,6 +7,74 @@ jQuery( function ( $ ) { let $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy; + let $sourceCollapsedHeight; + + function onLoad() { + sourceCodeHighlightInit(); + + toggleUsageListInit(); + } + + function sourceCodeHighlightInit() { + + // We require the SyntaxHighlighter javascript library + if ( undefined === window.Prism ) { + return; + } + + // 1em (margin) + 10 * 17px + 10. Lines are 1.1em which rounds to 17px: calc( 1em + 17px * 10 + 10 ). + // Extra 10px added to partially show next line so it's clear there is more. + $sourceCollapsedHeight = 196; + sourceCodeDisplay(); + } + + function sourceCodeDisplay( element ) { + + if ( element !== undefined ) { + // Find table inside a specific source code element if passed. + var sourceCode = $( '.source-content', element ).find( 'pre' ); + } else { + // Find table inside all source code elements. + var sourceCode = $( '.source-content' ).find( 'pre' ); + } + + if ( !sourceCode.length ) { + return; + } + + sourceCode.each( function( t ) { + if ( ( $sourceCollapsedHeight - 12 ) < $( this ).height() ) { + + var sourceContent = $( this );//.closest( '.wp-block-code' ); + + // Do this with javascript so javascript-less can enjoy the total sourcecode + sourceContent.css( { + height: $sourceCollapsedHeight + 'px' + } ); + + sourceContent.next( '.source-code-links' ).find( 'span:first' ).show(); + sourceContent.parent().find( '.show-complete-source' ).show(); + sourceContent.parent().find( '.show-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource ); + sourceContent.parent().find( '.less-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource ); + } + } ); + } + + function toggleCompleteSource( e ) { + e.preventDefault(); + + var sourceContent = $( this ).closest( '.source-content' ).find( 'pre' ); + + if ( $( this ).parent().find( '.show-complete-source' ).is( ':visible' ) ) { + var heightGoal = sourceContent.find('code').height() + 45; // takes into consideration potential x-scrollbar + } else { + var heightGoal = $sourceCollapsedHeight; + } + + sourceContent.animate( { height: heightGoal + 'px' } ); + + $( this ).parent().find( 'a' ).toggle(); + } function toggleUsageListInit() { // We only expect one used_by and uses per document @@ -84,4 +152,7 @@ jQuery( function ( $ ) { $element.prepend( $button ); } ); + + $( onLoad ); + } ); From b018c973f50aba96a452de7dde97395cc4cb6d3a Mon Sep 17 00:00:00 2001 From: ren <18050944+renintw@users.noreply.github.com> Date: Wed, 8 Jun 2022 05:54:20 +0800 Subject: [PATCH 386/402] Fix eslint error --- .../wporg-developer/js/function-reference.js | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index 2b4fea19e..73b25fed2 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -16,8 +16,7 @@ jQuery( function ( $ ) { } function sourceCodeHighlightInit() { - - // We require the SyntaxHighlighter javascript library + // We require the Prism javascript library if ( undefined === window.Prism ) { return; } @@ -29,46 +28,54 @@ jQuery( function ( $ ) { } function sourceCodeDisplay( element ) { - + let sourceCode = []; if ( element !== undefined ) { // Find table inside a specific source code element if passed. - var sourceCode = $( '.source-content', element ).find( 'pre' ); + sourceCode = $( '.source-content', element ).find( 'pre' ); } else { // Find table inside all source code elements. - var sourceCode = $( '.source-content' ).find( 'pre' ); + sourceCode = $( '.source-content' ).find( 'pre' ); } - if ( !sourceCode.length ) { + if ( ! sourceCode.length ) { return; } - sourceCode.each( function( t ) { - if ( ( $sourceCollapsedHeight - 12 ) < $( this ).height() ) { - - var sourceContent = $( this );//.closest( '.wp-block-code' ); + sourceCode.each( function () { + if ( $sourceCollapsedHeight - 12 < $( this ).height() ) { + const sourceContent = $( this ); //.closest( '.wp-block-code' ); // Do this with javascript so javascript-less can enjoy the total sourcecode sourceContent.css( { - height: $sourceCollapsedHeight + 'px' + height: $sourceCollapsedHeight + 'px', } ); sourceContent.next( '.source-code-links' ).find( 'span:first' ).show(); sourceContent.parent().find( '.show-complete-source' ).show(); - sourceContent.parent().find( '.show-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource ); - sourceContent.parent().find( '.less-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource ); + sourceContent + .parent() + .find( '.show-complete-source' ) + .off( 'click.togglesource' ) + .on( 'click.togglesource', toggleCompleteSource ); + sourceContent + .parent() + .find( '.less-complete-source' ) + .off( 'click.togglesource' ) + .on( 'click.togglesource', toggleCompleteSource ); } } ); } - function toggleCompleteSource( e ) { - e.preventDefault(); + function toggleCompleteSource( event ) { + event.preventDefault(); - var sourceContent = $( this ).closest( '.source-content' ).find( 'pre' ); + const sourceContent = $( this ).closest( '.source-content' ).find( 'pre' ); + let heightGoal = 0; if ( $( this ).parent().find( '.show-complete-source' ).is( ':visible' ) ) { - var heightGoal = sourceContent.find('code').height() + 45; // takes into consideration potential x-scrollbar + heightGoal = sourceContent.find( 'code' ).height() + 45; // takes into consideration potential x-scrollbar } else { - var heightGoal = $sourceCollapsedHeight; + heightGoal = $sourceCollapsedHeight; } sourceContent.animate( { height: heightGoal + 'px' } ); @@ -154,5 +161,4 @@ jQuery( function ( $ ) { } ); $( onLoad ); - } ); From 673d9d888aae8c2e1e9adcc3d8df6bbbd0f772fb Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Wed, 8 Jun 2022 17:41:47 +1000 Subject: [PATCH 387/402] Preserve Newlines & nested lists. (#49) This preserves newlines within docblocks after end-of-sentence and before-list-items, so that the lists can be parsed more efficiently. Fixes #45 --- .../plugins/phpdoc-parser/lib/runner.php | 17 ++++++ .../themes/wporg-developer/inc/formatting.php | 57 +++++++------------ .../reference/template-params.php | 5 +- .../themes/wporg-developer/scss/main.scss | 4 ++ 4 files changed, 44 insertions(+), 39 deletions(-) diff --git a/source/wp-content/plugins/phpdoc-parser/lib/runner.php b/source/wp-content/plugins/phpdoc-parser/lib/runner.php index cacbec266..7330d91de 100644 --- a/source/wp-content/plugins/phpdoc-parser/lib/runner.php +++ b/source/wp-content/plugins/phpdoc-parser/lib/runner.php @@ -161,6 +161,20 @@ function ( $matches ) use ( $replacement_string ) { $text ); + // Insert a newline when \n follows `.`. + $text = preg_replace( + "/\.[\n\r]+(?!\s*[\n\r])/m", + '.<br>', + $text + ); + + // Insert a new line when \n is followed by what appears to be a list. + $text = preg_replace( + "/[\n\r]+(\s+[*-] )(?!\s*[\n\r])/m", + '<br>$1', + $text + ); + // Merge consecutive non-blank lines together by replacing the newlines with a space. $text = preg_replace( "/[\n\r](?!\s*[\n\r])/m", @@ -406,5 +420,8 @@ function format_description( $description ) { $parsedown = \Parsedown::instance(); $description = $parsedown->line( $description ); } + + $description = fix_newlines( $description ); + return $description; } diff --git a/source/wp-content/themes/wporg-developer/inc/formatting.php b/source/wp-content/themes/wporg-developer/inc/formatting.php index eaf552f01..4fc73665b 100644 --- a/source/wp-content/themes/wporg-developer/inc/formatting.php +++ b/source/wp-content/themes/wporg-developer/inc/formatting.php @@ -43,6 +43,7 @@ public static function do_init() { add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'autolink_references' ) ); add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'fix_param_description_parsedown_bug' ) ); + add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'convert_lists_to_markup' ) ); add_filter( 'devhub-function-return-type', array( __CLASS__, 'autolink_references' ) ); @@ -316,7 +317,7 @@ public static function format_param_description( $text ) { // Simple allowable tags that should get unencoded. // Note: This precludes them from being able to be used in an encoded fashion // within a parameter description. - $allowable_tags = array( 'code' ); + $allowable_tags = array( 'code', 'br' ); foreach ( $allowable_tags as $tag ) { $text = str_replace( array( "<{$tag}>", "</{$tag}>" ), array( "<{$tag}>", "</{$tag}>" ), $text ); } @@ -496,6 +497,11 @@ function ( $matches ) { * list processing during parsing. * * Recognizes lists where list items are denoted with an asterisk or dash. + * Examples: + * - https://developer.wordpress.org/reference/functions/add_menu_page/ + * - https://developer.wordpress.org/reference/classes/wp_term_query/__construct/ + * - https://developer.wordpress.org/reference/hooks/password_change_email/ + * - https://developer.wordpress.org/reference/classes/WP_Query/parse_query/ * * Does not handle nesting of lists. * @@ -503,44 +509,23 @@ function ( $matches ) { * @return string */ public static function convert_lists_to_markup( $text ) { - $inline_list = false; - $li = '<br /> * '; - - // Convert asterisks to a list. - // Example: https://developer.wordpress.org/reference/functions/add_menu_page/ - if ( false !== strpos( $text, ' * ' ) ) { - // Display as simple plaintext list. - $text = str_replace( ' * ', "\n" . $li, $text ); - $inline_list = true; - } + // Expand new lines for ease of matching. + $text = preg_replace( '!<br>\s*!', "<br>\n", $text ); - // Convert dashes to a list. - // Example: https://developer.wordpress.org/reference/classes/wp_term_query/__construct/ - // Example: https://developer.wordpress.org/reference/hooks/password_change_email/ - if ( false !== strpos( $text, ' - ' ) ) { - // Display as simple plaintext list. - $text = str_replace( ' - ', "\n" . $li, $text ); - $inline_list = true; - } + // Trim any trailing <br>s on strings. + $text = preg_replace( '/<br>\s*$/s', '', $text ); - // If list detected. - if ( $inline_list ) { - // Replace first item, ensuring the opening 'ul' tag is prepended. - $text = preg_replace( '~^' . preg_quote( $li ) . '(.+)$~mU', "<ul><li>\$1</li>\n", $text, 1 ); - // Wrap subsequent list items in 'li' tags. - $text = preg_replace( '~^' . preg_quote( $li ) . '(.+)$~mU', "<li>\$1</li>\n", $text ); - $text = trim( $text ); - - // Close the list if it hasn't been closed before start of next hash parameter. - //$text = preg_replace( '~(</li>)(\s+</li>)~smU', '$1</ul>$2', $text ); - $text = preg_replace( '~(</li>)(\s*</li>)~smU', '$1</ul>$2', $text ); - - // Closethe list if it hasn't been closed and it's the end of the description. - if ( '</li>' === substr( trim( $text ), -5 ) ) { - $text .= '</ul>'; - } + // Add line items + $text = preg_replace( '!^\s*[*-] (.+?)(<br>)*$!m', '<li>$1</li>', $text, -1, $replacements_made ); + + if ( ! $replacements_made ) { + return $text; } + // Wrap in a `ul`. + $text = substr_replace( $text, '<ul><li>', strpos( $text, '<li>' ), 4 ); // First instance + $text = substr_replace( $text, '</li></ul>', strrpos( $text, '</li>' ), 5 ); // Last instance. + return $text; } @@ -612,7 +597,7 @@ public static function fix_param_hash_formatting( $text ) { if ( $name ) { $new_text .= "<code>{$name}</code>"; } - $new_text .= "<span class='type'>{$type}</span><p class='desc'>{$description}</p>"; + $new_text .= "<span class='type'>{$type}</span><div class='desc'>{$description}</div>"; if ( ! $skip_closing_li ) { $new_text .= '</li>'; } diff --git a/source/wp-content/themes/wporg-developer/reference/template-params.php b/source/wp-content/themes/wporg-developer/reference/template-params.php index 669e0a083..89c067ad1 100644 --- a/source/wp-content/themes/wporg-developer/reference/template-params.php +++ b/source/wp-content/themes/wporg-developer/reference/template-params.php @@ -27,12 +27,11 @@ </dt> <?php endif; ?> <dd> - <p class="desc"> - + <div class="desc"> <?php if ( ! empty( $param['content'] ) ) : ?> <span class="description"><?php echo wp_kses_post( $param['content'] ); ?></span> <?php endif; ?> - </p> + </div> <?php if ( ! empty( $param['default'] ) ) : ?> <p class="default"><?php _e( 'Default:', 'wporg' );?> <code><?php echo htmlentities( $param['default'] ); ?></code></p> <?php endif; ?> diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index db9c377a8..8b1ed80c9 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -1144,6 +1144,10 @@ ul { margin-left: 2.5rem; + + ul { + margin-bottom: 0.5em; + } } code { From 28f89daa36eb9d5f5ade84c25a8c1dca1d886ac4 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Wed, 8 Jun 2022 19:38:37 +1000 Subject: [PATCH 388/402] Handbook: Restore function deprecation notices. Merges https://meta.trac.wordpress.org/changeset/11906 --- source/wp-content/plugins/handbook/inc/callout-boxes.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/wp-content/plugins/handbook/inc/callout-boxes.php b/source/wp-content/plugins/handbook/inc/callout-boxes.php index 60d37cf24..ac0528c91 100644 --- a/source/wp-content/plugins/handbook/inc/callout-boxes.php +++ b/source/wp-content/plugins/handbook/inc/callout-boxes.php @@ -23,6 +23,10 @@ class WPorg_Handbook_Callout_Boxes { */ public function __construct() { add_action( 'init', array( $this, 'register_shortcodes' ) ); + + if ( did_action( 'init' ) ) { + $this->register_shortcodes(); + } } /** From e9db0bdbfbfb9c96939b3ac00d3053ad37dfed63 Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Wed, 8 Jun 2022 10:53:51 -0400 Subject: [PATCH 389/402] UI: Style select dropdowns manually for more design control (#91) --- .../themes/wporg-developer/scss/main.scss | 19 ++++++++++++++++++- .../wporg-developer/stylesheets/main.css | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index 8b1ed80c9..f1e28024b 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -256,6 +256,19 @@ width: 98%; } + select { + appearance: none; + background-color: $color-white; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='24' height='24' aria-hidden='true'%3E%3Cpath d='M17.5 11.6 12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z'/%3E%3C/svg%3E%0A"); + background-position: right center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2em; + color: get-color(gray-70); + border: 1px solid get-color(gray-70); + border-radius: 3px; + } + /* Text meant only for screen readers */ .screen-reader-text { clip: rect(1px, 1px, 1px, 1px); @@ -784,11 +797,15 @@ select, input[type="submit"] { - margin-left: 0.5em; + margin: 0 0 0 0.5em; padding: 0.333em 1em; font-size: inherit; line-height: inherit; } + + select { + padding-right: 2em; + } } .searchform { diff --git a/source/wp-content/themes/wporg-developer/stylesheets/main.css b/source/wp-content/themes/wporg-developer/stylesheets/main.css index 3c60a29c8..60a129fea 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/main.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/main.css @@ -597,6 +597,19 @@ img { width: 98%; } +.devhub-wrap select { + appearance: none; + background-color: #fff; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='24' height='24' aria-hidden='true'%3E%3Cpath d='M17.5 11.6 12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z'/%3E%3C/svg%3E%0A"); + background-position: right center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2em; + color: #3c434a; + border: 1px solid #3c434a; + border-radius: 3px; +} + .devhub-wrap .screen-reader-text { clip: rect(1px, 1px, 1px, 1px); position: absolute !important; @@ -1091,12 +1104,16 @@ img { .devhub-wrap .archive-filter-form select, .devhub-wrap .archive-filter-form input[type="submit"] { - margin-left: 0.5em; + margin: 0 0 0 0.5em; padding: 0.333em 1em; font-size: inherit; line-height: inherit; } +.devhub-wrap .archive-filter-form select { + padding-right: 2em; +} + .devhub-wrap .searchform { overflow: hidden; height: auto; From f936a9cc4d589c26afbf1a74ccdb9a5bf5204568 Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Wed, 8 Jun 2022 11:10:07 -0400 Subject: [PATCH 390/402] Skip Link: Remove custom skip link in favor of mu-plugin (#92) --- .../themes/wporg-developer/functions.php | 1 - .../themes/wporg-developer/header.php | 4 +- .../wporg-developer/js/skip-link-focus-fix.js | 19 -------- .../themes/wporg-developer/scss/main.scss | 33 +++----------- .../wporg-developer/stylesheets/main.css | 45 +++++++------------ 5 files changed, 25 insertions(+), 77 deletions(-) delete mode 100644 source/wp-content/themes/wporg-developer/js/skip-link-focus-fix.js diff --git a/source/wp-content/themes/wporg-developer/functions.php b/source/wp-content/themes/wporg-developer/functions.php index f0c952b01..f704d7fc9 100644 --- a/source/wp-content/themes/wporg-developer/functions.php +++ b/source/wp-content/themes/wporg-developer/functions.php @@ -378,7 +378,6 @@ function theme_scripts_styles() { filemtime( __DIR__ . '/stylesheets/main.css' ) ); wp_enqueue_script( 'wporg-developer-navigation', get_stylesheet_directory_uri() . '/js/navigation.js', array(), filemtime( __DIR__ . '/js/navigation.js' ), true ); - wp_enqueue_script( 'wporg-developer-skip-link-focus-fix', get_stylesheet_directory_uri() . '/js/skip-link-focus-fix.js', array(), filemtime( __DIR__ . '/js/skip-link-focus-fix.js' ), true ); wp_enqueue_script( 'wporg-developer-search', get_stylesheet_directory_uri() . '/js/search.js', array(), filemtime( __DIR__ . '/js/search.js' ), true ); wp_enqueue_script( 'wporg-developer-chapters', get_stylesheet_directory_uri() . '/js/chapters.js', array( 'jquery' ), filemtime( __DIR__ . '/js/chapters.js' ) ); wp_enqueue_script( 'wporg-developer-menu', get_stylesheet_directory_uri() . '/js/menu.js', array( 'jquery' ), filemtime( __DIR__ . '/js/menu.js' ), true ); diff --git a/source/wp-content/themes/wporg-developer/header.php b/source/wp-content/themes/wporg-developer/header.php index 2dfec1192..3788671c7 100644 --- a/source/wp-content/themes/wporg-developer/header.php +++ b/source/wp-content/themes/wporg-developer/header.php @@ -7,6 +7,8 @@ * @package wporg-developer */ +\WordPressdotorg\skip_to( '#content' ); + echo do_blocks( '<!-- wp:wporg/global-header /-->' ); ?> @@ -38,8 +40,6 @@ </header><!-- #masthead --> <div id="page" class="hfeed site devhub-wrap"> - <a href="#main" class="screen-reader-text"><?php _e( 'Skip to content', 'wporg' ); ?></a> - <?php do_action( 'before' ); ?> <?php if ( DevHub\should_show_search_bar() ) : ?> diff --git a/source/wp-content/themes/wporg-developer/js/skip-link-focus-fix.js b/source/wp-content/themes/wporg-developer/js/skip-link-focus-fix.js deleted file mode 100644 index e067cd512..000000000 --- a/source/wp-content/themes/wporg-developer/js/skip-link-focus-fix.js +++ /dev/null @@ -1,19 +0,0 @@ -( function() { - var is_webkit = navigator.userAgent.toLowerCase().indexOf( 'webkit' ) > -1, - is_opera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1, - is_ie = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1; - - if ( ( is_webkit || is_opera || is_ie ) && 'undefined' !== typeof( document.getElementById ) ) { - var eventMethod = ( window.addEventListener ) ? 'addEventListener' : 'attachEvent'; - window[ eventMethod ]( 'hashchange', function() { - var element = document.getElementById( location.hash.substring( 1 ) ); - - if ( element ) { - if ( ! /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) - element.tabIndex = -1; - - element.focus(); - } - }, false ); - } -})(); diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index f1e28024b..8d2d4875a 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -269,33 +269,6 @@ border-radius: 3px; } - /* Text meant only for screen readers */ - .screen-reader-text { - clip: rect(1px, 1px, 1px, 1px); - position: absolute !important; - } - - .screen-reader-text:hover, - .screen-reader-text:active, - .screen-reader-text:focus { - background-color: #f1f1f1; - border-radius: 3px; - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); - clip: auto !important; - color: #21759b; - display: block; - font-size: 14px; - font-weight: 700; - height: auto; - left: 5px; - line-height: normal; - padding: 15px 23px 14px; - text-decoration: none; - top: 5px; - width: auto; - z-index: 100000; /* Above WP toolbar */ - } - /* Clearing */ .clear::before, .clear::after, @@ -1813,6 +1786,12 @@ } } +/** Fix screen-reader-text font size. **/ +a.screen-reader-text:focus, +.screen-reader-text:focus { + font-size: 1.4rem; +} + /** Site Header **/ .site-header { background: #0073aa; diff --git a/source/wp-content/themes/wporg-developer/stylesheets/main.css b/source/wp-content/themes/wporg-developer/stylesheets/main.css index 60a129fea..208e4cc91 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/main.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/main.css @@ -282,7 +282,6 @@ img { .devhub-wrap { padding-bottom: 1.5em; /* Override inline style from wporg-markdown plugin. */ - /* Text meant only for screen readers */ /* Clearing */ /* =Content ----------------------------------------------- */ @@ -610,33 +609,6 @@ img { border-radius: 3px; } -.devhub-wrap .screen-reader-text { - clip: rect(1px, 1px, 1px, 1px); - position: absolute !important; -} - -.devhub-wrap .screen-reader-text:hover, -.devhub-wrap .screen-reader-text:active, -.devhub-wrap .screen-reader-text:focus { - background-color: #f1f1f1; - border-radius: 3px; - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); - clip: auto !important; - color: #21759b; - display: block; - font-size: 14px; - font-weight: 700; - height: auto; - left: 5px; - line-height: normal; - padding: 15px 23px 14px; - text-decoration: none; - top: 5px; - width: auto; - z-index: 100000; - /* Above WP toolbar */ -} - .devhub-wrap .clear::before, .devhub-wrap .clear::after, .devhub-wrap .entry-content::before, @@ -1589,6 +1561,17 @@ img { margin-left: 2.5rem; } +.devhub-wrap .wp-parser-class .parameters dd ul ul, +.devhub-wrap .wp-parser-class .return dd ul ul, +.devhub-wrap .wp-parser-function .parameters dd ul ul, +.devhub-wrap .wp-parser-function .return dd ul ul, +.devhub-wrap .wp-parser-hook .parameters dd ul ul, +.devhub-wrap .wp-parser-hook .return dd ul ul, +.devhub-wrap .wp-parser-method .parameters dd ul ul, +.devhub-wrap .wp-parser-method .return dd ul ul { + margin-bottom: 0.5em; +} + .devhub-wrap .wp-parser-class .parameters dd code, .devhub-wrap .wp-parser-class .return dd code, .devhub-wrap .wp-parser-function .parameters dd code, @@ -2474,6 +2457,12 @@ img { border-bottom: 1px solid #ddd; } +/** Fix screen-reader-text font size. **/ +a.screen-reader-text:focus, +.screen-reader-text:focus { + font-size: 1.4rem; +} + /** Site Header **/ .site-header { background: #0073aa; From c39597fe3af1b6437841d3bbdabf487b411f3e38 Mon Sep 17 00:00:00 2001 From: Steven Dufresne <steve.dufresne@automattic.com> Date: Thu, 9 Jun 2022 07:35:50 +0900 Subject: [PATCH 391/402] Check if source is empty before printing block. (#60) --- .../themes/wporg-developer/reference/template-source.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/reference/template-source.php b/source/wp-content/themes/wporg-developer/reference/template-source.php index 9242effcc..9c6ba8c5b 100644 --- a/source/wp-content/themes/wporg-developer/reference/template-source.php +++ b/source/wp-content/themes/wporg-developer/reference/template-source.php @@ -10,6 +10,7 @@ $source_file = get_source_file(); if ( ! empty( $source_file ) ) : + $source_code = post_type_has_source_code() ? get_source_code() : ''; ?> <hr /> <section class="source-content"> @@ -31,14 +32,14 @@ ?> </p> - <?php if ( post_type_has_source_code() ) : ?> + <?php if ( ! empty( $source_code ) ) : ?> <?php echo do_blocks( sprintf( '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code" data-start="%1$s" aria-label="%2$s"><code lang="php" class="language-php line-numbers">%3$s</code></pre><!-- /wp:code -->', esc_attr( get_post_meta( get_the_ID(), '_wp-parser_line_num', true ) ), __( 'Function source code', 'wporg' ), - htmlentities( get_source_code() ) + htmlentities( $source_code ) ) ); ?> From 76d0c8b1cd47461e688f11ab897c814cc6327722 Mon Sep 17 00:00:00 2001 From: ren <18050944+renintw@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:30:40 +0800 Subject: [PATCH 392/402] Reverse the search icon --- source/wp-content/themes/wporg-developer/scss/main.scss | 2 ++ source/wp-content/themes/wporg-developer/stylesheets/main.css | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index 8d2d4875a..c98b566f0 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -198,6 +198,7 @@ } .dashicons { + transform: scale(-1, 1); vertical-align: text-bottom; } } @@ -753,6 +754,7 @@ .dashicons-search { height: auto; width: auto; + transform: scale(-1, 1); &::before { font-size: 36px; diff --git a/source/wp-content/themes/wporg-developer/stylesheets/main.css b/source/wp-content/themes/wporg-developer/stylesheets/main.css index 208e4cc91..bd6a70137 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/main.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/main.css @@ -529,6 +529,7 @@ img { .devhub-wrap input[type="button"] .dashicons, .devhub-wrap input[type="reset"] .dashicons, .devhub-wrap input[type="submit"] .dashicons { + transform: scale(-1, 1); vertical-align: text-bottom; } @@ -1061,6 +1062,7 @@ img { .devhub-wrap div#inner-search div#inner-search-icon-container div#inner-search-icon .dashicons-search { height: auto; width: auto; + transform: scale(-1, 1); } .devhub-wrap div#inner-search div#inner-search-icon-container div#inner-search-icon .dashicons-search::before { From 6e40b5af6b4dbec85c63981126d075287e63b683 Mon Sep 17 00:00:00 2001 From: ren <18050944+renintw@users.noreply.github.com> Date: Mon, 6 Jun 2022 12:30:08 +0800 Subject: [PATCH 393/402] Make focus state clear - input ends before icon. --- .../themes/wporg-developer/scss/main.scss | 25 ++++++++++++++----- .../themes/wporg-developer/searchform.php | 8 +++--- .../stylesheets/autocomplete.css | 4 +++ .../wporg-developer/stylesheets/main.css | 25 ++++++++++++++----- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index c98b566f0..cff462203 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -788,6 +788,10 @@ height: auto; position: relative; + .search-bar { + display: flex; + } + input[type="text"] { border-radius: 0; margin: 0 auto; @@ -796,18 +800,27 @@ } .button-search { - background: transparent; - border: none; + background: #fff; border-radius: 0; box-shadow: none; color: #32373c; display: block; - height: 40px; padding: 0.5rem 1rem; - position: absolute; - right: 0; - top: 0; text-shadow: none; + border: 1px solid #ccc; + border-left: unset; + margin: 0; + + &:focus { + outline-style: auto; + outline-color: get-color(blue-50); + z-index: 1; + } + + &:active { + background: get-color(gray-5); + transform: translateY(0); + } } label { diff --git a/source/wp-content/themes/wporg-developer/searchform.php b/source/wp-content/themes/wporg-developer/searchform.php index 5bd595eb2..2cf7893a6 100644 --- a/source/wp-content/themes/wporg-developer/searchform.php +++ b/source/wp-content/themes/wporg-developer/searchform.php @@ -19,9 +19,11 @@ ?> <form role="search" method="get" class="searchform<?php echo esc_attr( $form_class ); ?>" action="<?php echo esc_url( $search_url ); ?>"> - <label for="search-field" class="screen-reader-text"><?php _ex( 'Search for:', 'label', 'wporg' ); ?></label> - <input type="text" id="search-field" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder', 'wporg' ); ?>" value="<?php echo esc_attr( get_search_query() ); ?>" name="s"> - <button class="button button-primary button-search"><i class="dashicons dashicons-search"></i><span class="screen-reader-text"><?php _e( 'Search plugins', 'wporg' ); ?></span></button> + <div class="search-bar"> + <label for="search-field" class="screen-reader-text"><?php _ex( 'Search for:', 'label', 'wporg' ); ?></label> + <input type="text" id="search-field" class="search-field" placeholder="<?php echo esc_attr_x( 'Search in Code Reference …', 'placeholder', 'wporg' ); ?>" value="<?php echo esc_attr( get_search_query() ); ?>" name="s"> + <button class="button button-primary button-search"><i class="dashicons dashicons-search"></i><span class="screen-reader-text"><?php _e( 'Search plugins', 'wporg' ); ?></span></button> + </div> <?php if ( $filters ) : ?> <div class="search-post-type"> diff --git a/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css b/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css index a2e38a02c..99d067063 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css @@ -32,6 +32,10 @@ div.awesomplete li:hover mark, div.awesomplete li[aria-selected="true"] mark { width: 100%; } +.devhub-wrap div.awesomplete > input { + border-right: unset; +} + .devhub-wrap .searchform div.search-post-type { clear: both; } diff --git a/source/wp-content/themes/wporg-developer/stylesheets/main.css b/source/wp-content/themes/wporg-developer/stylesheets/main.css index bd6a70137..f9d04ba6e 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/main.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/main.css @@ -1094,6 +1094,10 @@ img { position: relative; } +.devhub-wrap .searchform .search-bar { + display: flex; +} + .devhub-wrap .searchform input[type="text"] { border-radius: 0; margin: 0 auto; @@ -1102,18 +1106,27 @@ img { } .devhub-wrap .searchform .button-search { - background: transparent; - border: none; + background: #fff; border-radius: 0; box-shadow: none; color: #32373c; display: block; - height: 40px; padding: 0.5rem 1rem; - position: absolute; - right: 0; - top: 0; text-shadow: none; + border: 1px solid #ccc; + border-left: unset; + margin: 0; +} + +.devhub-wrap .searchform .button-search:focus { + outline-style: auto; + outline-color: #2271b1; + z-index: 1; +} + +.devhub-wrap .searchform .button-search:active { + background: #dcdcde; + transform: translateY(0); } .devhub-wrap .searchform label { From 863f11fe40ca2f569fb963f966771a33920c2ebc Mon Sep 17 00:00:00 2001 From: ren <18050944+renintw@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:53:10 +0800 Subject: [PATCH 394/402] Lint CSS --- .../wporg-developer/stylesheets/autocomplete.css | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css b/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css index 99d067063..142470b96 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/autocomplete.css @@ -3,8 +3,10 @@ * * Mainly overrides for awesomplete.css */ + div.awesomplete > ul > li:hover { background: hsl(200, 40%, 90%); + color: #000; } div.awesomplete > ul > li[aria-selected="true"] { @@ -16,7 +18,8 @@ div.awesomplete mark { color: #404040; } -div.awesomplete li:hover mark, div.awesomplete li[aria-selected="true"] mark { +div.awesomplete li:hover mark, +div.awesomplete li[aria-selected="true"] mark { background: hsl(65, 100%, 49%); } @@ -24,11 +27,11 @@ div.awesomplete li:hover mark, div.awesomplete li[aria-selected="true"] mark { max-height: 13.5em; color: #404040; overflow: auto; - background: linear-gradient(to bottom right, white, hsla(0,0%,100%,.9)); + background: linear-gradient(to bottom right, #fff, hsla(0, 0%, 100%, 0.9)); } .devhub-wrap .searchform label div.awesomplete > input, -.devhub-wrap div.awesomplete { +.devhub-wrap div.awesomplete { width: 100%; } @@ -43,14 +46,11 @@ div.awesomplete li:hover mark, div.awesomplete li[aria-selected="true"] mark { .devhub-wrap .searchform, .devhub-wrap .searchform div:first-child, .devhub-wrap div.awesomplete { + /* Needs to be visible for the awesomplete popup */ overflow: visible; } -div.awesomplete > ul > li:hover { - color: black; -} - -div.awesomplete > ul:before { +div.awesomplete > ul::before { content: none; } From 6ec8a0fa9df505583db42ce0de2a6866f537aaba Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Thu, 9 Jun 2022 14:52:45 +1000 Subject: [PATCH 395/402] Mark some code-like items as code. (#97) * Mark some code-like items as code. * Support longer single-quoted strings, as long as it doesn't contain a space. * Parse non-hash descriptions, but also don't re-parse hash descriptions. * Don't parse code within code blocks. --- .../themes/wporg-developer/inc/formatting.php | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/source/wp-content/themes/wporg-developer/inc/formatting.php b/source/wp-content/themes/wporg-developer/inc/formatting.php index 4fc73665b..81ec05847 100644 --- a/source/wp-content/themes/wporg-developer/inc/formatting.php +++ b/source/wp-content/themes/wporg-developer/inc/formatting.php @@ -39,10 +39,12 @@ public static function do_init() { add_filter( 'devhub-format-description', array( __CLASS__, 'autolink_references' ) ); add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_hash_formatting' ), 9 ); add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_description_html_as_code' ) ); + add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_description_quotes_to_code' ) ); add_filter( 'devhub-format-description', array( __CLASS__, 'convert_lists_to_markup' ) ); add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'autolink_references' ) ); add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'fix_param_description_parsedown_bug' ) ); + add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'fix_param_description_quotes_to_code' ) ); add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'convert_lists_to_markup' ) ); add_filter( 'devhub-function-return-type', array( __CLASS__, 'autolink_references' ) ); @@ -668,6 +670,53 @@ public static function fix_param_description_html_as_code( $text ) { return $text; } + /** + * Wraps code-like references within 'code' tags. + * + * Example: https://developer.wordpress.org/reference/classes/wp_term_query/__construct/ + * + * @param string $text Text. + * @return string + */ + public static function fix_param_description_quotes_to_code( $text ) { + // Don't do anything if this is a hash notation string. + if ( ! $text || str_starts_with( $text, '{' ) || str_contains( $text, '<ul class="param-hash">' ) ) { + return $text; + } + + $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags + $text = ''; + $within_code = false; + foreach ( $textarr as $piece ) { + // HTML tags are untouched. + if ( str_starts_with( $piece, '<' ) || $within_code ) { + $text .= $piece; + + if ( str_starts_with( $piece, '</code' ) ) { + $within_code = false; + } elseif ( ! $within_code ) { + $within_code = str_starts_with( $piece, '<code' ); + } + + continue; + } + + // Pipe delimited types inline. + $piece = preg_replace( "/(([\w'\[\]]+\|)+[\w'\[\]]+)/", '<code>$1</code>', $piece, -1 ); + + // Quoted strings. + $piece = preg_replace( "/('[^' ]*')/", '<code>$1</code>', $piece, -1 ); + + // Replace ###PARAM### too. + // Example: http://localhost:8888/reference/hooks/password_change_email/ + $piece = preg_replace( "/((#{2,})\w+\\2)/", '<code>$1</code>', $piece ); + + $text .= $piece; + } + + return $text; + } + /** * Render the php shortcode using the Code Syntax Block syntax. * From a806b8ed7848d96b7966b632a7b48bcaabfa1c57 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Thu, 9 Jun 2022 16:20:59 +1000 Subject: [PATCH 396/402] Automatically hide commonly-used functions from the uses section. (#37) * Hide commonly-used functions from the uses section, by placing them at the bottom of the list, and limits the display count to only include uncommon functions. Co-authored-by: tellyworth <alex@automattic.com> --- .../wporg-developer/inc/template-tags.php | 54 ++++++++++++++++++- .../wporg-developer/js/function-reference.js | 11 ++-- .../reference/template-related.php | 8 ++- 3 files changed, 65 insertions(+), 8 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/template-tags.php b/source/wp-content/themes/wporg-developer/inc/template-tags.php index cce53cbf6..582d2b011 100644 --- a/source/wp-content/themes/wporg-developer/inc/template-tags.php +++ b/source/wp-content/themes/wporg-developer/inc/template-tags.php @@ -113,7 +113,7 @@ function wporg_developer_get_ordered_notes( $post_id = 0, $args = array() ) { // Check if the current page is a reply to a note. $reply_id = 0; - if ( isset( $_GET['replytocom'] ) && $_GET['replytocom'] ) { + if ( isset( $_GET['replytocom'] ) && $_GET['replytocom'] ) { /* Javascript uses preventDefault() when clicking links with '?replytocom={comment_ID}' * We assume Javascript is disabled when visiting a page with this query var. * There are no consequences if Javascript is enabled. @@ -175,7 +175,7 @@ function wporg_developer_list_notes( $comments, $args ) { $is_user_logged_in = is_user_logged_in(); $can_user_post_note = DevHub\can_user_post_note( true, get_the_ID() ); $is_user_verified = $is_user_logged_in && $can_user_post_note; - + $args['updated_note'] = 0; if ( isset( $_GET['updated-note'] ) && $_GET['updated-note'] ) { $args['updated_note'] = absint( $_GET['updated-note'] ); @@ -1398,6 +1398,56 @@ function get_used_by( $post = null ) { return $connected; } + /** + * Find functions & methods that are often used by other functions and methods. + */ + function _get_functions_to_exclude_from_uses() { + global $wpdb; + + $ids = get_transient( __METHOD__ ); + if ( $ids ) { + return $ids; + } + + $ids = $wpdb->get_col( + "SELECT p2p_to + FROM {$wpdb->p2p} p2p + WHERE p2p_type IN ( 'methods_to_functions', 'functions_to_functions', 'methods_to_methods', 'functions_to_methods' ) + GROUP BY p2p_to + HAVING COUNT(*) > 50" + ); + + set_transient( __METHOD__, $ids, DAY_IN_SECONDS ); + + return $ids; + } + + /** + * Rearrange the results of get_uses() so that frequent functions are pushed to the bottom. + * Sorts the array in-place. + * + * @return int The number of infrequent items in the list (ie the cutoff point for show/hide). + */ + function split_uses_by_frequent_funcs( &$posts ) { + + $frequent_funcs = _get_functions_to_exclude_from_uses(); + + // Sort the posts array so frequently used functions are at the end + usort( $posts, function( $a, $b ) use ( $frequent_funcs ) { + return (int) in_array( $a->ID, $frequent_funcs ) - (int) in_array( $b->ID, $frequent_funcs ); + } ); + + $infrequent_count = 0; + foreach ( $posts as $i => $post ) { + if ( in_array( $post->ID, $frequent_funcs ) ) { + break; + } + $infrequent_count = $i + 1; + } + + return $infrequent_count; + } + /** * Returns the array of post types that have source code. * diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index 73b25fed2..044032cf1 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -84,19 +84,22 @@ jQuery( function ( $ ) { } function toggleUsageListInit() { + var usesToShow = $( '#uses-table' ).data( 'show' ), + usedByToShow = $( '#used-by-table' ).data( 'show' ); + // We only expect one used_by and uses per document $usedByList = $( 'tbody tr', '#used-by-table' ); $usesList = $( 'tbody tr', '#uses-table' ); - if ( $usedByList.length > 5 ) { - $usedByList = $usedByList.slice( 5 ).hide(); + if ( $usedByList.length > usedByToShow ) { + $usedByList = $usedByList.slice( usedByToShow ).hide(); $showMoreUsedBy = $( '.used-by .show-more' ).show().on( 'click', toggleMoreUsedBy ); $hideMoreUsedBy = $( '.used-by .hide-more' ).on( 'click', toggleMoreUsedBy ); } - if ( $usesList.length > 5 ) { - $usesList = $usesList.slice( 5 ).hide(); + if ( $usesList.length > usesToShow ) { + $usesList = $usesList.slice( usesToShow ).hide(); $showMoreUses = $( '.uses .show-more' ).show().on( 'click', toggleMoreUses ); $hideMoreUses = $( '.uses .hide-more' ).on( 'click', toggleMoreUses ); diff --git a/source/wp-content/themes/wporg-developer/reference/template-related.php b/source/wp-content/themes/wporg-developer/reference/template-related.php index 7d55cdb6d..08dcc834d 100644 --- a/source/wp-content/themes/wporg-developer/reference/template-related.php +++ b/source/wp-content/themes/wporg-developer/reference/template-related.php @@ -16,6 +16,10 @@ $uses_to_show = 5; $used_by_to_show = 5; + if ( $has_uses ) { + $uses_to_show = min( $uses_to_show, split_uses_by_frequent_funcs( $uses->posts ) ); + } + if ( $has_uses || $has_used_by ) : ?> <hr /> @@ -25,7 +29,7 @@ <?php if ( $has_uses ) : ?> <article class="uses"> <h3><?php _e( 'Uses', 'wporg' ); ?></h3> - <table id="uses-table"> + <table id="uses-table" data-show="<?php echo esc_attr( $uses_to_show ) ?>"> <caption class="screen-reader-text"><?php esc_html_e( 'Uses', 'wporg' ); ?></caption> <thead> <tr> @@ -65,7 +69,7 @@ <article class="used-by"> <h3><?php esc_html_e( 'Used By', 'wporg' ); ?></h3> - <table id="used-by-table"> + <table id="used-by-table" data-show="<?php echo esc_attr( $used_by_to_show ) ?>"> <caption class="screen-reader-text"><?php esc_html_e( 'Used By', 'wporg' ); ?></caption> <thead> <tr> From 4fed039f61bf696c45e94692c923bb287ca9f3d8 Mon Sep 17 00:00:00 2001 From: Kelly Dwan <ryelle@users.noreply.github.com> Date: Thu, 9 Jun 2022 15:10:28 -0400 Subject: [PATCH 397/402] Code Syntax Block: Iterate on expand/collapse button (#100) * Code Syntax Block: Iterate on expand/collapse button * Add aria indicator to the expand/collapse button * Fix height and document `css` usage * Shorten button label --- .../wporg-developer/inc/user-content.php | 2 + .../wporg-developer/js/function-reference.js | 168 +++++++----------- .../reference/template-source.php | 4 - .../themes/wporg-developer/scss/main.scss | 7 - .../themes/wporg-developer/scss/prism.scss | 17 +- .../wporg-developer/stylesheets/main.css | 7 - .../wporg-developer/stylesheets/prism.css | 16 +- 7 files changed, 92 insertions(+), 129 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/user-content.php b/source/wp-content/themes/wporg-developer/inc/user-content.php index 823e3981d..6cecd3d46 100644 --- a/source/wp-content/themes/wporg-developer/inc/user-content.php +++ b/source/wp-content/themes/wporg-developer/inc/user-content.php @@ -176,6 +176,8 @@ public static function scripts_and_styles() { array( 'copy' => __( 'Copy', 'wporg' ), 'copied' => __( 'Code copied', 'wporg' ), + 'expand' => __( 'Expand code', 'wporg' ), + 'collapse' => __( 'Collapse code', 'wporg' ), ) ); diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index 044032cf1..c5aa5df41 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -5,83 +5,84 @@ * Handles all interactivity on the single function page */ +// eslint-disable-next-line id-length -- $ OK. jQuery( function ( $ ) { - let $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy; - let $sourceCollapsedHeight; - - function onLoad() { - sourceCodeHighlightInit(); - - toggleUsageListInit(); + // 22.5px (line height) * 10 for 10 lines + 15px top padding + 10px extra. + // The extra 10px added to partially show next line so it's clear there is more. + const MIN_HEIGHT = 22.5 * 10 + 15 + 10; + + function collapseCodeBlock( $element, $button ) { + $button.text( wporgFunctionReferenceI18n.expand ); + $button.attr( 'aria-expanded', 'false' ); + // This uses `css()` instead of `height()` to prevent jQuery from adding + // in the padding. We want to add in just the top padding, since the + // bottom is intentionally cut off. + $element.css( { height: MIN_HEIGHT + 'px' } ); } - function sourceCodeHighlightInit() { - // We require the Prism javascript library - if ( undefined === window.Prism ) { - return; - } - - // 1em (margin) + 10 * 17px + 10. Lines are 1.1em which rounds to 17px: calc( 1em + 17px * 10 + 10 ). - // Extra 10px added to partially show next line so it's clear there is more. - $sourceCollapsedHeight = 196; - sourceCodeDisplay(); + function expandCodeBlock( $element, $button ) { + $button.text( wporgFunctionReferenceI18n.collapse ); + $button.attr( 'aria-expanded', 'true' ); + $element.height( $element.data( 'height' ) ); } - function sourceCodeDisplay( element ) { - let sourceCode = []; - if ( element !== undefined ) { - // Find table inside a specific source code element if passed. - sourceCode = $( '.source-content', element ).find( 'pre' ); - } else { - // Find table inside all source code elements. - sourceCode = $( '.source-content' ).find( 'pre' ); - } - - if ( ! sourceCode.length ) { - return; - } + // For each code block, add the copy button & expanding functionality. + $( '.wp-block-code' ).each( function ( i, element ) { + const $element = $( element ); + let timeoutId; - sourceCode.each( function () { - if ( $sourceCollapsedHeight - 12 < $( this ).height() ) { - const sourceContent = $( this ); //.closest( '.wp-block-code' ); - - // Do this with javascript so javascript-less can enjoy the total sourcecode - sourceContent.css( { - height: $sourceCollapsedHeight + 'px', - } ); - - sourceContent.next( '.source-code-links' ).find( 'span:first' ).show(); - sourceContent.parent().find( '.show-complete-source' ).show(); - sourceContent - .parent() - .find( '.show-complete-source' ) - .off( 'click.togglesource' ) - .on( 'click.togglesource', toggleCompleteSource ); - sourceContent - .parent() - .find( '.less-complete-source' ) - .off( 'click.togglesource' ) - .on( 'click.togglesource', toggleCompleteSource ); + const $copyButton = $( document.createElement( 'button' ) ); + $copyButton.text( wporgFunctionReferenceI18n.copy ); + $copyButton.on( 'click', function () { + clearTimeout( timeoutId ); + const code = $element.find( 'code' ).text(); + if ( ! code ) { + return; } - } ); - } - function toggleCompleteSource( event ) { - event.preventDefault(); + // This returns a promise which will resolve if the copy suceeded, + // and we can set the button text to tell the user it worked. + // We don't do anything if it fails. + window.navigator.clipboard.writeText( code ).then( function () { + $copyButton.text( wporgFunctionReferenceI18n.copied ); + wp.a11y.speak( wporgFunctionReferenceI18n.copied ); - const sourceContent = $( this ).closest( '.source-content' ).find( 'pre' ); - let heightGoal = 0; + // After 5 seconds, reset the button text. + timeoutId = setTimeout( function () { + $copyButton.text( wporgFunctionReferenceI18n.copy ); + }, 5000 ); + } ); + } ); + + const $container = $( document.createElement( 'div' ) ); + $container.addClass( 'wp-code-block-button-container' ); + + $container.append( $copyButton ); + + // Check code block height, and if it's larger, add in the collapse + // button, and set it to be collapsed differently. + const originalHeight = $element.height(); + if ( originalHeight > MIN_HEIGHT ) { + $element.data( 'height', originalHeight ); + + const $expandButton = $( document.createElement( 'button' ) ); + $expandButton.addClass( 'button-link' ); + $expandButton.on( 'click', function () { + if ( 'true' === $expandButton.attr( 'aria-expanded' ) ) { + collapseCodeBlock( $element, $expandButton ); + } else { + expandCodeBlock( $element, $expandButton ); + } + } ); - if ( $( this ).parent().find( '.show-complete-source' ).is( ':visible' ) ) { - heightGoal = sourceContent.find( 'code' ).height() + 45; // takes into consideration potential x-scrollbar - } else { - heightGoal = $sourceCollapsedHeight; + collapseCodeBlock( $element, $expandButton ); + $container.append( $expandButton ); } - sourceContent.animate( { height: heightGoal + 'px' } ); + $element.prepend( $container ); + } ); - $( this ).parent().find( 'a' ).toggle(); - } + let $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy; function toggleUsageListInit() { var usesToShow = $( '#uses-table' ).data( 'show' ), @@ -125,43 +126,4 @@ jQuery( function ( $ ) { } toggleUsageListInit(); - - // Inject the "copy" button into every code block. - $( '.wp-block-code' ).each( function ( i, element ) { - const $element = $( element ); - let timeoutId; - - const $button = $( document.createElement( 'button' ) ); - $button.text( wporgFunctionReferenceI18n.copy ); - $button.on( 'click', function () { - clearTimeout( timeoutId ); - const $code = $element.find( 'code' ); - let code = $code.text(); - if ( ! code ) { - return; - } - - // For single-line shell scripts, trim off the initial `$ `, if exists. - if ( 'shell' === $code.attr( 'lang' ) && code.startsWith( '$ ' ) && ! code.includes( '\n' ) ) { - code = code.slice( 2 ); - } - - // This returns a promise which will resolve if the copy suceeded, - // and we can set the button text to tell the user it worked. - // We don't do anything if it fails. - window.navigator.clipboard.writeText( code ).then( function () { - $button.text( wporgFunctionReferenceI18n.copied ); - wp.a11y.speak( wporgFunctionReferenceI18n.copied ); - - // After 5 seconds, reset the button text. - timeoutId = setTimeout( function () { - $button.text( wporgFunctionReferenceI18n.copy ); - }, 5000 ); - } ); - } ); - - $element.prepend( $button ); - } ); - - $( onLoad ); } ); diff --git a/source/wp-content/themes/wporg-developer/reference/template-source.php b/source/wp-content/themes/wporg-developer/reference/template-source.php index 9c6ba8c5b..376caec1e 100644 --- a/source/wp-content/themes/wporg-developer/reference/template-source.php +++ b/source/wp-content/themes/wporg-developer/reference/template-source.php @@ -45,10 +45,6 @@ ?> <p class="source-code-links"> - <span> - <a href="#" class="show-complete-source"><?php _e( 'Expand full source code', 'wporg' ); ?></a> - <a href="#" class="less-complete-source"><?php _e( 'Collapse full source code', 'wporg' ); ?></a> - </span> <span><a href="<?php echo get_source_file_link(); ?>"><?php _e( 'View on Trac', 'wporg' ); ?></a></span> <span><a href="<?php echo get_github_source_file_link(); ?>"><?php _e( 'View on GitHub', 'wporg' ); ?></a></span> </p> diff --git a/source/wp-content/themes/wporg-developer/scss/main.scss b/source/wp-content/themes/wporg-developer/scss/main.scss index cff462203..cefdd5628 100644 --- a/source/wp-content/themes/wporg-developer/scss/main.scss +++ b/source/wp-content/themes/wporg-developer/scss/main.scss @@ -1358,13 +1358,6 @@ &:last-of-type { border-right: none; } - - &:first-child { - display: none; - border-left: 0; - margin-left: 1em; - padding-left: 0; - } } } diff --git a/source/wp-content/themes/wporg-developer/scss/prism.scss b/source/wp-content/themes/wporg-developer/scss/prism.scss index 0814aba74..489622c34 100644 --- a/source/wp-content/themes/wporg-developer/scss/prism.scss +++ b/source/wp-content/themes/wporg-developer/scss/prism.scss @@ -28,6 +28,8 @@ pre[class*="language-"] { -moz-hyphens: none; -ms-hyphens: none; hyphens: none; + + transition: height 500ms; } /* Code blocks */ @@ -210,17 +212,24 @@ pre.line-numbers > code { pre.wp-block-code { position: relative; - > button { + > .wp-code-block-button-container { display: none; position: absolute; top: 1rem; right: 1rem; - font-size: 1.4rem; z-index: 2; + + button { + font-size: 1.4rem; + } + + button + button { + margin-left: 0.5em; + } } - &:hover > button, - &:focus-within > button { + &:hover > .wp-code-block-button-container, + &:focus-within > .wp-code-block-button-container { display: revert; } } diff --git a/source/wp-content/themes/wporg-developer/stylesheets/main.css b/source/wp-content/themes/wporg-developer/stylesheets/main.css index f9d04ba6e..b95bd2990 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/main.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/main.css @@ -1907,13 +1907,6 @@ img { border-right: none; } -.devhub-wrap .source-code-links span:first-child { - display: none; - border-left: 0; - margin-left: 1em; - padding-left: 0; -} - .devhub-wrap .source-code-container { overflow-x: auto; overflow-y: hidden; diff --git a/source/wp-content/themes/wporg-developer/stylesheets/prism.css b/source/wp-content/themes/wporg-developer/stylesheets/prism.css index ace3f2c22..35ccf42ff 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/prism.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/prism.css @@ -23,6 +23,7 @@ pre[class*="language-"] { -moz-hyphens: none; -ms-hyphens: none; hyphens: none; + transition: height 500ms; } /* Code blocks */ @@ -200,16 +201,23 @@ pre.wp-block-code { position: relative; } -pre.wp-block-code > button { +pre.wp-block-code > .wp-code-block-button-container { display: none; position: absolute; top: 1rem; right: 1rem; - font-size: 1.4rem; z-index: 2; } -pre.wp-block-code:hover > button, -pre.wp-block-code:focus-within > button { +pre.wp-block-code > .wp-code-block-button-container button { + font-size: 1.4rem; +} + +pre.wp-block-code > .wp-code-block-button-container button + button { + margin-left: 0.5em; +} + +pre.wp-block-code:hover > .wp-code-block-button-container, +pre.wp-block-code:focus-within > .wp-code-block-button-container { display: revert; } From e0ccabd285623886e4e936b92a8b766b7d2b6bfa Mon Sep 17 00:00:00 2001 From: Steven Dufresne <steve.dufresne@automattic.com> Date: Fri, 10 Jun 2022 11:23:29 +0900 Subject: [PATCH 398/402] Experiment: Change site-title to "Developer Resources". (#110) --- .../wporg-developer/inc/template-tags.php | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/template-tags.php b/source/wp-content/themes/wporg-developer/inc/template-tags.php index 582d2b011..72bd88a83 100644 --- a/source/wp-content/themes/wporg-developer/inc/template-tags.php +++ b/source/wp-content/themes/wporg-developer/inc/template-tags.php @@ -620,17 +620,7 @@ function get_hook_type( $post = null ) { * @return string */ function get_site_section_url() { - $parts = explode( '/', $GLOBALS['wp']->request ); - switch ( $parts[0] ) { - case 'reference': - case 'plugins': - case 'themes': - return home_url( '/' . $parts[0] . '/' ); - case 'cli': - return home_url( '/cli/commands/' ); - default: - return home_url( '/' ); - } + return home_url( '/' ); } /** @@ -644,22 +634,6 @@ function get_site_section_title() { case 'resources': case 'resource': return sprintf( __( 'Developer Resources: %s', 'wporg' ), get_the_title() ); - case 'reference': - return __( 'Code Reference', 'wporg' ); - case 'plugins': - return __( 'Plugin Handbook', 'wporg' ); - case 'themes': - return __( 'Theme Handbook', 'wporg' ); - case 'apis': - return __( 'Common APIs Handbook', 'wporg' ); - case 'block-editor': - return __( 'Block Editor Handbook', 'wporg' ); - case 'cli': - return __( 'WP-CLI Commands', 'wporg' ); - case 'coding-standards': - return __( 'Coding Standards Handbook', 'wporg' ); - case 'rest-api': - return __( 'REST API Handbook', 'wporg' ); default: return __( 'Developer Resources', 'wporg' ); } From 3c9d9d12a3c5539d7728d648c3fbaa934535a380 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Fri, 10 Jun 2022 12:57:53 +1000 Subject: [PATCH 399/402] Differentiate Functions+Methods, Hooks, and Classes in Autocomplete search results (#109) * Differentiate functions/methods from hooks in search autocomplete lists. * Apply the Search tweaks to autocomplete search too. * Specify a function/method search when a partial bracket is added, ie. 'wp_authenticate(' * Include extra context for ClassName matches Fixes #108 Co-authored-by: Steven Dufresne <steve.dufresne@automattic.com> --- .../wporg-developer/inc/autocomplete.php | 20 ++++++++++++++----- .../themes/wporg-developer/inc/search.php | 15 +++++++++++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/inc/autocomplete.php b/source/wp-content/themes/wporg-developer/inc/autocomplete.php index 760d75966..b8e6e1dce 100644 --- a/source/wp-content/themes/wporg-developer/inc/autocomplete.php +++ b/source/wp-content/themes/wporg-developer/inc/autocomplete.php @@ -99,16 +99,26 @@ public function autocomplete_data_update() { 'orderby' => '', 'search_orderby_title' => 1, 'order' => 'ASC', + '_autocomplete_search' => true, ); $search = get_posts( $args ); if ( ! empty( $search ) ) { - $titles = wp_list_pluck( $search, 'post_title', 'ID' ); - $titles = array_unique( $titles ); - $titles = array_flip( $titles ); - $titles = array_map( 'get_permalink', $titles ); - $form_data['posts'] = $titles; + $post_types_function_like = array( 'wp-parser-function', 'wp-parser-method' ); + + foreach ( $search as $post ) { + $permalink = get_permalink( $post->ID ); + $title = $post->post_title; + + if ( in_array( $post->post_type, $post_types_function_like ) ) { + $title .= '()'; + } + if ( $post->post_type == 'wp-parser-class' ) { + $title = 'class ' . $title . ' {}'; + } + $form_data['posts'][ $title ] = $permalink; + } } wp_send_json_success ( $form_data ); diff --git a/source/wp-content/themes/wporg-developer/inc/search.php b/source/wp-content/themes/wporg-developer/inc/search.php index 98000dcc3..446e862ae 100644 --- a/source/wp-content/themes/wporg-developer/inc/search.php +++ b/source/wp-content/themes/wporg-developer/inc/search.php @@ -68,7 +68,16 @@ public static function invalid_post_type_filter_404( $query ) { */ public static function pre_get_posts( $query ) { // Don't modify anything if not a non-admin main search query. - if ( ! ( ! is_admin() && $query->is_main_query() && $query->is_search() ) ) { + if ( + ( + // Not the admin + is_admin() || + // Not non-main queries / non-searches + ( ! $query->is_main_query() || ! $query->is_search() ) + ) && + // but yes if it's the autocomplete search (which is admin, and not the main query). + ! $query->get( '_autocomplete_search' ) + ) { return; } @@ -85,11 +94,11 @@ public static function pre_get_posts( $query ) { } else { // If user has '()' at end of a search string, assume they want a specific function/method. $s = htmlentities( $query->get( 's' ) ); - if ( '()' === substr( $s, -2 ) ) { + if ( '()' === substr( $s, -2 ) || '(' == substr( $s, -1 ) ) { // Enable exact search. $query->set( 'exact', true ); // Modify the search query to omit the parentheses. - $query->set( 's', substr( $s, 0, -2 ) ); // remove '()' + $query->set( 's', trim( $s, '()' ) ); // Restrict search to function-like content. $query->set( 'post_type', array( 'wp-parser-function', 'wp-parser-method' ) ); } From e3bfec1021063e33d8a44a1402cf8434791009b9 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Fri, 10 Jun 2022 13:13:11 +1000 Subject: [PATCH 400/402] Trim the consistent leading whitespace tabs/spaces from source blocks. (#107) * Trim the consistent leading whitespace tabs/spaces from source blocks. * Handle functions, not just methods and hooks. * Simplify the regex, to only match lines which contain code after the leading whitespaces. --- .../themes/wporg-developer/inc/template-tags.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/wp-content/themes/wporg-developer/inc/template-tags.php b/source/wp-content/themes/wporg-developer/inc/template-tags.php index 72bd88a83..6d8dbbb37 100644 --- a/source/wp-content/themes/wporg-developer/inc/template-tags.php +++ b/source/wp-content/themes/wporg-developer/inc/template-tags.php @@ -1516,6 +1516,14 @@ function get_source_code( $post_id = null, $force_parse = false ) { fclose( $handle ); } + // Trim leading whitespace. + if ( preg_match_all( "!^([\t ]*).+$!m", $source_code, $m ) ) { + $strip_prefix = min( array_map( 'strlen', $m[1] ) ); + if ( $strip_prefix ) { + $source_code = preg_replace( "!^[\t ]{" . $strip_prefix . "}!m", '$1', $source_code ); + } + } + update_post_meta( $post_id, $meta_key, addslashes( $source_code ) ); return $source_code; From 67eb6e8053f869b7e863fc00779d4b130ff5e5f2 Mon Sep 17 00:00:00 2001 From: Dion Hulse <contact@dd32.id.au> Date: Fri, 10 Jun 2022 13:17:14 +1000 Subject: [PATCH 401/402] Use %s with number_format_i18n() to ensure that '1,258' displays correctly. --- .../themes/wporg-developer/reference/template-related.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/reference/template-related.php b/source/wp-content/themes/wporg-developer/reference/template-related.php index 08dcc834d..2edb38360 100644 --- a/source/wp-content/themes/wporg-developer/reference/template-related.php +++ b/source/wp-content/themes/wporg-developer/reference/template-related.php @@ -55,7 +55,7 @@ <?php if ( $uses->post_count > $uses_to_show ) : ?> <a href="#" class="show-more"><?php /* translators: %d: remaining 'uses' count */ - printf( _n( 'Show %d more use', 'Show %d more uses', $uses->post_count - $uses_to_show, 'wporg' ), + printf( _n( 'Show %s more use', 'Show %s more uses', $uses->post_count - $uses_to_show, 'wporg' ), number_format_i18n( $uses->post_count - $uses_to_show ) ); ?></a> @@ -95,7 +95,7 @@ <?php if ( $used_by->post_count > $used_by_to_show ) : ?> <a href="#" class="show-more"><?php /* translators: %d: remaining 'used by' count */ - printf( _n( 'Show %d more used by', 'Show %d more used by', $used_by->post_count - $used_by_to_show, 'wporg' ), + printf( _n( 'Show %s more used by', 'Show %s more used by', $used_by->post_count - $used_by_to_show, 'wporg' ), number_format_i18n( $used_by->post_count - $used_by_to_show ) ); ?></a> From 4b76c0864f41b4d57948c514518b52231b0e5ddd Mon Sep 17 00:00:00 2001 From: Ren <18050944+renintw@users.noreply.github.com> Date: Fri, 10 Jun 2022 11:26:22 +0800 Subject: [PATCH 402/402] Code Syntax Block: Fix button style and adjust its behavior (#106) * Fix button not sticky, and overlapping * Increase number of lines shown based on discussion See https://github.com/WordPress/wporg-developer/issues/22#issuecomment-1140675129. * Inject buttons before the `pre`, style like a frame header * Remove unused CSS attributes Co-authored-by: Kelly Dwan <ryelle@users.noreply.github.com> --- .../wporg-developer/js/function-reference.js | 8 ++-- .../themes/wporg-developer/scss/prism.scss | 42 ++++++++++--------- .../wporg-developer/stylesheets/prism.css | 36 +++++++++------- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/source/wp-content/themes/wporg-developer/js/function-reference.js b/source/wp-content/themes/wporg-developer/js/function-reference.js index c5aa5df41..2b901f150 100644 --- a/source/wp-content/themes/wporg-developer/js/function-reference.js +++ b/source/wp-content/themes/wporg-developer/js/function-reference.js @@ -7,9 +7,9 @@ // eslint-disable-next-line id-length -- $ OK. jQuery( function ( $ ) { - // 22.5px (line height) * 10 for 10 lines + 15px top padding + 10px extra. + // 22.5px (line height) * 15 for 15 lines + 15px top padding + 10px extra. // The extra 10px added to partially show next line so it's clear there is more. - const MIN_HEIGHT = 22.5 * 10 + 15 + 10; + const MIN_HEIGHT = 22.5 * 15 + 15 + 10; function collapseCodeBlock( $element, $button ) { $button.text( wporgFunctionReferenceI18n.expand ); @@ -23,6 +23,7 @@ jQuery( function ( $ ) { function expandCodeBlock( $element, $button ) { $button.text( wporgFunctionReferenceI18n.collapse ); $button.attr( 'aria-expanded', 'true' ); + // { height: auto; } can't be used here or the transition effect won't work. $element.height( $element.data( 'height' ) ); } @@ -66,7 +67,6 @@ jQuery( function ( $ ) { $element.data( 'height', originalHeight ); const $expandButton = $( document.createElement( 'button' ) ); - $expandButton.addClass( 'button-link' ); $expandButton.on( 'click', function () { if ( 'true' === $expandButton.attr( 'aria-expanded' ) ) { collapseCodeBlock( $element, $expandButton ); @@ -79,7 +79,7 @@ jQuery( function ( $ ) { $container.append( $expandButton ); } - $element.prepend( $container ); + $element.before( $container ); } ); let $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy; diff --git a/source/wp-content/themes/wporg-developer/scss/prism.scss b/source/wp-content/themes/wporg-developer/scss/prism.scss index 489622c34..750d8bc10 100644 --- a/source/wp-content/themes/wporg-developer/scss/prism.scss +++ b/source/wp-content/themes/wporg-developer/scss/prism.scss @@ -209,27 +209,31 @@ pre.line-numbers > code { } /* Copy button */ -pre.wp-block-code { - position: relative; - - > .wp-code-block-button-container { - display: none; - position: absolute; - top: 1rem; - right: 1rem; - z-index: 2; - - button { - font-size: 1.4rem; - } +.wp-code-block-button-container { + display: flex; + justify-content: right; + padding: 1rem; + background: $color-white; + border-width: 1px 1px 0; + border-style: solid; + border-color: get-color(gray-5); + border-top-left-radius: 0.3em; + border-top-right-radius: 0.3em; + + button { + font-size: 1.2rem !important; + } - button + button { - margin-left: 0.5em; - } + button + button { + margin-left: 0.5em; } - &:hover > .wp-code-block-button-container, - &:focus-within > .wp-code-block-button-container { - display: revert; + + pre { + margin-top: 0; + border-width: 0 1px 1px; + border-style: solid; + border-color: get-color(gray-5); + border-top-left-radius: 0; + border-top-right-radius: 0; } } diff --git a/source/wp-content/themes/wporg-developer/stylesheets/prism.css b/source/wp-content/themes/wporg-developer/stylesheets/prism.css index 35ccf42ff..0a1568fa0 100644 --- a/source/wp-content/themes/wporg-developer/stylesheets/prism.css +++ b/source/wp-content/themes/wporg-developer/stylesheets/prism.css @@ -197,27 +197,31 @@ pre.line-numbers > code { } /* Copy button */ -pre.wp-block-code { - position: relative; -} - -pre.wp-block-code > .wp-code-block-button-container { - display: none; - position: absolute; - top: 1rem; - right: 1rem; - z-index: 2; +.wp-code-block-button-container { + display: flex; + justify-content: right; + padding: 1rem; + background: #fff; + border-width: 1px 1px 0; + border-style: solid; + border-color: #dcdcde; + border-top-left-radius: 0.3em; + border-top-right-radius: 0.3em; } -pre.wp-block-code > .wp-code-block-button-container button { - font-size: 1.4rem; +.wp-code-block-button-container button { + font-size: 1.2rem !important; } -pre.wp-block-code > .wp-code-block-button-container button + button { +.wp-code-block-button-container button + button { margin-left: 0.5em; } -pre.wp-block-code:hover > .wp-code-block-button-container, -pre.wp-block-code:focus-within > .wp-code-block-button-container { - display: revert; +.wp-code-block-button-container + pre { + margin-top: 0; + border-width: 0 1px 1px; + border-style: solid; + border-color: #dcdcde; + border-top-left-radius: 0; + border-top-right-radius: 0; }